Combobox

An accessible Combobox component with text filtering, async search support, loading indicator, keyboard navigation, and reduced motion support.

Open in v0

Last updated: March 29, 2026

Basic Combobox

Async Search

Disabled

Installation

npx smoothui-cli add combobox

Features

  • Text filter input with dropdown option list
  • Static options or async search via onSearch callback
  • Configurable debounce for search queries
  • Loading indicator during async searches
  • Keyboard navigation with arrow keys, Enter to select, Escape to close
  • Controlled value with value and onValueChange
  • Disabled state for the entire combobox or individual options
  • Staggered item entry animation with spring physics
  • Check icon indicator for the selected option

Accessibility

Keyboard Interactions

KeyDescription
Enter / SpaceOpens the dropdown when trigger is focused, or selects the highlighted item
EscapeCloses the dropdown and returns focus to the trigger
Arrow DownMoves highlight to the next option
Arrow UpMoves highlight to the previous option
Character keysFilters the option list by typing in the search input

ARIA Attributes

AttributeElementPurpose
role="combobox"TriggerIdentifies the element as a combobox
aria-expandedTriggerIndicates whether the dropdown is open or closed
aria-haspopup="listbox"TriggerIndicates the trigger opens a listbox
aria-labelTriggerProvides an accessible name for the combobox
aria-labelledbyTriggerReferences an external label element

Screen Reader

  • The trigger announces its expanded/collapsed state and the currently selected value
  • Each option announces its label and selected state
  • The search input is announced as a text field for filtering

Reduced Motion

This component respects the prefers-reduced-motion media query via useReducedMotion from Motion. When reduced motion is preferred, all entry animations and transitions are disabled instantly.

Props

ComboboxOption