search⌘K

Select

Last Updated: September 2026

Selection inputs are information capture fields that let users select from a pre-defined list of options.

Anatomy

link
Dotted grid scale: 8px
  1. 1Trigger
  2. 2Icon
  3. 3Items
  4. 4Popup

Variants

link

Placeholder

No value selected — shows placeholder text.

Default value

Uncontrolled selection via defaultValue.

Disabled

disabled prevents opening and changing the value.

Disabled items

Mark individual options with disabled: true.

Leading content

Optional leading node per item (icon or flag).

Usage Guidelines

link

When to use

  • •To choose one option from a predefined list.
  • •When options are short enough to scan in a dropdown.
  • •As a form control beside Input and Button.

When not to use

  • •For free-text entry — use Input.
  • •For phone country + number — use PhoneInput.
  • •For actions rather than selection — use Menu or Button.
checkDo

Use concise, mutually exclusive labels users can scan quickly.

closeDon't

Don't put full sentences or multi-line content in option labels.

checkDo

Compose Select with Input and Button for short forms.

closeDon't

Don't use Select for open-ended values like phone numbers — use PhoneInput.

Behaviors

link

Value model

  • •Uncontrolled: defaultValue.
  • •Controlled: value + onValueChange(string).
  • •items is required — each item needs a unique value and a label.

Custom trigger

  • •triggerContent replaces the default Value + chevron (used by PhoneInput).
  • •triggerClassName merges onto the trigger for embedded layouts.

Popup

  • •List is portaled and positioned under the trigger.
  • •Highlighted items use keyboard and pointer focus; disabled items are skipped.

Content Guidelines

link

Labels

  • •Keep option labels short and parallel in structure.
  • •Placeholder should describe the choice ('Appointment type'), not 'Select an option' alone when context is clear.

Values

  • •Use stable string values (ids/slugs), not display labels.
  • •Avoid PII in option values or labels in demos — synthetic data only.

Accessibility

link

Text & Labels

  • •Pair with a visible Field.Label in forms.
  • •Placeholder is not a permanent accessible name.

ARIA attributes

  • •Built on Base UI Select — trigger exposes listbox semantics when open.
  • •Disabled options are not selectable.

Keyboard Support

  • •Tab → focus the trigger.
  • •Enter / Space → open.
  • •Arrow keys → move highlight; Enter → select.
  • •Escape → close.

WCAG Compliance Standards

FAQs

link

Is Select a compound component?

No. Pass items=[{ value, label, leading?, disabled? }]. There is no Select.Item export — PhoneInput customizes via triggerContent / triggerClassName.

Controlled vs uncontrolled?

Use value + onValueChange for controlled; defaultValue when you don't need to own state.

Select vs Input?

Select for fixed options; Input for free text. PhoneInput combines Select (country) with Input (number).

link