Concrete
form
Component

Multi select

Tag-backed option picker with local filtering, disabled options, max selection, and removable values.

Multi select composes Field, Tag, and menu rows. It owns local picker interaction; product code owns option sourcing and persistence.

Design systemAI native
Tags are removable and options stay source-of-truth controlled by value.
Playground

Props in the URL.

Controls update query params directly. Complex slots use curated fixtures so component states stay deterministic, linkable, and screenshot-ready.

Loading playground.
States

Rendered matrix.

Every state maps to the same component render route through the `state` query param.

Design systemAI native
Tags are removable and options stay source-of-truth controlled by value.
Default

Selected values rendered as removable tags.

/render state
Design systemAI native
Tags are removable and options stay source-of-truth controlled by value.
Open

Filterable option menu with selected row state.

/render state
Select options...
Tags are removable and options stay source-of-truth controlled by value.
Empty

Placeholder-only state before selection.

/render state
Props

Public contract.

NameTypeDefaultDescription
options *readonly MultiSelectOption[]-Options validated by multiSelectOptionSchema.
valuereadonly string[]-Controlled selected option values.
defaultValuereadonly string[][]Uncontrolled initial selected values.
defaultOpenbooleanfalseInitial menu state for demos and screenshots.
maxSelectednumber-Optional maximum selected item count.
placeholderstringSelect options...Placeholder when no values are selected.
onValueChange(value: readonly string[]) => void-Receives the selected value ids.
labelReactNode-Field label.