Multi Select
Choose more than one option, from a short list or a searchable one.
Default
The popup stays open while options are toggled. One choice shows its label; more show a count built from plural.
Variants
Same surfaces as Select: primary is flat neutral-100, secondary is white with shadow-sm.
With icons
Pass leading for a Central Icon and move the checkbox to the end with indicatorPosition="trailing".
Long list
Cap the height with a max-h class on MultiSelectContent; the list scrolls with a fade.
With search
Set searchable and pass items to filter by label. The field stays pinned while results scroll, and checked options sit on top.
Selected pinned
Set pinSelected with items to list checked options first, then a divider, then the rest alphabetically. Control value so the order follows each toggle.
Disabled
Disable the whole MultiSelect, or a single option that is unavailable.
Best practices
When to use
- Use when people choose more than one value from a known list, such as fallback models, regions, channels, or API scopes.
- Use Select for one value, Combobox with chips when typing to filter is central or the choices should stay visible, and Switch for a single boolean setting.
Behavior
- The popup stays open while options are toggled. Pass plural and items to MultiSelectValue so one choice shows its label and more show a count, like “3 regions”.
- Set searchable with items once the list is long enough that scanning is slower than typing; checked options pin to the top.
- Use pinSelected with a controlled value so checked options move above the divider as they are toggled.
- Use leading with indicatorPosition="trailing" when an icon identifies each option.
Content
- Name the plural in the trigger for what is counted (“3 voices”), not “3 selected”.
Accessibility
- Give each option a name that identifies the item being selected, not merely “Select”.
- Label the trigger with FieldLabel or aria-label; a count alone does not say what was chosen.