---import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger } from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <DropdownMenuTrigger variant="outline">Open</DropdownMenuTrigger> <DropdownMenuContent align="start"> <DropdownMenuLabel>My Account</DropdownMenuLabel> <DropdownMenuGroup> <DropdownMenuItem> Profile <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut> </DropdownMenuItem> <DropdownMenuItem>Settings</DropdownMenuItem> </DropdownMenuGroup> <DropdownMenuSeparator /> <DropdownMenuItem disabled>API</DropdownMenuItem> <DropdownMenuItem>Log out</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>Installation
Section titled “Installation”bunx bejamas add dropdown-menunpx bejamas add dropdown-menupnpm dlx bejamas add dropdown-menuyarn dlx bejamas add dropdown-menu---import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <DropdownMenuTrigger variant="outline">Menu</DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuItem>Item 1</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>| Prop | Type | Default |
|---|---|---|
class | string | "" |
Examples
Section titled “Examples”With Labels and Groups
Section titled “With Labels and Groups”---import { Button } from '@bejamas/ui/components/button';import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <Button variant="outline" data-slot="dropdown-menu-trigger">Account</Button> <DropdownMenuContent> <DropdownMenuLabel>Actions</DropdownMenuLabel> <DropdownMenuGroup> <DropdownMenuItem>Edit</DropdownMenuItem> <DropdownMenuItem>Duplicate</DropdownMenuItem> </DropdownMenuGroup> <DropdownMenuSeparator /> <DropdownMenuItem>Delete</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>With Keyboard Shortcuts
Section titled “With Keyboard Shortcuts”---import { Button } from '@bejamas/ui/components/button';import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuShortcut } from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <Button variant="outline" data-slot="dropdown-menu-trigger">Edit</Button> <DropdownMenuContent> <DropdownMenuItem> Undo <DropdownMenuShortcut>⌘Z</DropdownMenuShortcut> </DropdownMenuItem> <DropdownMenuItem> Redo <DropdownMenuShortcut>⇧⌘Z</DropdownMenuShortcut> </DropdownMenuItem> <DropdownMenuSeparator /> <DropdownMenuItem> Cut <DropdownMenuShortcut>⌘X</DropdownMenuShortcut> </DropdownMenuItem> <DropdownMenuItem> Copy <DropdownMenuShortcut>⌘C</DropdownMenuShortcut> </DropdownMenuItem> <DropdownMenuItem> Paste <DropdownMenuShortcut>⌘V</DropdownMenuShortcut> </DropdownMenuItem> </DropdownMenuContent></DropdownMenu>With Disabled Items
Section titled “With Disabled Items”---import { Button } from '@bejamas/ui/components/button';import { DropdownMenu, DropdownMenuContent, DropdownMenuItem } from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <Button variant="outline" data-slot="dropdown-menu-trigger">Options</Button> <DropdownMenuContent> <DropdownMenuItem>Available action</DropdownMenuItem> <DropdownMenuItem disabled>Disabled action</DropdownMenuItem> <DropdownMenuItem>Another action</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>API Reference
Section titled “API Reference”Events
Section titled “Events”The dropdown menu emits custom events that you can listen to:
| Event | Detail | Description |
|---|---|---|
dropdown-menu:change | { open: boolean } | Fired when the menu opens or closes |
dropdown-menu:select | { value: string } | Fired when an item is selected |
<DropdownMenu id="my-dropdown"> <DropdownMenuTrigger>Menu</DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuItem value="edit">Edit</DropdownMenuItem> <DropdownMenuItem value="delete">Delete</DropdownMenuItem> </DropdownMenuContent></DropdownMenu> const dropdown = document.getElementById('my-dropdown');
dropdown.addEventListener('dropdown-menu:change', (e) => { console.log('Is open:', e.detail.open); });
dropdown.addEventListener('dropdown-menu:select', (e) => { console.log('Selected:', e.detail.value); });Programmatic Control
Section titled “Programmatic Control”You can control the dropdown menu programmatically by dispatching a dropdown-menu:set event:
const dropdown = document.getElementById('my-dropdown');
// Open the dropdown menudropdown.dispatchEvent(new CustomEvent('dropdown-menu:set', { detail: { open: true }}));
// Close the dropdown menudropdown.dispatchEvent(new CustomEvent('dropdown-menu:set', { detail: { open: false }}));Data Attributes
Section titled “Data Attributes”The dropdown menu sets these data attributes that you can use for styling or querying state:
| Attribute | Element | Description |
|---|---|---|
data-state | dropdown-menu, dropdown-menu-content | Current state (open or closed) |
data-side | dropdown-menu-content | Computed position (top, right, bottom, or left) |
data-align | dropdown-menu-content | Alignment (start, center, or end) |
data-highlighted | dropdown-menu-item | Present when item is focused |
data-disabled | dropdown-menu-item | Present when item is disabled |