MultiCombobox
v1.0.8Updated 27 Aug 2026Dedicated multi-select combobox: a searchable Popover + Command list whose trigger holds one removable chip per selection plus a "+N more" count once the list exceeds `maxDisplay`. Uses a values/onValuesChange array API rather than Combobox's discriminated single/multiple union, so state stays a plain string[]. Chips are removable by mouse, and Backspace in an empty search field drops the last value.
Preview
Live · 8 stories▸Why this is recommendedmulti-selectcomboboxchipstags+5
MultiCombobox — select.
- ✓Picking several projects or sites on a form
- ✓Tag or label pickers with a fixed vocabulary
- ✓Assigning multiple owners or reviewers
- ✓Selecting which columns or fields to show
- ✓Multi-select filters on a report or dashboard
- Multi-select with removable chips in the trigger
- "+N more" overflow count via `maxDisplay`
- Backspace in the empty search field removes the last value
- Flat or grouped options with headings and separators
- Plain string[] value API (values / onValuesChange)
- Custom trigger via the `trigger` prop
- Server-side filtering hook via `onSearchChange`
- ✕Selecting exactly one value (use Combobox)
- ✕Options fetched per keystroke with loading and error states (use ComboboxAsyncMulti)
- ✕Free-text tag entry where users invent values (use TagInput)
- ✕Small fixed sets of 2-5 options (use Checkbox group)
Install
Ask your agent, or call the MCP tool directly. The resolved bundle is written into your project.
Usage
Tick variants in the left menu — each adds a tab with that variant’s real story source, the same code the preview above renders.
Props
optionsFlat or grouped options; grouped entries render headings with separators
yesvaluesSelected values (default [])
—onValuesChangeFires with the next array on toggle or chip removal
—maxDisplayHow many chips render inline before collapsing to "+N more" (default 3)
—placeholderTrigger text when nothing is selected (default "Select…")
—searchPlaceholderPlaceholder for the filter input (default "Search…")
—emptyMessageShown when no option matches (default "No results.")
—onSearchChangeCalled as the user types — use it to fetch/filter options server-side
—triggerReplace the default trigger button; the forwarded ref stays on the default trigger
—disabledDisable the trigger
—contentClassNameClass applied to the popover content
—