Select · Docs

스토리북 개발자들을 위한 내부 문서

Components

Select

Docs

Select API 사용가이드입니다. 조합 예시는 Overview를 참고하세요.

API

Select · SelectTrigger · SelectValue · SelectContent · SelectGroup · SelectLabel · SelectItem · SelectSeparator를 조합합니다. items 배열은 Root prop이 아니라 호출측에서 map해 SelectItem으로 렌더합니다.

import {
  Select,
  SelectTrigger,
  SelectValue,
  SelectContent,
  SelectGroup,
  SelectItem,
} from "@/components/select";

const items = [
  { label: "Light", value: "light" },
  { label: "Dark", value: "dark" },
  { label: "System", value: "system" },
];

<Select>
  <SelectTrigger className="w-[180px]">
    <SelectValue placeholder="Theme" />
  </SelectTrigger>
  <SelectContent>
    <SelectGroup>
      {items.map((item) => (
        <SelectItem key={item.value} value={item.value}>
          {item.label}
        </SelectItem>
      ))}
    </SelectGroup>
  </SelectContent>
</Select>

Props

NameTypeDefaultDescription
Select.value
string제어 모드 선택값. onValueChange와 함께 사용합니다.
Select.defaultValue
string비제어 초기 선택값.
Select.disabled
boolean전체 Select를 비활성화합니다.
Select.name
string폼 제출 시 필드 키.
SelectTrigger.icon
ReactNode | null우측 아이콘. 생략 시 기본 chevron. 열리면 자동으로 회전합니다. ReactNode로 교체, null이면 숨김.
SelectContent.side
"top" | "right" | "bottom" | "left""bottom"선호 열림 방향. position="popper"(기본)에서 공간이 부족하면 avoidCollisions로 위/아래가 자동 반전됩니다. 고정하려면 side를 지정하고 avoidCollisions={false}를 쓸 수 있습니다.
SelectContent.avoidCollisions
booleantrue뷰포트 충돌 시 side를 자동 조정합니다. false면 side를 그대로 유지합니다.
SelectValue.placeholder
string값이 없을 때 표시할 플레이스홀더.
SelectItem.valueRequired
string옵션 값. 선택 시 Select.value와 매칭됩니다.
SelectItem.disabled
boolean개별 옵션을 비활성화합니다.
className
string각 파트의 추가 클래스. Trigger에 w-[180px] · w-full 등으로 너비를 제어합니다. Content는 Trigger 너비에 맞춰집니다.

Events

NameSignatureDescription
Select.onValueChange(value: string) => void선택값이 바뀔 때 호출됩니다.
Select.onOpenChange(open: boolean) => void드롭다운 열림/닫힘 상태가 바뀔 때 호출됩니다.

Notes

  • 옵션 목록은 native가 아닙니다. SelectContent · SelectItem으로 커스텀 디자인합니다.
  • items는 Select Root prop이 아닙니다. 호출측 스코프에서 map해 children으로 전달하세요.
  • SelectGroup · SelectLabel · SelectSeparator로 옵션을 그룹·구분할 수 있습니다.
  • 트리거 열림 시 chevron이 회전합니다 (data-state=open).
  • 드롭다운은 기본적으로 아래(side="bottom")로 열리고, 공간이 없으면 위로 자동 반전됩니다. 강제하려면 side · avoidCollisions={false}.