Components

Dropdown menu

A flat, bordered list of actions anchored to a trigger. Full-width .ds-menu__item buttons shift to the alt surface on hover; a danger modifier, 1px dividers, and uppercase headers organise longer menus.

Anatomy

A .ds-menu surface holds .ds-menu__item rows. Use .ds-menu__header for an uppercase group label, .ds-menu__divider for a 1px rule, and .ds-menu__item--danger for a destructive action.

Menu surface
<div class="ds-menu" role="menu">
  <div class="ds-menu__header">Reference</div>
  <button class="ds-menu__item" role="menuitem">Edit grid</button>
  <button class="ds-menu__item" role="menuitem">Duplicate</button>
  <a class="ds-menu__item" role="menuitem" href="#">Export CSV</a>
  <div class="ds-menu__divider" role="separator"></div>
  <button class="ds-menu__item ds-menu__item--danger" role="menuitem">Delete</button>
</div>

Interactive

A trigger toggles the menu; it closes on outside-click or Escape. The small inline script below wires this demo (no dependencies).

Toggle on click
<div class="ds-dropdown" data-dropdown>
  <button class="ds-button" data-dropdown-trigger aria-haspopup="menu" aria-expanded="false">Actions</button>
  <div class="ds-menu" role="menu" data-dropdown-menu hidden>
    <button class="ds-menu__item" role="menuitem">Edit grid</button>
    <button class="ds-menu__item" role="menuitem">Duplicate</button>
    <div class="ds-menu__divider" role="separator"></div>
    <button class="ds-menu__item ds-menu__item--danger" role="menuitem">Delete</button>
  </div>
</div>

React

The Dropdown manages open state, closes on outside-click / Escape, and moves focus between items with the arrow keys. Pass a trigger and render MenuItem children.

<Dropdown>
import { Dropdown, MenuItem, MenuDivider, Button } from "@diametral/design-system/react";

<Dropdown align="start" trigger={<Button>Actions</Button>}>
  <MenuItem onClick={editGrid}>Edit grid</MenuItem>
  <MenuItem onClick={duplicate}>Duplicate</MenuItem>
  <MenuDivider />
  <MenuItem danger onClick={remove}>Delete</MenuItem>
</Dropdown>