Dropdown Menu
Displays a menu of actions or options triggered by a button.
Preview
import { useState } from "react";
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuCheckboxItem,
DropdownMenuRadioItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuGroup,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuRadioGroup,
} from "@/components/ui/DropdownMenu";
import { Button } from "@/components/ui/Button";
export function DropdownMenuDemo() {
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="menu">Open Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-20">
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
Profile
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Billing
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Settings
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Keyboard shortcuts
<DropdownMenuShortcut>⌘K</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>Team</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>Invite users</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem>Email</DropdownMenuItem>
<DropdownMenuItem>Message</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>More...</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>
<DropdownMenuItem>New Team</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
Log out
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}Installation
Make sure that namespace is set in your component.json file. Namespace docs: Learn more about namespaces
pnpm dlx shadcn@latest add @aura/dropdown-menuUsage
WithCheckboxes
export const WithCheckboxes = () => {
const [showStatusBar, setShowStatusBar] = useState(true);
const [showActivityBar, setShowActivityBar] = useState(false);
const [showPanel, setShowPanel] = useState(false);
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="menu">Open Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-20">
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem
checked={showStatusBar}
onCheckedChange={setShowStatusBar}
>
Status Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showActivityBar}
onCheckedChange={setShowActivityBar}
>
Activity Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showPanel}
onCheckedChange={setShowPanel}
>
Panel
</DropdownMenuCheckboxItem>
</DropdownMenuContent>
</DropdownMenu>
);
};WithRadioGroup
export const WithRadioGroup = () => {
const [position, setPosition] = useState("bottom");
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="menu">Open Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-20">
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuContent>
</DropdownMenu>
);
};Complex
export const Complex = () => {
const [showStatusBar, setShowStatusBar] = useState(true);
const [showPanel, setShowPanel] = useState(false);
const [position, setPosition] = useState("bottom");
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="menu">Open Menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-20">
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
Profile
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Billing
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Settings
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem
checked={showStatusBar}
onCheckedChange={setShowStatusBar}
>
Status Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showPanel}
onCheckedChange={setShowPanel}
>
Panel
</DropdownMenuCheckboxItem>
<DropdownMenuSeparator />
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
Log out
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
};Props
DropdownMenu
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Root | - |
DropdownMenuPortal
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Portal | - |
DropdownMenuTrigger
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Trigger | - |
DropdownMenuContent
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Content | - |
DropdownMenuGroup
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Group | - |
DropdownMenuLabel
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Label | - |
DropdownMenuItem
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Item | - |
DropdownMenuCheckboxItem
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.CheckboxItem | - |
DropdownMenuRadioGroup
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.RadioGroup | - |
DropdownMenuRadioItem
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.RadioItem | - |
DropdownMenuSeparator
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Separator | - |
DropdownMenuShortcut
| Prop | Type | Default |
|---|---|---|
| All props from | "span" | - |
DropdownMenuSub
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.Sub | - |
DropdownMenuSubTrigger
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.SubTrigger | - |
DropdownMenuSubContent
| Prop | Type | Default |
|---|---|---|
| All props from | DropdownMenuRadix.SubContent | - |
Drawer
A drawer component that slides in from the edge of the screen.
Form
A comprehensive form system with schema-based validation, error handling, and field management. Built with Radix UI primitives and AJV validation, supporting text inputs, textareas, selects, checkboxes, switches, and checkbox groups with automatic error propagation and touch state management.