Dropdown Menu

A toggleable menu of actions or links, anchored to a trigger and positioned by Radix UI.

Default

tsx

import {
  Button,
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuLabel,
  DropdownMenuItem,
  DropdownMenuSeparator,
} from "@hummingbirdui/react";

export default function DropdownDefault() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button>Open menu</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent className="min-w-48">
        <DropdownMenuLabel>My account</DropdownMenuLabel>
        <DropdownMenuItem>Profile</DropdownMenuItem>
        <DropdownMenuItem>Settings</DropdownMenuItem>
        <DropdownMenuItem>Billing</DropdownMenuItem>
        <DropdownMenuSeparator />
        <DropdownMenuItem>Sign out</DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  );
}

Groups

DropdownMenuGroup bundles related items under a DropdownMenuLabel section header.

tsx

import {
  Button,
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuGroup,
  DropdownMenuLabel,
  DropdownMenuItem,
  DropdownMenuSeparator,
} from "@hummingbirdui/react";

export default function DropdownGroups() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button>Workspace</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent className="min-w-56">
        <DropdownMenuGroup>
          <DropdownMenuLabel>Documents</DropdownMenuLabel>
          <DropdownMenuItem>New file</DropdownMenuItem>
          <DropdownMenuItem>Import</DropdownMenuItem>
        </DropdownMenuGroup>
        <DropdownMenuSeparator />
        <DropdownMenuGroup>
          <DropdownMenuLabel>Team</DropdownMenuLabel>
          <DropdownMenuItem>Invite member</DropdownMenuItem>
          <DropdownMenuItem>Manage roles</DropdownMenuItem>
        </DropdownMenuGroup>
      </DropdownMenuContent>
    </DropdownMenu>
  );
}

Placement

The side and align props on DropdownMenuContent control where the menu opens relative to its trigger.

tsx

import {
  Button,
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuSeparator,
} from "@hummingbirdui/react";

export default function DropdownPlacement() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button>Aligned menu</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent side="top" align="end" className="min-w-48">
        <DropdownMenuItem>Move up</DropdownMenuItem>
        <DropdownMenuItem>Move down</DropdownMenuItem>
        <DropdownMenuSeparator />
        <DropdownMenuItem>Duplicate</DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  );
}

Disabled

Use disabled to prevent a DropdownMenuItem from being selected.

tsx

import {
  Button,
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuItem,
} from "@hummingbirdui/react";

export default function DropdownDisabled() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button>Actions</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent className="min-w-48">
        <DropdownMenuItem>Edit</DropdownMenuItem>
        <DropdownMenuItem>Share</DropdownMenuItem>
        <DropdownMenuItem disabled>Archive</DropdownMenuItem>
        <DropdownMenuItem disabled>Delete</DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  );
}

Non-interactive text

DropdownMenuItemText displays non-interactive text in a menu.

tsx

import {
  Button,
  DropdownMenu,
  DropdownMenuTrigger,
  DropdownMenuContent,
  DropdownMenuLabel,
  DropdownMenuItem,
  DropdownMenuItemText,
  DropdownMenuSeparator,
} from "@hummingbirdui/react";

export default function DropdownItemText() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger asChild>
        <Button>Details</Button>
      </DropdownMenuTrigger>
      <DropdownMenuContent className="min-w-56">
        <DropdownMenuLabel>Signed in as</DropdownMenuLabel>
        <DropdownMenuItemText>sohel@onesuite.io</DropdownMenuItemText>
        <DropdownMenuSeparator />
        <DropdownMenuItem>Account settings</DropdownMenuItem>
        <DropdownMenuItem>Sign out</DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  );
}

API Reference

For detailed usage guidelines, see the Radix UI documentation.

DropdownMenuItemText renders non-interactive copy as a <span> and accepts a className.

Styling

Hummingbird React dropdown is styled entirely through Hummingbird's utility classes and CSS variables.

  • See the full list of available dropdown classes in the Class overview.
  • Visit the CSS Variables documentation to explore all available variables.