Skip to content

DropdownMenu

Default

Usage

tsx
import { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent } from '@tryvienna/ui'

<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Open Menu</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <DropdownMenuLabel>My Account</DropdownMenuLabel>
    <DropdownMenuSeparator />
    <DropdownMenuGroup>
      <DropdownMenuItem>
        <UserIcon /> Profile
        <DropdownMenuShortcut>Cmd+P</DropdownMenuShortcut>
      </DropdownMenuItem>
      <DropdownMenuItem>
        <SettingsIcon /> Settings
        <DropdownMenuShortcut>Cmd+,</DropdownMenuShortcut>
      </DropdownMenuItem>
    </DropdownMenuGroup>
    <DropdownMenuSeparator />
    <DropdownMenuGroup>
      <DropdownMenuItem>
        <PlusIcon /> New Team
      </DropdownMenuItem>
    </DropdownMenuGroup>
    <DropdownMenuSeparator />
    <DropdownMenuItem>
      <LogOutIcon /> Log out
      <DropdownMenuShortcut>Cmd+Q</DropdownMenuShortcut>
    </DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

Examples

Default

Default
tsx
<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Open Menu</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <DropdownMenuLabel>My Account</DropdownMenuLabel>
    <DropdownMenuSeparator />
    <DropdownMenuGroup>
      <DropdownMenuItem>
        <UserIcon /> Profile
        <DropdownMenuShortcut>Cmd+P</DropdownMenuShortcut>
      </DropdownMenuItem>
      <DropdownMenuItem>
        <SettingsIcon /> Settings
        <DropdownMenuShortcut>Cmd+,</DropdownMenuShortcut>
      </DropdownMenuItem>
    </DropdownMenuGroup>
    <DropdownMenuSeparator />
    <DropdownMenuGroup>
      <DropdownMenuItem>
        <PlusIcon /> New Team
      </DropdownMenuItem>
    </DropdownMenuGroup>
    <DropdownMenuSeparator />
    <DropdownMenuItem>
      <LogOutIcon /> Log out
      <DropdownMenuShortcut>Cmd+Q</DropdownMenuShortcut>
    </DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

With Checkboxes

With Checkboxes
tsx
<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">View Options</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <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>

With Radio Group

With Radio Group
tsx
<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Panel Position</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <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>

With Submenu

With Submenu
tsx
<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Actions</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <DropdownMenuItem>
      <UserIcon /> Profile
    </DropdownMenuItem>
    <DropdownMenuSub>
      <DropdownMenuSubTrigger>
        <MailIcon /> Invite Users
      </DropdownMenuSubTrigger>
      <DropdownMenuSubContent>
        <DropdownMenuItem>
          <MailIcon /> Email
        </DropdownMenuItem>
        <DropdownMenuItem>
          <MessageSquareIcon /> Message
        </DropdownMenuItem>
        <DropdownMenuSeparator />
        <DropdownMenuItem>
          <CloudIcon /> More...
        </DropdownMenuItem>
      </DropdownMenuSubContent>
    </DropdownMenuSub>
    <DropdownMenuSeparator />
    <DropdownMenuItem>
      <SettingsIcon /> Settings
    </DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

Destructive

Destructive
tsx
<DropdownMenu>
  <DropdownMenuTrigger asChild>
    <Button variant="outline">Manage</Button>
  </DropdownMenuTrigger>
  <DropdownMenuContent className="w-56">
    <DropdownMenuItem>
      <UserIcon /> Edit Profile
    </DropdownMenuItem>
    <DropdownMenuItem>
      <SettingsIcon /> Settings
    </DropdownMenuItem>
    <DropdownMenuSeparator />
    <DropdownMenuItem variant="destructive">
      <LogOutIcon /> Delete Account
    </DropdownMenuItem>
  </DropdownMenuContent>
</DropdownMenu>

API Reference

Also accepts all props from DropdownMenuPrimitive.Root.

Also accepts all props from DropdownMenuPrimitive.Portal.

Also accepts all props from DropdownMenuPrimitive.Trigger.

PropTypeDefaultDescription
sideOffsetnumber4

Also accepts all props from DropdownMenuPrimitive.Content.

Also accepts all props from DropdownMenuPrimitive.Group.

PropTypeDefaultDescription
insetboolean | undefined-
variant"default" | "destructive"default

Also accepts all props from DropdownMenuPrimitive.Item.

PropTypeDefaultDescription
checkedCheckedState | undefined-

Also accepts all props from DropdownMenuPrimitive.CheckboxItem.

Also accepts all props from DropdownMenuPrimitive.RadioGroup.

Also accepts all props from DropdownMenuPrimitive.RadioItem.

PropTypeDefaultDescription
insetboolean | undefined-

Also accepts all props from DropdownMenuPrimitive.Label.

Also accepts all props from DropdownMenuPrimitive.Separator.

Also accepts all props from span.

Also accepts all props from DropdownMenuPrimitive.Sub.

PropTypeDefaultDescription
insetboolean | undefined-

Also accepts all props from DropdownMenuPrimitive.SubTrigger.

Also accepts all props from DropdownMenuPrimitive.SubContent.

Data Attributes

Componentdata-slot
DropdownMenu"dropdown-menu"
DropdownMenuPortal"dropdown-menu-portal"
DropdownMenuTrigger"dropdown-menu-trigger"
DropdownMenuContent"dropdown-menu-content"
DropdownMenuGroup"dropdown-menu-group"
DropdownMenuItem"dropdown-menu-item"
DropdownMenuCheckboxItem"dropdown-menu-checkbox-item"
DropdownMenuRadioGroup"dropdown-menu-radio-group"
DropdownMenuRadioItem"dropdown-menu-radio-item"
DropdownMenuLabel"dropdown-menu-label"
DropdownMenuSeparator"dropdown-menu-separator"
DropdownMenuShortcut"dropdown-menu-shortcut"
DropdownMenuSub"dropdown-menu-sub"
DropdownMenuSubTrigger"dropdown-menu-sub-trigger"
DropdownMenuSubContent"dropdown-menu-sub-content"