What it is
A control that chooses from a fixed, enumerable set of options, collapsed behind a trigger until the reader opens it. The collapse is the point — it is the right choice once showing every option at once, as Radio does, would cost more space than it returns. This page covers single-select and multi-select together, since choosing between them is one decision about the same field.Live example
Exports
Vocabulary
Autocomplete is a mode of this same component, not a separate “Combobox” — see
Vocabulary and Open issues
for the correction and its sign-off status.
Choose Select when
- The set of valid answers is fixed and enumerable, and long enough — roughly more than five — that showing every option at once would cost more space than it returns.
- The reader mainly needs to see the chosen value, not compare every option side by side.
Choose something else when
Anatomy
Options nest one level. The Figma library’s option-list component names two option
kinds,
Menu Item and Menu Sub-Item, each carrying the same state set (Default ·
Hover · Focused · Pressed · Disabled) and each combinable with a divider and a
selected mark. This is a real structural axis this page did not previously account for —
see TITAN-SELECT-08.Variants, sizes, and states
Confirmed from the Figma library, not source. The trigger has
Type (Default ·
Error) and State (Default · Focused · Filled · Disabled) axes, plus
Autocomplete (false/true) — see Vocabulary. Filled here means “has a
value,” distinct from the empty default — a state this page did not previously name.Edge and failure states
Tokens
Composition
The closed trigger renders through the same field chrome as Input — border, focus ring, and control height are shared, not re-declared. Always paired with FieldLabel above it. The open option list’s items are namedMenu Item / Menu Sub-Item in the design library — the
same vocabulary Menu uses — suggesting shared overlay
implementation. Unconfirmed against source; treat as likely, not settled.
For a complete field rather than the bare control, compose through FormInput with
type="select" — see TITAN-SELECT-09.
Content
Accessibility
- The accessible name comes from FieldLabel, not from the currently-shown value.
- The trigger and list follow the standard listbox interaction pattern: the trigger reports its expanded state, and the currently highlighted option is announced as focus moves through the list without moving actual DOM focus off the trigger.
Constraints
Known issues
Select: open issues
Divergences, open decisions, and undocumented gaps for Select.
Why it works this way
The collapse is the trade the fork with Radio is drawn around. Below roughly five options, showing all of them costs little and saves the reader a click; above that, the space a visible list would take outweighs the convenience, which is why Choose something else when draws the line there rather than at some other count. Option order matters more here than in a visible list, because a reader scanning a Radio group can notice a strange ordering before interacting with it. A Select’s options are hidden until opened, so a confusing order is discovered mid-interaction — a worse moment to lose the reader’s confidence in the control. A summarized multi-select trigger exists for the same reason Button holds its width while loading: a control that grows every time the reader acts on it moves whatever sits next to it, at the exact moment the reader is mid-task.Status
Related
- FieldLabel — every Select composes with one
- Input — shares the closed trigger’s field chrome
- Checkbox — the always-visible alternative for multi-select
- Form validation — decides whether a selection is required