{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "spinner",
  "title": "Spinner",
  "type": "registry:ui",
  "files": [
    {
      "path": "packages/registry-vue/components/spinner/Spinner.vue",
      "content": "<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue'\nimport { Loader2 } from 'lucide-vue-next'\nimport { cn } from '@/lib/utils'\nimport { spinnerVariants } from './spinner.variants'\n\n// Inlined union: SFC compiler can't extract runtime props from\n// `SpinnerVariants['size']`.\nconst props = defineProps<{\n  class?: HTMLAttributes['class']\n  size?: 'default' | 'sm' | 'lg' | 'icon'\n}>()\n</script>\n\n<template>\n  <Loader2\n    data-uipkge\n    data-slot=\"spinner\"\n    :class=\"cn(spinnerVariants({ size: size ?? 'default' }), props.class)\"\n    aria-label=\"Loading\"\n    role=\"status\"\n  />\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/spinner/Spinner.vue"
    },
    {
      "path": "packages/registry-vue/components/spinner/spinner.variants.ts",
      "content": "import type { VariantProps } from 'class-variance-authority'\nimport { cva } from 'class-variance-authority'\n\n/**\n * Variant definitions live in their own file (rather than the package\n * `index.ts`) so consuming Vue SFCs can import without creating a circular\n * dependency through the index. See card.variants.ts for the canonical\n * example + the SSR symptom that motivated the split.\n */\n\nexport const spinnerVariants = cva('animate-spin text-muted-foreground', {\n  variants: {\n    size: {\n      default: 'size-6',\n      sm: 'size-4',\n      lg: 'size-8',\n      icon: 'size-4',\n    },\n  },\n  defaultVariants: {\n    size: 'default',\n  },\n})\n\nexport type SpinnerVariants = VariantProps<typeof spinnerVariants>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/spinner/spinner.variants.ts"
    },
    {
      "path": "packages/registry-vue/components/spinner/index.ts",
      "content": "export { default as Spinner } from './Spinner.vue'\n\n// Re-export variant API from the sibling file (kept separate to avoid the\n// Component.vue <-> index.ts circular import that broke dev SSR for Card).\nexport { spinnerVariants, type SpinnerVariants } from './spinner.variants'\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/spinner/index.ts"
    }
  ],
  "dependencies": [
    "class-variance-authority",
    "lucide-vue-next"
  ],
  "devDependencies": [],
  "registryDependencies": [],
  "description": "Lightweight loading indicator — circular spinner with three sizes and tone variants. Use inside buttons (replacing the icon when an action is in flight) or as a centered page loader.",
  "categories": [
    "feedback"
  ]
}