Dropdown Menu
A menu that displays a list of actions or options triggered by a button, supporting keyboard navigation, submenus, and separators.
Preview
Usage
tsx
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuGroup,
} from "zostel-ui";
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">Options</Button>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuLabel>My Account</DropdownMenuLabel>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuItem>
Profile
<DropdownMenuShortcut>Ctrl+P</DropdownMenuShortcut>
</DropdownMenuItem>
<DropdownMenuItem>
Settings
<DropdownMenuShortcut>Ctrl+S</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem className="text-red-600">
Log out
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>Props
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | — | Controlled open state of the dropdown menu |
onOpenChange | (open: boolean) => void | — | Callback when the open state changes |
side | "top" | "right" | "bottom" | "left" | "bottom" | The preferred side of the trigger to render against |
align | "start" | "center" | "end" | "start" | The preferred alignment against the trigger |
sideOffset | number | 4 | Distance in pixels from the trigger |
openType:
booleanDefault: —
Controlled open state of the dropdown menu
onOpenChangeType:
(open: boolean) => voidDefault: —
Callback when the open state changes
sideType:
"top" | "right" | "bottom" | "left"Default: "bottom"
The preferred side of the trigger to render against
alignType:
"start" | "center" | "end"Default: "start"
The preferred alignment against the trigger
sideOffsetType:
numberDefault: 4
Distance in pixels from the trigger