Skip to content
Highlight

ComponentsUpdated Sep 9, 2026

Context Menu

A right-click menu anchored at the pointer. Items share styling with Menu; composition is explicit (Portal, Positioner, Popup) because there is no trigger button.

Import

Source: packages/ui/src/components/context-menu

tsx
import { ContextMenu } from '@highlight/ui'

Basic

Includes a nested submenu.

Right-click here
tsx
import { ContextMenu } from '@highlight/ui'

export default function ContextMenuBasic() {
  return (
    <ContextMenu>
      <ContextMenu.Trigger className="border-border/20 text-foreground/60 flex h-32 w-72 select-none items-center justify-center rounded-xl border border-dashed text-sm">
        Right-click here
      </ContextMenu.Trigger>
      <ContextMenu.Portal>
        <ContextMenu.Positioner>
          <ContextMenu.Popup className="min-w-40">
            <ContextMenu.Item>Rename…</ContextMenu.Item>
            <ContextMenu.Item>Duplicate</ContextMenu.Item>
            <ContextMenu.SubmenuRoot>
              <ContextMenu.SubmenuTrigger>Move to</ContextMenu.SubmenuTrigger>
              <ContextMenu.Portal>
                <ContextMenu.Positioner>
                  <ContextMenu.Popup className="min-w-32">
                    <ContextMenu.Item>Inbox</ContextMenu.Item>
                    <ContextMenu.Item>Archive</ContextMenu.Item>
                  </ContextMenu.Popup>
                </ContextMenu.Positioner>
              </ContextMenu.Portal>
            </ContextMenu.SubmenuRoot>
            <ContextMenu.Separator />
            <ContextMenu.Item variant="danger">Delete</ContextMenu.Item>
          </ContextMenu.Popup>
        </ContextMenu.Positioner>
      </ContextMenu.Portal>
    </ContextMenu>
  )
}

Parts

Compound sub-components. Every part accepts className and forwards the rest of its props to Base UI.

ContextMenu.Trigger
The region that listens for contextmenu.
ContextMenu.Portal / Positioner / Popup
Always compose all three.
ContextMenu.Item / CheckboxItem / RadioGroup / RadioItem / Separator / Group / GroupLabel
Same API as Menu.
ContextMenu.SubmenuRoot / SubmenuTrigger
Nested menus.