ui · Primitive
DropdownMenu
@devalok/shilp-sutra/ui/dropdown-menuView in Storybook Hand-curated previews ship in rolling waves. See it live in Storybook →
Reference
Compound Components
DropdownMenu (root)
DropdownMenuTrigger
DropdownMenuContent
DropdownMenuLabel
DropdownMenuSeparator
DropdownMenuItem (+ DropdownMenuShortcut for keyboard hints)
DropdownMenuCheckboxItem
DropdownMenuRadioGroup > DropdownMenuRadioItem
DropdownMenuGroup
DropdownMenuSub > DropdownMenuSubTrigger, DropdownMenuSubContent
Defaults
none
Example
<DropdownMenu>
<DropdownMenuTrigger asChild><Button variant="ghost">Menu</Button></DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem>Profile</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>Logout</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
Composability
- Radix DropdownMenu underneath — same prop surface (
open,onOpenChange,defaultOpen,modal). - Item variants stack cleanly:
DropdownMenuCheckboxItemfor multi-select toggles,DropdownMenuRadioGroup+DropdownMenuRadioItemfor single-select,DropdownMenuSub+DropdownMenuSubTrigger/SubContentfor nested submenus. Each has its own keyboard model pre-wired. - Keyboard: Arrow keys navigate items, Enter/Space activates, Esc closes, typeahead jumps to first letter. All handled by Radix — don't re-implement.
- Trigger:
<DropdownMenuTrigger asChild>around any button. IconButton is the common pairing. - Shortcut hints:
<DropdownMenuShortcut>inside an item renders a right-aligned⌘K-style kbd. Visual only — does NOT bind the shortcut globally. - Closing from a handler: Item onSelect auto-closes the menu by default. Pass
event.preventDefault()inside the handler to keep it open (e.g. for checkbox items that shouldn't close on toggle).
Gotchas
- Use
asChildon DropdownMenuTrigger to render your own button element - DropdownMenuShortcut is decorative — bind keyboard shortcuts separately (e.g. with
useHotkeys) - Sub-menus need BOTH DropdownMenuSubTrigger (visible item) and DropdownMenuSubContent (the submenu panel) — missing either silently breaks the hover-open behavior
Changes
v0.22.0
- Added Hover state on
DropdownMenuItem— was completely missing. Items now showbg-surface-3on hover withease-productive-standardtransition.
v0.18.0
- Added
DropdownMenuContentProps,DropdownMenuItemPropstype exports
v0.14.0
- Changed z-index promoted from
z-dropdown(1000) toz-popover(1400) — fixes dropdown rendering behind Sheet/Dialog overlays
v0.1.0
- Added Initial release