{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "spinner",
  "title": "Spinner",
  "description": "Loading spinner (lucide) with 3 tones (current, brand, muted) and 4 sizes (sm-xl). Has role=status and an aria-label.",
  "dependencies": [
    "class-variance-authority@^0.7.1",
    "lucide-react@^1.23.0"
  ],
  "registryDependencies": [
    "@ai2/tokens"
  ],
  "files": [
    {
      "path": "registry/ai2/ui/spinner.tsx",
      "content": "import type * as React from \"react\"\nimport { Loader2 } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst spinnerVariants = cva(\"animate-spin\", {\n  variants: {\n    tone: {\n      current: \"text-current\",\n      brand: \"text-brand\",\n      muted: \"text-muted-foreground\",\n    },\n    size: {\n      sm: \"size-4\",\n      md: \"size-5\",\n      lg: \"size-6\",\n      xl: \"size-8\",\n    },\n  },\n  defaultVariants: {\n    tone: \"current\",\n    size: \"md\",\n  },\n})\n\ninterface SpinnerProps\n  extends React.ComponentProps<\"svg\">,\n    VariantProps<typeof spinnerVariants> {\n  label?: string\n}\n\nfunction Spinner({ className, tone, size, label = \"Loading\", ...props }: SpinnerProps) {\n  return (\n    <Loader2\n      data-slot=\"spinner\"\n      role=\"status\"\n      aria-label={label}\n      className={cn(spinnerVariants({ tone, size, className }))}\n      {...props}\n    />\n  )\n}\n\nexport { Spinner, spinnerVariants, type SpinnerProps }\n",
      "type": "registry:ui"
    }
  ],
  "docs": "tone=current inherits text color, so it matches whatever context it sits in (e.g. inside a Button).",
  "categories": [
    "display",
    "feedback"
  ],
  "type": "registry:ui"
}