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.

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.