{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "glass-context-menu",
  "title": "Glass Context Menu",
  "author": "Alex Chih (https://alexchih.com)",
  "description": "Right-click menu on strong glass — items, checkboxes, radios, submenus. Built on Radix ContextMenu.",
  "dependencies": [
    "radix-ui",
    "lucide-react"
  ],
  "registryDependencies": [
    "https://washiveil.alexchih.com/r/theme.json"
  ],
  "files": [
    {
      "path": "registry/washiveil/ui/glass-context-menu.tsx",
      "content": "'use client'\n\nimport * as React from 'react'\nimport { ContextMenu as ContextMenuPrimitive } from 'radix-ui'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst GlassContextMenu = ContextMenuPrimitive.Root\n\nconst GlassContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst GlassContextMenuGroup = ContextMenuPrimitive.Group\n\nconst GlassContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst GlassContextMenuSub = ContextMenuPrimitive.Sub\n\nconst GlassContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst GlassContextMenuSubTrigger = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.SubTrigger>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\n    inset?: boolean\n  }\n>(({ className, inset, children, ...props }, ref) => (\n  <ContextMenuPrimitive.SubTrigger\n    ref={ref}\n    className={cn(\n      'flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground focus:ring-2 focus:ring-inset focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n      inset && 'pl-8',\n      className,\n    )}\n    {...props}\n  >\n    {children}\n    <ChevronRight className=\"ml-auto\" />\n  </ContextMenuPrimitive.SubTrigger>\n))\nGlassContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst GlassContextMenuSubContent = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.SubContent>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n  <ContextMenuPrimitive.Portal>\n    <ContextMenuPrimitive.SubContent\n      ref={ref}\n      className={cn(\n        'z-50 min-w-[8rem] overflow-hidden rounded-2xl border border-glass-edge bg-glass-stronger p-1.5 backdrop-blur-2xl backdrop-saturate-150 shadow-[0_16px_48px_rgba(28,25,20,0.12)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        className,\n      )}\n      {...props}\n    />\n  </ContextMenuPrimitive.Portal>\n))\nGlassContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst GlassContextMenuContent = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>\n>(({ className, ...props }, ref) => (\n  <ContextMenuPrimitive.Portal>\n    <ContextMenuPrimitive.Content\n      ref={ref}\n      className={cn(\n        'z-50 min-w-[8rem] overflow-hidden rounded-2xl border border-glass-edge bg-glass-stronger p-1.5 backdrop-blur-2xl backdrop-saturate-150 shadow-[0_16px_48px_rgba(28,25,20,0.12)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        className,\n      )}\n      {...props}\n    />\n  </ContextMenuPrimitive.Portal>\n))\nGlassContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst GlassContextMenuItem = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {\n    inset?: boolean\n  }\n>(({ className, inset, ...props }, ref) => (\n  <ContextMenuPrimitive.Item\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground focus:ring-2 focus:ring-inset focus:ring-ring data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n      inset && 'pl-8',\n      className,\n    )}\n    {...props}\n  />\n))\nGlassContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst GlassContextMenuCheckboxItem = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.CheckboxItem>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n  <ContextMenuPrimitive.CheckboxItem\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground focus:ring-2 focus:ring-inset focus:ring-ring data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      className,\n    )}\n    checked={checked}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n      <ContextMenuPrimitive.ItemIndicator>\n        <Check className=\"size-4\" />\n      </ContextMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </ContextMenuPrimitive.CheckboxItem>\n))\nGlassContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName\n\nconst GlassContextMenuRadioItem = React.forwardRef<\n  React.ComponentRef<typeof ContextMenuPrimitive.RadioItem>,\n  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n  <ContextMenuPrimitive.RadioItem\n    ref={ref}\n    className={cn(\n      'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground focus:ring-2 focus:ring-inset focus:ring-ring data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n      className,\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n      <ContextMenuPrimitive.ItemIndicator>\n        <Circle className=\"size-2 fill-current\" />\n      </ContextMenuPrimitive.ItemIndicator>\n    </span>\n    {children}\n  </ContextMenuPrimitive.RadioItem>\n))\nGlassContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nfunction GlassContextMenuLabel({\n  className,\n  inset,\n  ...props\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\n  inset?: boolean\n}) {\n  return (\n    <ContextMenuPrimitive.Label\n      className={cn(\n        'font-mono text-[0.6875rem] tracking-[0.15em] uppercase text-muted-foreground px-2 py-1.5',\n        inset && 'pl-8',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\nGlassContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nfunction GlassContextMenuSeparator({ className, ...props }: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>) {\n  return <ContextMenuPrimitive.Separator className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />\n}\nGlassContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nfunction GlassContextMenuShortcut({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n  return <span className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)} {...props} />\n}\nGlassContextMenuShortcut.displayName = 'GlassContextMenuShortcut'\n\nexport {\n  GlassContextMenu,\n  GlassContextMenuTrigger,\n  GlassContextMenuContent,\n  GlassContextMenuItem,\n  GlassContextMenuCheckboxItem,\n  GlassContextMenuRadioItem,\n  GlassContextMenuLabel,\n  GlassContextMenuSeparator,\n  GlassContextMenuShortcut,\n  GlassContextMenuGroup,\n  GlassContextMenuPortal,\n  GlassContextMenuSub,\n  GlassContextMenuSubContent,\n  GlassContextMenuSubTrigger,\n  GlassContextMenuRadioGroup,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}