sigilUI

Dropdown Menu

Trigger-activated dropdown with items, submenus, checkboxes, and radio groups.

@sigil-ui/componentsReact

DropdownMenu

Trigger-activated dropdown with items, submenus, checkboxes, and radio groups.

Installation

npx @sigil-ui/cli add dropdown-menu

Preview

Live preview Interactive

Import

import {
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuSeparator,
  DropdownMenuLabel,
  DropdownMenuGroup,
  DropdownMenuSub,
  DropdownMenuSubTrigger,
  DropdownMenuSubContent,
  DropdownMenuCheckboxItem,
  DropdownMenuRadioGroup,
  DropdownMenuRadioItem,
} from "@sigil-ui/components";

Usage

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Options</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuLabel>Account</DropdownMenuLabel>
    <DropdownMenuItem>Profile</DropdownMenuItem>
    <DropdownMenuItem>Settings</DropdownMenuItem>
    <DropdownMenuSeparator />
    <DropdownMenuItem>Log out</DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

Examples

With submenus

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button>Actions</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuItem>Edit</DropdownMenuItem>
    <DropdownMenuSub>
      <DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
      <DropdownMenuSubContent>
        <DropdownMenuItem>Copy link</DropdownMenuItem>
        <DropdownMenuItem>Email</DropdownMenuItem>
        <DropdownMenuItem>Slack</DropdownMenuItem>
      </DropdownMenuSubContent>
    </DropdownMenuSub>
    <DropdownMenuSeparator />
    <DropdownMenuItem className="text-[var(--s-error)]">Delete</DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

With checkbox items

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">View</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>
    <DropdownMenuCheckboxItem checked={showStatus} onCheckedChange={setShowStatus}>
      Status
    </DropdownMenuCheckboxItem>
    <DropdownMenuCheckboxItem checked={showEmail} onCheckedChange={setShowEmail}>
      Email
    </DropdownMenuCheckboxItem>
  </DropdownMenuContent>
</DropdownMenu>

With radio group

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Sort</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent>
    <DropdownMenuRadioGroup value={sortBy} onValueChange={setSortBy}>
      <DropdownMenuRadioItem value="name">Name</DropdownMenuRadioItem>
      <DropdownMenuRadioItem value="date">Date</DropdownMenuRadioItem>
      <DropdownMenuRadioItem value="status">Status</DropdownMenuRadioItem>
    </DropdownMenuRadioGroup>
  </DropdownMenuContent>
</DropdownMenu>

Props

PropTypeDefaultDescription
sideOffsetnumber4Distance from trigger
classNamestring—Additional CSS classes
PropTypeDefaultDescription
insetbooleanfalseAdd left padding for icon alignment
disabledbooleanfalseDisable the item
onSelect() => void—Selection handler
PropTypeDefaultDescription
checkedboolean—Checked state
onCheckedChange(checked: boolean) => void—Change handler
PropTypeDefaultDescription
valuestring—Radio value

Tokens

This component reads these CSS variables:

  • --s-surface — menu background
  • --s-border — menu border, separator
  • --s-card-radius — menu border radius
  • --s-radius-sm — item border radius
  • --s-shadow-md — menu elevation
  • --s-text — item text, focus state
  • --s-text-muted — labels, disabled items, shortcut text
  • --s-background — item focus background
  • --s-primary — checkbox/radio indicator
  • --s-duration-fast — focus transition