Prototyper UI

Context Menu

right-click menu with submenus and checkbox/radio items

Right click here

Installation

pnpm dlx shadcn@latest add https://prototyper-ui.com/r/context-menu.json
npx shadcn@latest add https://prototyper-ui.com/r/context-menu.json
yarn dlx shadcn@latest add https://prototyper-ui.com/r/context-menu.json
bunx --bun shadcn@latest add https://prototyper-ui.com/r/context-menu.json

This will add the following files to your project:

  • components/ui/context-menu.tsx

Usage

import {
  ContextMenu,
  ContextMenuTrigger,
  ContextMenuContent,
  ContextMenuItem,
} from "@/components/ui/context-menu"

<ContextMenu>
  <ContextMenuTrigger>Right click here</ContextMenuTrigger>
  <ContextMenuContent>
    <ContextMenuItem>Item 1</ContextMenuItem>
    <ContextMenuItem>Item 2</ContextMenuItem>
  </ContextMenuContent>
</ContextMenu>

Anatomy

<ContextMenu>
  <ContextMenuTrigger />
  <ContextMenuContent>
    <ContextMenuLabel />
    <ContextMenuSeparator />
    <ContextMenuGroup>
      <ContextMenuItem />
    </ContextMenuGroup>
    <ContextMenuCheckboxItem />
    <ContextMenuRadioGroup>
      <ContextMenuRadioItem />
    </ContextMenuRadioGroup>
    <ContextMenuSub>
      <ContextMenuSubTrigger />
      <ContextMenuSubContent>
        <ContextMenuItem />
      </ContextMenuSubContent>
    </ContextMenuSub>
  </ContextMenuContent>
</ContextMenu>
Sub-componentdata-slotPurposeRequired
ContextMenucontext-menuRoot provider, manages open/close stateYes
ContextMenuTriggercontext-menu-triggerElement that opens the menu on right clickYes
ContextMenuPortalcontext-menu-portalRenders children into a portalNo
ContextMenuContentcontext-menu-contentThe popup panel containing menu itemsYes
ContextMenuGroupcontext-menu-groupGroups related menu itemsNo
ContextMenuLabelcontext-menu-labelNon-interactive label for a groupNo
ContextMenuItemcontext-menu-itemIndividual actionable menu itemYes
ContextMenuCheckboxItemcontext-menu-checkbox-itemToggleable checkbox menu itemNo
ContextMenuRadioGroupcontext-menu-radio-groupGroups radio menu itemsNo
ContextMenuRadioItemcontext-menu-radio-itemRadio-selectable menu itemNo
ContextMenuSeparatorcontext-menu-separatorVisual separator between itemsNo
ContextMenuShortcutcontext-menu-shortcutKeyboard shortcut hint textNo
ContextMenuSubcontext-menu-subRoot for a submenuNo
ContextMenuSubTriggercontext-menu-sub-triggerItem that opens a submenuNo
ContextMenuSubContentcontext-menu-sub-contentSubmenu popup panelNo

Examples

Basic

Right click here

Styling

Data Slots

Use data-slot attributes to target specific parts of the context menu:

Slot nameElement
context-menuRoot provider (no DOM rendered)
context-menu-triggerThe trigger element
context-menu-portalPortal wrapper
context-menu-contentThe popup panel
context-menu-groupGroup wrapper
context-menu-labelGroup label
context-menu-itemIndividual menu item
context-menu-checkbox-itemCheckbox menu item
context-menu-radio-groupRadio group wrapper
context-menu-radio-itemRadio menu item
context-menu-separatorVisual separator line
context-menu-shortcutKeyboard shortcut text
context-menu-subSubmenu root
context-menu-sub-triggerSubmenu trigger item
context-menu-sub-contentSubmenu popup panel

Customization Examples

/* Change menu item highlight color */
[data-slot="context-menu-item"][data-highlighted] {
  @apply bg-primary text-primary-foreground;
}

/* Wider menu popup */
[data-slot="context-menu-content"] {
  @apply min-w-[12rem];
}
{/* Override styles via className */}
<ContextMenuContent className="w-64">
  <ContextMenuItem className="font-medium">
    Custom Item
  </ContextMenuItem>
</ContextMenuContent>

API Reference

ContextMenu

Root component that manages open/close state. Opens on right-click of the trigger.

Prop

Type

All Base UI ContextMenu.Root props are forwarded via ...props.

ContextMenuTrigger

Element that opens the context menu when right-clicked.

Prop

Type

All Base UI ContextMenu.Trigger props are forwarded via ...props.

ContextMenuContent

The popup panel containing menu items, rendered inside a portal with a positioner.

Prop

Type

All Base UI ContextMenu.Popup props are forwarded via ...props.

ContextMenuGroup

Groups related menu items together.

All Base UI ContextMenu.Group props are forwarded via ...props.

ContextMenuLabel

Non-interactive label for a group of menu items.

Prop

Type

All Base UI ContextMenu.GroupLabel props are forwarded via ...props.

ContextMenuItem

Individual actionable menu item.

Prop

Type

All Base UI ContextMenu.Item props are forwarded via ...props.

ContextMenuCheckboxItem

Toggleable checkbox menu item with a check indicator.

Prop

Type

All Base UI ContextMenu.CheckboxItem props are forwarded via ...props.

ContextMenuRadioGroup

Groups radio menu items for single-selection behavior.

All Base UI ContextMenu.RadioGroup props are forwarded via ...props.

ContextMenuRadioItem

Radio-selectable menu item within a radio group.

Prop

Type

All Base UI ContextMenu.RadioItem props are forwarded via ...props.

ContextMenuSeparator

Visual separator between menu items or groups.

Prop

Type

All Base UI ContextMenu.Separator props are forwarded via ...props.

ContextMenuShortcut

Displays a keyboard shortcut hint aligned to the right of a menu item.

Prop

Type

All standard span props are forwarded via ...props.

ContextMenuSub

Root provider for a submenu.

All Base UI ContextMenu.SubmenuRoot props are forwarded via ...props.

ContextMenuSubTrigger

Menu item that opens a submenu on hover or keyboard navigation.

Prop

Type

All Base UI ContextMenu.SubmenuTrigger props are forwarded via ...props.

ContextMenuSubContent

Popup panel for a submenu, rendered inside a portal with a positioner.

Prop

Type

All ContextMenuContent props are forwarded via ...props.

Accessibility

Keyboard Interactions

KeyAction
SpaceActivates the focused menu item
EnterActivates the focused menu item
ArrowDownMoves focus to the next menu item
ArrowUpMoves focus to the previous menu item
ArrowRightOpens a submenu when focused on a sub-trigger
ArrowLeftCloses a submenu and returns focus to the parent trigger
EscapeCloses the menu
HomeMoves focus to the first menu item
EndMoves focus to the last menu item

ARIA Attributes

  • ContextMenuContent receives role="menu".
  • ContextMenuItem receives role="menuitem".
  • ContextMenuCheckboxItem receives role="menuitemcheckbox" with aria-checked.
  • ContextMenuRadioItem receives role="menuitemradio" with aria-checked.
  • ContextMenuSub content receives role="menu" for nested menus.
  • data-disabled is set on disabled items, which sets aria-disabled.
  • Focus is managed within the menu and returns to the trigger area when the menu closes.

On this page