Beta

Search Documentation

Search through documentation pages

Components

Dropdown Menu

A menu that appears on trigger click, offering a list of actions or options.

Preview

'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>
  );
}

Installation

bun
bunx shadcn@latest add @sft-ui/dropdown-menu

With Submenus

'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>
  );
}

With Checkbox Items

'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>
  );
}

With Shortcuts

'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>
  );
}

API Reference

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.

PropTypeDefaultDescription
align"start" | "center" | "end""start"Alignment relative to the trigger.
alignOffsetnumber0Offset from the alignment edge in pixels.
side"top" | "bottom" | "left" | "right""bottom"Preferred side of the trigger to render on.
sideOffsetnumber4Gap between the trigger and content in pixels.
classNamestringAdditional CSS classes to apply.

Groups related menu items together.

A non-interactive label for a group of items.

PropTypeDefaultDescription
insetbooleanAdds left padding to align with menu items that have icons.
classNamestringAdditional CSS classes to apply.

An actionable item in the menu.

PropTypeDefaultDescription
insetbooleanAdds left padding to align with items that have icons.
variant"default" | "destructive""default"The visual style of the item.
classNamestringAdditional CSS classes to apply.

A menu item that toggles a checked state.

PropTypeDefaultDescription
checkedbooleanWhether the item is checked.
insetbooleanAdds left padding to align with other items.
classNamestringAdditional 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.

PropTypeDefaultDescription
insetbooleanAdds left padding to align with other items.
classNamestringAdditional CSS classes to apply.

The root component for a submenu.

The item that opens a submenu. Renders a chevron icon automatically.

PropTypeDefaultDescription
insetbooleanAdds left padding to align with other items.
classNamestringAdditional 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.

PropTypeDefaultDescription
classNamestringAdditional CSS classes to apply.