mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-23 12:45:47 +00:00
143 lines
3.4 KiB
Plaintext
143 lines
3.4 KiB
Plaintext
---
|
|
title: Dropdown Menu
|
|
description: Displays a menu to the user — such as a set of actions or functions — triggered by a button.
|
|
featured: true
|
|
component: true
|
|
links:
|
|
doc: https://www.radix-ui.com/docs/primitives/components/dropdown-menu
|
|
api: https://www.radix-ui.com/docs/primitives/components/dropdown-menu#api-reference
|
|
---
|
|
|
|
<ComponentPreview
|
|
name="dropdown-menu-demo"
|
|
description="A dropdown menu with icons, shortcuts and sub menu items."
|
|
/>
|
|
|
|
## Installation
|
|
|
|
<Tabs defaultValue="cli">
|
|
|
|
<TabsList>
|
|
<TabsTrigger value="cli">CLI</TabsTrigger>
|
|
<TabsTrigger value="manual">Manual</TabsTrigger>
|
|
</TabsList>
|
|
<TabsContent value="cli">
|
|
|
|
```bash
|
|
npx shadcn@latest add dropdown-menu
|
|
```
|
|
|
|
</TabsContent>
|
|
|
|
<TabsContent value="manual">
|
|
|
|
<Steps>
|
|
|
|
<Step>Install the following dependencies:</Step>
|
|
|
|
```bash
|
|
npm install @radix-ui/react-dropdown-menu
|
|
```
|
|
|
|
<Step>Copy and paste the following code into your project.</Step>
|
|
|
|
<ComponentSource name="dropdown-menu" />
|
|
|
|
<Step>Update the import paths to match your project setup.</Step>
|
|
|
|
</Steps>
|
|
|
|
</TabsContent>
|
|
|
|
</Tabs>
|
|
|
|
## Usage
|
|
|
|
```tsx
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuLabel,
|
|
DropdownMenuSeparator,
|
|
DropdownMenuTrigger,
|
|
} from "@/components/ui/dropdown-menu"
|
|
```
|
|
|
|
```tsx
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger>Open</DropdownMenuTrigger>
|
|
<DropdownMenuContent>
|
|
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItem>Profile</DropdownMenuItem>
|
|
<DropdownMenuItem>Billing</DropdownMenuItem>
|
|
<DropdownMenuItem>Team</DropdownMenuItem>
|
|
<DropdownMenuItem>Subscription</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Checkboxes
|
|
|
|
<ComponentPreview
|
|
name="dropdown-menu-checkboxes"
|
|
description="A dropdown menu with checkboxes."
|
|
/>
|
|
|
|
### Radio Group
|
|
|
|
<ComponentPreview
|
|
name="dropdown-menu-radio-group"
|
|
description="A dropdown menu with radio items."
|
|
/>
|
|
|
|
## Changelog
|
|
|
|
### 2024-10-16 Classes for icons
|
|
|
|
Added `gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0` to the `DropdownMenuItem` to automatically style icon inside the dropdown menu item.
|
|
|
|
Add the following classes to the `DropdownMenuItem` in your `dropdown-menu.tsx` file.
|
|
|
|
```diff showLineNumbers title="dropdown-menu.tsx"
|
|
const DropdownMenuItem = React.forwardRef<
|
|
React.ElementRef<typeof DropdownMenuPrimitive.Item>,
|
|
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
|
|
inset?: boolean
|
|
}
|
|
>(({ className, inset, ...props }, ref) => (
|
|
<DropdownMenuPrimitive.Item
|
|
ref={ref}
|
|
className={cn(
|
|
"relative ... gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
inset && "pl-8",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
))
|
|
```
|
|
|
|
### 2024-10-25 Classes for `<DropdownMenuSubTrigger />`
|
|
|
|
Added `gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0` to the `<DropdownMenuSubTrigger />` to automatically style icon inside.
|
|
|
|
Add the following classes to the `cva` call in your `dropdown-menu.tsx` file.
|
|
|
|
```tsx title="dropdown-menu.tsx"
|
|
<DropdownMenuPrimitive.SubTrigger
|
|
ref={ref}
|
|
className={cn(
|
|
"flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
inset && "pl-8",
|
|
className
|
|
)}
|
|
{...props}
|
|
>
|
|
{/* ... */}
|
|
</DropdownMenuPrimitive.SubTrigger>
|
|
```
|