Lynx

Tag Group

텍스트 태그를 수평으로 나열해 여러 속성·상태·메타데이터를 한눈에 보여주는 정보 요약 컴포넌트입니다.

Engine ≥ 3.6
사용 가능 버전@seed-design/lynx-react@0.1.0, @seed-design/lynx-css@0.1.0
Lynx 예제를 불러오는 중입니다.

Installation

npx @seed-design/cli add ui:tag-group

Props

TagGroupRoot

Prop

Type

style?CSSProperties | undefined
children?React.ReactNode
className?string | undefined

TagGroupItem

Prop

Type

labelReact.ReactNode
flexShrink?boolean | Property.FlexShrink | undefined
className?string | undefined
style?CSSProperties | undefined

Examples

Usage

설치한 snippet은 TagGroupRootTagGroupItem을 export 합니다. TagGroupItemlabel prop을 받아 내부에서 Lynx <text> label을 렌더합니다.

import { TagGroupRoot, TagGroupItem } from "@/components/ui/tag-group";

export function App() {
  return (
    <TagGroupRoot size="t2">
      <TagGroupItem label="동네 인증" />
      <TagGroupItem label="매너 온도 42.0°C" />
      <TagGroupItem tone="brand" weight="bold" label="추천" />
    </TagGroupRoot>
  );
}

TagGroupRootsize·weight·tone은 Context로 하위 TagGroupItem에 전파되며, 개별 TagGroupItem에서 prop으로 덮어쓸 수 있습니다. 구분자는 기본 "·"이고 separator prop으로 바꿀 수 있습니다.

TagGroupItemflexShrink를 지원합니다. 긴 태그가 있는 레이아웃에서 item의 축소 우선순위를 조정해야 할 때 사용하세요.

TagGroup은 정보를 읽기 전용으로 나열하는 컴포넌트입니다. 단일·다중 선택, 선택 값 변경, 비활성화 상태를 위한 API는 제공하지 않습니다. 사용자가 값을 선택해야 한다면 단일 선택에는 RadioGroup, 다중 선택에는 Checkbox를 사용하세요.

Sizes

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

Weights

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

Tones

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

With Icons

Lynx Registry의 TagGroupItemprefixIconsuffixIcon을 제공하지 않습니다. 아이콘이 필요한 정보는 앱에서 별도 레이아웃으로 구성하세요.

Customizing TagGroupItem

TagGroupRoottoneweight은 그룹 기본값으로 전달됩니다. 개별 TagGroupItem에서 필요한 값만 덮어쓸 수 있습니다.

내부 요소를 직접 구성해야 할 때만 @seed-design/lynx-react의 컴파운드 컴포넌트를 함께 사용하세요.

React 예제의 아이콘은 Lynx Registry에 대응하는 prop이 없어 생략합니다. 텍스트와 항목 수, 개별 tone과 weight 설정은 같게 유지합니다.

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

Customizing Separators

TagGroupRootseparator로 구분 기호를 바꿀 수 있습니다. 의미가 있는 정보는 구분자 대신 TagGroupItem으로 표현하세요.

문자열 구분자의 앞뒤 공백은 Lynx에서 제거됩니다. 예를 들어 separator=" / "separator="/"는 동일하게 렌더링되며, 항목과 구분자 사이의 간격은 컴포넌트가 일관되게 적용합니다.

따라서 웹 예제의 공백 한 칸 구분자는 Lynx에서 빈 문자열이 됩니다. 이 예제에서는 두 번째 구분 기호로 /를 사용합니다.

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

Wrapping Behavior

컨테이너 너비를 초과하면 구분자와 뒤따르는 item이 하나의 단위로 다음 줄에 배치됩니다.

기본 줄바꿈 예제는 React와 같은 문구와 컨테이너 너비를 사용하지만 아이콘은 생략합니다. Lynx에서는 truncate도 지원하지 않습니다. 아이콘이나 한 줄 말줄임이 필요하면 앱에서 별도 레이아웃으로 구성하세요.

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

웹 버전과의 차이

Lynx TagGroup은 Lynx view 엔진(Yoga 기반 flex)의 제약으로 React 웹 버전과 다음과 같은 차이가 있습니다.

렌더링 요소

슬롯Lynx
Root<span> (inline)<view> (flex-row, flex-wrap, width 100%)
Separator<span><text>
Item<span> (inline)<view> (flex-row, flex-shrink 0)
Item Label<span><text>

레이아웃 모델 차이

  • : display: inline 기반 text flow. 컨테이너가 좁으면 마지막 item 내부 label text가 word 단위로 자연스럽게 wrap됩니다 (예: "Ut minim laboris enim""Ut minim" / "laboris enim" 두 줄로 쪼개짐).
  • Lynx: flex 기반 item 단위 wrap. item은 content-size를 유지하고, 한 줄에 들어가지 않으면 item 전체가 다음 줄로 이동합니다. item 내부 text가 item 경계를 넘어 word-break되는 동작은 재현할 수 없습니다. Lynx TagGroupRoot는 이를 자연스럽게 보이도록 separator를 뒤따르는 item과 하나의 wrap 단위로 묶어 다음 줄로 함께 이동시킵니다.

구분자 공백 처리

웹은 white-space: pre로 문자열 구분자의 앞뒤 공백을 보존합니다. Lynx는 white-space: pre를 지원하지 않고 브라우저 프리뷰와 네이티브 Lynx의 기본 공백 계측도 서로 다릅니다. 두 실행 환경에서 같은 간격을 만들기 위해 Lynx TagGroup은 문자열 구분자의 앞뒤 공백을 제거하고 컴포넌트 스타일의 간격을 적용합니다. 문자열이 아닌 ReactNode 구분자는 변경하지 않습니다.

미지원 prop

prop웹 동작Lynx 미지원 사유
truncate (Root)한 줄 유지 + 모든 item label의 말줄임Lynx flex 모델에서는 label이 item 너비에 맞춰지지 않아 웹 수준의 inline ellipsis가 동작하지 않음. 모든 item에 말줄임을 일괄 적용하는 경험이 자연스럽지 않아 제거됨
asChild (Root/Item)Slot 기반 다형 렌더Lynx에서 Primitive Slot 패턴 미제공
prefixIcon / suffixIcon (Item)아이콘 + 라벨현재 Lynx Registry와 Recipe에 아이콘 prop과 slot이 없음

이벤트·ref

  • 이벤트: Lynx는 onClick 대신 bindtap / main-thread:bindtap을 사용합니다. TagGroup은 정적 표시 컴포넌트이므로 선택 값이나 비활성화 상태를 관리하는 인터랙션 prop은 노출하지 않습니다.
  • ref: Root와 Item의 ref는 <view>로 전달됩니다. 내부에서는 LynxViewRef를 사용하며, 이 타입은 React.Ref<NodesRef>의 별칭입니다.

Last updated on

목차