{ "name": "loader", "type": "registry:ui", "registryDependencies": [ "button" ], "dependencies": [], "devDependencies": [], "tailwind": { "config": { "theme": { "keyframes": { "typing": { "0%, 100%": { "transform": "translateY(0)", "opacity": "0.5" }, "50%": { "transform": "translateY(-2px)", "opacity": "1" } }, "loading-dots": { "0%, 100%": { "opacity": "0" }, "50%": { "opacity": "1" } }, "wave": { "0%, 100%": { "transform": "scaleY(1)" }, "50%": { "transform": "scaleY(0.6)" } }, "blink": { "0%, 100%": { "opacity": "1" }, "50%": { "opacity": "0" } } }, "text-blink": { "0%, 100%": { "color": "var(--primary)" }, "50%": { "color": "var(--muted-foreground)" } }, "bounce-dots": { "0%, 100%": { "transform": "scale(0.8)", "opacity": "0.5" }, "50%": { "transform": "scale(1.2)", "opacity": "1" } }, "thin-pulse": { "0%, 100%": { "transform": "scale(0.95)", "opacity": "0.8" }, "50%": { "transform": "scale(1.05)", "opacity": "0.4" } }, "pulse-dot": { "0%, 100%": { "transform": "scale(1)", "opacity": "0.8" }, "50%": { "transform": "scale(1.5)", "opacity": "1" } }, "shimmer-text": { "0%": { "backgroundPosition": "150% center" }, "100%": { "backgroundPosition": "-150% center" } }, "wave-bars": { "0%, 100%": { "transform": "scaleY(1)", "opacity": "0.5" }, "50%": { "transform": "scaleY(0.6)", "opacity": "1" } }, "shimmer": { "0%": { "backgroundPosition": "200% 50%" }, "100%": { "backgroundPosition": "-200% 50%" } }, "spinner-fade": { "0%": { "opacity": "0" }, "100%": { "opacity": "1" } } } } }, "cssVars": { "light": {}, "dark": {} }, "description": "A component for displaying a loading indicator with multiple variants and customizable styling", "files": [ { "path": "loader.tsx", "content": "\"use client\"\n\nimport { cn } from \"@/lib/utils\"\nimport React from \"react\"\n\nexport interface LoaderProps {\n variant?:\n | \"circular\"\n | \"classic\"\n | \"pulse\"\n | \"pulse-dot\"\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"bars\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\"\n size?: \"sm\" | \"md\" | \"lg\"\n text?: string\n className?: string\n}\n\nexport function CircularLoader({\n className,\n size = \"md\",\n}: {\n className?: string\n size?: \"sm\" | \"md\" | \"lg\"\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n }\n\n return (\n