# Select
URL: /react/components/select
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/select.mdx
트리거를 눌러 열리는 목록에서 값을 선택하는 컴포넌트입니다.
사용 가능 버전: @seed-design/react@2.1.0, @seed-design/css@2.3.0
## Preview
```tsx
import { Box } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectPreview() {
return (
);
}
```
## Installation
- npm: npx @seed-design/cli@latest add ui:select
- pnpm: pnpm dlx @seed-design/cli@latest add ui:select
- yarn: yarn dlx @seed-design/cli@latest add ui:select
- bun: bun x @seed-design/cli@latest add ui:select
## Usage
```tsx
import {
SelectRoot,
SelectTrigger,
SelectContent,
SelectGroup,
SelectItem,
} from "seed-design/ui/select";
```
```tsx
```
- `SelectRoot`: 선택 값(`value`)과 열림 상태를 관리합니다.
- `SelectTrigger`: 선택된 값 또는 placeholder를 표시하며, 클릭 시 목록을 엽니다.
- `SelectContent`: 옵션 목록을 감싸는 플로팅 컨테이너입니다.
- `SelectGroup`: 관련된 옵션들을 그룹으로 묶습니다. 모든 `SelectItem`은 `SelectGroup` 안에 있어야 합니다. `label`로 그룹의 제목을 표시할 수 있습니다.
- `SelectItem`: 개별 옵션입니다. `value`가 필요하며, 선택되면 체크마크가 표시됩니다.
## Props
### `SelectRoot`
### `SelectTrigger`
### `SelectContent`
### `SelectGroup`
### `SelectItem`
## Examples
### Size
`size`로 트리거와 목록의 크기를 정합니다. (default: `large`)
`responsive` 사용 시 화면 너비에 따라 size가 자동으로 전환됩니다.
```tsx
import { VStack } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectSize() {
return (
);
}
```
### Groups
`SelectGroup`으로 옵션을 묶고, `label`로 그룹의 제목을 표시합니다. `SelectGroup`의 개수와 관계없이 모든 `SelectItem`은 `SelectGroup` 안에 있어야 합니다.
그룹이 두 개 이상이면 그룹 사이에 구분선이 자동으로 그려집니다.
```tsx
import { Box } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectGroups() {
return (
);
}
```
### Multiple Selection
`SelectRoot`에 `multiple`을 지정하면 여러 옵션을 선택할 수 있습니다. 옵션을 선택해도 목록이 닫히지 않으며, 이미 선택된 옵션을 다시 누르면 선택이 해제됩니다.
트리거에는 선택된 옵션들의 `textValue`가 `", "`로 이어져 표시됩니다. 이 문구는 [Custom Value Format](#custom-value-format)으로 바꿀 수 있습니다.
```tsx
import { Box } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectMultiple() {
return (
);
}
```
### With Description
`SelectItem`의 `description` prop으로 옵션에 부가 설명을 추가합니다.
```tsx
import { Box } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectWithDescription() {
return (
);
}
```
### With Prefix Icon
`SelectItem`의 `prefixIcon` prop으로 옵션에 아이콘을 표시합니다.
1개의 옵션이 선택된 경우 해당 옵션의 아이콘이 트리거의 prefix 아이콘으로 표시됩니다. 선택된 옵션이 없거나, 선택된 옵션에 아이콘이 없거나, 여러 옵션이 선택된 경우 트리거에는 `SelectTrigger`에 지정한 `prefixIcon`이 표시됩니다.
```tsx
import {
IconGlobeLine,
IconLockLine,
IconPerson2Line,
IconPersonLine,
} from "@karrotmarket/react-monochrome-icon";
import { Box } from "@seed-design/react";
import {
SelectContent,
SelectGroup,
SelectItem,
SelectRoot,
SelectTrigger,
} from "seed-design/ui/select";
export default function SelectWithPrefixIcon() {
return (
}
/>
} />
} />
} />
);
}
```
### Custom Item Label
`SelectItem`의 `label`에는 ReactNode를 넘길 수 있습니다. 이 노드는 목록의 옵션에만 렌더링됩니다.
`SelectItem`의 `label`로 string이 아닌 ReactNode를 지정하는 경우 트리거에는 `SelectItem`의 `textValue`가 표시됩니다. `textValue`는 `label`이 string이면 `label`, 아니면 `value`입니다.
따라서, `label`이 string이 아닌 경우 `textValue`를 함께 지정하는 것을 권장합니다. `textValue`는 트리거에 표시되는 문구, 키보드로 타이핑해 옵션을 찾을 때 매칭되는 문자열(typeahead), 폼 제출용 native `