Skip to content
Navigation

Menu

A dropdown context menu. Handles keyboard navigation, focus management, ARIA, and nested submenus.

LlmMenu + LlmMenuItem + LlmMenuTrigger
WCAG AA0 deps

Demo

Live PreviewReact
html
<llm-button [llmMenuTriggerFor]="actions">Actions ▾</llm-button>
<ng-template #actions>
  <llm-menu>
    <llm-menu-item (triggered)="copy()">Copy</llm-menu-item>
    <llm-menu-item (triggered)="paste()">Paste</llm-menu-item>
    <llm-menu-separator />
    <llm-menu-item [disabled]="true">Delete</llm-menu-item>
  </llm-menu>
</ng-template>

API (Angular)

PropTypeDefaultDescription
variant'default' | 'compact''default'Density of the menu

Composition parts

Menu is composed from the parts below. Each part is its own component — drop the ones you don't need.

LlmMenuItem

A selectable menu entry. Children render as the label.

PropTypeDefaultDescription
disabledbooleanfalsePrevents activation and skips the item in keyboard navigation.

LlmMenuSeparator

A visual divider between groups of menu items. Rendered with role="separator" — screen readers announce it as a group boundary. Takes no props.

Import

ts
import { LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger } from '@atelier-ui/angular';

Accessibility

ARIA rolemenu / menuitem

KeyAction
Enter / Space / Arrow DownOpen the menu from the trigger and focus the first item.
Arrow Up / DownMove between items, wrapping at the ends.
Home / EndJump to the first / last item.
Enter / SpaceActivate the focused item and close the menu.
EscapeClose and return focus to the trigger.
Arrow RightOpen a submenu (if present).
Arrow LeftClose the current submenu and return to parent.
  • The trigger carries aria-haspopup="menu" and aria-expanded.
  • Separators render as role="separator" and are skipped by keyboard navigation.