# Chip
URL: /react/components/chip
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/chip.mdx
사용자가 선택하거나 입력하는 값을 표시하는 컴포넌트입니다.
사용 가능 버전: @seed-design/react@0.1.4, @seed-design/css@0.1.4
## Preview
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipPreview() {
return (
Button Chip
Toggle Chip
Radio Chip 1
Radio Chip 2
);
}
```
## Installation
- npm: npx @seed-design/cli@latest add ui:chip
- pnpm: pnpm dlx @seed-design/cli@latest add ui:chip
- yarn: yarn dlx @seed-design/cli@latest add ui:chip
- bun: bun x @seed-design/cli@latest add ui:chip
## Props
### `Chip.Button`
### `Chip.Toggle`
### `Chip.RadioRoot`
### `Chip.RadioItem`
## Examples
### Sizes
#### Small
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipSmall() {
return (
Small Button
Small Toggle
Small Radio 1
Small Radio 2
);
}
```
#### Medium
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipMedium() {
return (
Medium Button
Medium Toggle
Medium Radio 1
Medium Radio 2
);
}
```
#### Large
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipLarge() {
return (
Large Button
Large Toggle
Large Radio 1
Large Radio 2
);
}
```
### Variants
#### Solid
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipSolid() {
return (
Solid Button
Solid Toggle
Solid Radio 1
Solid Radio 2
);
}
```
#### Outline Strong
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipOutlineStrong() {
return (
Outline Strong Button
Outline Strong Toggle
Outline Strong Radio 1
Outline Strong Radio 2
);
}
```
#### Outline Weak
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
export default function ChipOutlineWeak() {
return (
Outline Weak Button
Outline Weak Toggle
Outline Weak Radio 1
Outline Weak Radio 2
);
}
```
### Prefix Icon
```tsx
import { HStack, VStack, Icon } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
import { IconHeartFill } from "@karrotmarket/react-monochrome-icon";
export default function ChipPrefixIcon() {
return (
} />
With Icon Button
} />
With Icon Toggle
} />
With Icon Radio 1
} />
With Icon Radio 2
);
}
```
### Suffix Icon
```tsx
import { HStack, VStack, Icon } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
import { IconChevronDownLine } from "@karrotmarket/react-monochrome-icon";
export default function ChipSuffixIcon() {
return (
Button with Suffix
} />
Toggle with Suffix
} />
Radio with Suffix 1
} />
Radio with Suffix 2
} />
);
}
```
### Icon Only
```tsx
import { HStack, VStack, Icon } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
import {
IconArrowClockwiseCircularLine,
IconBellLine,
IconBellSlashLine,
IconTimer_10Line,
IconTimer_3Line,
} from "@karrotmarket/react-monochrome-icon";
import { useState } from "react";
export default function ChipIconOnly() {
const [checked, setChecked] = useState(false);
return (
} />
: } />
} />
} />
);
}
```
### Prefix Avatar
[Avatar](/react/components/avatar)와 함께 사용할 수 있습니다.
```tsx
import { HStack, VStack } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
import { Avatar } from "seed-design/ui/avatar";
import { IdentityPlaceholder } from "seed-design/ui/identity-placeholder";
export default function ChipPrefixAvatar() {
return (
}
/>
With Avatar Button
}
/>
With Avatar Toggle
}
/>
With Avatar Radio 1
}
/>
With Avatar Radio 2
);
}
```
### Listening to Value Changes
- `Chip.Toggle`
- `onCheckedChange`를 사용하여 토글 상태 변경을 감지할 수 있습니다.
- 이벤트를 활용해야 하는 경우 `inputProps`를 통해 내부 `` 요소에 직접 이벤트 핸들러를 추가할 수 있습니다.
- `Chip.RadioRoot` / `Chip.RadioItem`
- `Chip.RadioRoot`의 `onValueChange`를 사용하여 라디오 버튼의 선택 값 변경을 감지할 수 있습니다.
- 이벤트를 활용해야 하는 경우 `Chip.RadioItem`의 `inputProps`를 통해 내부 `` 요소에 직접 이벤트 핸들러를 추가할 수 있습니다.
```tsx
import { HStack, VStack, Text } from "@seed-design/react";
import { Chip } from "seed-design/ui/chip";
import { useState } from "react";
export default function ChipValueChanges() {
const [toggleCount, setToggleCount] = useState(0);
const [toggleLastValue, setToggleLastValue] = useState(null);
const [radioCount, setRadioCount] = useState(0);
const [radioLastValue, setRadioLastValue] = useState(null);
return (
{
setToggleCount((prev) => prev + 1);
setToggleLastValue(checked);
}}
>
Toggle Chip
onCheckedChange called: {toggleCount} times, last value: {`${toggleLastValue ?? "-"}`}
{
setRadioCount((prev) => prev + 1);
setRadioLastValue(value);
}}
>
Radio 1
Radio 2
onValueChange called: {radioCount} times, last value: {radioLastValue ?? "-"}
);
}
```
## Migrating from ActionChip/ControlChip
[Action Chip](/react/components/action-chip)과 [Control Chip](/react/components/control-chip)을 대체합니다.
### ActionChip → Chip.Button
```tsx
// Before
import { ActionChip } from "@seed-design/react";
Label
// After
import { Chip } from "@seed-design/react";
Label
```
### ControlChip → Chip.Toggle
```tsx
// Before
import { ControlChip } from "@seed-design/react";
Label
// After
import { Chip } from "@seed-design/react";
Label
```