/** * RoadmapGridSkeleton — loading state for the `/roadmap` grid view. * * Pure JSX (no hooks, no events) — `'use client'` not strictly required * here; tsup's client-entry banner injects it automatically when this * file is bundled into the client output. We match the playbook's * skeleton-file convention (no directive when no hooks). * * NOTE: lib's `chat/entity-cards/roadmap-card.tsx` also exports a * `RoadmapCardSkeleton` — that one is the COMPACT 56px chat-card * variant. This file's internal card-skeleton (340px grid card) * intentionally stays file-internal to avoid the naming collision; * only `RoadmapGridSkeleton` is exported. */ function RoadmapCardSkeleton() { return (
{/* Status Badge Skeleton - Top Right */}
{/* Icon and title skeleton */}
{/* Description skeleton - exactly 3 lines */}
{/* Bottom skeleton */}
); } export interface RoadmapGridSkeletonProps { /** Number of skeleton cards to show. Default 4. */ count?: number; /** Show the desktop left margin (~120px) that aligns the grid with * the page hero's title block. Default `true`. Related-content rails * inside narrower surfaces (e.g. the release detail page) pass `false`. */ showLeftMargin?: boolean; } export function RoadmapGridSkeleton({ count = 4, showLeftMargin = true }: RoadmapGridSkeletonProps) { return (
{Array.from({ length: count }).map((_, i) => ( ))}
); }