1. framework components
  2. combobox

Combobox

A combobox is an input widget with an associated popup that enables users to select a value from a collection of possible values.

Groups

Create labelled groups for your items.

Auto Highlight

Search for any option, then tap Enter on your keyboard to automatically select it.

Multiple

To maintain filtering functionality and improve clarity for users, we recommend displaying each selected value outside the perimeter of the Combobox component.

Disabled Item

Custom Filter

Try mistyping apple or banana to see the custom filter using the fuzzy search from Fuse.js in action.

Direction

Guidelines

Z-Index

By default we do not take an opinionated stance regarding z-index stacking. The result is the component can sometimes be occluded beneath other elements with a higher index. The Z-Index can controlled by applying a utility class to the Positioner component part.

astro
<Combobox.Positioner class="z-50" />

Max Items

We recommend no more than 500 items max. For normal usage, a few dozen will provide the best performance.

API Reference

Root

txt
flex flex-col gap-2
PropDefaultType
openboolean | undefined

The controlled open state of the combobox

defaultOpenboolean | undefined

The initial open state of the combobox when rendered. Use when you don't need to control the open state of the combobox.

idsPartial<{ root: string; label: string; control: string; input: string; content: string; trigger: string; clearTrigger: string; item: (id: string, index?: number | undefined) => string; positioner: string; itemGroup: (id: string | number) => string; itemGroupLabel: (id: string | number) => string; }> | undefined

The ids of the elements in the combobox. Useful for composition.

inputValuestring | undefined

The controlled value of the combobox's input

defaultInputValue""string | undefined

The initial value of the combobox's input when rendered. Use when you don't need to control the value of the combobox's input.

namestring | undefined

The `name` attribute of the combobox's input. Useful for form submission

formstring | undefined

The associate form of the combobox.

disabledboolean | undefined

Whether the combobox is disabled

readOnlyboolean | undefined

Whether the combobox is readonly. This puts the combobox in a "non-editable" mode but the user can still interact with it

invalidboolean | undefined

Whether the combobox is invalid

requiredboolean | undefined

Whether the combobox is required

placeholderstring | undefined

The placeholder text of the combobox's input

defaultHighlightedValuestring | null | undefined

The initial highlighted value of the combobox when rendered. Use when you don't need to control the highlighted value of the combobox.

highlightedValuestring | null | undefined

The controlled highlighted value of the combobox

valuestring[] | undefined

The controlled value of the combobox's selected items

defaultValue[]string[] | undefined

The initial value of the combobox's selected items when rendered. Use when you don't need to control the value of the combobox's selected items.

inputBehavior"none""autohighlight" | "autocomplete" | "none" | undefined

Defines the auto-completion behavior of the combobox. - `autohighlight`: The first focused item is highlighted as the user types - `autocomplete`: Navigating the listbox with the arrow keys selects the item and the input is updated

selectionBehavior"replace""clear" | "replace" | "preserve" | undefined

The behavior of the combobox input when an item is selected - `replace`: The selected item string is set as the input value - `clear`: The input value is cleared - `preserve`: The input value is preserved

autoFocusboolean | undefined

Whether to autofocus the input on mount

openOnClickfalseboolean | undefined

Whether to open the combobox popup on initial click on the input

openOnChangetrueboolean | ((details: InputValueChangeDetails) => boolean) | undefined

Whether to show the combobox when the input value changes

allowCustomValueboolean | undefined

Whether to allow typing custom values in the input

alwaysSubmitOnEnterfalseboolean | undefined

Whether to always submit on Enter key press, even if popup is open. Useful for single-field autocomplete forms where Enter should submit the form.

loopFocustrueboolean | undefined

Whether to loop the keyboard navigation through the items

positioning{ placement: "bottom-start" }PositioningOptions | undefined

The positioning options to dynamically position the menu

onInputValueChange((details: InputValueChangeDetails) => void) | undefined

Function called when the input's value changes

onValueChange((details: ValueChangeDetails<any>) => void) | undefined

Function called when a new item is selected

onHighlightChange((details: HighlightChangeDetails<any>) => void) | undefined

Function called when an item is highlighted using the pointer or keyboard navigation.

onSelect((details: SelectionDetails) => void) | undefined

Function called when an item is selected

onOpenChange((details: OpenChangeDetails) => void) | undefined

Function called when the popup is opened

translationsIntlTranslations | undefined

Specifies the localized strings that identifies the accessibility elements and their states

collectionListCollection<any> | undefined

The collection of items

multipleboolean | undefined

Whether to allow multiple selection. **Good to know:** When `multiple` is `true`, the `selectionBehavior` is automatically set to `clear`. It is recommended to render the selected items in a separate container.

closeOnSelectboolean | undefined

Whether to close the combobox when an item is selected.

openOnKeyPresstrueboolean | undefined

Whether to open the combobox on arrow key press

scrollToIndexFn((details: ScrollToIndexDetails) => void) | undefined

Function to scroll to a specific index

compositetrueboolean | undefined

Whether the combobox is a composed with other composite widgets like tabs

disableLayerboolean | undefined

Whether to disable registering this a dismissable layer

navigate((details: NavigateDetails) => void) | null | undefined

Function to navigate to the selected item

dir"ltr""ltr" | "rtl" | undefined

The document's text/writing direction.

getRootNode(() => ShadowRoot | Node | Document) | undefined

A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron.

onPointerDownOutside((event: PointerDownOutsideEvent) => void) | undefined

Function called when the pointer is pressed down outside the component

onFocusOutside((event: FocusOutsideEvent) => void) | undefined

Function called when the focus is moved outside the component

onInteractOutside((event: InteractOutsideEvent) => void) | undefined

Function called when an interaction happens outside the component

element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

Provider

PropDefaultType
valueComboboxApi<PropTypes, any>

element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

Context

PropDefaultType
children(combobox: ComboboxApi<PropTypes, any>) => ReactNode

Label

txt
label-text
PropDefaultType
element((attributes: HTMLAttributes<"label">) => Element) | undefined

Render the element yourself

Control

txt
relative
PropDefaultType
element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

Input

txt
input
PropDefaultType
element((attributes: HTMLAttributes<"input">) => Element) | undefined

Render the element yourself

Trigger

txt
btn-icon btn-icon-sm preset-tonal absolute end-1.5 top-1/2 -translate-y-1/2
PropDefaultType
element((attributes: HTMLAttributes<"button">) => Element) | undefined

Render the element yourself

Positioner

PropDefaultType
element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

Content

txt
card bg-surface-50-950 border border-surface-200-800 p-2 flex flex-col gap-2
PropDefaultType
element((attributes: HTMLAttributes<"ul">) => Element) | undefined

Render the element yourself

ItemGroup

PropDefaultType
element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

ItemGroupLabel

txt
text-surface-600-400 text-xs px-2 py-1
PropDefaultType
element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

Item

txt
flex justify-between items-center px-2 py-1 rounded cursor-pointer data-[state=checked]:preset-filled data-highlighted:outline-2 data-highlighted:outline-offset-1 data-highlighted:outline-surface-950-50 data-highlighted:preset-tonal data-disabled:pointer-events-none data-disabled:opacity-50
PropDefaultType
persistFocusboolean | undefined

Whether hovering outside should clear the highlighted state

itemany

The item to render

element((attributes: HTMLAttributes<"li">) => Element) | undefined

Render the element yourself

ItemText

PropDefaultType
element((attributes: HTMLAttributes<"span">) => Element) | undefined

Render the element yourself

ItemIndicator

PropDefaultType
element((attributes: HTMLAttributes<"div">) => Element) | undefined

Render the element yourself

View page on GitHub