Multi Select
A keyboard-navigable dropdown for selecting multiple items with advanced focus management.
Select Actions
The component provides different selection behaviors based on current state:
- Checkbox focus + Enter/Space: Toggle individual item
- Button focus + Enter/Space: Smart selection (Select Only, Select All, or Toggle based on context)
- Hidden action labels: Appear on hover/focus to show available actions
Hover over items to see action labels. Different actions appear based on selection state.
Keyboard Navigation
The Multi Select component supports comprehensive keyboard navigation:
- Up/Down arrows: Navigate between rows while maintaining checkbox/button focus state
- Left/Right arrows: Switch between checkbox and button focus within the current row
- Tab: Focus away from the menu (natural tab behavior)
- Enter/Space: Execute actions based on current focus (checkbox toggle or button click)
Try keyboard navigation: ↑ ↓ for rows, ← → for checkbox/button focus, Tab to cycle through all elements
Controlled State
Use controlled state to manage selections programmatically.
Clear All, Core Features, Advanced Features
Best Practices
When to use
- Pick
<MultiSelect>when users pick more than one value from a known list (regions, scopes, tags). - For a single value from a short list, use Select.
- When typing to filter is more important than seeing every option at once, use Combobox.
- Skip
<MultiSelect>for boolean settings; Toggle handles those.
Behavior
- Show the selected count in the trigger (
3 regions selected); show the single name when only one is picked. - Use controlled mode when state lives in the URL or syncs to the server so the trigger label and stored value stay in lockstep.
- Keep checkbox focus and button focus distinct so Up/Down navigates rows and Left/Right toggles between the row’s checkbox and action button.
- For empty filters, render
No {items} match "{query}"rather thanNo results.
Accessibility
- Each row checkbox needs an
aria-labelthat names the item (Select us-east-1); a bareSelectis unanchored for screen readers. - The trigger button needs a stable accessible name even when zero items are selected; don’t rely on the placeholder alone.
- Trap focus inside the menu while it’s open and return focus to the trigger on close.
- Announce bulk actions (
Select All,Select Only) through the visible button label so the action matches what the screen reader speaks.
Was this helpful?