Installation
Complete project setup first. Your configuration
must select react/radix and include your Design System ID.
pnpm exec frontfriend download dropdown-menu -f react --primitive radixReview dependencies reported by the downloader and keep your source changes in version control.
Usage
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
} from "@/components/ui/dropdown-menu";
import { Button } from "@/components/ui/button";
import * as React from "react";
export default function DropdownMenuExample() {
const [open, setOpen] = React.useState(false);
return (
<DropdownMenu open={open} onOpenChange={setOpen}>
<DropdownMenuTrigger asChild>
<Button variant="secondary">Open menu</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuItem>Settings</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
} Examples
Default
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubTrigger,
DropdownMenuPortal,
DropdownMenuSubContent,
} from "@/components/ui/dropdown-menu";
import { Button } from "@/components/ui/button";
import { Icon } from "@/components/ui/icon";
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="tertiary" size="lg">
{" "}
Open
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent >
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
<Icon name="User" size="4" className="mr-2" />
<span>Profile</span>
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<Icon name="CreditCard" size="4" className="mr-2" />
<span>Billing</span>
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<Icon name="Settings" size="4" className="mr-2" />
<span>Settings</span>
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
<Icon name="Keyboard" size="4" className="mr-2" />
<span>Keyboard shortcuts</span>
<DropdownMenuShortcut>⌘K</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
<Icon name="Users" size="4" className="mr-2" />
<span>Team</span>
</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<Icon name="UserPlus" size="4" className="mr-2" />
<span className="pl-2">Invite users</span>
</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>
<Icon name="Mail" size="4" className="mr-2" />
<span>Email</span>
</DropdownMenuItem>
<DropdownMenuItem>
<Icon name="MessageSquare" size="4" className="mr-2" />
<span>Message</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="CirclePlus" size="4" className="mr-2" />
<span>More...</span>
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuItem>
<Icon name="Plus" size="4" className="mr-2" />
<span>New Team</span>
<DropdownMenuShortcut>⌘+T</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem>
<Icon name="Github" size="4" className="mr-2" />
<span>GitHub</span>
</DropdownMenuItem>
<DropdownMenuItem>
<Icon name="LifeBuoy" size="4" className="mr-2" />
<span>Support</span>
</DropdownMenuItem>
<DropdownMenuItem disabled>
<Icon name="Cloud" size="4" className="mr-2" />
<span>API</span>
</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive">
<Icon name="LogOut" size="4" className="mr-2" />
<span>Log out</span>
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>; Checkboxes
import { DropdownMenuCheckboxItemProps } from "@radix-ui/react-dropdown-menu";
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuCheckboxItem,
} from "@/components/ui/dropdown-menu";
import { Button } from "@/components/ui/button";
import * as React from "react";
type Checked = DropdownMenuCheckboxItemProps["checked"];
function DropdownMenuCheckboxes({
side,
align,
}: {
side?: "top" | "right" | "bottom" | "left";
align?: "center" | "end" | "start";
}) {
const [showStatusBar, setShowStatusBar] = React.useState<Checked>(true);
const [showActivityBar, setShowActivityBar] = React.useState<Checked>(false);
const [showPanel, setShowPanel] = React.useState<Checked>(false);
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="tertiary">Open</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side={side} align={align}>
<DropdownMenuGroup>
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem
checked={showStatusBar}
onCheckedChange={setShowStatusBar}
>
Status Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showActivityBar}
onCheckedChange={setShowActivityBar}
disabled
>
Activity Bar
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showPanel}
onCheckedChange={setShowPanel}
>
Panel
</DropdownMenuCheckboxItem>
</DropdownMenuContent>
</DropdownMenu>
);
}
<DropdownMenuCheckboxes />; Radio
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
} from "@/components/ui/dropdown-menu";
import { Button } from "@/components/ui/button";
import * as React from "react";
function DropdownMenuRadioGroupDemo({
side,
align,
}: {
side?: "top" | "right" | "bottom" | "left";
align?: "center" | "end" | "start";
}) {
const [position, setPosition] = React.useState("bottom");
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="tertiary">Open</Button>
</DropdownMenuTrigger>
<DropdownMenuContent side={side} align={align}>
<DropdownMenuGroup>
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuContent>
</DropdownMenu>
);
}
<DropdownMenuRadioGroupDemo />; API reference
Frontfriend-owned props. Native HTML and inherited primitive props remain documented by Radix UI.
DropdownMenuItem
| Prop | Type | Default | Description |
|---|---|---|---|
inset | boolean | — | |
variant | "default" | "destructive" | "default" |
DropdownMenuLabel
| Prop | Type | Default | Description |
|---|---|---|---|
inset | boolean | — |
DropdownMenuShortcut
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "default" | "destructive" | "default" |
DropdownMenuSubTrigger
| Prop | Type | Default | Description |
|---|---|---|---|
inset | boolean | — |
Configuration determines the actual classes and available styling hooks. See Theming & component configuration before introducing a repeated local override.