Select
A small known set of options for single or multiple selection without text search.
Purpose
Use Select for a bounded, known set of choices such as status, category, framework or filter values.
Status select
Installation
With the Siteplane registry alias configured, add the component and import the installed source from your app.
CLI
pnpm dlx shadcn@4.16.1 add @siteplane/selectImport
import {
Select,
SelectButton,
SelectGroup,
SelectGroupLabel,
SelectItem,
SelectLabel,
SelectPopup,
SelectSeparator,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";Need the machine-readable source metadata? View registry JSON.
Usage
Use Select for choosing from a small known set. Use Combobox when the set needs filtering.
import { Select, SelectItem, SelectPopup, SelectTrigger, SelectValue } from "@/components/ui/select";
export function Example() {
return (
<Select defaultValue="active">
<SelectTrigger aria-label="Status"><SelectValue /></SelectTrigger>
<SelectPopup><SelectItem value="active">Active</SelectItem></SelectPopup>
</Select>
);
}Examples
Groups, trigger icons, multiple selection, sizes, states and form integration are props and compositions of the same primitive.
Grouped options
With icon
Multiple selection
Sizes
States
Form integration
With label
SelectLabel labels the control itself. Inside a form, prefer Field with FieldLabel.
Options with icons
A render function as SelectValue child formats the selected item; itemToStringValue keeps the form value a string.
Object values
SelectButton trigger
SelectButton renders the select trigger look as a plain button — here as the render trigger of a filterable Combobox.
API Reference
The reference lists the source-owned exports and props that are easy to miss in visual examples. Inherited Base UI props remain available unless the wrapper narrows them.
Selectsupports single or multiple controlled and uncontrolled values through the Base UI root contract.SelectTrigger size="xl"uses the 56px customer-facing field height and 16px field text. Pair it with a surroundingSiteplaneUIProvider radius="sm"for the global 8px main corner. Popup item density and radius stay independent from the trigger size.- Compose
SelectTrigger,SelectValue,SelectPopup,SelectItem,SelectGroup,SelectGroupLabel,SelectLabelandSelectSeparator;SelectButtonis the standalone trigger-style button. SelectPopupacceptsside,align,sideOffset,alignOffset,anchor,alignItemWithTrigger,portalPropsand popup props.SelectItemacceptsdisabled. Long lists automatically expose the built-in scroll-up and scroll-down controls when the popup overflows.
Motion
Component motion uses the shared Siteplane motion contract. See the global motion guide for provider setup, tokens and reduced-motion behavior.
- Select uses the shared floating-panel transition. Item-aligned popups keep the selected item stable while using the shared fade and scale behavior.
- Placement, collision handling and reduced motion remain inside the native primitive.
Accessibility
- Give the trigger a visible label or accessible name and keep disabled or invalid state paired with clear text.
- Preserve keyboard navigation, typeahead, focus return and the built-in long-list scroll controls.
- A disabled option must remain understandable without being the only available choice.
Implementation Guidance
- Use Combobox for large searchable sets and Autocomplete for suggestions while typing.
- Configure placement on
SelectPopup, not with local positioning wrappers. - Do not replace the built-in overflow behavior with a second nested scroll container.