{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "context-menu",
  "type": "registry:ui",
  "title": "Context Menu",
  "description": "Pointer-positioned right-click and long-press menu with nested actions and selection controls.",
  "dependencies": [
    "@base-ui/react@^1.6.0"
  ],
  "registryDependencies": [
    "http://127.0.0.1:3000/r/core.json"
  ],
  "files": [
    {
      "path": "src/registry/sources/control-ui/ui/context-menu.tsx",
      "target": "@components/control-ui/ui/context-menu.tsx",
      "type": "registry:ui",
      "content": "\"use client\";\n\nimport { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\";\nimport type { ComponentProps } from \"react\";\nimport type {\n  ContextMenuCheckboxItemProps,\n  ContextMenuContentProps,\n  ContextMenuGroupProps,\n  ContextMenuItemProps,\n  ContextMenuLabelProps,\n  ContextMenuProps,\n  ContextMenuRadioGroupProps,\n  ContextMenuRadioItemProps,\n  ContextMenuSeparatorProps,\n  ContextMenuShortcutProps,\n  ContextMenuSubContentProps,\n  ContextMenuSubProps,\n  ContextMenuSubTriggerProps,\n  ContextMenuTriggerProps,\n} from \"@/components/control-ui/contracts\";\nimport { cn } from \"@/components/control-ui/lib/cn\";\nimport { skinEffects, skinFamily, skinId, skinSlot } from \"@/components/control-ui/skin\";\nimport { floatingListContentClasses, floatingListItemClasses } from \"@/components/control-ui/surface-variants\";\n\n// Composes like DropdownMenu behind right-click trigger; API stays shadcn/ui context-menu compatible.\n\nconst popupClasses = cn(\"min-w-[10rem]\", floatingListContentClasses);\n\n// group/cmi lets gutter glyphs and shortcuts key off highlighted row if pack wants them to.\nconst itemClasses = cn(\"group/cmi relative\", floatingListItemClasses);\n\nexport function ContextMenu(props: ContextMenuProps) {\n  return <ContextMenuPrimitive.Root {...props} />;\n}\n\nexport function ContextMenuTrigger({ className, ...props }: ContextMenuTriggerProps) {\n  return (\n    <ContextMenuPrimitive.Trigger\n      data-control-ui=\"context-menu\"\n      data-slot=\"trigger\"\n      className={cn(skinSlot(\"context-menu\", \"trigger\", {}), className)}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuPortal(props: ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n  return <ContextMenuPrimitive.Portal {...props} />;\n}\n\nexport function ContextMenuGroup({ className, ...props }: ContextMenuGroupProps) {\n  return (\n    <ContextMenuPrimitive.Group\n      data-control-ui=\"context-menu\"\n      data-slot=\"group\"\n      className={cn(skinSlot(\"context-menu\", \"group\", {}), className)}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuContent({ className, children, ...props }: ContextMenuContentProps) {\n  return (\n    <ContextMenuPrimitive.Portal>\n      {/* portal escapes every token-scoped ancestor, so scope is re-asserted here */}\n      <ContextMenuPrimitive.Positioner data-skin={skinId()} data-effects={skinEffects()} className=\"z-[80] outline-none\">\n        <ContextMenuPrimitive.Popup\n          data-control-ui=\"context-menu\"\n          data-slot=\"content\"\n          data-surface=\"floating\"\n          data-popup-part=\"list-surface\"\n          className={cn(popupClasses, skinFamily(\"popup\", \"list-surface\"), skinSlot(\"context-menu\", \"content\", {}), className)}\n          {...props}\n        >\n          {children}\n        </ContextMenuPrimitive.Popup>\n      </ContextMenuPrimitive.Positioner>\n    </ContextMenuPrimitive.Portal>\n  );\n}\n\nexport function ContextMenuItem({ className, inset = false, ...props }: ContextMenuItemProps) {\n  return (\n    <ContextMenuPrimitive.Item\n      data-control-ui=\"context-menu\"\n      data-slot=\"item\"\n      data-popup-part=\"item\"\n      className={cn(\n        itemClasses,\n        inset && \"pl-8\",\n        skinFamily(\"popup\", \"item\"),\n        skinSlot(\"context-menu\", \"item\", { disabled: Boolean(props.disabled) }),\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuCheckboxItem({ className, children, ...props }: ContextMenuCheckboxItemProps) {\n  return (\n    <ContextMenuPrimitive.CheckboxItem\n      data-control-ui=\"context-menu\"\n      data-slot=\"checkbox-item\"\n      data-popup-part=\"item\"\n      className={cn(\n        itemClasses,\n        \"pl-8\",\n        skinFamily(\"popup\", \"item\"),\n        skinSlot(\"context-menu\", \"checkbox-item\", { disabled: Boolean(props.disabled) }),\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-4 items-center justify-center\">\n        <ContextMenuPrimitive.CheckboxItemIndicator>\n          <svg viewBox=\"0 0 12 12\" className=\"size-3\" aria-hidden=\"true\" fill=\"none\">\n            <path d=\"M2.5 6.5 5 9l4.5-5\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n          </svg>\n        </ContextMenuPrimitive.CheckboxItemIndicator>\n      </span>\n      {children}\n    </ContextMenuPrimitive.CheckboxItem>\n  );\n}\n\nexport function ContextMenuRadioGroup<TValue extends string = string>({ className, ...props }: ContextMenuRadioGroupProps<TValue>) {\n  return (\n    <ContextMenuPrimitive.RadioGroup\n      data-control-ui=\"context-menu\"\n      data-slot=\"radio-group\"\n      className={cn(skinSlot(\"context-menu\", \"radio-group\", {}), className)}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuRadioItem({ className, children, ...props }: ContextMenuRadioItemProps) {\n  return (\n    <ContextMenuPrimitive.RadioItem\n      data-control-ui=\"context-menu\"\n      data-slot=\"radio-item\"\n      data-popup-part=\"item\"\n      className={cn(\n        itemClasses,\n        \"pl-8\",\n        skinFamily(\"popup\", \"item\"),\n        skinSlot(\"context-menu\", \"radio-item\", { disabled: Boolean(props.disabled) }),\n        className,\n      )}\n      {...props}\n    >\n      <span className=\"pointer-events-none absolute left-2 flex size-4 items-center justify-center\">\n        <ContextMenuPrimitive.RadioItemIndicator>\n          <span className=\"block size-1.5 rounded-full bg-current\" />\n        </ContextMenuPrimitive.RadioItemIndicator>\n      </span>\n      {children}\n    </ContextMenuPrimitive.RadioItem>\n  );\n}\n\nexport function ContextMenuLabel({ className, inset = false, ...props }: ContextMenuLabelProps) {\n  return (\n    <ContextMenuPrimitive.GroupLabel\n      data-control-ui=\"context-menu\"\n      data-slot=\"label\"\n      data-popup-part=\"label\"\n      className={cn(\n        \"px-[calc(var(--padding-x)*0.5)] py-1 text-micro font-medium uppercase tracking-[0.08em] text-muted-foreground\",\n        inset && \"pl-8\",\n        skinFamily(\"popup\", \"label\"),\n        skinSlot(\"context-menu\", \"label\", {}),\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuSeparator({ className, ...props }: ContextMenuSeparatorProps) {\n  return (\n    <ContextMenuPrimitive.Separator\n      data-control-ui=\"context-menu\"\n      data-slot=\"separator\"\n      data-popup-part=\"separator\"\n      className={cn(\n        \"-mx-[var(--popover-padding)] my-1 h-px bg-border\",\n        skinFamily(\"popup\", \"separator\"),\n        skinSlot(\"context-menu\", \"separator\", {}),\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuShortcut({ className, ...props }: ContextMenuShortcutProps) {\n  return (\n    <span\n      data-control-ui=\"context-menu\"\n      data-slot=\"shortcut\"\n      data-popup-part=\"shortcut\"\n      className={cn(\n        \"ml-auto pl-6 text-body tracking-[0.02em] text-muted-foreground\",\n        skinFamily(\"popup\", \"shortcut\"),\n        skinSlot(\"context-menu\", \"shortcut\", {}),\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function ContextMenuSub(props: ContextMenuSubProps) {\n  return <ContextMenuPrimitive.SubmenuRoot {...props} />;\n}\n\nexport function ContextMenuSubTrigger({ className, inset = false, children, ...props }: ContextMenuSubTriggerProps) {\n  return (\n    <ContextMenuPrimitive.SubmenuTrigger\n      data-control-ui=\"context-menu\"\n      data-slot=\"sub-trigger\"\n      data-popup-part=\"item\"\n      className={cn(\n        itemClasses,\n        \"data-[popup-open]:bg-foreground/6\",\n        inset && \"pl-8\",\n        skinFamily(\"popup\", \"item\"),\n        skinSlot(\"context-menu\", \"sub-trigger\", { disabled: Boolean(props.disabled) }),\n        className,\n      )}\n      {...props}\n    >\n      {children}\n      <span aria-hidden=\"true\" className=\"ml-auto pl-4 text-body leading-none\">\n        ›\n      </span>\n    </ContextMenuPrimitive.SubmenuTrigger>\n  );\n}\n\nexport function ContextMenuSubContent({ className, children, ...props }: ContextMenuSubContentProps) {\n  return (\n    <ContextMenuPrimitive.Portal>\n      <ContextMenuPrimitive.Positioner\n        data-skin={skinId()}\n        data-effects={skinEffects()}\n        className=\"z-[80] outline-none\"\n        sideOffset={-4}\n        alignOffset={-5}\n      >\n        <ContextMenuPrimitive.Popup\n          data-control-ui=\"context-menu\"\n          data-slot=\"sub-content\"\n          data-surface=\"floating\"\n          data-popup-part=\"list-surface\"\n          className={cn(popupClasses, skinFamily(\"popup\", \"list-surface\"), skinSlot(\"context-menu\", \"sub-content\", {}), className)}\n          {...props}\n        >\n          {children}\n        </ContextMenuPrimitive.Popup>\n      </ContextMenuPrimitive.Positioner>\n    </ContextMenuPrimitive.Portal>\n  );\n}\n"
    }
  ],
  "meta": {}
}
