Dropdown Menu
Contextual menus for actions, settings, navigation, and selection. Supports menu items, checkboxes, radio groups, shortcuts, labels, separators, and nested submenus.
Quick Start
Use DropdownMenu to display contextual actions from a trigger element.
1import { 2 DropdownMenu, 3 DropdownMenuTrigger, 4 DropdownMenuContent, 5 DropdownMenuItem, 6} from "@ecos/ui"; 7 8<DropdownMenu> 9 <DropdownMenuTrigger asChild> 10 <Button>Actions</Button> 11 </DropdownMenuTrigger> 12 13 <DropdownMenuContent> 14 <DropdownMenuItem>Edit</DropdownMenuItem> 15 <DropdownMenuItem>Delete</DropdownMenuItem> 16 </DropdownMenuContent> 17</DropdownMenu>
Basic Menu
Create a simple list of actions.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Open Menu</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuItem>View</DropdownMenuItem> 8 <DropdownMenuItem>Edit</DropdownMenuItem> 9 <DropdownMenuItem>Archive</DropdownMenuItem> 10 </DropdownMenuContent> 11</DropdownMenu>
Labels and Separators
Use labels and separators to organize related commands.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Account</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuLabel>My Account</DropdownMenuLabel> 8 9 <DropdownMenuSeparator /> 10 11 <DropdownMenuItem>Profile</DropdownMenuItem> 12 <DropdownMenuItem>Billing</DropdownMenuItem> 13 <DropdownMenuItem>Settings</DropdownMenuItem> 14 </DropdownMenuContent> 15</DropdownMenu>
Grouped Items
Use DropdownMenuGroup to logically group menu actions.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Actions</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuGroup> 8 <DropdownMenuItem>Copy</DropdownMenuItem> 9 <DropdownMenuItem>Duplicate</DropdownMenuItem> 10 </DropdownMenuGroup> 11 12 <DropdownMenuSeparator /> 13 14 <DropdownMenuGroup> 15 <DropdownMenuItem>Archive</DropdownMenuItem> 16 <DropdownMenuItem>Delete</DropdownMenuItem> 17 </DropdownMenuGroup> 18 </DropdownMenuContent> 19</DropdownMenu>
Checkbox Items
Use checkbox items for independent toggleable settings.
1const [notifications, setNotifications] = React.useState(true); 2const [analytics, setAnalytics] = React.useState(false); 3 4<DropdownMenu> 5 <DropdownMenuTrigger asChild> 6 <Button>Preferences</Button> 7 </DropdownMenuTrigger> 8 9 <DropdownMenuContent> 10 <DropdownMenuCheckboxItem checked>Notifications</DropdownMenuCheckboxItem> 11 <DropdownMenuCheckboxItem>Analytics</DropdownMenuCheckboxItem> 12 </DropdownMenuContent> 13</DropdownMenu>
Radio Groups
Use radio groups when only a single option can be selected.
1const [theme, setTheme] = React.useState("system"); 2 3<DropdownMenu> 4 <DropdownMenuTrigger asChild> 5 <Button>Theme</Button> 6 </DropdownMenuTrigger> 7 8 <DropdownMenuContent> 9 <DropdownMenuRadioGroup value="light"> 10 <DropdownMenuRadioItem value="light">Light</DropdownMenuRadioItem> 11 <DropdownMenuRadioItem value="dark">Dark</DropdownMenuRadioItem> 12 <DropdownMenuRadioItem value="system">System</DropdownMenuRadioItem> 13 </DropdownMenuRadioGroup> 14 </DropdownMenuContent> 15</DropdownMenu>
Nested Menus
Create hierarchical menus using submenus.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Share</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuItem>Copy Link</DropdownMenuItem> 8 9 <DropdownMenuSub> 10 <DropdownMenuSubTrigger>Send To</DropdownMenuSubTrigger> 11 12 <DropdownMenuSubContent> 13 <DropdownMenuItem>Email</DropdownMenuItem> 14 <DropdownMenuItem>Teams</DropdownMenuItem> 15 <DropdownMenuItem>Slack</DropdownMenuItem> 16 </DropdownMenuSubContent> 17 </DropdownMenuSub> 18 </DropdownMenuContent> 19</DropdownMenu>
Inset Styling
Use the inset prop to align content with checkbox and radio items.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Tools</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuLabel inset>Tools</DropdownMenuLabel> 8 9 <DropdownMenuSeparator /> 10 11 <DropdownMenuItem inset>Calculator</DropdownMenuItem> 12 <DropdownMenuItem inset>Currency Converter</DropdownMenuItem> 13 </DropdownMenuContent> 14</DropdownMenu>
Disabled Items
Disable actions that are unavailable.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Actions</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuItem>Edit</DropdownMenuItem> 8 <DropdownMenuItem disabled>Delete</DropdownMenuItem> 9 </DropdownMenuContent> 10</DropdownMenu>
Positioning
Control how menu content is positioned relative to the trigger.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Actions</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent 7 side="right" 8 align="start" 9 sideOffset={8} 10 > 11 <DropdownMenuItem>Item</DropdownMenuItem> 12 </DropdownMenuContent> 13</DropdownMenu>
Advanced Usage
Combine labels, groups, shortcuts, separators, checkbox items, radio groups, and nested menus to create rich contextual experiences.
1<DropdownMenu> 2 <DropdownMenuTrigger asChild> 3 <Button>Settings</Button> 4 </DropdownMenuTrigger> 5 6 <DropdownMenuContent> 7 <DropdownMenuLabel>Preferences</DropdownMenuLabel> 8 9 <DropdownMenuSeparator /> 10 11 <DropdownMenuGroup> 12 <DropdownMenuCheckboxItem checked>Notifications</DropdownMenuCheckboxItem> 13 <DropdownMenuCheckboxItem>Analytics</DropdownMenuCheckboxItem> 14 </DropdownMenuGroup> 15 16 <DropdownMenuSeparator /> 17 18 <DropdownMenuSub> 19 <DropdownMenuSubTrigger>Theme</DropdownMenuSubTrigger> 20 21 <DropdownMenuSubContent> 22 <DropdownMenuRadioGroup value="light"> 23 <DropdownMenuRadioItem value="light">Light</DropdownMenuRadioItem> 24 <DropdownMenuRadioItem value="dark">Dark</DropdownMenuRadioItem> 25 </DropdownMenuRadioGroup> 26 </DropdownMenuSubContent> 27 </DropdownMenuSub> 28 </DropdownMenuContent> 29</DropdownMenu>
API Reference
DropdownMenu
Property | Type | Default | Description |
|---|---|---|---|
| open | boolean | - | Controlled open state. |
| defaultOpen | boolean | false | Initial open state when uncontrolled. |
| onOpenChange | (open: boolean) => void | - | Called when the open state changes. |
DropdownMenuTrigger
Property | Type | Default | Description |
|---|---|---|---|
| asChild | boolean | false | Merges trigger behaviour into a custom element. |
| children | ReactNode | - | Content used to trigger the menu. |
DropdownMenuContent
Property | Type | Default | Description |
|---|---|---|---|
| sideOffset | number | 4 | Distance between trigger and menu. |
| side | "top" | "right" | "bottom" | "left" | "bottom" | Preferred placement of the menu. |
| align | "start" | "center" | "end" | "center" | Alignment relative to the trigger. |
| className | string | - | Additional classes applied to menu content. |
DropdownMenuItem
Property | Type | Default | Description |
|---|---|---|---|
| inset | boolean | false | Adds inset padding to align content. |
| disabled | boolean | false | Disables interaction with the item. |
| onSelect | () => void | - | Called when the item is selected. |
DropdownMenuCheckboxItem
Property | Type | Default | Description |
|---|---|---|---|
| checked | boolean | 'indeterminate' | - | Current checkbox state. |
| onCheckedChange | (checked: boolean) => void | - | Called when checked state changes. |
DropdownMenuRadioGroup
Property | Type | Default | Description |
|---|---|---|---|
| value | string | - | Selected radio value. |
| onValueChange | (value: string) => void | - | Called when selection changes. |
DropdownMenuRadioItem
Property | Type | Default | Description |
|---|---|---|---|
| value | string | - | Unique value represented by the item. |
DropdownMenuGroup
Property | Type | Default | Description |
|---|---|---|---|
| children | ReactNode | - | Groups related menu items together. |
DropdownMenuSub
Property | Type | Default | Description |
|---|---|---|---|
| open | boolean | - | Controlled submenu state. |
| onOpenChange | (open: boolean) => void | - | Called when submenu state changes. |
DropdownMenuSubTrigger
Property | Type | Default | Description |
|---|---|---|---|
| inset | boolean | false | Adds inset padding to the submenu trigger. |
| children | ReactNode | - | Content used to open a submenu. |
DropdownMenuSubContent
Property | Type | Default | Description |
|---|---|---|---|
| className | string | - | Additional classes applied to submenu content. |
DropdownMenuLabel
Property | Type | Default | Description |
|---|---|---|---|
| inset | boolean | false | Adds inset padding to the label. |
DropdownMenuSeparator
Property | Type | Default | Description |
|---|---|---|---|
| className | string | - | Additional classes applied to the separator. |
DropdownMenuShortcut
Property | Type | Default | Description |
|---|---|---|---|
| children | ReactNode | - | Shortcut text displayed at the end of a menu item. |
DropdownMenuPortal
Property | Type | Default | Description |
|---|---|---|---|
| container | HTMLElement | document.body | Custom container used to render menu content. |
Visual Reference
Variant | Preview |
|---|---|
| Basic | |
| Checkbox | |
| Radio Group | |
| Submenu |