A trigger that opens a list of selectable items, built on Radix's DropdownMenu for focus management, keyboard navigation and close on outside click or Escape.
A trigger that opens a list of selectable items, built on Radix's DropdownMenu for focus management, keyboard navigation and close on outside click or Escape.
Usage
1import { DropdownMenu } from "@behivetech/atoms.dropdown-menu";2import { Button } from "@behivetech/atoms.button";34function Example() {5 const items = [6 { id: "edit", label: "Edit" },7 { id: "duplicate", label: "Duplicate" },8 { id: "delete", label: "Delete", disabled: true },9 ];10 return (11 <DropdownMenu12 trigger={<Button variant="secondary">Actions</Button>}13 items={items}14 onSelect={(id) => alert(id)}15 />16 );17}
Examples
Open all 2 →Basic Dropdown Menu
1const siteItems = [2 { id: "site-1", label: "My BEhive Site" },3 { id: "site-2", label: "Second Site" },4 { id: "site-3", label: "Archived Site", disabled: true },5];67const BasicDropdownMenu = () => {8 const [selected, setSelected] = useState("site-1");9 const selectedLabel = siteItems.find((item) => item.id === selected)?.label;1011 return (12 <DropdownMenu13 trigger={<button type="button">{selectedLabel} ▾</button>}14 items={siteItems}15 onSelect={setSelected}16 />17 );18};1920render(<BasicDropdownMenu />);
Controlled Dropdown Menu
1const siteItems = [2 { id: "site-1", label: "My BEhive Site" },3 { id: "site-2", label: "Second Site" },4 { id: "site-3", label: "Archived Site", disabled: true },5];67const ControlledDropdownMenu = () => {8 const [open, setOpen] = useState(false);9 const [selected, setSelected] = useState("site-1");10 const selectedLabel = siteItems.find((item) => item.id === selected)?.label;1112 return (13 <>14 <p>Selected: {selectedLabel}</p>15 <DropdownMenu16 trigger={<button type="button">Toggle menu</button>}17 items={siteItems}18 open={open}19 onOpenChange={setOpen}20 onSelect={(id) => {21 setSelected(id);22 setOpen(false);23 }}24 />25 </>26 );27};2829render(<ControlledDropdownMenu />);
Properties
DropdownMenu props
| Prop | Type | Default | Description |
|---|---|---|---|
items* | DropdownMenuItem[] | — | Items rendered in the menu |
onSelect* | (id: string) => void | — | Called with the selected item's id when an item is chosen |
trigger* | ReactNode | — | Element that opens the menu when activated — receives the trigger's props via Radix's `asChild` |
align | "start" | "center" | "end" | start | Alignment of the menu relative to the trigger; defaults to "start" |
className | string | — | Additional class names to merge with the menu content element |
onOpenChange | ((open: boolean) => void) | — | Called when the open state changes (trigger click, item select, outside click, Escape) |
open | boolean | — | Controlled open state |