# 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 `