'use client'; /** * LinkCardGrid Component * * A responsive grid layout container for organizing multiple LinkCard components. * Provides consistent spacing and responsive behavior for navigation card collections. * * ## Design Principles * * 1. **Responsive Layout**: Adapts gracefully to all screen sizes * - Mobile: Single column for comfortable tap targets * - Tablet/Desktop: Multi-column for efficient space usage * - Fluid transitions between breakpoints * * 2. **Grid System**: CSS Grid provides flexible, robust layout * - Equal-width columns maintain balance * - Auto-fit for flexible number of cards * - Consistent gaps create visual rhythm * * 3. **Composition Pattern**: Wrapper abstracts layout complexity * - Parent handles grid logic * - Children (LinkCards) focus on content * - Separation of concerns improves maintainability * * ## Column Configuration * * @param {2} columns=2 - Two-column layout (default) * - Visual: Balanced, side-by-side comparison * - Use cases: "Next Steps", paired content, binary choices * - Responsive: md:grid-cols-2 (2 cols ≥768px, 1 col <768px) * - Psychology: Compare and choose pattern * - Example: "API Reference" vs "Authentication Guide" * * @param {3} columns=3 - Three-column layout * - Visual: Information-rich, multiple options * - Use cases: Resource hubs, category pages, multiple paths * - Responsive: md:grid-cols-3 (3 cols ≥768px, 1 col <768px) * - Psychology: Multiple choice, exploration * - Example: "Getting Started", "API Docs", "Examples" * * @param {4} columns=4 - Four-column layout * - Visual: Dense, comprehensive navigation * - Use cases: Resource libraries, extensive catalogs * - Responsive: md:grid-cols-2 lg:grid-cols-4 (2 cols tablet, 4 cols desktop) * - Psychology: Broad exploration, many options * - Example: Multiple API endpoints, extensive guides * * ## Responsive Breakpoints * * Mobile (<768px): * - All grids collapse to single column * - Prevents cramped cards on small screens * - Optimizes for thumb-friendly tap targets * - Maintains readability and usability * * Tablet (≥768px, <1024px): * - 2-column: Displays as 2 columns * - 3-column: Displays as 3 columns * - 4-column: Displays as 2 columns (intermediate step) * - Balances space usage and readability * * Desktop (≥1024px): * - All grids display at full column count * - Efficient use of available width * - Supports quick visual scanning * * ## Spacing System * * Gap: * - gap-4 (16px): Comfortable separation between cards * - Creates visual grouping without crowding * - Maintains clean grid appearance * - Consistent with other spacing in design system * * Why gap-4? * - Larger than text line-height (prevents cramping) * - Small enough to show relationship between cards * - Works well with card padding (p-5) * - Scales gracefully at all screen sizes * * ## Grid Behavior * * CSS Grid Properties: * - `grid`: Establishes grid container * - `grid-cols-1`: Mobile baseline (single column) * - `md:grid-cols-{n}`: Tablet/desktop columns * - `gap-4`: Gutter between grid items * * ## Accessibility Considerations * * - Maintains logical reading order (top-to-bottom, left-to-right) * - Grid doesn't interfere with keyboard navigation * - Responsive design ensures usability on all devices * - No JavaScript required (pure CSS grid) * - Works with screen readers (semantic HTML preserved) * * ## Usage Examples * * ```tsx * // Two-column "Next Steps" section * * * * * * // Three-column resource hub * * * * * * * // Four-column comprehensive navigation * * * * * * * ``` * * ## Composition Guidelines * * DO: * - Use consistent accent colors within a grid (e.g., all primary, or primary + secondary) * - Keep card count balanced (even numbers work best for 2/4 columns) * - Provide descriptive, parallel content in cards * - Order cards by importance or logical flow * * DON'T: * - Mix too many accent colors (creates visual chaos) * - Use unbalanced card counts in 2-column (odd numbers leave gaps) * - Nest grids inside grids (causes layout issues) * - Put non-LinkCard components inside (breaks grid consistency) * * ## Visual Language * * The LinkCardGrid creates: * - Organized, scannable navigation patterns * - Professional documentation architecture * - Clear visual hierarchy through layout * - Responsive, mobile-friendly experience * - Consistent spacing and alignment * * ## Performance * * - Pure CSS (no JavaScript overhead) * - Minimal DOM elements (single wrapper div) * - Hardware-accelerated grid layout * - No re-renders or layout thrashing * * @component * @example * * {children} * */ import { ReactNode } from 'react'; /** * Column configuration for the grid */ export type GridColumns = 2 | 3 | 4; /** * Props for the LinkCardGrid component */ export interface LinkCardGridProps { /** Number of columns at tablet/desktop breakpoints */ columns?: GridColumns; /** LinkCard components to display in the grid */ children: ReactNode; /** Optional CSS class name for additional styling */ className?: string; } /** * Responsive grid class mappings for different column counts */ const columnStyles: Record = { 2: 'md:grid-cols-2', 3: 'md:grid-cols-3', 4: 'md:grid-cols-2 lg:grid-cols-4', // 2 cols on tablet, 4 on desktop }; export const LinkCardGrid = ({ columns = 2, children, className = '', }: LinkCardGridProps) => { return (
{children}
); };