shadcn.io is not affiliated with official shadcn/ui
Installation
bunx --bun shadcn@latest add https://kit.dev/r/aria/context-menu.jsonnpx shadcn@latest add https://kit.dev/r/aria/context-menu.jsonpnpm dlx shadcn@latest add https://kit.dev/r/aria/context-menu.jsonyarn shadcn@latest add https://kit.dev/r/aria/context-menu.jsonInstall the following dependencies:
bun add react-aria-components tailwind-variants lucide-reactnpm install react-aria-components tailwind-variants lucide-reactpnpm add react-aria-components tailwind-variants lucide-reactyarn add react-aria-components tailwind-variants lucide-reactCopy and paste the following code into your project.
"use client";
import { CheckIcon, ChevronRightIcon } from "lucide-react";
import type React from "react";
import {
Children,
isValidElement,
type ReactElement,
type ReactNode,
} from "react";
import {
composeRenderProps,
Header as HeaderPrimitive,
MenuItem as MenuItemPrimitive,
type MenuItemProps as MenuItemPrimitiveProps,
Menu as MenuPrimitive,
MenuSection as MenuSectionPrimitive,
type MenuSectionProps as MenuSectionPrimitiveProps,Update the import paths to match your project setup.
Anatomy
ContextMenuArrow
└── ContextMenuArrowTip
ContextMenuTrigger
ContextMenuIndicator
ContextMenuQuickItem
└── ContextMenuGroup
├── ContextMenuSubContent
│ └── ContextMenuPositioner
└── ContextMenuGroupLabel
ContextMenuItemIndicator
ContextMenuItemText
ContextMenuSeparator
ContextMenuTrigger
└── ContextMenuSubTriggerUsage
import {
ContextMenu,
ContextMenuCheckboxItem,
ContextMenuContent,
ContextMenuGroup,
ContextMenuGroupLabel,
ContextMenuItem,
ContextMenuRadioGroup,
ContextMenuRadioItem,
ContextMenuSeparator,
ContextMenuShortcut,
ContextMenuSub,
ContextMenuSubContent,
ContextMenuSubTrigger,
ContextMenuTrigger,
} from "@/components/ui/context-menu";<ContextMenu>
<ContextMenuTrigger className="flex aspect-video w-full max-w-xs items-center justify-center rounded-xl border border-dashed text-sm">
<span className="pointer-fine:inline-block hidden">Right click here</span>
<span className="pointer-coarse:inline-block hidden">
Long press here
</span>
</ContextMenuTrigger>
<ContextMenuContent className="w-48">
<ContextMenuGroup>
<ContextMenuItem value="back">
Back
<ContextMenuShortcut>⌘[</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuItem disabled value="forward">
Forward
<ContextMenuShortcut>⌘]</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuItem value="reload">
Reload
<ContextMenuShortcut>⌘R</ContextMenuShortcut>
</ContextMenuItem>
<ContextMenuSub>
<ContextMenuSubTrigger>More Tools</ContextMenuSubTrigger>
<ContextMenuSubContent className="w-44">
<ContextMenuGroup>
<ContextMenuItem value="save-page">Save Page...</ContextMenuItem>
<ContextMenuItem value="create-shortcut">
Create Shortcut...
</ContextMenuItem>
<ContextMenuItem value="name-window">
Name Window...
</ContextMenuItem>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuItem value="developer-tools">
Developer Tools
</ContextMenuItem>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuItem value="delete" variant="destructive">
Delete
</ContextMenuItem>
</ContextMenuGroup>
</ContextMenuSubContent>
</ContextMenuSub>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuCheckboxItem checked value="show-bookmarks">
Show Bookmarks
</ContextMenuCheckboxItem>
<ContextMenuCheckboxItem checked={false} value="show-full-urls">
Show Full URLs
</ContextMenuCheckboxItem>
</ContextMenuGroup>
<ContextMenuSeparator />
<ContextMenuGroup>
<ContextMenuRadioGroup value="pedro">
<ContextMenuGroupLabel>People</ContextMenuGroupLabel>
<ContextMenuRadioItem value="pedro">
Pedro Duarte
</ContextMenuRadioItem>
<ContextMenuRadioItem value="colm">Colm Tuite</ContextMenuRadioItem>
</ContextMenuRadioGroup>
</ContextMenuGroup>
</ContextMenuContent>
</ContextMenu>
Accessibility
| Key | Description |
|---|---|
Enter | Activate the focused control. |
Space | Activate the focused control. |
ArrowDown | Move down. |
ArrowUp | Move up. |
ArrowLeft | Move left. |
ArrowRight | Move right. |
Home | Go to the start. |
End | Go to the end. |
Demos
Basic
A simple context menu with a few actions.
Submenu
Use ContextMenuSub to nest secondary actions.
Shortcuts
Add ContextMenuShortcut to show keyboard hints.
Groups
Group related actions and separate them with dividers.
Icons
Combine icons with labels for quick scanning.
Checkboxes
Use ContextMenuCheckboxItem for toggles.
Radio
Use ContextMenuRadioItem for exclusive choices.
Destructive
Use variant="destructive" to style the menu item as destructive.
Sides
Control menu placement with positioning placement.
Rtl
Right-to-left context menu. See the RTL configuration guide for document direction.
API Reference
ContextMenu
PropType
AttributeType
CSS variableType
--trigger-anchor-pointstringContextMenuTrigger
PropType
ContextMenuGroup
PropType
AttributeType
ContextMenuGroupLabel
PropType
AttributeType
ContextMenuItem
PropType
className?stringAttributeType
ContextMenuSub
PropType
AttributeType
ContextMenuSubTrigger
PropType
AttributeType
ContextMenuSubContent
PropType
AttributeType
ContextMenuSeparator
PropType
AttributeType
ContextMenuShortcut
PropType
AttributeType