Heimerle + Meule Logo
Heimerle + Meule

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

Property

Type

Default

Description

openboolean-Controlled open state.
defaultOpenbooleanfalseInitial open state when uncontrolled.
onOpenChange(open: boolean) => void-Called when the open state changes.

Property

Type

Default

Description

asChildbooleanfalseMerges trigger behaviour into a custom element.
childrenReactNode-Content used to trigger the menu.

Property

Type

Default

Description

sideOffsetnumber4Distance 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.
classNamestring-Additional classes applied to menu content.

Property

Type

Default

Description

insetbooleanfalseAdds inset padding to align content.
disabledbooleanfalseDisables interaction with the item.
onSelect() => void-Called when the item is selected.

Property

Type

Default

Description

checkedboolean | 'indeterminate'-Current checkbox state.
onCheckedChange(checked: boolean) => void-Called when checked state changes.

Property

Type

Default

Description

valuestring-Selected radio value.
onValueChange(value: string) => void-Called when selection changes.

Property

Type

Default

Description

valuestring-Unique value represented by the item.

Property

Type

Default

Description

childrenReactNode-Groups related menu items together.

Property

Type

Default

Description

openboolean-Controlled submenu state.
onOpenChange(open: boolean) => void-Called when submenu state changes.

Property

Type

Default

Description

insetbooleanfalseAdds inset padding to the submenu trigger.
childrenReactNode-Content used to open a submenu.

Property

Type

Default

Description

classNamestring-Additional classes applied to submenu content.

Property

Type

Default

Description

insetbooleanfalseAdds inset padding to the label.

Property

Type

Default

Description

classNamestring-Additional classes applied to the separator.

Property

Type

Default

Description

childrenReactNode-Shortcut text displayed at the end of a menu item.

Property

Type

Default

Description

containerHTMLElementdocument.bodyCustom container used to render menu content.

Visual Reference

Variant

Preview

Basic
Checkbox
Radio Group
Submenu