Menu
A list of actions in a dropdown, enhanced with keyboard navigation.
Loading...
Loading code...
Installation
Usage
import {
Menu,
MenuCheckboxItem,
MenuGroup,
MenuGroupLabel,
MenuItem,
MenuPopup,
MenuRadioGroup,
MenuRadioItem,
MenuSeparator,
MenuSub,
MenuSubPopup,
MenuSubTrigger,
MenuTrigger,
} from "@/components/ui/menu"<Menu>
<MenuTrigger>Open</MenuTrigger>
<MenuPopup align="start" sideOffset={4}>
<MenuItem>Profile</MenuItem>
<MenuSeparator />
<MenuGroup>
<MenuGroupLabel>Playback</MenuGroupLabel>
<MenuItem>Play</MenuItem>
<MenuItem>Pause</MenuItem>
</MenuGroup>
<MenuSeparator />
<MenuCheckboxItem>Shuffle</MenuCheckboxItem>
<MenuCheckboxItem>Repeat</MenuCheckboxItem>
<MenuSeparator />
<MenuGroup>
<MenuGroupLabel>Sort by</MenuGroupLabel>
<MenuRadioGroup>
<MenuRadioItem>Artist</MenuRadioItem>
<MenuRadioItem>Album</MenuRadioItem>
<MenuRadioItem>Title</MenuRadioItem>
</MenuRadioGroup>
</MenuGroup>
<MenuSeparator />
<MenuSub>
<MenuSubTrigger>Add to playlist</MenuSubTrigger>
<MenuSubPopup>
<MenuItem>Jazz</MenuItem>
<MenuItem>Rock</MenuItem>
</MenuSubPopup>
</MenuSub>
</MenuPopup>
</Menu>Examples
Open on Hover
Loading...
Loading code...
With Checkbox
Loading...
Loading code...
With Radio Group
Loading...
Loading code...
With Link
Loading...
Loading code...
With Group Label
Loading...
Loading code...
Nested Menu
Loading...
Loading code...
Close on Click
Loading...
Loading code...
Open a Dialog
Loading...
Loading code...
Comparing with Radix / shadcn
If you’re already familiar with Radix UI and shadcn/ui, this guide highlights the small differences and similarities so you can get started with ui/topia quickly.
Prop Mapping
| Component | Radix UI Prop | Base UI Prop |
|---|---|---|
MenuItem | onSelect | onClick |
Quick Checklist
- If you used
asChildon parts, switch to therenderprop - Replace
onSelect→onClickon menu items - Update import path from
@/components/ui/dropdown-menu→@/components/ui/menu - Prefer
Menu*component names;DropdownMenu*remain for legacy - Prefer
MenuGroupLabelinstead ofDropdownMenuLabel - Prefer
MenuPopupinstead ofDropdownMenuContent - Prefer
MenuSubPopupinstead ofDropdownMenuSubContent
Comparison Examples
<DropdownMenu>
<DropdownMenuTrigger>Open menu</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem
onSelect={() => {
console.log("Dashboard")
}}
>
Dashboard
</DropdownMenuItem>
<DropdownMenuItem>Settings</DropdownMenuItem>
<DropdownMenuItem>Sign out</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu><Menu>
<MenuTrigger>Open menu</MenuTrigger>
<MenuPopup>
<MenuItem
onClick={() => {
console.log("Dashboard")
}}
>
Dashboard
</MenuItem>
<MenuItem>Settings</MenuItem>
<MenuItem>Sign out</MenuItem>
</MenuPopup>
</Menu>