Skip to content

shadcn.io is not affiliated with official shadcn/ui

Shadcn Context Menu for React

A menu shown on right-click.

Installation

bunx --bun shadcn@latest add https://kit.dev/r/radix/context-menu.json

Anatomy

ContextMenuArrow
└── ContextMenuArrowTip
ContextMenuTrigger
ContextMenuIndicator
ContextMenuQuickItem
└── ContextMenuGroup
    ├── ContextMenuSubContent
    │   └── ContextMenuPositioner
    └── ContextMenuGroupLabel
ContextMenuItemIndicator
ContextMenuItemText
ContextMenuSeparator
ContextMenuTrigger
└── ContextMenuSubTrigger

Usage

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

KeyDescription
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.

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
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuTrigger

PropType
openboolean): void
children?React.ReactNode
disabled?boolean
modal?boolean
AttributeType

ContextMenuGroup

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuPortal

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuSub

PropType
openboolean): void
children?React.ReactNode
defaultOpen?boolean
modal?boolean
AttributeType

ContextMenuRadioGroup

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuContent

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType
CSS variableType
--radix-context-menu-content-available-heightstring
--radix-context-menu-content-transform-originstring

ContextMenuItem

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuSubTrigger

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuSubContent

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType
CSS variableType
--radix-context-menu-content-available-heightstring
--radix-context-menu-content-transform-originstring

ContextMenuCheckboxItem

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuRadioItem

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuGroupLabel

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuSeparator

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType

ContextMenuShortcut

PropType
openboolean): void
children?React.ReactNode
modal?boolean
AttributeType