mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 15:11:13 -05:00
110 lines
3.2 KiB
TypeScript
110 lines
3.2 KiB
TypeScript
import { Skeleton } from '@/components/ui/skeleton';
|
|
import { Card, CardContent } from '@/components/ui/card';
|
|
|
|
export const PageLoader = () => (
|
|
<div className="min-h-screen flex items-center justify-center">
|
|
<div className="text-center space-y-4">
|
|
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto" />
|
|
<p className="text-muted-foreground">Loading...</p>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
export const ParkDetailSkeleton = () => (
|
|
<div className="container mx-auto px-4 py-8 space-y-6">
|
|
<Skeleton className="h-64 w-full rounded-lg" />
|
|
<Skeleton className="h-10 w-2/3" />
|
|
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
{[...Array(4)].map((_, i) => (
|
|
<Skeleton key={i} className="h-20" />
|
|
))}
|
|
</div>
|
|
<Skeleton className="h-40 w-full" />
|
|
</div>
|
|
);
|
|
|
|
export const RideCardGridSkeleton = () => (
|
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
{[...Array(6)].map((_, i) => (
|
|
<Skeleton key={i} className="h-64 rounded-lg" />
|
|
))}
|
|
</div>
|
|
);
|
|
|
|
export const EditorSkeleton = () => (
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-10 w-full" />
|
|
<Skeleton className="h-64 w-full" />
|
|
</div>
|
|
);
|
|
|
|
export const UploadPlaceholder = () => (
|
|
<div className="border-2 border-dashed rounded-lg p-8 text-center">
|
|
<div className="mx-auto h-12 w-12 rounded-full border-2 border-muted-foreground/20 flex items-center justify-center">
|
|
<Skeleton className="h-6 w-6" />
|
|
</div>
|
|
<p className="mt-2 text-sm text-muted-foreground">Loading uploader...</p>
|
|
</div>
|
|
);
|
|
|
|
export const DialogSkeleton = () => (
|
|
<Card>
|
|
<CardContent className="p-6 space-y-4">
|
|
<Skeleton className="h-8 w-48" />
|
|
<Skeleton className="h-10 w-full" />
|
|
<Skeleton className="h-32 w-full" />
|
|
<Skeleton className="h-10 w-full" />
|
|
<div className="flex gap-2 justify-end">
|
|
<Skeleton className="h-10 w-20" />
|
|
<Skeleton className="h-10 w-20" />
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
|
|
export const AdminFormSkeleton = () => (
|
|
<div className="space-y-6 p-6">
|
|
{/* Name field */}
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-24" />
|
|
<Skeleton className="h-10 w-full" />
|
|
</div>
|
|
|
|
{/* Slug field */}
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-20" />
|
|
<Skeleton className="h-10 w-full" />
|
|
</div>
|
|
|
|
{/* Description textarea */}
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-32" />
|
|
<Skeleton className="h-32 w-full" />
|
|
</div>
|
|
|
|
{/* Two column fields */}
|
|
<div className="grid grid-cols-2 gap-4">
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-24" />
|
|
<Skeleton className="h-10 w-full" />
|
|
</div>
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-28" />
|
|
<Skeleton className="h-10 w-full" />
|
|
</div>
|
|
</div>
|
|
|
|
{/* Image upload section */}
|
|
<div className="space-y-2">
|
|
<Skeleton className="h-4 w-32" />
|
|
<Skeleton className="h-40 w-full rounded-lg" />
|
|
</div>
|
|
|
|
{/* Action buttons */}
|
|
<div className="flex gap-2 justify-end pt-4">
|
|
<Skeleton className="h-10 w-24" />
|
|
<Skeleton className="h-10 w-32" />
|
|
</div>
|
|
</div>
|
|
);
|