DropdownMenu

Organism

Accessible dropdown using role="menu" + role="menuitem". Closes on Escape and outside click. Supports left/right alignment, icons, separators, danger and disabled items, and arrow-key navigation.

Default (left aligned)

Preview
Code
<%- include('modules/ui/DropdownMenu', {
  id: 'actions-menu',
  trigger: '<button>Actions</button>',
  items: [
    { label: 'View', icon: '<i class="fa-solid fa-eye"></i>' },
    { label: 'Edit', icon: '<i class="fa-solid fa-pen"></i>' },
    { label: 'Duplicate', icon: '<i class="fa-solid fa-copy"></i>' }
  ]
}) %>

With separator & danger

Preview
Code
<%- include('modules/ui/DropdownMenu', {
  id: 'row-menu',
  align: 'right',
  trigger: '<button aria-label="More options"><i class="fa-solid fa-ellipsis-vertical"></i></button>',
  items: [
    { label: 'Open', icon: '...' },
    { label: 'Rename', icon: '...' },
    { label: 'Archive', icon: '...', disabled: true },
    { type: 'separator' },
    { label: 'Delete', icon: '...', danger: true }
  ]
}) %>

With header

Preview
Code
<%- include('modules/ui/DropdownMenu', {
  id: 'account-menu',
  trigger: '<button>Account</button>',
  header: '<div class="px-3 py-2">...</div>',
  items: [
    { label: 'Profile', icon: '...' },
    { label: 'Settings', icon: '...' },
    { type: 'separator' },
    { label: 'Sign out', icon: '...', danger: true }
  ]
}) %>
Source modules/ui/DropdownMenu.ejs