Combobox

Last updated Feb 13, 2026

A combobox combines a text field with a searchable popover to let users make single or multiple selections. It supports search and contextual enhancements like descriptions, icons, and truncation.

Anatomy of the single and multi-select combobox
  1. Input container : where users type or view their selections. For single select combobox, users can type into this container to search through the list items.
  2. List items : options displayed in the popover; may include icons or descriptions.
  3. Popover : the dropdown menu that shows searchable results.
  4. Stickers (optional): selected, removable items displayed inside the input.
  5. Clear button (optional): removes all selected items.
  6. Search input (optional): allows users to type and search through all available list items.
  7. Checkbox (optional): allows users to select one or more option, indicating which items have already been selected.
PropTypeRequiredDefaultDescription
sizeanyfalse-Size of the combobox input
optionsComboboxOptionsOrGroups<T>true-Array of options to display in the dropdown Can be flat options, grouped options, or a mix of both
isOptionsLoadingboolean | undefinedfalse-If true, the options are currently being loaded
onInputChange((value: string) => void) | undefinedfalse-Callback when input value changes (for filtering) In single this is the main input, in multi this is the search input In both cases this corresponds to the input the user can type into to filter the options
onOpenChange((isOpen: boolean) => void) | undefinedfalse-Callback when dropdown open state changes
emptyStateMessagestring | undefinedfalse-Custom empty state message when no options match filter
disabledboolean | undefinedfalse-Whether the combobox is disabled
labelIdstring | undefinedfalse-ID of the label for the combobox input
'aria-label'string | undefinedfalse-Aria label for accessibility when no visible label is provided
placeholderstring | undefinedfalse-Placeholder text when no option is selected
hasWarningboolean | undefinedfalse-Whether the combobox has a warning state
hasErrorboolean | undefinedfalse-Whether the combobox has an error state
idstring | undefinedfalse-ID for the combobox input
portalboolean | undefinedfalse-Whether to render the dropdown in a portal (breaks out of overflow containers)
portalContainerRefRefObject<HTMLElement> | undefinedfalse-Reference to the container element for portal rendering. When provided, the dropdown will use this element’s dimensions for positioning.
  • When users need to select from a large or complex set of options that would be difficult to scan in a static list.
  • When search is needed to quickly find the right option(s).
  • When space is limited and you want to avoid showing a long list of checkboxes or radios.
  • When both flexibility and precision are required—allowing users to either type to filter or pick from available options.
  • When selections may change frequently and the input should update dynamically as users type or search.
  • Use the Select component when users don’t need to search or filter options.
  • Use Radio Buttons for a small set of mutually exclusive options.
  • Use Checkboxes for a small set of multiple selections where search isn’t required.
  • Use Text Input when freeform input is needed, without selection from a list.

Do

  • Keep popover width consistent with the input; don’t exceed 400px.
  • Keep the search field sticky at the top for usability.
  • Provide “Select all” only in multiselect lists.
  • Use truncation thoughtfully to preserve the most useful context.
  • Use leading icons only when they add meaning.

Don't

  • Overload list items with excessive description text, do not exceed 3 lines of text.
  • Use combobox for very small option sets where simpler controls suffice.
  • Allow dismiss per sticker in the compact version.
  • Ensure combobox has correct ARIA roles: role="combobox", aria-expanded, and aria-controls.
  • The input should be labeled with a visible or programmatic label.
  • Support keyboard navigation.
  • Announce selection and deselection changes via screen readers.
  • Ensure all icons and created options have accessible names.
  • Labels should be clear and describe the type of choice (e.g., “Select country”).
  • Keep option text concise; add a description only when needed.
  • Limit description text to three lines for readability.
  • Use sentence case for labels and option text.
  • Use consistent terminology between options and elsewhere in the product.