Lynx

Image Frame

사용자가 업로드한 이미지를 표시하기 위한 컴포넌트입니다.

Engine ≥ 3.9
사용 가능 버전@seed-design/[email protected], @seed-design/[email protected]
Lynx 예제를 불러오는 중입니다.

Installation

npm install @seed-design/lynx-react @seed-design/lynx-css

Usage

import { ImageFrame } from "@seed-design/lynx-react";
<ImageFrame
  ratio={4 / 3}
  width="200px"
  borderRadius="r2"
  stroke
  src="..."
  alt="..."
  fallback={<view><text>이미지를 불러올 수 없습니다.</text></view>}
/>

width·height·margin 등 공통 레이아웃 prop을 받습니다. margin과 bleed는 함께 사용하지 않으며, bleed는 Lynx Box와 같이 px 길이·0·"safeArea"를 사용합니다.

Props

Prop

Type

srcstring
altstring
ratio?number | undefined
stroke?boolean | undefined
fallback?React.ReactNode
onLoadingStatusChange?((status: ImageLoadingStatus) => void) | undefined

Lynx에서의 동작

Lynx Engine 3.9 이상을 지원합니다.

  • 로딩 중에도 이미지를 마운트합니다. src가 바뀌면 이전 요청의 이벤트를 새 상태에 반영하지 않습니다.
  • alt는 accessibility-label로 전달합니다. 장식용 이미지는 빈 문자열을 사용합니다.
  • onLoad와 onError 대신 bindload와 binderror를 사용합니다. onLoadingStatusChange로 로딩 상태를 관찰할 수 있습니다.
  • ratio의 기본값은 4 / 3, borderRadius의 기본값은 "r2"입니다.
  • ImageFrameIcon의 svg에는 Lynx 아이콘 컴포넌트를 전달합니다.
  • ImageFrameReactionButton은 토글 버튼입니다. pressed, defaultPressed, onPressedChange, disabled를 제공하며 접근성 이름은 accessibility-label로 지정합니다.
  • 좋아요 버튼은 hit-slop으로 터치 영역을 기본 8px씩 확장합니다. 부모가 콘텐츠를 자르면 확장 영역도 제한될 수 있습니다.
  • as, asChild, DOM 속성, 이미지의 loading, decoding, crossOrigin, referrerPolicy, sizes, srcSet은 지원하지 않습니다.

Examples

Ratio

ratio로 이미지 영역의 비율을 지정합니다.

Lynx 예제를 불러오는 중입니다.

Border Radius

borderRadius에는 토큰, 0, CSS 길이를 전달합니다. 개별 모서리는 borderTopLeftRadius 같은 prop으로 지정합니다.

<ImageFrame
  src={imageUrl}
  alt="상품 이미지"
  width="160px"
  ratio={1}
  borderRadius="r1"
  borderTopLeftRadius="r4"
  borderBottomRightRadius="24px"
  stroke
/>
Lynx 예제를 불러오는 중입니다.

Stroke

stroke prop으로 테두리 스타일을 적용할 수 있습니다.

Lynx 예제를 불러오는 중입니다.

Fallback Image

fallback은 로딩 중이거나 오류가 발생했을 때 표시하고, 로딩에 성공하면 언마운트합니다. 다시 표시할 때 유지해야 하는 상태는 부모에서 관리하세요.

Lynx 예제를 불러오는 중입니다.

Overlay

ImageFrameFloater를 자식으로 넣고 placement로 위치를 지정합니다. 세로와 가로 위치를 조합한 9개 값을 사용할 수 있습니다.

Lynx 예제를 불러오는 중입니다.

Multiple Overlays

여러 위치에 오버레이를 동시에 배치할 수 있습니다.

Lynx 예제를 불러오는 중입니다.

Custom Overlay

ImageFrameFloater는 커스텀 UI도 children으로 받습니다.

Lynx 예제를 불러오는 중입니다.

Offset

offsetX와 offsetY로 가로와 세로 여백을 지정합니다. 0, SEED 간격 토큰, CSS 길이를 사용할 수 있습니다. 가장자리의 기본 여백은 6px이며, 중앙 축의 기본 오프셋은 0입니다.

import { ImageFrame, ImageFrameFloater, ImageFrameIndicator } from "@seed-design/lynx-react";

<ImageFrame src={imageUrl} alt="상품 이미지" width="150px" ratio={1}>
  <ImageFrameFloater placement="bottom-end" offsetX="12px" offsetY="12px">
    <ImageFrameIndicator>+9</ImageFrameIndicator>
  </ImageFrameFloater>
</ImageFrame>
Lynx 예제를 불러오는 중입니다.

Overlay Props

Prop

Type

placementNonNullable<"top-start" | "top-center" | "top-end" | "middle-start" | "middle-center" | "middle-end" | "bottom-start" | "bottom-center" | "bottom-end" | undefined>
offsetX?0 | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText" | (string & {}) | "full" | undefined
offsetY?0 | Dimension | "spacingX.betweenChips" | "spacingX.globalGutter" | "spacingY.componentDefault" | "spacingY.navToTitle" | "spacingY.screenBottom" | "spacingY.betweenText" | (string & {}) | "full" | undefined
zIndex?Property.ZIndex | undefined

Prop

Type

Prop

Type

svgReact.ReactElement<LynxIconElementProps, string | React.JSXElementConstructor<any>>

Prop

Type

childrenReact.ReactNode

Prop

Type

pressed?boolean | undefined
defaultPressed?boolean | undefined
onPressedChange?((pressed: boolean) => void) | undefined

Last updated on

목차