Usage
A menu surfaces a set of actions or choices from a trigger until dismissed. Items can be plain, check, or radio; separators and labels organize related groups; navigable variants add search and nested panes for longer lists. The mental model is "reveal, scan, act"—compact power without navigating away from the current context.
Actions
Flag for QA
Transfer to supervisor
Delete note
NavigableMenu, MenuItemCheckbox, and optional search carry multi-select—menu-dismissal and focus return should match menu patterns, not standalone fields.For search + multiple selections, compare to Combobox with multiSelect. Use NavigableMenu with searchable and MenuItemCheckbox when the trigger is contextual (toolbar overflow, row/card “⋯”), the panel mixes actions, radios, switches, separators, or submenus, or there is no labeled field and no need for pills summarizing selection when closed. Use Combobox multiSelect for a filter or form row with a flat options list, keywords, and chips on the trigger.
Button or SplitButton.Drawer or Modal.options—use Combobox multiSelect instead of a transient menu.Use NavigableMenu with searchable, MenuItemCheckbox, or grouped check workflows when operators pick multiple values inside an action menu—toolbar overflow, row menus, contextual filters anchored to chrome. Keyboard and ARIA expectations stay menu-first (see Keyboard support and NavigableMenu).
Use Combobox with multiSelect when the UI is a labeled form field: flat options, a wrapping chips field with dismissible pills (and automatic +N more overflow), and option rows toggled without closing. That pattern submits with surrounding form state rather than behaving like a transient overlay menu.
Use sortable on Menu or NavigableMenu when operators need to persist a custom item order (for example reordering table columns in a filter menu). Give each MenuItem or MenuItemCheckbox a stable sortableId and update your backing list from onReorder. Drag from the handle or the row; keyboard users can grab with Space or Enter, move with Arrow Up/Down, drop with Space or Enter, and cancel with Escape. Checkbox rows drag from the handle only, so activating the row—by click or Space/Enter—still toggles its checked state.
40vh max height, root menu panels apply a --overflow modifier that reserves space for a vertical scrollbar (scrollbar-gutter: stable with a narrow themed track). Short menus that fit within the panel do not show an empty gutter. While scrolling, the panel does not widen or shift horizontally.Do
Don't
Items are reachable by keyboard with arrow navigation; items expose names and group context; the trigger reflects aria-expanded. See Accessibility for the full contract.
Sortable drag handles are pointer-only and do not take focus away from the menu item row. Cancelling a keyboard reorder restores the original order without emitting a second committed reorder.
Sortable status messages use a visually hidden polite live region so reorder updates are announced without adding visible menu content.
Pointer reordering clears click suppression when a gesture is cancelled or dropped outside the menu. Edge auto-scroll uses elapsed frame time, so its speed remains consistent on high-refresh displays.
While an item is grabbed from the keyboard, Tab commits the current order and continues normal focus movement out of the menu.
Interaction tests should drive sortable controls through user-level pointer and keyboard events so focus, cancellation, and browser defaults remain covered.
The sortable menu examples cover whole-row and handle-only dragging, plus idle, top, and bottom drop previews.
Use Shift+Space or Shift+Enter on a focused sortable row to begin keyboard reordering; unmodified Space and Enter keep their normal item activation behavior. Assign a unique sortableId whenever labels can repeat; sorting is disabled when identifiers collide. Checkbox items without a controlled checked value retain their alternating selection state.
multiSelect picking (not contextual action menus).multiSelect + options).