shadcn.io is not affiliated with official shadcn/ui
Installation
bunx --bun shadcn@latest add https://kit.dev/r/radix/dropdown-menu.jsonnpx shadcn@latest add https://kit.dev/r/radix/dropdown-menu.jsonpnpm dlx shadcn@latest add https://kit.dev/r/radix/dropdown-menu.jsonyarn shadcn@latest add https://kit.dev/r/radix/dropdown-menu.jsonThis component depends on Button. Install it first if you haven't already.
Install the following dependencies:
bun add radix-ui lucide-reactnpm install radix-ui lucide-reactpnpm add radix-ui lucide-reactyarn add radix-ui lucide-reactCopy and paste the following code into your project.
"use client";
import { CheckIcon, ChevronRightIcon } from "lucide-react";
import { DropdownMenu as MenuPrimitive } from "radix-ui";
import type React from "react";
import { cn } from "@/lib/utils";
import { usePreviewPortal } from "@/registry/react/lib/preview-frame";
export const DropdownMenu = (
props: React.ComponentProps<typeof MenuPrimitive.Root>
) => <MenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
export const DropdownMenuPortal = (
props: React.ComponentProps<typeof MenuPrimitive.Portal>
) => <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />;
export const DropdownMenuTrigger = (
props: React.ComponentProps<typeof MenuPrimitive.Trigger>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
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuPortal
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuTrigger
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuContent
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
CSS variableType
--radix-dropdown-menu-content-available-heightstring--radix-dropdown-menu-content-transform-originstring--radix-dropdown-menu-trigger-widthstringDropdownMenuGroup
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuItem
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuCheckboxItem
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuRadioGroup
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuRadioItem
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuGroupLabel
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuSeparator
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuShortcut
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuSub
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuSubTrigger
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
DropdownMenuSubContent
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?booleanAttributeType
CSS variableType
--radix-dropdown-menu-content-available-heightstring--radix-dropdown-menu-content-transform-originstringDropdownMenuLabel
PropType
openboolean): voidchildren?React.ReactNodedefaultOpen?booleanmodal?boolean