{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brand-react-native-icon",
  "dependencies": ["motion"],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "icons/brand-react-native-icon.tsx",
      "content": "import { forwardRef, useImperativeHandle, useRef } from \"react\";\nimport { motion, useAnimate } from \"motion/react\";\nimport type { AnimatedIconHandle, AnimatedIconProps } from \"./types\";\n\nconst BrandReactNativeIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n  (\n    { size = 24, color = \"currentColor\", strokeWidth = 2, className = \"\" },\n    ref,\n  ) => {\n    const [scope, animate] = useAnimate();\n    const animationControls = useRef<Array<ReturnType<typeof animate>>>([]);\n\n    const start = async () => {\n      // Clear any existing animations\n      animationControls.current.forEach((control) => control.stop());\n      animationControls.current = [];\n\n      // Smooth pop entrance\n      await animate(\n        \".orbit-system\",\n        { scale: [0.95, 1.02, 1] },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      // Center dot gentle pulse\n      animationControls.current.push(\n        animate(\n          \".center-dot\",\n          {\n            scale: [1, 1.3, 1],\n            opacity: [1, 0.8, 1],\n          },\n          {\n            duration: 2.5,\n            ease: \"easeInOut\",\n            repeat: Infinity,\n          },\n        ),\n      );\n\n      // Smooth continuous rotation\n      animationControls.current.push(\n        animate(\n          \".orbit-system\",\n          { rotate: 360 },\n          {\n            duration: 20,\n            ease: \"linear\",\n            repeat: Infinity,\n          },\n        ),\n      );\n\n      // Subtle wave through rings\n      const rings = [\".ring-1\", \".ring-2\", \".ring-3\"];\n      rings.forEach((ring, i) => {\n        animationControls.current.push(\n          animate(\n            ring,\n            {\n              opacity: [1, 0.7, 1],\n            },\n            {\n              duration: 3,\n              ease: \"easeInOut\",\n              repeat: Infinity,\n              delay: i * 1,\n            },\n          ),\n        );\n      });\n    };\n\n    const stop = () => {\n      // Cancel all infinite animations\n      animationControls.current.forEach((control) => control.stop());\n      animationControls.current = [];\n\n      animate(\n        \".orbit-system\",\n        { rotate: 0, scale: 1 },\n        { duration: 0.6, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\".ring-1, .ring-2, .ring-3\", { opacity: 1 }, { duration: 0.3 });\n\n      animate(\".center-dot\", { scale: 1, opacity: 1 }, { duration: 0.3 });\n    };\n\n    useImperativeHandle(ref, () => ({\n      startAnimation: start,\n      stopAnimation: stop,\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-system\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        >\n          <motion.path\n            className=\"ring-1\"\n            d=\"M6.357 9c-2.637 .68 -4.357 1.845 -4.357 3.175c0 2.107 4.405 3.825 9.85 3.825c.74 0 1.26 -.039 1.95 -.097\"\n          />\n          <motion.path\n            className=\"ring-1\"\n            d=\"M9.837 15.9c-.413 -.596 -.806 -1.133 -1.18 -1.8c-2.751 -4.9 -3.488 -9.77 -1.63 -10.873c1.15 -.697 3.047 .253 4.974 2.254\"\n          />\n          <motion.path\n            className=\"ring-2\"\n            d=\"M6.429 15.387c-.702 2.688 -.56 4.716 .56 5.395c1.783 1.08 5.387 -1.958 8.043 -6.804c.36 -.67 .683 -1.329 .968 -1.978\"\n          />\n          <motion.path\n            className=\"ring-2\"\n            d=\"M12 18.52c1.928 2 3.817 2.95 4.978 2.253c1.85 -1.102 1.121 -5.972 -1.633 -10.873c-.384 -.677 -.777 -1.204 -1.18 -1.8\"\n          />\n          <motion.path\n            className=\"ring-3\"\n            d=\"M17.66 15c2.612 -.687 4.34 -1.85 4.34 -3.176c0 -2.11 -4.408 -3.824 -9.845 -3.824c-.747 0 -1.266 .029 -1.955 .087\"\n          />\n          <motion.path\n            className=\"ring-3\"\n            d=\"M8 12c.285 -.66 .607 -1.308 .968 -1.978c2.647 -4.844 6.253 -7.89 8.046 -6.801c1.11 .679 1.262 2.706 .56 5.393\"\n          />\n        </motion.g>\n        <motion.path\n          className=\"center-dot\"\n          d=\"M12.26 12.015h-.01c-.01 .13 -.12 .24 -.26 .24a.263 .263 0 0 1 -.25 -.26c0 -.14 .11 -.25 .24 -.25h-.01c.13 -.01 .25 .11 .25 .24\"\n          style={{ originX: \"50%\", originY: \"50%\" }}\n        />\n      </motion.svg>\n    );\n  },\n);\n\nBrandReactNativeIcon.displayName = \"BrandReactNativeIcon\";\n\nexport default BrandReactNativeIcon;\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"
}
