Spaces:
Sleeping
Sleeping
File size: 2,013 Bytes
34ed5b1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import * as React from "react"
import { cn } from "@/lib/utils"
function Skeleton({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div
className={cn("animate-pulse rounded-lg bg-muted", className)}
{...props}
/>
)
}
function SkeletonCard() {
return (
<div className="neu-card rounded-3xl p-6 space-y-4">
<Skeleton className="h-48 w-full rounded-2xl" />
<Skeleton className="h-4 w-1/3 rounded" />
<Skeleton className="h-4 w-2/3 rounded" />
<div className="flex gap-2">
<Skeleton className="h-6 w-16 rounded-full" />
<Skeleton className="h-6 w-16 rounded-full" />
<Skeleton className="h-6 w-16 rounded-full" />
</div>
</div>
)
}
function SkeletonTestimonial() {
return (
<div className="neu-card rounded-3xl p-6 space-y-4">
<div className="flex gap-1">
{[...Array(5)].map((_, i) => (
<Skeleton key={i} className="h-4 w-4 rounded" />
))}
</div>
<Skeleton className="h-20 w-full rounded" />
<div className="flex items-center gap-3">
<Skeleton className="h-10 w-10 rounded-full" />
<div className="space-y-2">
<Skeleton className="h-3 w-24 rounded" />
<Skeleton className="h-3 w-16 rounded" />
</div>
</div>
</div>
)
}
function SkeletonService() {
return (
<div className="neu-card rounded-3xl p-6 space-y-4">
<Skeleton className="h-16 w-16 rounded-2xl" />
<Skeleton className="h-6 w-2/3 rounded" />
<Skeleton className="h-16 w-full rounded" />
</div>
)
}
function SkeletonStats() {
return (
<div className="neu-card rounded-3xl p-8 text-center space-y-3">
<Skeleton className="h-12 w-24 mx-auto rounded" />
<Skeleton className="h-4 w-32 mx-auto rounded" />
</div>
)
}
export { Skeleton, SkeletonCard, SkeletonTestimonial, SkeletonService, SkeletonStats }
|