# Chip URL: /lynx/components/chip Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/components/chip.mdx 사용자가 선택하거나 실행할 수 있는 짧은 값을 표시하는 컴포넌트입니다. Lynx Engine 최소 버전: 3.6 사용 가능 버전: @seed-design/lynx-react@0.5.0, @seed-design/lynx-css@0.9.0 ## Preview ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Button Chip Toggle Chip Radio Chip 1 Radio Chip 2 ); } ``` ## Installation - npm: npm install @seed-design/lynx-react @seed-design/lynx-css - pnpm: pnpm add @seed-design/lynx-react @seed-design/lynx-css - yarn: yarn add @seed-design/lynx-react @seed-design/lynx-css - bun: bun add @seed-design/lynx-react @seed-design/lynx-css Lynx `Chip`은 별도 `ui:chip` snippet 없이 `@seed-design/lynx-react` 패키지에서 직접 제공합니다. ## Props ### `Chip.Button` ### `Chip.Toggle` ### `Chip.RadioRoot` ### `Chip.RadioItem` ### Slots ## Examples ### Sizes #### Small ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Small Button Small Toggle Small Radio 1 Small Radio 2 ); } ``` #### Medium ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Medium Button Medium Toggle Medium Radio 1 Medium Radio 2 ); } ``` #### Large ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Large Button Large Toggle Large Radio 1 Large Radio 2 ); } ``` ### Variants #### Solid ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Solid Button Solid Toggle Solid Radio 1 Solid Radio 2 ); } ``` #### Outline Strong ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Outline Strong Button Outline Strong Toggle Outline Strong Radio 1 Outline Strong Radio 2 ); } ``` #### Outline Weak ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Outline Weak Button Outline Weak Toggle Outline Weak Radio 1 Outline Weak Radio 2 ); } ``` ### Prefix Icon ```tsx import "./styles"; import IconHeartFill from "@karrotmarket/lynx-monochrome-icon/IconHeartFill"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( } /> With Icon Button } /> With Icon Toggle } /> With Icon Radio 1 } /> With Icon Radio 2 ); } ``` ### Suffix Icon ```tsx import "./styles"; import IconChevronDownLine from "@karrotmarket/lynx-monochrome-icon/IconChevronDownLine"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( Button with Suffix } /> Toggle with Suffix } /> Radio with Suffix 1 } /> Radio with Suffix 2 } /> ); } ``` ### Icon Only `layout="iconOnly"`에서는 `Icon` 자식과 `accessibility-label`을 함께 전달합니다. ```tsx import "./styles"; import IconArrowClockwiseCircularLine from "@karrotmarket/lynx-monochrome-icon/IconArrowClockwiseCircularLine"; import IconBellLine from "@karrotmarket/lynx-monochrome-icon/IconBellLine"; import IconBellSlashLine from "@karrotmarket/lynx-monochrome-icon/IconBellSlashLine"; import IconTimer_10Line from "@karrotmarket/lynx-monochrome-icon/IconTimer_10Line"; import IconTimer_3Line from "@karrotmarket/lynx-monochrome-icon/IconTimer_3Line"; import { useState } from "@lynx-js/react"; import { Chip, Icon, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); const [checked, setChecked] = useState(false); return ( } /> : } /> } /> } /> ); } ``` ### Prefix Avatar Lynx 패키지는 Avatar 컴포넌트를 제공하지 않습니다. `Chip.PrefixAvatar` 안에 앱이 소유한 아바타 컴포넌트나 view를 넣어 사용하세요. 아래 예제의 이니셜 원은 이미지 로딩과 fallback을 포함한 Avatar 구현이 아니라 슬롯 조합 방법만 보여줍니다. ```tsx import "./styles"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; function AppAvatar() { return ( A ); } export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); return ( With Avatar Button With Avatar Toggle With Avatar Radio 1 With Avatar Radio 2 ); } ``` ### Listening to Value Changes - `Chip.Toggle` - `onCheckedChange`를 사용하여 토글 상태 변경을 감지할 수 있습니다. - `Chip.RadioRoot` / `Chip.RadioItem` - `Chip.RadioRoot`의 `onValueChange`를 사용하여 라디오 버튼의 선택 값 변경을 감지할 수 있습니다. ```tsx import "./styles"; import { useState } from "@lynx-js/react"; import { Chip, useSeedClassName } from "@seed-design/lynx-react"; export default function Example() { const seedClassName = useSeedClassName({ colorMode: "system" }); const [toggleCount, setToggleCount] = useState(0); const [toggleLastValue, setToggleLastValue] = useState(null); const [radioCount, setRadioCount] = useState(0); const [radioLastValue, setRadioLastValue] = useState(null); return ( { setToggleCount((previous) => previous + 1); setToggleLastValue(checked); }} > Toggle Chip onCheckedChange called: {toggleCount} times, last value:{" "} {toggleLastValue === null ? "-" : JSON.stringify(toggleLastValue)} { setRadioCount((previous) => previous + 1); setRadioLastValue(value); }} > Radio 1 Radio 2 onValueChange called: {radioCount} times, last value: {radioLastValue ?? "-"} ); } ``` ## 웹 버전과의 차이 Lynx `Chip`은 React `Chip`과 같은 Button, Toggle, Radio 구성과 size/variant 이름을 사용하지만 다음 차이가 있습니다. - **렌더링 요소**: HTML `