Files
MOPC-Portal/src/components/dashboard/dashboard-skeleton.tsx

79 lines
2.5 KiB
TypeScript
Raw Normal View History

'use client'
import { Card, CardContent, CardHeader } from '@/components/ui/card'
import { Skeleton } from '@/components/ui/skeleton'
export function DashboardSkeleton() {
return (
<>
{/* Header skeleton */}
<Skeleton className="h-32 w-full rounded-2xl" />
{/* Stats row skeleton */}
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-5">
{[...Array(5)].map((_, i) => (
<Card key={i} className="border-l-4 border-l-muted">
<CardContent className="p-4">
<Skeleton className="h-4 w-16" />
<Skeleton className="mt-2 h-8 w-12" />
<Skeleton className="mt-1 h-3 w-20" />
</CardContent>
</Card>
))}
</div>
{/* Two-column content skeleton */}
<div className="grid gap-6 lg:grid-cols-12">
<div className="space-y-6 lg:col-span-8">
<Card>
<CardHeader>
<Skeleton className="h-5 w-32" />
<Skeleton className="h-3 w-48" />
</CardHeader>
<CardContent>
<div className="space-y-3">
{[...Array(3)].map((_, i) => (
<Skeleton key={i} className="h-24 w-full rounded-xl" />
))}
</div>
</CardContent>
</Card>
<Card>
<CardHeader>
<Skeleton className="h-5 w-40" />
<Skeleton className="h-3 w-32" />
</CardHeader>
<CardContent>
<div className="space-y-2">
{[...Array(5)].map((_, i) => (
<Skeleton key={i} className="h-14 w-full" />
))}
</div>
</CardContent>
</Card>
</div>
<div className="space-y-6 lg:col-span-4">
{[...Array(4)].map((_, i) => (
<Card key={i}>
<CardHeader><Skeleton className="h-5 w-32" /></CardHeader>
<CardContent>
<div className="space-y-3">
{[...Array(3)].map((_, j) => (
<Skeleton key={j} className="h-10 w-full" />
))}
</div>
</CardContent>
</Card>
))}
</div>
</div>
{/* Bottom skeleton */}
<div className="grid gap-6 lg:grid-cols-12">
<Skeleton className="h-[400px] w-full rounded-lg lg:col-span-8" />
<Skeleton className="h-[400px] w-full rounded-lg lg:col-span-4" />
</div>
</>
)
}