Component
Combobox
Searchable single-selection dropdown (wraps Base UI Combobox).
Basic
No results
Type a query with no matches (e.g. "xyz") to see the built-in empty state.
Controlled
Selected: Apple
When to use
- A single selection from a list long or unfamiliar enough that typing to filter is faster than scrolling.
- Async or large option sets where you'd otherwise need a custom search UI.
When not to use
- A short, fixed list (under ~10 items) - a plain Select is fewer keystrokes and simpler to scan.
- Multiple selections - use MultiSelect, which has its own chip-based value model.
- Free-text entry that isn't really a selection from a list - use Input instead.
Keyboard
Mobile behavior
- Opens the on-screen keyboard immediately on tap, same as a text input - there's no separate "open" step on touch.
- The popup is width-matched to the trigger and viewport-clamped, so it doesn't overflow narrow screens.
Accessibility notes
- Base UI wires role="combobox" on the input with aria-expanded and aria-activedescendant tracking the highlighted item.
- The empty state ("No results found.") is rendered in the list region so it's discoverable by screen reader users navigating the popup, not just sighted users.
Common mistakes
- Forgetting aria-label when there's no visible <label> - the input then announces as an unlabeled text box.
- Expecting item-level disabled to work - it isn't currently supported on Combobox items (Select does support it; see Select for that case).
- Filtering the items array yourself on every keystroke - Base UI already filters by label internally, so a custom filter usually just fights it.
Known limitations
- Individual items don't currently support a disabled flag (Select and MultiSelect do).
- Filtering matches item label substrings only - there's no built-in fuzzy or multi-field search.
Related components
Combobox props
itemsNone
{ label: string; value: string }[]The full option list - Base UI filters it internally as the user types.
value / onValueChangeNone
ComboboxItem | nullControlled selected item.
placeholder"Search…"
stringInput placeholder text.
invalidfalse
booleanApplies the invalid visual/aria state.
API reference
itemsNone
option dataSearchable options.
value / defaultValueNone
stringControlled or initial selection.
onValueChangeNone
(value) => voidCalled when an option is selected.
classNameNone
stringAdditional classes applied to the component root.
