Browse the docs

Select Menu

Custom select with styled options, typeahead, and form participation (a hidden input submits the value). Focus stays on the trigger's listbox while aria-activedescendant tracks the highlighted option — the WAI-ARIA combobox-with-listbox pattern, from the listbox primitive.

The native Select stays the better default — it gets the platform's own dropdown and is correct on touch for free. Reach for this one when options need markup or styling the native popup can't do.

This component needs the listbox primitive — two ways to get it:

Submitted as:

Props

PropValuesDefaultDescription
options{ value, label, disabled? }[]requiredThe options.
value / onValueChangestring / functionControlled selection; defaultValue for uncontrolled.
placeholdernode"Select…"Shown until something is selected.
namestringAdds a hidden input so the value submits with a form.
invalidbooleanfalseDanger border and aria-invalid.
classNamestring""Applied to the trigger.

Notes

For grouped options or custom option markup, compose the primitive directly: SelectRoot, SelectTrigger, SelectValue, SelectContent, SelectOption, SelectGroup.