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 */}
);
}