import { cn } from "@/lib/utils";
interface SkeletonProps {
className?: string;
variant?: "text" | "avatar" | "card" | "button" | "image";
lines?: number;
animate?: boolean;
}
export function Skeleton({
className,
variant = "text",
lines = 1,
animate = true,
}: SkeletonProps) {
const baseClasses = cn("bg-muted rounded", animate && "skeleton", className);
switch (variant) {
case "avatar":
return
;
case "button":
return ;
case "image":
return ;
case "card":
return (
);
case "text":
default:
return (
{Array.from({ length: lines }).map((_, i) => (
))}
);
}
}
export function SkeletonCard() {
return (
);
}
export function SkeletonStats() {
return (
{Array.from({ length: 4 }).map((_, i) => (
))}
);
}
export function SkeletonUserPath() {
return (
{Array.from({ length: 4 }).map((_, i) => (
{Array.from({ length: 4 }).map((_, j) => (
))}
))}
);
}
export function SkeletonOnboardingStep() {
return (
{Array.from({ length: 4 }).map((_, i) => (
))}
);
}
export function SkeletonLayout() {
return (
{/* Header Skeleton */}
{Array.from({ length: 4 }).map((_, i) => (
))}
{/* Content Skeleton */}
);
}