Context Menu

Usage

Right click here
import {
  ContextMenu,
  ContextMenuContent,
  ContextMenuItem,
  ContextMenuSeparator,
  ContextMenuShortcut,
  ContextMenuTrigger
} from '@jamie/ui/context-menu'
import { CopyIcon, FileTextIcon, ShareIcon, SparklesIcon, TrashIcon } from 'lucide-react'
 
export function ContextMenuDemo() {
  return (
    <ContextMenu>
      <ContextMenuTrigger className="flex h-36 w-72 items-center justify-center rounded-md border border-dashed text-sm">
        Right click here
      </ContextMenuTrigger>
      <ContextMenuContent className="w-56">
        <ContextMenuItem>
          <FileTextIcon className="size-4" />
          View Transcript
          <ContextMenuShortcut>⌘T</ContextMenuShortcut>
        </ContextMenuItem>
        <ContextMenuItem>
          <SparklesIcon className="size-4" />
          Ask AI
          <ContextMenuShortcut>⌘A</ContextMenuShortcut>
        </ContextMenuItem>
        <ContextMenuItem>
          <CopyIcon className="size-4" />
          Copy Summary
          <ContextMenuShortcut>⌘C</ContextMenuShortcut>
        </ContextMenuItem>
        <ContextMenuSeparator />
        <ContextMenuItem>
          <ShareIcon className="size-4" />
          Share
        </ContextMenuItem>
        <ContextMenuSeparator />
        <ContextMenuItem variant="destructive">
          <TrashIcon className="size-4" />
          Delete
          <ContextMenuShortcut>⌘⌫</ContextMenuShortcut>
        </ContextMenuItem>
      </ContextMenuContent>
    </ContextMenu>
  )
}

With Submenu

Combine checkbox items, radio groups, and submenus for complex option panels.

Right click here
'use client'
 
import {
  ContextMenu,
  ContextMenuCheckboxItem,
  ContextMenuContent,
  ContextMenuGroup,
  ContextMenuLabel,
  ContextMenuRadioGroup,
  ContextMenuRadioItem,
  ContextMenuSeparator,
  ContextMenuSub,
  ContextMenuSubContent,
  ContextMenuSubTrigger,
  ContextMenuTrigger
} from '@jamie/ui/context-menu'
import { useState } from 'react'
 
export function ContextMenuWithSubmenuDemo() {
  const [speakerLabels, setSpeakerLabels] = useState(true)
  const [timestamps, setTimestamps] = useState(false)
  const [format, setFormat] = useState('bullets')
 
  return (
    <ContextMenu>
      <ContextMenuTrigger className="flex h-36 w-72 items-center justify-center rounded-md border border-dashed text-sm">
        Right click here
      </ContextMenuTrigger>
      <ContextMenuContent className="w-56">
        <ContextMenuGroup>
          <ContextMenuLabel>Display Options</ContextMenuLabel>
          <ContextMenuCheckboxItem checked={speakerLabels} onCheckedChange={setSpeakerLabels}>
            Speaker Labels
          </ContextMenuCheckboxItem>
          <ContextMenuCheckboxItem checked={timestamps} onCheckedChange={setTimestamps}>
            Timestamps
          </ContextMenuCheckboxItem>
        </ContextMenuGroup>
        <ContextMenuSeparator />
        <ContextMenuSub>
          <ContextMenuSubTrigger>Summary Format</ContextMenuSubTrigger>
          <ContextMenuSubContent>
            <ContextMenuRadioGroup value={format} onValueChange={setFormat}>
              <ContextMenuRadioItem value="bullets">Bullet Points</ContextMenuRadioItem>
              <ContextMenuRadioItem value="paragraph">Paragraph</ContextMenuRadioItem>
              <ContextMenuRadioItem value="action-items">Action Items Only</ContextMenuRadioItem>
            </ContextMenuRadioGroup>
          </ContextMenuSubContent>
        </ContextMenuSub>
      </ContextMenuContent>
    </ContextMenu>
  )
}