{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "comet-spinner",
  "files": [
    {
      "path": "registry/components/loading-ui/comet-spinner.tsx",
      "content": "import { cn } from \"@/lib/utils\";\n\nconst SHADOW_ANIMATION = \"loading-ui-comet-shadow\";\nconst ROTATION_ANIMATION = \"loading-ui-comet-rotation\";\n\ntype CometSpinnerProps = React.ComponentProps<\"span\"> & {\n  headScale?: number;\n  radiusScale?: number;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n  return Math.min(Math.max(value, min), max);\n}\n\nfunction CometSpinner({\n  className,\n  style,\n  headScale = 0.2,\n  radiusScale = 0.83,\n  ...props\n}: CometSpinnerProps) {\n  const safeHeadScale = clamp(headScale, 0.08, 0.35);\n  const safeRadiusScale = clamp(radiusScale, 0.3, 1.1);\n  const cometStyle = {\n    ...style,\n    \"--loading-ui-comet-head\": `${(safeHeadScale * 100).toFixed(2)}cqmin`,\n    \"--loading-ui-comet-radius\": `${(safeRadiusScale * 100).toFixed(2)}cqmin`,\n  } as React.CSSProperties;\n\n  return (\n    <>\n      <style>{`\n        @keyframes ${SHADOW_ANIMATION} {\n          0% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n\n          5%,\n          95% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n\n          10%,\n          59% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              calc(var(--loading-ui-comet-radius) * -0.105) calc(var(--loading-ui-comet-radius) * -0.994) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              calc(var(--loading-ui-comet-radius) * -0.208) calc(var(--loading-ui-comet-radius) * -0.978) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              calc(var(--loading-ui-comet-radius) * -0.308) calc(var(--loading-ui-comet-radius) * -0.95) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              calc(var(--loading-ui-comet-radius) * -0.358) calc(var(--loading-ui-comet-radius) * -0.934) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n\n          20% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              calc(var(--loading-ui-comet-radius) * -0.407) calc(var(--loading-ui-comet-radius) * -0.913) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              calc(var(--loading-ui-comet-radius) * -0.669) calc(var(--loading-ui-comet-radius) * -0.743) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              calc(var(--loading-ui-comet-radius) * -0.808) calc(var(--loading-ui-comet-radius) * -0.588) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              calc(var(--loading-ui-comet-radius) * -0.902) calc(var(--loading-ui-comet-radius) * -0.41) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n\n          38% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              calc(var(--loading-ui-comet-radius) * -0.454) calc(var(--loading-ui-comet-radius) * -0.892) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              calc(var(--loading-ui-comet-radius) * -0.777) calc(var(--loading-ui-comet-radius) * -0.629) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              calc(var(--loading-ui-comet-radius) * -0.934) calc(var(--loading-ui-comet-radius) * -0.358) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              calc(var(--loading-ui-comet-radius) * -0.988) calc(var(--loading-ui-comet-radius) * -0.108) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n\n          100% {\n            box-shadow:\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.1),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.2),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.3),\n              0 calc(var(--loading-ui-comet-radius) * -1) 0 calc(var(--loading-ui-comet-head) * -2.385);\n          }\n        }\n\n        @keyframes ${ROTATION_ANIMATION} {\n          0% {\n            transform: rotate(0deg);\n          }\n\n          100% {\n            transform: rotate(360deg);\n          }\n        }\n      `}</style>\n      <span\n        role=\"status\"\n        aria-label=\"Loading\"\n        className={cn(\n          \"@container-[size] relative inline-flex aspect-square items-center justify-center align-middle\",\n          className,\n        )}\n        style={cometStyle}\n        {...props}\n      >\n        <span\n          aria-hidden=\"true\"\n          className=\"absolute inset-0 rounded-full\"\n          style={{\n            animation: `${SHADOW_ANIMATION} var(--duration, 1.7s) infinite var(--easing, ease), ${ROTATION_ANIMATION} var(--duration, 1.7s) infinite var(--easing, ease)`,\n            transform: \"translateZ(0)\",\n          }}\n        />\n        <span className=\"sr-only\">Loading</span>\n      </span>\n    </>\n  );\n}\n\nexport { CometSpinner };\n",
      "type": "registry:component",
      "target": ""
    }
  ],
  "type": "registry:component"
}
