{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "context-menu",
  "type": "registry:ui",
  "title": "Context menu",
  "dependencies": [
    "@radix-ui/react-context-menu"
  ],
  "files": [
    {
      "path": "src/components/ui/context-menu.tsx",
      "content": "\"use client\"\r\n\r\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\r\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nfunction ContextMenu({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\r\n  return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\r\n}\r\n\r\nconst ContextMenuTrigger = ({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) => {\r\n  return (\r\n    <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\r\n  )\r\n}\r\n\r\nconst ContextMenuGroup = ({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) => {\r\n  return (\r\n    <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\r\n  )\r\n}\r\n\r\nconst ContextMenuPortal = ({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) => {\r\n  return (\r\n    <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\r\n  )\r\n}\r\n\r\nconst ContextMenuSub = ({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) => {\r\n  return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\r\n}\r\n\r\nconst ContextMenuRadioGroup = ({\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) => {\r\n  return (\r\n    <ContextMenuPrimitive.RadioGroup\r\n      data-slot=\"context-menu-radio-group\"\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nfunction ContextMenuSubTrigger({\r\n  className,\r\n  inset,\r\n  children,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {\r\n  inset?: boolean\r\n}) {\r\n  return (\r\n    <ContextMenuPrimitive.SubTrigger\r\n      data-slot=\"context-menu-sub-trigger\"\r\n      data-inset={inset}\r\n      className={cn(\r\n        \"flex cursor-default select-none items-center rounded-base border-2 border-transparent bg-main px-2 py-1.5 text-sm font-base text-main-foreground outline-hidden data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:border-border data-[state=open]:border-border\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    >\r\n      {children}\r\n      <ChevronRight className=\"ml-auto\" />\r\n    </ContextMenuPrimitive.SubTrigger>\r\n  )\r\n}\r\n\r\nfunction ContextMenuSubContent({\r\n  className,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>) {\r\n  return (\r\n    <ContextMenuPrimitive.SubContent\r\n      data-slot=\"context-menu-sub-content\"\r\n      className={cn(\r\n        \"z-50 min-w-[8rem] overflow-hidden rounded-base border-2 border-border bg-main p-1 font-base text-main-foreground 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 origin-(--radix-context-menu-content-transform-origin)\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nfunction ContextMenuContent({\r\n  className,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>) {\r\n  return (\r\n    <ContextMenuPrimitive.Portal>\r\n      <ContextMenuPrimitive.Content\r\n        data-slot=\"context-menu-content\"\r\n        className={cn(\r\n          \"z-50 min-w-[8rem] overflow-hidden rounded-base border-2 border-border bg-main p-1 font-base text-main-foreground shadow-md animate-in fade-in-80 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 origin-(--radix-context-menu-content-transform-origin)\",\r\n          className,\r\n        )}\r\n        {...props}\r\n      />\r\n    </ContextMenuPrimitive.Portal>\r\n  )\r\n}\r\n\r\nfunction ContextMenuItem({\r\n  className,\r\n  inset,\r\n  ...props\r\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\r\n  inset?: boolean\r\n}) {\r\n  return (\r\n    <ContextMenuPrimitive.Item\r\n      data-slot=\"context-menu-item\"\r\n      data-inset={inset}\r\n      className={cn(\r\n        \"relative flex cursor-default select-none items-center rounded-base border-2 border-transparent px-2 py-1.5 gap-2 text-sm outline-none focus:border-border data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nfunction ContextMenuCheckboxItem({\r\n  className,\r\n  children,\r\n  checked,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>) {\r\n  return (\r\n    <ContextMenuPrimitive.CheckboxItem\r\n      data-slot=\"context-menu-checkbox-item\"\r\n      className={cn(\r\n        \"relative flex cursor-default select-none items-center rounded-base border-2 border-transparent py-1.5 pl-8 pr-2 gap-2 text-sm font-base text-main-foreground outline-hidden focus:border-border data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n        className,\r\n      )}\r\n      checked={checked}\r\n      {...props}\r\n    >\r\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n        <ContextMenuPrimitive.ItemIndicator>\r\n          <Check className=\"h-4 w-4\" />\r\n        </ContextMenuPrimitive.ItemIndicator>\r\n      </span>\r\n      {children}\r\n    </ContextMenuPrimitive.CheckboxItem>\r\n  )\r\n}\r\n\r\nfunction ContextMenuRadioItem({\r\n  className,\r\n  children,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>) {\r\n  return (\r\n    <ContextMenuPrimitive.RadioItem\r\n      data-slot=\"context-menu-radio-item\"\r\n      className={cn(\r\n        \"relative flex cursor-default select-none items-center rounded-base border-2 border-transparent py-1.5 pl-8 pr-2 gap-2 text-sm font-base text-main-foreground outline-hidden focus:border-border data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    >\r\n      <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n        <ContextMenuPrimitive.ItemIndicator>\r\n          <Circle className=\"h-2 w-2 fill-current\" />\r\n        </ContextMenuPrimitive.ItemIndicator>\r\n      </span>\r\n      {children}\r\n    </ContextMenuPrimitive.RadioItem>\r\n  )\r\n}\r\n\r\nfunction ContextMenuLabel({\r\n  className,\r\n  inset,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {\r\n  inset?: boolean\r\n}) {\r\n  return (\r\n    <ContextMenuPrimitive.Label\r\n      data-slot=\"context-menu-label\"\r\n      data-inset={inset}\r\n      className={cn(\r\n        \"px-2 py-1.5 text-sm font-base border-2 border-transparent text-main-foreground data-[inset]:pl-8\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nfunction ContextMenuSeparator({\r\n  className,\r\n  ...props\r\n}: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>) {\r\n  return (\r\n    <ContextMenuPrimitive.Separator\r\n      data-slot=\"context-menu-separator\"\r\n      className={cn(\"-mx-1 my-1 h-0.5 bg-border\", className)}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nconst ContextMenuShortcut = ({\r\n  className,\r\n  ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n  return (\r\n    <span\r\n      className={cn(\r\n        \"ml-auto text-xs font-base tracking-widest text-main-foreground\",\r\n        className,\r\n      )}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\r\n\r\nexport {\r\n  ContextMenu,\r\n  ContextMenuTrigger,\r\n  ContextMenuContent,\r\n  ContextMenuItem,\r\n  ContextMenuCheckboxItem,\r\n  ContextMenuRadioItem,\r\n  ContextMenuLabel,\r\n  ContextMenuSeparator,\r\n  ContextMenuShortcut,\r\n  ContextMenuGroup,\r\n  ContextMenuPortal,\r\n  ContextMenuSub,\r\n  ContextMenuSubContent,\r\n  ContextMenuSubTrigger,\r\n  ContextMenuRadioGroup,\r\n}\r\n",
      "type": "registry:ui"
    }
  ]
}