Multi Select

Composable multi-select primitives with searchable options, removable animated tokens, and a morphing collision-aware panel.

Preview

designengineering

Install

Add it with the shadcn CLI, or copy the source manually.

$ bunx --bun shadcn add @beui/multi-select

API Reference

MultiSelect

value?
string[]
—
defaultValue?
string[]
[]
onValueChange?
((value: string[]) => void)
—
open?
boolean
—
defaultOpen?
boolean
false
onOpenChange?
((open: boolean) => void)
—
query?
string
—
defaultQuery?
string
onQueryChange?
((query: string) => void)
—
filter?
MultiSelectFilter
(value, query, keywords) => { const needle = query.trim().toLocaleLowerCase(); if (!needle) return true; const haystack = [value, ...keywords].join(" ").toLocaleLowerCase(); let queryIndex = 0; for (const character of haystack) { if (character === needle[queryIndex]) queryIndex += 1; if (queryIndex === needle.length) return true; } return false; }
disabled?
boolean
false
className?
string
—

MultiSelectInput

ref?
Ref<HTMLInputElement>
—
showIcon?
boolean
false
className?
string
—

MultiSelectTrigger

className?
string
—

MultiSelectValue

placeholder?
ReactNode
Select options
className?
string
—
chipClassName?
string
—

MultiSelectContent

side?
"top" | "bottom"
bottom
align?
"center" | "end" | "start"
start
sideOffset?
number
6
avoidCollisions?
boolean
true
className?
string
—

MultiSelectEmpty

className?
string
—

MultiSelectGroup

className?
string
—

MultiSelectItem

value
string
—
textValue?
string
—
keywords?
string[]
[]
disabled?
boolean
false
onSelect?
((value: string) => void)
—
className?
string
—

MultiSelectLabel

className?
string
—

MultiSelectList

ariaLabel?
string
Options
className?
string
—

MultiSelectSeparator

className?
string
—

Updated