Deploy / deploy (push) Failing after 5s
Каркас витрины дизайнера Ники: главная (hero + сетка галереи), страница работы (детали + место под аукцион), список аукционов, подписка-заглушка. Клиент к backend /api с graceful-фолбэком на демо-работы при недоступном API. Standalone-сборка + Dockerfile. Сборка npm run build и tsc --noEmit проходят. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
1014 B
TypeScript
29 lines
1014 B
TypeScript
import type { Work } from '@/lib/types';
|
|
import WorkCard from './WorkCard';
|
|
|
|
export default function GalleryGrid({ works }: { works: Work[] }) {
|
|
if (!works.length) return null;
|
|
return (
|
|
<div className="grid grid-cols-1 gap-x-6 gap-y-12 sm:grid-cols-2 lg:grid-cols-3">
|
|
{works.map((w) => (
|
|
<WorkCard key={w.id} work={w} />
|
|
))}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// Скелетон витрины на время загрузки / при недоступном backend.
|
|
export function GallerySkeleton({ count = 6 }: { count?: number }) {
|
|
return (
|
|
<div className="grid grid-cols-1 gap-x-6 gap-y-12 sm:grid-cols-2 lg:grid-cols-3">
|
|
{Array.from({ length: count }).map((_, i) => (
|
|
<div key={i} className="animate-shimmer">
|
|
<div className="aspect-[4/5] w-full bg-line/60 dark:bg-white/5" />
|
|
<div className="mt-4 h-5 w-2/3 bg-line/60 dark:bg-white/5" />
|
|
<div className="mt-2 h-4 w-1/3 bg-line/50 dark:bg-white/5" />
|
|
</div>
|
|
))}
|
|
</div>
|
|
);
|
|
}
|