{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "context-menu",
  "title": "Context Menu",
  "description": "A right-click menu that unfolds from the exact point you pressed, with the same gliding highlight as Menu.",
  "dependencies": [],
  "registryDependencies": [
    "@keyframery/motion",
    "@keyframery/menu"
  ],
  "files": [
    {
      "path": "registry/components/keyframery/primitives/context-menu.tsx",
      "content": "\"use client\"\n\n/* Animated context menu for `@ui-sdk/react/menu`: a menu opened by a right-click, a long press or\n   Shift+F10 on a `MenuContextTrigger`. It is the animated menu primitive (same sheet, same gliding\n   highlight, same row cascade, same drawn checks), so everything from `@/components/primitives/menu`\n   passes through, and the parts are also exported under ContextMenu* names.\n\n   The one difference is the unfold. A context menu has no trigger to grow out of: UI SDK anchors it\n   to the press point and puts that point in `--transform-origin`. So the sheet starts smaller (0.6),\n   does not slide toward a trigger, and grows straight out of the pointer. */\n\nimport {\n  Menu,\n  MenuCheckboxItem,\n  MenuContent as MenuContentPart,\n  MenuContextTrigger,\n  MenuGroup,\n  MenuGroupLabel,\n  MenuItem,\n  MenuItemIcon,\n  MenuItemIndicator,\n  MenuRadioGroup,\n  MenuRadioItem,\n  MenuSeparator,\n  MenuShortcut,\n  MenuSub,\n  MenuSubContent,\n  MenuSubTrigger,\n} from \"@/components/keyframery/primitives/menu\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport * from \"@/components/keyframery/primitives/menu\"\n\n/* Unfold from the point: no travel, a deeper scale and blur, the same spring in and quick fade out. */\nconst contextMenuMotion = cn(\n  \"data-starting-style:[translate:0_0] data-starting-style:scale-[0.6] data-starting-style:blur-[8px]\",\n  \"data-ending-style:scale-[0.94]\",\n  /* Reduced motion: appear in place, no scale or blur. */\n  \"motion-reduce:data-starting-style:scale-100 motion-reduce:data-starting-style:blur-none motion-reduce:data-ending-style:scale-100\",\n)\n\nfunction ContextMenuContent<Payload = unknown>({\n  className,\n  ...props\n}: React.ComponentProps<typeof MenuContentPart<Payload>>) {\n  return <MenuContentPart<Payload> className={cn(contextMenuMotion, className)} {...props} />\n}\n\nexport {\n  Menu as ContextMenu,\n  MenuCheckboxItem as ContextMenuCheckboxItem,\n  ContextMenuContent,\n  MenuGroup as ContextMenuGroup,\n  MenuGroupLabel as ContextMenuGroupLabel,\n  MenuItem as ContextMenuItem,\n  MenuItemIcon as ContextMenuItemIcon,\n  MenuItemIndicator as ContextMenuItemIndicator,\n  contextMenuMotion,\n  MenuRadioGroup as ContextMenuRadioGroup,\n  MenuRadioItem as ContextMenuRadioItem,\n  MenuSeparator as ContextMenuSeparator,\n  MenuShortcut as ContextMenuShortcut,\n  MenuSub as ContextMenuSub,\n  MenuSubContent as ContextMenuSubContent,\n  MenuSubTrigger as ContextMenuSubTrigger,\n  MenuContextTrigger as ContextMenuTrigger,\n}\n",
      "type": "registry:component",
      "target": "components/keyframery/primitives/context-menu.tsx"
    },
    {
      "path": "registry/components/keyframery/context-menu.tsx",
      "content": "\"use client\"\n\n/* Styled context menu: the styled menu (same sheet, rows, highlight and checks) with the\n   context-menu unfold from `@/components/primitives/context-menu`. */\n\nimport * as React from \"react\"\n\nimport { contextMenuMotion } from \"@/components/keyframery/primitives/context-menu\"\nimport {\n  Menu,\n  MenuCheckboxItem,\n  MenuContent,\n  MenuContextTrigger,\n  MenuGroup,\n  MenuGroupLabel,\n  MenuItem,\n  MenuItemIcon,\n  MenuItemIndicator,\n  MenuItems,\n  MenuRadioGroup,\n  MenuRadioItem,\n  MenuSeparator,\n  MenuShortcut,\n  MenuSub,\n  MenuSubContent,\n  MenuSubTrigger,\n} from \"@/components/keyframery/menu\"\nimport { cn } from \"@/lib/utils\"\n\n/* Opens right at the pointer, so only a hair of offset. */\nfunction ContextMenuContent<Payload = unknown>({\n  className,\n  sideOffset = 2,\n  ...props\n}: React.ComponentProps<typeof MenuContent<Payload>>) {\n  return <MenuContent<Payload> sideOffset={sideOffset} className={cn(contextMenuMotion, className)} {...props} />\n}\n\nexport {\n  Menu as ContextMenu,\n  MenuCheckboxItem as ContextMenuCheckboxItem,\n  ContextMenuContent,\n  MenuGroup as ContextMenuGroup,\n  MenuGroupLabel as ContextMenuGroupLabel,\n  MenuItem as ContextMenuItem,\n  MenuItemIcon as ContextMenuItemIcon,\n  MenuItemIndicator as ContextMenuItemIndicator,\n  MenuItems as ContextMenuItems,\n  MenuRadioGroup as ContextMenuRadioGroup,\n  MenuRadioItem as ContextMenuRadioItem,\n  MenuSeparator as ContextMenuSeparator,\n  MenuShortcut as ContextMenuShortcut,\n  MenuSub as ContextMenuSub,\n  MenuSubContent as ContextMenuSubContent,\n  MenuSubTrigger as ContextMenuSubTrigger,\n  MenuContextTrigger as ContextMenuTrigger,\n}\n",
      "type": "registry:component",
      "target": "components/keyframery/context-menu.tsx"
    }
  ],
  "type": "registry:component"
}