Installation
npx logic2b@next add context-menuUsage
import {
ContextMenu,
ContextMenuContent,
ContextMenuItem,
ContextMenuTrigger,
} from "@/components/ui/context-menu"
<ContextMenu>
<ContextMenuTrigger>Right click here</ContextMenuTrigger>
<ContextMenuContent>
<ContextMenuItem>Back</ContextMenuItem>
<ContextMenuItem>Reload</ContextMenuItem>
</ContextMenuContent>
</ContextMenu>
Examples
Checkboxes & Radios
With Submenu
Accessibility
- Opens on right-click (or the context-menu key) and can be navigated entirely
with the arrow keys;
EnterorSpaceactivates the focused item. - Wraps Radix Context Menu,
which manages
role="menu",menuitem,menuitemcheckboxandmenuitemradiosemantics for you. - Typeahead lets users jump to an item by typing its label;
Escapecloses the menu and returns focus to the trigger.
Live playground
Edit the component props and inspect the exact JSX before copying it. The preview loads only when this section enters the viewport.
Generated JSX
<ContextMenu
modal
>
<ContextMenuTrigger
className="flex h-36 w-72 items-center justify-center rounded-lg border border-dashed text-sm text-muted-foreground"
>Right-click this surface</ContextMenuTrigger>
<ContextMenuContent>
<ContextMenuLabel>Project</ContextMenuLabel>
<ContextMenuItem>Open documentation</ContextMenuItem>
<ContextMenuItem>Copy install command</ContextMenuItem>
<ContextMenuSeparator />
<ContextMenuItem
variant="destructive"
>Remove project</ContextMenuItem>
</ContextMenuContent>
</ContextMenu>Right-click this surface
API reference
Generated from the public TypeScript exports in src/ui/context-menu.tsx.
ContextMenu
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Root>ContextMenuTrigger
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>ContextMenuContent
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Content>ContextMenuItem
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Item> & { inset?: boolean variant?: "default" | "destructive" }| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
inset | boolean | No | — | — |
variant | "default" | "destructive" | No | "default" | — |
ContextMenuCheckboxItem
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>ContextMenuRadioItem
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>ContextMenuLabel
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Label> & { inset?: boolean }| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
inset | boolean | No | — | — |
ContextMenuSeparator
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Separator>ContextMenuShortcut
ComponentProps: React.ComponentProps<"span">ContextMenuGroup
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Group>ContextMenuPortal
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Portal>ContextMenuSub
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.Sub>ContextMenuSubContent
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>ContextMenuSubTrigger
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & { inset?: boolean }| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
inset | boolean | No | — | — |
ContextMenuRadioGroup
ComponentProps: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>Accessibility contract
Machine-readable behavior and consumer responsibilities for context-menu.
- Support
- Primitive-managed
- Pattern
- context menu
- Radix Context Menu
| Keys | Behavior |
|---|---|
| Shift+F10 ContextMenu | Open the context menu from the keyboard. |
| ArrowUp ArrowDown ArrowLeft ArrowRight | Move within the composite control. |
| Escape | Close the open surface and restore focus. |
Built-in semantics
- Manages menu roles, roving focus and checked state.
Consumer responsibilities
- Ensure every pointer-only context action is available through another keyboard-reachable path.