Select
Enum picker — no typing. Trigger uses Default-button chrome; items reuse MenuItem styling. For the typeable variant, see Combobox. Built on Radix Select.
Default
<Select>
<SelectTrigger className="w-[240px]">
<SelectValue placeholder="Pick a fruit" />
</SelectTrigger>
<SelectContent>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="blueberry">Blueberry</SelectItem>
<SelectItem value="grapes">Grapes</SelectItem>
<SelectItem value="pineapple">Pineapple</SelectItem>
</SelectContent>
</Select>Grouped + labels
<Select>
<SelectTrigger className="w-[240px]">
<SelectValue placeholder="Pick anything" />
</SelectTrigger>
<SelectContent>
<SelectGroup>
<SelectLabel>Fruits</SelectLabel>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Vegetables</SelectLabel>
<SelectItem value="aubergine">Aubergine</SelectItem>
<SelectItem value="broccoli">Broccoli</SelectItem>
<SelectItem value="carrot" disabled>Carrot (sold out)</SelectItem>
</SelectGroup>
<SelectSeparator />
<SelectGroup>
<SelectLabel>Meat</SelectLabel>
<SelectItem value="beef">Beef</SelectItem>
<SelectItem value="chicken">Chicken</SelectItem>
</SelectGroup>
</SelectContent>
</Select>Searchable
<Select
searchable
options={[
{ value: "apple", label: "Apple" },
{ value: "banana", label: "Banana" },
{ value: "blueberry", label: "Blueberry" },
{ value: "grapes", label: "Grapes" },
{ value: "pineapple", label: "Pineapple" },
{ value: "aubergine", label: "Aubergine" },
{ value: "broccoli", label: "Broccoli" },
{ value: "carrot", label: "Carrot", disabled: true },
{ value: "leek", label: "Leek" },
{ value: "beef", label: "Beef" },
{ value: "chicken", label: "Chicken" },
]}
placeholder="Pick anything"
searchPlaceholder="Search…"
triggerClassName="w-[240px]"
/>Variants
<>
<Select>
<SelectTrigger variant="default" className="w-[180px]"><SelectValue placeholder="Default" /></SelectTrigger>
<SelectContent><SelectItem value="a">Option A</SelectItem></SelectContent>
</Select>
<Select>
<SelectTrigger variant="outline" className="w-[180px]"><SelectValue placeholder="Outline" /></SelectTrigger>
<SelectContent><SelectItem value="a">Option A</SelectItem></SelectContent>
</Select>
<Select>
<SelectTrigger variant="ghost" className="w-[180px]"><SelectValue placeholder="Ghost" /></SelectTrigger>
<SelectContent><SelectItem value="a">Option A</SelectItem></SelectContent>
</Select>
</>Sizes
<>
<Select>
<SelectTrigger size="sm" className="w-[180px]"><SelectValue placeholder="Small" /></SelectTrigger>
<SelectContent><SelectItem value="a">Option A</SelectItem></SelectContent>
</Select>
<Select>
<SelectTrigger size="md" className="w-[180px]"><SelectValue placeholder="Medium" /></SelectTrigger>
<SelectContent><SelectItem value="a">Option A</SelectItem></SelectContent>
</Select>
</>Default value
<Select defaultValue="banana">
<SelectTrigger className="w-[240px]"><SelectValue /></SelectTrigger>
<SelectContent>
<SelectItem value="apple">Apple</SelectItem>
<SelectItem value="banana">Banana</SelectItem>
<SelectItem value="cherry">Cherry</SelectItem>
</SelectContent>
</Select>Disabled
<Select disabled>
<SelectTrigger className="w-[240px]">
<SelectValue placeholder="Locked" />
</SelectTrigger>
<SelectContent>
<SelectItem value="x">X</SelectItem>
</SelectContent>
</Select>Props
| Component | Notable props |
|---|---|
| Select | Radix Select.Root: value, defaultValue, onValueChange, disabled, name, … |
| SelectTrigger | Reuses Input's inputBase. aria-invalid styling included. |
| SelectValue | placeholder?: ReactNode — shown when no value selected. |
| SelectContent | position="popper" (default), side, sideOffset, …Radix Select.Content. |
| SelectItem | value (required), disabled. Selected item shows a leading check. |
| SelectLabel / SelectSeparator | Plain group heading + 1px divider — share styling with MenuItem. |
Source
packages/react/src/components/select.tsx · Figma node 2819:30005