With Shortcuts
Trailing keys teach the faster path.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Edit</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Item shortcut="Ctrl+Z" onSelect={() => {}}>Undo</Menu.Item>Drops a list of actions below a trigger, driveable entirely by keyboard.
import { Menu } from "@/fragments/ui";Source<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Actions</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Item onSelect={() => {}}>Edit</Menu.Item>npx @usefragments/cli add menuWrites src/fragments/ui/components/Menu plus what it imports, the globals stylesheet, and .fragments/registry-lock.json, then prints the packages to add. No account, no key.
Your own registry: publish from Fragments Cloud and add --registry org/name. Connect a workspace.
Menu is a compound: import the root and reach its parts through dot notation.
Menu.TriggerMenu.ContentMenu.ItemMenu.CheckboxItemMenu.RadioGroupMenu.RadioItemMenu.GroupMenu.GroupLabelMenu.SeparatorMenu.SubmenuMenu.SubmenuTriggerPlain actions, one per row.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Actions</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Item onSelect={() => {}}>Edit</Menu.Item>
<Menu.Item onSelect={() => {}}>Duplicate</Menu.Item>
<Menu.Separator />
<Menu.Item danger onSelect={() => {}}>Delete</Menu.Item>
</Menu.Content>
</Menu>Trailing keys teach the faster path.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Edit</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Item shortcut="Ctrl+Z" onSelect={() => {}}>Undo</Menu.Item>Labels separate unrelated actions.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Options</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Group>Rows that stay open while you toggle them.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">Display</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.CheckboxItem defaultChecked>Show Grid</Menu.CheckboxItem>Ticks mark which filters are on.
<CheckedItemsMenuDemo />Secondary options nest one level deep.
<Menu>
<Menu.Trigger asChild>
<Button variant="soft">File</Button>
</Menu.Trigger>
<Menu.Content>
<Menu.Item onSelect={() => {}}>New File</Menu.Item>asChild lets a link open it.
<Menu>
<Menu.Trigger asChild>
<a href="#menu-actions">Open menu</a>
</Menu.Trigger>
<Menu.Content>
<Menu.Item onSelect={() => {}}>Inspect</Menu.Item>Prop | Type | Default | Description |
|---|---|---|---|
childrenRequired | node | Not set | Menu trigger and content |
open | boolean | Not set | Controlled open state |
defaultOpen | boolean | false | Default open state (uncontrolled) |
onOpenChange | function | Not set | Called when open state changes |
modal | boolean | true | Whether menu is modal |