Components
'use client';
import { Button } from '@/registry/san-francisco/ui/button';
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from '@/registry/san-francisco/ui/dropdown-menu';
export default function DropdownMenuDemo() {
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>Open Menu</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuGroup>
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuItem>Billing</DropdownMenuItem>
<DropdownMenuItem>Settings</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem variant="destructive">Log out</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}
bunx shadcn@latest add @sft-ui/dropdown-menu
'use client';
import { Button } from '@/registry/san-francisco/ui/button';
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from '@/registry/san-francisco/ui/dropdown-menu';
export default function DropdownMenuDemoSubmenus() {
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>Options</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>New Tab</DropdownMenuItem>
<DropdownMenuItem>New Window</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuSub>
<DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
<DropdownMenuSubContent>
<DropdownMenuItem>Email</DropdownMenuItem>
<DropdownMenuItem>Message</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuSub>
</DropdownMenuContent>
</DropdownMenu>
);
}
'use client';
import { Button } from '@/registry/san-francisco/ui/button';
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from '@/registry/san-francisco/ui/dropdown-menu';
export default function DropdownMenuDemoCheckbox() {
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>View</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuGroup>
<DropdownMenuLabel>Toggle</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuCheckboxItem checked>Status Bar</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem>Activity Bar</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem>Panel</DropdownMenuCheckboxItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
);
}
'use client';
import { Button } from '@/registry/san-francisco/ui/button';
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from '@/registry/san-francisco/ui/dropdown-menu';
export default function DropdownMenuDemoShortcuts() {
return (
<DropdownMenu>
<DropdownMenuTrigger render={<Button variant="outline" />}>File</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>
New File
<DropdownMenuShortcut>⌘N</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Save
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}
Built on Base UI Menu.
The root component that manages menu state.
The element that toggles the menu. Renders as a button by default.
The popover container for menu items.
| Prop | Type | Default | Description |
|---|
align | "start" | "center" | "end" | "start" | Alignment relative to the trigger. |
alignOffset | number | 0 | Offset from the alignment edge in pixels. |
side | "top" | "bottom" | "left" | "right" | "bottom" | Preferred side of the trigger to render on. |
sideOffset | number | 4 | Gap between the trigger and content in pixels. |
className | string | — | Additional CSS classes to apply. |
Groups related menu items together.
A non-interactive label for a group of items.
| Prop | Type | Default | Description |
|---|
inset | boolean | — | Adds left padding to align with menu items that have icons. |
className | string | — | Additional CSS classes to apply. |
An actionable item in the menu.
| Prop | Type | Default | Description |
|---|
inset | boolean | — | Adds left padding to align with items that have icons. |
variant | "default" | "destructive" | "default" | The visual style of the item. |
className | string | — | Additional CSS classes to apply. |
A menu item that toggles a checked state.
| Prop | Type | Default | Description |
|---|
checked | boolean | — | Whether the item is checked. |
inset | boolean | — | Adds left padding to align with other items. |
className | string | — | Additional CSS classes to apply. |
Groups a set of radio items where only one can be selected.
A menu item that acts as a radio button within a radio group.
| Prop | Type | Default | Description |
|---|
inset | boolean | — | Adds left padding to align with other items. |
className | string | — | Additional CSS classes to apply. |
The root component for a submenu.
The item that opens a submenu. Renders a chevron icon automatically.
| Prop | Type | Default | Description |
|---|
inset | boolean | — | Adds left padding to align with other items. |
className | string | — | Additional CSS classes to apply. |
The popover container for submenu items. Accepts the same props as DropdownMenuContent.
A visual divider between menu items.
Displays a keyboard shortcut hint aligned to the right of a menu item.
| Prop | Type | Default | Description |
|---|
className | string | — | Additional CSS classes to apply. |