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[]) => voidReceives committed unique values in selection order.
label *stringRequired visible label.
options *readonly ComboboxOption[]Accepted options with unique nonempty values and labels.
namestringNative multi-select form name.
formstringOptional external form ID.
placeholderstringText shown when no tags are selected.
descriptionstringSupporting text associated with the input.
errorstringField 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) => voidReceives editable query changes; the app owns debounce, cancellation, and request ordering.
pendingbooleanfalseRetains and disables the last accepted results until replacement results are accepted.
resultsErrorstringNonblocking async-result error; selected tags remain available.
onRetry() => voidOptional retry action shown with resultsError.
inputRef(element: HTMLInputElement) => voidReceives the visible native input.
Native Solid/HTML attributes remain available and are omitted from this authored-prop view.