Dropdown Menu

Usage

import { Button } from '@jamie/ui/button'
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuSeparator,
  DropdownMenuShortcut,
  DropdownMenuTrigger
} from '@jamie/ui/dropdown-menu'
import {
  CopyIcon,
  FileTextIcon,
  MoreHorizontalIcon,
  ShareIcon,
  SparklesIcon,
  TrashIcon
} from 'lucide-react'
 
export function DropdownMenuDemo() {
  return (
    <DropdownMenu>
      <DropdownMenuTrigger render={<Button variant="outline" />}>
        <MoreHorizontalIcon className="size-4" />
        Meeting Options
      </DropdownMenuTrigger>
      <DropdownMenuContent className="w-56">
        <DropdownMenuItem>
          <FileTextIcon className="size-4" />
          View Transcript
          <DropdownMenuShortcut>⌘T</DropdownMenuShortcut>
        </DropdownMenuItem>
        <DropdownMenuItem>
          <SparklesIcon className="size-4" />
          Ask AI
        </DropdownMenuItem>
        <DropdownMenuItem>
          <CopyIcon className="size-4" />
          Copy Summary
        </DropdownMenuItem>
        <DropdownMenuItem>
          <ShareIcon className="size-4" />
          Share
        </DropdownMenuItem>
        <DropdownMenuSeparator />
        <DropdownMenuItem variant="destructive">
          <TrashIcon className="size-4" />
          Delete Meeting
          <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
        </DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  )
}

With Submenu

Add checkbox items, radio groups, and nested submenus for advanced option panels.

'use client'
 
import { Button } from '@jamie/ui/button'
import {
  DropdownMenu,
  DropdownMenuCheckboxItem,
  DropdownMenuContent,
  DropdownMenuGroup,
  DropdownMenuItem,
  DropdownMenuLabel,
  DropdownMenuRadioGroup,
  DropdownMenuRadioItem,
  DropdownMenuSeparator,
  DropdownMenuSub,
  DropdownMenuSubContent,
  DropdownMenuSubTrigger,
  DropdownMenuTrigger
} from '@jamie/ui/dropdown-menu'
import { DownloadIcon } from 'lucide-react'
import { useState } from 'react'
 
export function DropdownMenuWithSubmenuDemo() {
  const [showSpeakers, setShowSpeakers] = useState(true)
  const [showTimestamps, setShowTimestamps] = useState(false)
  const [format, setFormat] = useState('pdf')
 
  return (
    <DropdownMenu>
      <DropdownMenuTrigger render={<Button variant="outline" />}>
        <DownloadIcon className="size-4" />
        Export
      </DropdownMenuTrigger>
      <DropdownMenuContent className="w-56">
        <DropdownMenuGroup>
          <DropdownMenuLabel>Include</DropdownMenuLabel>
          <DropdownMenuCheckboxItem checked={showSpeakers} onCheckedChange={setShowSpeakers}>
            Speaker Labels
          </DropdownMenuCheckboxItem>
          <DropdownMenuCheckboxItem checked={showTimestamps} onCheckedChange={setShowTimestamps}>
            Timestamps
          </DropdownMenuCheckboxItem>
        </DropdownMenuGroup>
        <DropdownMenuSeparator />
        <DropdownMenuSub>
          <DropdownMenuSubTrigger>Export Format</DropdownMenuSubTrigger>
          <DropdownMenuSubContent>
            <DropdownMenuRadioGroup value={format} onValueChange={setFormat}>
              <DropdownMenuRadioItem value="pdf">PDF</DropdownMenuRadioItem>
              <DropdownMenuRadioItem value="docx">Word (.docx)</DropdownMenuRadioItem>
              <DropdownMenuRadioItem value="md">Markdown</DropdownMenuRadioItem>
            </DropdownMenuRadioGroup>
          </DropdownMenuSubContent>
        </DropdownMenuSub>
        <DropdownMenuSeparator />
        <DropdownMenuItem>
          <DownloadIcon className="size-4" />
          Download
        </DropdownMenuItem>
      </DropdownMenuContent>
    </DropdownMenu>
  )
}