---import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuRadioItem, DropdownMenuTrigger } from '@bejamas/registry/ui/dropdown-menu';---
<DropdownMenu defaultValue="pro"> <DropdownMenuTrigger variant="outline">Open</DropdownMenuTrigger> <DropdownMenuContent align="start"> <DropdownMenuLabel>Plans</DropdownMenuLabel> <DropdownMenuGroup> <DropdownMenuRadioItem value="starter">Starter</DropdownMenuRadioItem> <DropdownMenuRadioItem value="pro">Pro</DropdownMenuRadioItem> </DropdownMenuGroup> </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, DropdownMenuRadioItem,} from '@bejamas/ui/components/dropdown-menu';---
<DropdownMenu> <DropdownMenuTrigger variant="outline">Menu</DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuItem>Item 1</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>| Prop | Type | Default |
|---|---|---|
defaultOpen | boolean | |
defaultValue | string | null | |
defaultValues | string[] | |
closeOnClickOutside | boolean | |
closeOnEscape | boolean | |
closeOnSelect | boolean | |
lockScroll | boolean | |
highlightItemOnHover | boolean | |
class | string | "" |
Examples
Section titled “Examples”Action Menu
Section titled “Action Menu”---import { Button } from '@bejamas/registry/ui/button';import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from '@bejamas/registry/ui/dropdown-menu';---
<DropdownMenu> <Button variant="outline" data-slot="dropdown-menu-trigger" class="cn-dropdown-menu-trigger">Account</Button> <DropdownMenuContent> <DropdownMenuLabel>Actions</DropdownMenuLabel> <DropdownMenuGroup> <DropdownMenuItem>Edit</DropdownMenuItem> <DropdownMenuItem>Duplicate</DropdownMenuItem> </DropdownMenuGroup> <DropdownMenuSeparator /> <DropdownMenuItem>Delete</DropdownMenuItem> </DropdownMenuContent></DropdownMenu>Single Select
Section titled “Single Select”---import { Button } from '@bejamas/registry/ui/button';import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioItem } from '@bejamas/registry/ui/dropdown-menu';---
<DropdownMenu defaultValue="pro"> <Button variant="outline" data-slot="dropdown-menu-trigger" class="cn-dropdown-menu-trigger">Plan</Button> <DropdownMenuContent> <DropdownMenuRadioItem value="starter">Starter</DropdownMenuRadioItem> <DropdownMenuRadioItem value="pro">Pro</DropdownMenuRadioItem> <DropdownMenuRadioItem value="team">Team</DropdownMenuRadioItem> </DropdownMenuContent></DropdownMenu>Multi Select
Section titled “Multi Select”---import { Button } from '@bejamas/registry/ui/button';import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent } from '@bejamas/registry/ui/dropdown-menu';---
<DropdownMenu defaultValues={["email", "push"]} closeOnSelect={false}> <Button variant="outline" data-slot="dropdown-menu-trigger" class="cn-dropdown-menu-trigger">Notifications</Button> <DropdownMenuContent> <DropdownMenuCheckboxItem value="email">Email</DropdownMenuCheckboxItem> <DropdownMenuCheckboxItem value="sms">SMS</DropdownMenuCheckboxItem> <DropdownMenuCheckboxItem value="push">Push</DropdownMenuCheckboxItem> </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:open-change | { open, previousOpen, source, reason } | Fired on real open-state changes |
dropdown-menu:change | same detail | Deprecated alias for dropdown-menu:open-change |
dropdown-menu:highlight-change | { value, previousValue, item, previousItem, source } | Fired when highlight changes |
dropdown-menu:select | { value, item, itemType, source, checked? } | Cancelable user activation event fired before commit |
dropdown-menu:value-change | { value, previousValue, item, previousItem, source } | Fired when radio selection commits |
dropdown-menu:values-change | { values, previousValues, changedValue, checked, item, source } | Fired when checkbox selection commits |
<DropdownMenu id="my-dropdown" defaultValue="edit"> <DropdownMenuTrigger>Menu</DropdownMenuTrigger> <DropdownMenuContent> <DropdownMenuRadioItem value="edit">Edit</DropdownMenuRadioItem> <DropdownMenuRadioItem value="delete">Delete</DropdownMenuRadioItem> </DropdownMenuContent></DropdownMenu> const dropdown = document.getElementById('my-dropdown');
dropdown.addEventListener('dropdown-menu:open-change', (e) => { console.log('Is open:', e.detail.open); });
dropdown.addEventListener('dropdown-menu:value-change', (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 }}));
// Commit radio selectiondropdown.dispatchEvent(new CustomEvent('dropdown-menu:set', { detail: { value: 'delete', source: 'restore' }}));
// Commit checkbox selectiondropdown.dispatchEvent(new CustomEvent('dropdown-menu:set', { detail: { values: ['email', 'push'], source: 'restore' }}));Structural Wrappers
Section titled “Structural Wrappers”DropdownMenuPortal and DropdownMenuRadioGroup are available for low-level authored markup.
Most consumers should keep using DropdownMenuContent directly.
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-value | dropdown-menu | Current committed radio value |
data-variant | dropdown-menu-item | Visual variant (default or destructive) |
data-side | dropdown-menu-content | Computed position (top, right, bottom, or left) |
data-align | dropdown-menu-content | Alignment (start, center, or end) |
data-highlighted | menu items | Present when item is focused |
data-checked | radio and checkbox items | Present when item is committed as checked |
data-disabled | menu items | Present when item is disabled |