Files
germanandClaude Opus 4.8 ad35d4e992
Deploy / deploy (push) Failing after 5s
feat(#3): frontend scaffold (Next.js 14 App Router, TS, Tailwind, галерея)
Каркас витрины дизайнера Ники: главная (hero + сетка галереи),
страница работы (детали + место под аукцион), список аукционов,
подписка-заглушка. Клиент к backend /api с graceful-фолбэком на
демо-работы при недоступном API. Standalone-сборка + Dockerfile.
Сборка npm run build и tsc --noEmit проходят.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-05 19:42:13 +03:00

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