Dropdown

Action menu from a trigger — role="menu" items with Escape and click-outside dismiss.

Preview

Live

<div class="ui-dropdown">
  <button type="button" class="btn ui-dropdown__trigger"
    aria-haspopup="menu" aria-expanded="false">Actions</button>
  <!-- Menu typically portaled when open -->
  <div class="ui-dropdown__menu" role="menu">
    <button type="button" class="ui-dropdown__item" role="menuitem">Edit</button>
    <hr class="ui-dropdown__sep" role="separator" />
    <button type="button" class="ui-dropdown__item ui-dropdown__item--danger"
      role="menuitem">Delete</button>
  </div>
</div>

Variants

Default item

Standard menuitem row.

Danger

.ui-dropdown__item--danger for destructive actions.

Disabled

Native disabled menuitem.

Separator

.ui-dropdown__sep with role="separator".

Accessibility

  • Trigger uses aria-haspopup="menu", aria-expanded, and aria-controls when open.
  • Menu uses role="menu"; actions are role="menuitem" buttons.
  • Escape closes and returns focus to the trigger; click outside dismisses.
  • Arrow Up / Down, Home, and End move among enabled items (React DropdownMenu).
  • Do not put form fields inside a menu — use a dialog or popover pattern instead.

API

HTML classes

Class Description
.ui-dropdown Root; add .is-open while the menu is shown.
.ui-dropdown__trigger Menu trigger control.
.ui-dropdown__menu Elevated menu surface (often portaled).
.ui-dropdown__item Menu item button.
.ui-dropdown__item--danger Destructive item styling.
.ui-dropdown__sep Horizontal separator between groups.

React props

From src/core/Dropdown.tsx — compound Dropdown / DropdownTrigger / DropdownMenu / DropdownItem / DropdownSeparator.

Prop Type Default Description
open / defaultOpen boolean false Controlled or uncontrolled open state (Dropdown).
onOpenChange (open: boolean) => void Fires when open state changes.
asChild boolean false DropdownTrigger — merge props onto a single child element.
danger boolean false DropdownItem — applies danger styling.
closeOnSelect boolean true Close menu after item activate.
estimatedHeight / minWidth number 220 / 168 Placement hints for the floating menu.