sheengemologic ui
All components

MultiCombobox

Editable tagged selection with retained async results.@gemologic/sheen · forms

Playground

Ada
<MultiCombobox label="Owners" options={[{ value: "ada", label: "Ada" }]} defaultValue={["ada"]}  filter="contains"/>

Variant matrix

Multiple owners
Ada
filter: contains
Ada
filter: startsWith
Ada
filter: endsWith
Ada
filter: false
Ada

Anatomy

Package
@gemologic/sheen
Source
packages/ui/src/primitives/Combobox.tsx
Tokens
  • --sheen-color-bg-inset
  • --sheen-color-bg-raised
  • --sheen-color-border-control
  • --sheen-color-focus-ring

Accessibility

Role: comboboxKeyboard: ArrowDown, ArrowUp, Home, End, Enter, Escape, Backspace

Do

  • Keep option values stable so selected tags survive filtered result subsets.

Do not

  • Do not replace accepted options with a loading placeholder.

Generated props

NameTypeDefaultDescription
valuereadonly string[]—Controlled ordered set of selected values.
defaultValuereadonly string[]—Initial uncontrolled ordered set of selected values.
onValueChange(value: readonly string[]) => void—Receives committed unique values in selection order.
label *string—Required visible label.
options *readonly ComboboxOption[]—Accepted options with unique nonempty values and labels.
namestring—Native multi-select form name.
formstring—Optional external form ID.
placeholderstring—Text shown when no tags are selected.
descriptionstring—Supporting text associated with the input.
errorstring—Field validation text and invalid state.
disabledbooleanfalseDisables input, tags, selection, and submission.
readOnlybooleanfalseAllows inspection but rejects query and tag changes.
requiredbooleanfalseRequires at least one committed selection for native form submission.
filterComboboxFiltercontainsBuilt-in label filter, or false when the app supplies externally filtered options.
onInputChange(value: string) => void—Receives editable query changes; the app owns debounce, cancellation, and request ordering.
pendingbooleanfalseRetains and disables the last accepted results until replacement results are accepted.
resultsErrorstring—Nonblocking async-result error; selected tags remain available.
onRetry() => void—Optional retry action shown with resultsError.
inputRef(element: HTMLInputElement) => void—Receives the visible native input.
Native Solid/HTML attributes remain available and are omitted from this authored-prop view.