GitHubopen_in_new

Combobox

Combobox combines free-form text entry with option picking, making it useful for searchable single- and multi-select flows.

Combobox shares Select's labelClearance prop and fieldContextKey default. Preserve the surrounding layout's intended density and add clearance only when its floating label needs it. See the floating label spacing guide.

Props

NameDescriptionDefaultControl
sizeOptional

The trigger height. Matches the 32px, 40px, and 56px TextField and Button sizes.

TextFieldSize | undefined
-
-
disabledOptional

Whether the control is disabled.

boolean | undefined
-
nameOptional

Name used for hidden inputs during form submission.

string | undefined
-
multipleOptional

Enables multi-select behavior.

boolean | undefined
-
-
labelOptional

Visible label. If omitted, provide aria-label via attrs.

string | undefined
-
idOptional

Optional explicit id for the trigger element.

string | undefined
-
optionsRequired

Selectable options rendered in the menu.

SelectOption[]
-
-
supportingTextOptional

Supporting text shown below the field when not in error state.

string | undefined
-
errorOptional

Error text shown below the field. When provided, field is invalid.

string | undefined
-
requiredOptional

Whether the control is required.

boolean | undefined
-
placeholderOptional

Placeholder shown when nothing is selected.

string | undefined
-
labelClearanceOptional

CSS length reserved at block-start for the floating label. Overrides FieldContext.

string | undefined
-
clearableOptional

Shows a trailing button that clears the current selection.

boolean | undefined
-
clearLabelOptional

Accessible label for the clear button.

string | undefined
-
menuColorOptional

Visual color style of the dropdown menu.

MenuColor | undefined
-
-
displaySeparatorOptional

Separator used when showing multiple selected labels.

string | undefined
-
filterPlaceholderOptional

Placeholder shown in the menu filter field.

string | undefined
-
filterNoResultsTextOptional

Message shown when filtering returns no matching options.

string | undefined
-
modelValueOptional

-

SelectModelValue
-
-
openOptional

-

boolean | undefined
false

Events5

NameTypeDescription
update:open[value: boolean]-
update:modelValue[value: SelectModelValue]-
change[value: SelectModelValue]-
focus[event: FocusEvent]-
blur[event: FocusEvent]-

Slots6

NameParametersDescription
leading--
prefix--
suffix--
trailing--
optionLeading--
optionTrailing--

INFO

Combobox 是 Select 的封装,共享 select scope。详见 Select Anatomy

Examples

Default

Multiple Selection

Composable

Combobox shares the same composable as Select.

useSelect

function useSelect(opts: UseSelectOptions): UseSelectReturn

Source: src/composables/useSelect.ts

FieldTypeRequiredDescriptionDefault
options() => UseSelectOption[]YesThe selectable options.-
multiple() => booleanYesWhether multi-select is enabled.-
filterable() => booleanYesWhether filtering is enabled.-
disabled() => booleanYesWhether the control is disabled.-
displaySeparator() => stringYesSeparator for display text in multi-select mode.-
locale(() => string | undefined) | undefinedNoBCP 47 locale used for locale-sensitive filtering.-
modelValueRef<UseSelectModelValue, UseSelectModelValue>YesModel value ref (external).-
openRef<boolean, boolean>YesOpen state ref (external).-
onChange((value: UseSelectModelValue) => void) | undefinedNoCalled when value changes.-
menuRefSelectMenuRefYesRef to the menu exposed API.-
triggerRefRef<HTMLElement | undefined, HTMLElement | undefined>YesRef to the trigger element.-
textFieldRefSelectTextFieldRefYesRef to the text field exposed API.-
FieldTypeRequiredDescriptionDefault
filterQueryRef<string, string>YesCurrent filter query string.-
selectedOptionsComputedRef<UseSelectOption[]>YesOptions selected based on current model value.-
hasValueComputedRef<boolean>YesWhether any value is selected.-
displayTextComputedRef<string>YesDisplay text for the current selection.-
submittedValuesComputedRef<string[]>YesValues to submit in hidden form inputs.-
filteredOptionEntriesComputedRef<{ option: UseSelectOption; index: number; }[]>YesFiltered option entries with original indices.-
hasFilteredOptionsComputedRef<boolean>YesWhether there are any filtered options.-
isOptionSelected(option: UseSelectOption) => booleanYesCheck if an option is currently selected.-
toggleOption(option: UseSelectOption) => voidYesToggle an option in the selection.-
clearValue() => voidYesClear the current selection.-
handleMenuSelect(event: MouseEvent, itemElement: HTMLElement) => voidYesHandle menu item selection event.-
focus() => voidYesFocus the text field.-
blur() => voidYesBlur the text field.-
show() => Promise<void>YesShow the menu.-
hide() => voidYesHide the menu.-
toggle() => voidYesToggle the menu.-
openMenu(focus?: "first" | "last") => voidYesOpen menu with optional focus target.-
closeMenu() => voidYesClose the menu.-
handleFieldClick() => voidYesHandle click on the trigger field.-
handleFieldInput() => voidYesHandle input on the filter field.-
handleFilterKeydown(event: KeyboardEvent) => voidYesHandle keydown on the filter field.-