{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "brand-windows-icon",
  "dependencies": ["motion"],
  "devDependencies": [],
  "registryDependencies": [],
  "files": [
    {
      "path": "icons/brand-windows-icon.tsx",
      "content": "import { forwardRef, useImperativeHandle } from \"react\";\nimport type { AnimatedIconHandle, AnimatedIconProps } from \"./types\";\nimport { motion, useAnimate } from \"motion/react\";\n\nconst BrandWindowsIcon = forwardRef<AnimatedIconHandle, AnimatedIconProps>(\n  (\n    { size = 24, color = \"currentColor\", strokeWidth = 1, className = \"\" },\n    ref,\n  ) => {\n    const [scope, animate] = useAnimate();\n\n    const start = async () => {\n      // Stage 1: All windows explode outward (Windows key press!)\n      await animate(\n        \"path:nth-of-type(2)\", // Top-right\n        {\n          x: [0, 8, 6],\n          y: [0, -8, -6],\n          rotate: [0, 15, 10],\n          scale: [1, 1.1, 1.05],\n        },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\n        \"path:nth-of-type(3)\", // Bottom-left\n        {\n          x: [0, -8, -6],\n          y: [0, 8, 6],\n          rotate: [0, -15, -10],\n          scale: [1, 1.1, 1.05],\n        },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\n        \"path:nth-of-type(4)\", // Top-left\n        {\n          x: [0, -8, -6],\n          y: [0, -8, -6],\n          rotate: [0, -15, -10],\n          scale: [1, 1.1, 1.05],\n        },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      await animate(\n        \"path:nth-of-type(5)\", // Bottom-right\n        {\n          x: [0, 8, 6],\n          y: [0, 8, 6],\n          rotate: [0, 15, 10],\n          scale: [1, 1.1, 1.05],\n        },\n        { duration: 0.4, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      // Stage 2: 3D flip the entire icon\n      await animate(\n        scope.current,\n        {\n          rotateY: [0, 180, 360],\n          scale: [1, 1.15, 1],\n        },\n        { duration: 0.6, ease: \"easeInOut\" },\n      );\n\n      // Stage 3: Windows snap back together with bounce\n      animate(\n        \"path:nth-of-type(2)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.5, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\n        \"path:nth-of-type(3)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.5, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      animate(\n        \"path:nth-of-type(4)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.5, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      await animate(\n        \"path:nth-of-type(5)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.5, ease: [0.34, 1.56, 0.64, 1] },\n      );\n\n      // Stage 4: Final pulse\n      await animate(\n        scope.current,\n        {\n          scale: [1, 1.08, 1],\n        },\n        { duration: 0.3, ease: \"easeOut\" },\n      );\n    };\n\n    const stop = () => {\n      animate(\n        scope.current,\n        { rotateY: 0, scale: 1 },\n        { duration: 0.4, ease: \"easeOut\" },\n      );\n      animate(\n        \"path:nth-of-type(2)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.4 },\n      );\n      animate(\n        \"path:nth-of-type(3)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.4 },\n      );\n      animate(\n        \"path:nth-of-type(4)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.4 },\n      );\n      animate(\n        \"path:nth-of-type(5)\",\n        { x: 0, y: 0, rotate: 0, scale: 1 },\n        { duration: 0.4 },\n      );\n    };\n\n    useImperativeHandle(ref, () => {\n      return {\n        startAnimation: start,\n        stopAnimation: stop,\n      };\n    });\n\n    const handleHoverStart = () => {\n      start();\n    };\n\n    const handleHoverEnd = () => {\n      stop();\n    };\n\n    return (\n      <motion.svg\n        ref={scope}\n        onHoverStart={handleHoverStart}\n        onHoverEnd={handleHoverEnd}\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width={size}\n        height={size}\n        viewBox=\"0 0 24 24\"\n        fill={color}\n        stroke={color}\n        strokeWidth={strokeWidth}\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n        className={`cursor-pointer ${className}`}\n        style={{\n          perspective: \"1000px\",\n          transformStyle: \"preserve-3d\",\n        }}\n      >\n        <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n        <motion.path d=\"M21 13v5c0 1.57 -1.248 2.832 -2.715 2.923l-.113 .003l-.042 .018a1 1 0 0 1 -.336 .056l-.118 -.008l-4.676 -.585v-7.407z\" />\n        <motion.path d=\"M11 13v7.157l-5.3 -.662c-1.514 -.151 -2.7 -1.383 -2.7 -2.895v-3.6z\" />\n        <motion.path d=\"M11 3.842v7.158h-8v-3.6c0 -1.454 1.096 -2.648 2.505 -2.87z\" />\n        <motion.path d=\"M21 5.9v5.1h-8v-7.409l4.717 -.589c1.759 -.145 3.283 1.189 3.283 2.898\" />\n      </motion.svg>\n    );\n  },\n);\n\nBrandWindowsIcon.displayName = \"BrandWindowsIcon\";\n\nexport default BrandWindowsIcon;\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"
}
