shadcn.io is not affiliated with official shadcn/ui
Installation
bunx --bun shadcn@latest add https://kit.dev/r/base/dropdown-menu.jsonnpx shadcn@latest add https://kit.dev/r/base/dropdown-menu.jsonpnpm dlx shadcn@latest add https://kit.dev/r/base/dropdown-menu.jsonyarn shadcn@latest add https://kit.dev/r/base/dropdown-menu.jsonThis component depends on Button. Install it first if you haven't already.
Install the following dependencies:
bun add @base-ui/react lucide-reactnpm install @base-ui/react lucide-reactpnpm add @base-ui/react lucide-reactyarn add @base-ui/react lucide-reactCopy and paste the following code into your project.
"use client";
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
import { CheckIcon, ChevronRightIcon } from "lucide-react";
import type React from "react";
import { cn } from "@/lib/utils";
import { usePreviewPortal } from "@/registry/react/lib/preview-frame";
export const DropdownMenu = (props: MenuPrimitive.Root.Props) => (
<MenuPrimitive.Root data-slot="dropdown-menu" {...props} />
);
export const DropdownMenuPortal = (props: MenuPrimitive.Portal.Props) => (
<MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
);
export const DropdownMenuTrigger = (props: MenuPrimitive.Trigger.Props) => (
<MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />Update the import paths to match your project setup.
Anatomy
DropdownMenu
└── DropdownMenuTrigger
└── DropdownMenuContent
└── DropdownMenuGroup
└── DropdownMenuLabel
└── DropdownMenuItem
└── DropdownMenuSeparator
└── DropdownMenuShortcut
└── DropdownMenuSub
└── DropdownMenuSubTrigger
└── DropdownMenuSubContentUsage
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";<DropdownMenu positioning={{ placement: "bottom-start" }}>
<DropdownMenuTrigger asChild>
<Button variant="outline">Open</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-40">
<DropdownMenuGroup>
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuItem value="profile">
Profile
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem value="billing">
Billing
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem value="settings">
Settings
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem value="team">Team</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>Invite users</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem value="email">Email</DropdownMenuItem>
<DropdownMenuItem value="message">Message</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem value="more">More...</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuItem value="new-team">
New Team
<DropdownMenuShortcut>⌘+T</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem value="github">GitHub</DropdownMenuItem>
<DropdownMenuItem value="support">Support</DropdownMenuItem>
<DropdownMenuItem disabled value="api">
API
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem value="logout">
Log out
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
Accessibility
| Key | Description |
|---|---|
Enter | Activate the focused control. |
Space | Activate the focused control. |
ArrowDown | Move down. |
ArrowUp | Move up. |
ArrowLeft | Move left. |
ArrowRight | Move right. |
Home | Go to the start. |
End | Go to the end. |
Demos
Basic
A basic dropdown menu with labels and separators.
Submenu
Use DropdownMenuSub to nest secondary actions.
Shortcuts
Add DropdownMenuShortcut to show keyboard hints.
Icons
Combine icons with labels for quick scanning.
Checkboxes
Use DropdownMenuCheckboxItem for toggles.
Checkboxes Icons
Add icons to checkbox items.
Radio Group
Use DropdownMenuRadioGroup for exclusive choices.
Radio Icons
Show radio options with icons.
Destructive
Use variant="destructive" for irreversible actions.
Avatar
An account switcher dropdown triggered by an avatar.
Complex
A richer example combining groups, icons, and submenus.
Rtl
Right-to-left menu. See the RTL configuration guide for document direction.
API Reference
DropdownMenu
PropType
AttributeType
DropdownMenuItem
div
PropType
id?stringAttributeType
DropdownMenuPositioner
div
PropType
AttributeType
CSS variableType
--anchor-widthstring--available-heightstring--transform-originstringDropdownMenuSeparator
hr
PropType
AttributeType
DropdownMenuTrigger
button
PropType
children?React.ReactNodeAttributeType
DropdownMenuPortal
div
PropType
AttributeType
DropdownMenuContent
div
PropType
children?React.ReactNodeid?stringAttributeType
CSS variableType
--anchor-widthstring--available-heightstring--transform-originstringDropdownMenuGroup
div
PropType
AttributeType
DropdownMenuGroupLabel
div
PropType
AttributeType
DropdownMenuSub
PropType
AttributeType
DropdownMenuSubTrigger
div
PropType
id?stringAttributeType
DropdownMenuSubContent
PropType
children?React.ReactNodeid?stringAttributeType
DropdownMenuCheckboxItem
div
PropType
id?stringAttributeType
DropdownMenuRadioGroup
div
PropType
AttributeType
DropdownMenuRadioItem
div
PropType
id?stringAttributeType
DropdownMenuShortcut
PropType
AttributeType
DropdownMenuLabel
PropType
AttributeType