# 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 `
## Lynx 미지원 기능
현재 Lynx 구현과 런타임 모델 차이로 다음 기능은 지원하지 않습니다.
| 기능 | 설명 |
| --------------------------------------- | ----------------------------------------------------------- |
| HiddenInput / `inputProps` | Lynx에 HTML input과 form 제출 모델이 없습니다. |
| `name` / `required` / native form value | HTML form 속성을 연결할 대상이 없습니다. |
| raw DOM `onChange` | `onCheckedChange` 또는 `onValueChange`로 대체합니다. |
| 키보드 focus / `focusVisible` | Lynx에는 웹과 같은 키보드 focus 모델이 없습니다. |
| `asChild` | Lynx는 웹 Slot 기반 다형 렌더링을 지원하지 않습니다. |
| Avatar 패키지 | `Chip.PrefixAvatar` 슬롯에 앱이 소유한 avatar view나 컴포넌트를 넣어 사용합니다. |