{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brand-react-icon",
  "dependencies": ["motion"],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "icons/brand-react-icon.tsx",
      "content": "import { forwardRef, useImperativeHandle } from \"react\";\nimport { motion, useAnimate } from \"motion/react\";\nimport type { AnimatedIconHandle, AnimatedIconProps } from \"./types\";\n\nconst BrandReactIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n  (\n    { size = 24, color = \"currentColor\", strokeWidth = 2, className = \"\" },\n    ref,\n  ) => {\n    const [scope, animate] = useAnimate();\n\n    const start = async () => {\n      await animate(\n        \".center-dot\",\n        { scale: [1, 1.4, 1.2] },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\".orbit-1\", { rotate: 360 }, { duration: 1, ease: \"linear\" });\n      animate(\".orbit-2\", { rotate: -360 }, { duration: 2, ease: \"linear\" });\n      animate(\".orbit-3\", { rotate: 360 }, { duration: 4, ease: \"linear\" });\n\n      // Pulsing center dot\n      animate(\n        \".center-dot\",\n        {\n          scale: [1.2, 1.35, 1.2],\n          opacity: [1, 0.8, 1],\n        },\n        { duration: 2, ease: \"easeInOut\" },\n      );\n\n      // Subtle breathing effect on all orbits\n      animate(\n        \".orbit-1\",\n        { scale: [1, 1.02, 1] },\n        { duration: 3, ease: \"easeInOut\" },\n      );\n      animate(\n        \".orbit-2\",\n        { scale: [1, 1.03, 1] },\n        { duration: 3.5, ease: \"easeInOut\", delay: 0.5 },\n      );\n      animate(\n        \".orbit-3\",\n        { scale: [1, 1.02, 1] },\n        { duration: 4, ease: \"easeInOut\", delay: 1 },\n      );\n    };\n\n    const stop = async () => {\n      // Smooth deceleration\n      await animate(\n        \".orbit-1\",\n        { rotate: 0, scale: 1 },\n        { duration: 0.8, ease: [0.22, 1, 0.36, 1] },\n      );\n      await animate(\n        \".orbit-2\",\n        { rotate: 0, scale: 1 },\n        { duration: 0.8, ease: [0.22, 1, 0.36, 1] },\n      );\n      await animate(\n        \".orbit-3\",\n        { rotate: 0, scale: 1 },\n        { duration: 0.8, ease: [0.22, 1, 0.36, 1] },\n      );\n\n      // Center dot settles back\n      await animate(\n        \".center-dot\",\n        { scale: 1, opacity: 1 },\n        { duration: 0.5, ease: \"easeOut\" },\n      );\n    };\n\n    useImperativeHandle(ref, () => {\n      return {\n        startAnimation: start,\n        stopAnimation: stop,\n      };\n    });\n\n    return (\n      <motion.svg\n        ref={scope}\n        onHoverStart={start}\n        onHoverEnd={stop}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width={size}\n        height={size}\n        viewBox=\"0 0 24 24\"\n        fill=\"none\"\n        stroke={color}\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        className={`cursor-pointer select-none ${className}`}\n      >\n        <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n        <motion.g\n          className=\"orbit-1\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        >\n          <path d=\"M6.306 8.711c-2.602 .723 -4.306 1.926 -4.306 3.289c0 2.21 4.477 4 10 4c.773 0 1.526 -.035 2.248 -.102\" />\n          <path d=\"M17.692 15.289c2.603 -.722 4.308 -1.926 4.308 -3.289c0 -2.21 -4.477 -4 -10 -4c-.773 0 -1.526 .035 -2.25 .102\" />\n        </motion.g>\n        <motion.g\n          className=\"orbit-2\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        >\n          <path d=\"M6.305 15.287c-.676 2.615 -.485 4.693 .695 5.373c1.913 1.105 5.703 -1.877 8.464 -6.66c.387 -.67 .733 -1.339 1.036 -2\" />\n          <path d=\"M17.694 8.716c.677 -2.616 .487 -4.696 -.694 -5.376c-1.913 -1.105 -5.703 1.877 -8.464 6.66c-.387 .67 -.733 1.34 -1.037 2\" />\n        </motion.g>\n        <motion.g\n          className=\"orbit-3\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        >\n          <path d=\"M12 5.424c-1.925 -1.892 -3.82 -2.766 -5 -2.084c-1.913 1.104 -1.226 5.877 1.536 10.66c.386 .67 .793 1.304 1.212 1.896\" />\n          <path d=\"M12 18.574c1.926 1.893 3.821 2.768 5 2.086c1.913 -1.104 1.226 -5.877 -1.536 -10.66c-.375 -.65 -.78 -1.283 -1.212 -1.897\" />\n        </motion.g>\n        <motion.path\n          className=\"center-dot\"\n          d=\"M11.5 12.866a1 1 0 1 0 1 -1.732a1 1 0 0 0 -1 1.732\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        />\n      </motion.svg>\n    );\n  },\n);\n\nBrandReactIcon.displayName = \"BrandReactIcon\";\n\nexport default BrandReactIcon;\n",
      "type": "registry:ui"
    },
    {
      "path": "icons/types.ts",
      "content": "import type { SVGProps } from \"react\";\n\n/** Standard stroke width for 24×24 outline icons */\nexport const DEFAULT_STROKE_WIDTH = 2;\n\n/** Scale stroke to match DEFAULT_STROKE_WIDTH on non-24 viewBoxes */\nexport function scaledStrokeWidth(\n  strokeWidth: number,\n  viewBoxSize: number,\n): number {\n  return strokeWidth * (viewBoxSize / 24);\n}\n\nexport type IconEasing =\n  | \"linear\"\n  | \"easeIn\"\n  | \"easeOut\"\n  | \"easeInOut\"\n  | \"circIn\"\n  | \"circOut\"\n  | \"circInOut\"\n  | \"backIn\"\n  | \"backOut\"\n  | \"backInOut\"\n  | \"anticipate\";\n\nexport interface AnimatedIconProps extends Omit<\n  SVGProps<SVGSVGElement>,\n  | \"ref\"\n  | \"onAnimationStart\"\n  | \"onAnimationEnd\"\n  | \"onAnimationIteration\"\n  | \"onDrag\"\n  | \"onDragEnd\"\n  | \"onDragEnter\"\n  | \"onDragExit\"\n  | \"onDragLeave\"\n  | \"onDragOver\"\n  | \"onDragStart\"\n  | \"onDrop\"\n  | \"values\"\n> {\n  /** Icon size in pixels or CSS string */\n  size?: number | string;\n  /** Icon color (defaults to currentColor) */\n  color?: string;\n  /** SVG stroke width */\n  strokeWidth?: number;\n  /** Additional CSS classes */\n  className?: string;\n}\n\nexport interface AnimatedIconHandle {\n  startAnimation: () => void;\n  stopAnimation: () => void;\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
