{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brand-aistudio-icon",
  "dependencies": ["motion"],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "icons/brand-aistudio-icon.tsx",
      "content": "import { forwardRef, useImperativeHandle, useCallback, useRef } from \"react\";\nimport type { AnimatedIconHandle, AnimatedIconProps } from \"./types\";\nimport { motion, useAnimate } from \"motion/react\";\n\nconst BrandAiStudioIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n  ({ size = 24, color = \"currentColor\", className = \"\" }, ref) => {\n    const [scope, animate] = useAnimate();\n\n    const frameRef = useRef<SVGGElement | null>(null);\n    const sparkRef = useRef<SVGGElement | null>(null);\n\n    const getSparkCenterOffset = () => {\n      if (!frameRef.current || !sparkRef.current) return { x: 0, y: 0 };\n\n      const frame = frameRef.current.getBBox();\n      const spark = sparkRef.current.getBBox();\n\n      const frameCenterX = frame.x + frame.width / 2;\n      const frameCenterY = frame.y + frame.height / 2;\n\n      const sparkCenterX = spark.x + spark.width / 2;\n      const sparkCenterY = spark.y + spark.height / 2;\n\n      return {\n        x: frameCenterX - sparkCenterX,\n        y: frameCenterY - sparkCenterY,\n      };\n    };\n\n    const start = useCallback(() => {\n      const { x, y } = getSparkCenterOffset();\n\n      // Move Gemini into the IDE\n      animate(\n        \".google-spark\",\n        { x, y, scale: 0.9 },\n        { duration: 0.35, ease: \"easeInOut\" },\n      );\n\n      // Pull the frame inward slightly so it \"closes\"\n      animate(\n        \".google-frame\",\n        { scale: 0.94 },\n        { duration: 0.35, ease: \"easeInOut\" },\n      );\n    }, [animate]);\n\n    const stop = useCallback(() => {\n      animate(\n        \".google-spark\",\n        { x: 0, y: 0, scale: 1 },\n        { duration: 0.3, ease: \"easeInOut\" },\n      );\n\n      animate(\n        \".google-frame\",\n        { scale: 1 },\n        { duration: 0.3, ease: \"easeInOut\" },\n      );\n    }, [animate]);\n\n    useImperativeHandle(\n      ref,\n      () => ({\n        startAnimation: start,\n        stopAnimation: stop,\n      }),\n      [start, stop],\n    );\n\n    return (\n      <motion.svg\n        ref={scope}\n        width={size}\n        height={size}\n        viewBox=\"0 0 24 24\"\n        fill={color}\n        className={className}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        onHoverStart={start}\n        onHoverEnd={stop}\n      >\n        <title>Google AI Studio</title>\n\n        {/* Frame */}\n        <motion.g\n          ref={frameRef}\n          className=\"google-frame\"\n          style={{\n            transformBox: \"fill-box\",\n            transformOrigin: \"center\",\n          }}\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M9.921 4.196H6.328A2.705 2.705 0 003.623 6.9v11.362a2.705 2.705 0 002.705 2.705h11.363a2.705 2.705 0 002.705-2.705v-4.756l1.623-1.113v5.87a4.329 4.329 0 01-4.328 4.328H6.328A4.329 4.329 0 012 18.263V6.901a4.328 4.328 0 014.328-4.329h4.545l-.952 1.624z\"\n          />\n        </motion.g>\n\n        {/* Gemini sparkle */}\n        <motion.g\n          ref={sparkRef}\n          className=\"google-spark\"\n          style={{\n            transformBox: \"fill-box\",\n            transformOrigin: \"center\",\n          }}\n        >\n          <path\n            fillRule=\"evenodd\"\n            d=\"M17.82 0c.145 0 .268.104.299.246a7 7 0 001.9 3.484 7 7 0 003.485 1.901c.142.031.246.154.246.3a.308.308 0 01-.246.298A7 7 0 0020.02 8.13a7 7 0 00-1.912 3.535.297.297 0 01-.288.238.297.297 0 01-.288-.238A7 7 0 0015.62 8.13a7 7 0 00-3.535-1.912.297.297 0 01-.238-.288c0-.14.1-.26.238-.288A7 7 0 0015.62 3.73 7.001 7.001 0 0017.521.246.308.308 0 0117.82 0z\"\n          />\n        </motion.g>\n      </motion.svg>\n    );\n  },\n);\n\nBrandAiStudioIcon.displayName = \"BrandAiStudioIcon\";\nexport default BrandAiStudioIcon;\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"
}
