Skip to content
Forms

Multi Select

Pick multiple values shown as removable chips.

Import

tsx
import { MultiSelect } from "@cronus-ui/ui";
bash
npx cronus-ui add multi-select

Examples

.cronus

The same component declared in Cronus. Emitted at build time from the audit fixtures — the kernel renders it as HTML with no React.

PortedParity: MatchGeometry 1/1Pixel diff 0 pxLogic 1/1Parity scoreboard
default.cronus
app "audit-fixtures" {
  port 5176
}

style {
  preset aurora
  theme dark
}

component MultiSelectDefault layout:inline style:multi-select {
  aria-label:"Stack"
  label "Select frameworks"
  text "Select frameworks"
  text "React"
  text "Vue"
}

page "/audit/multi-select/default" type:custom {
  use MultiSelectDefault
}

API Reference

Generated from the component's exported types.

MultiSelectProps

Skip MultiSelectProps props table
PropTypeDefaultDescription
options*
MultiSelectOption[]—Options shown in the searchable list.
value
string[]—Controlled selection. Provide together with `onValueChange`.
defaultValue
string[]—Uncontrolled initial selection.
onValueChange
(value: string[]) => void—Called with the next selection whenever it changes.
placeholder
string"Select…"Text shown in the trigger when nothing is selected.
searchPlaceholder
string"Search…"Placeholder for the search input inside the popover.
emptyText
string"No results found."Text shown when the search yields no results.
maxDisplay
number—Maximum number of chips to render before collapsing the rest into a "+N" badge. When omitted, every selected chip is rendered.
disabled
booleanfalseDisable the whole control.
removeLastOnBackspace
booleantrueWhen true (default), pressing Backspace with an empty search removes the last selected item.
className
string—Extra classes for the trigger button.
contentClassName
string—Extra classes for the popover content.
aria-label
string—Accessible label for the trigger when no visible label is associated.
aria-labelledby
string—id of an element that labels the trigger.
aria-invalid
boolean | "true" | "false"—Marks the trigger as invalid (e.g. from a Form layer), applying error styling.
open
boolean—Controls the popover open state (controlled).
defaultOpen
boolean—Initial popover open state (uncontrolled).
onOpenChange
(open: boolean) => void—Called when the popover open state changes.