Select

Accessible React single-select field built on Radix, with label, helper text, error state, placeholder, and disabled options. Inherits dark mode and RTL.

Compose Select with SelectItem children, each with a stable value. The dropdown inherits dark mode and RTL from the provider.

When to use

Use Select when the user picks one option from a known list of roughly five to fifteen items, such as a region or a document type. For long lists that need searching, or for multi-select, use Dropdown. For four or fewer options, RadioGroup is faster to scan.

Pass a placeholder that describes the choice, not an instruction.

Examples

Country picker

Default value, helper & a disabled option

Required & error

Arabic (RTL)

Props

Props declared by Select. Native attributes of the underlying element pass through.

<Select>

PropTypeDefaultDescription
size"sm" | "md"
labelreact.ReactNodeVisible label above the trigger, associated via htmlFor/id.
helperTextreact.ReactNodeHint shown below the trigger. Hidden while an error message is showing.
errorMessagereact.ReactNodeMessage shown below the trigger when error is true.
errorbooleanMarks the field invalid: sets aria-invalid and error styling.
placeholderreact.ReactNodePlaceholder shown in the trigger when no value is selected.
childrenrequiredreact.ReactNode<SelectItem> children, rendered inside the dropdown panel.
idstringCaller-supplied id for the trigger; falls back to a generated one.
classNamestringForwarded to the trigger (the focusable control).
aria-labelstring
aria-labelledbystring
openboolean
defaultOpenboolean
onOpenChange(open: boolean) => void
namestring
autoCompletestring
disabledboolean
requiredboolean
formstring
valuestring
defaultValuestring
onValueChange(value: string) => void

<SelectItem>

PropTypeDefaultDescription
childrenrequiredreact.ReactNodeThe visible label for this item.
asChildboolean
valuerequiredstring
disabledboolean
textValuestring

Accessibility

The trigger is a button linked to the visible label, and the list opens as a listbox with keyboard navigation from Radix: arrow keys move, typing jumps to a matching option, Enter selects, and Escape closes.

Helper text and errors are announced through aria-describedby and aria-invalid. The open list renders inside the provider portal, so it inherits direction and dark mode.