Components
Context Menu
A menu opened by right-click, or long-press on touch, that surfaces actions relevant to the element under the pointer.
Preview
Rendered with live Cognition tokens. Right-click the area to open the real menu, no dark: classes.
Variants
Default
With icons
With keyboard shortcuts
With sub-menu
With separator
With destructive item
Menus compose icons, shortcuts, sub-menus, separators, and a destructive item. The panels above are shown open for reference.
States
Closed. The default state.
Open. The menu is showing.
Item hover. One item is focused.
Item disabled. Dimmed, inert.
Sub-menu open.
A context menu opens on right-click, so the open, hover, and sub-menu states are shown statically. The preview opens the real menu.
API
Compose the parts inside a single ContextMenu. Items take disabled and onSelect; nest a ContextMenuSub for sub-menus.
Don't and Do
Don't make a context menu the only path to a critical action. Right-click is hidden by nature, so many people never discover it, and touch users have no equivalent for some gestures. Always offer those actions somewhere visible as well.
<ContextMenu>
<ContextMenuTrigger>{children}</ContextMenuTrigger>
<ContextMenuContent>
<ContextMenuItem>Copy</ContextMenuItem>
<ContextMenuItem>Rename</ContextMenuItem>
</ContextMenuContent>
</ContextMenu>Use it to augment the primary UI with contextual shortcuts for power users.
import {
ContextMenu,
ContextMenuContent,
ContextMenuItem,
ContextMenuShortcut,
ContextMenuTrigger,
} from "@/components/ui/context-menu";
export function FileTile({ children }) {
return (
<ContextMenu>
<ContextMenuTrigger>{children}</ContextMenuTrigger>
<ContextMenuContent className="w-52">
<ContextMenuItem>
Copy <ContextMenuShortcut>⌘C</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuItem>Rename</ContextMenuItem>
</ContextMenuContent>
</ContextMenu>
);
}