# LinkSmallGrid Component A responsive grid section pattern for displaying navigational links using TileLink components. ## Overview LinkSmallGrid is a pattern component that combines a heading, optional description, and a grid of TileLink components. It provides a consistent layout for presenting multiple navigation options or quick links. ## Features - **Responsive Grid Layout**: Adapts from 1 column (mobile) to 4 columns (desktop) - **Two Color Variants**: Gray and Lilac (applied to all tiles) - **Light/Dark Mode**: Full theming support - **Right-Alignment**: Automatically right-aligns grids with fewer than 10 tiles at desktop - **Flexible Content**: Supports both links and click handlers - **Accessible**: Semantic HTML with proper heading hierarchy ## Grid Layout Based on a 12-column grid system: | Breakpoint | Tiles per Row | Tile Span | Total Columns | |------------|---------------|-----------|---------------| | Base (< 576px) | 1 | 4 of 4 | Full width | | MD (576px - 991px) | 2 | 4 of 8 | 50% width each | | LG (≥ 992px) | 4 | 3 of 12 | 25% width each | ## Right-Alignment Logic When there are **fewer than 10 total tiles**, the grid is right-aligned at the **LG breakpoint only**: - **1 tile**: offset 9 columns - **2 tiles**: offset 6 columns - **3 tiles**: offset 3 columns - **4+ tiles**: no offset (fills row) - **10+ tiles**: no offset (left-aligned grid) **Note**: MD and Base breakpoints never apply offset (always left-aligned). ## Usage ### Basic Usage (Gray Variant) ```tsx ``` ### Lilac Variant with Click Handlers ```tsx navigate('/start') }, { label: "Examples", href: "/examples" }, { label: "Templates", href: "/templates" } ]} /> ``` ### Without Description ```tsx ``` ## Props ### LinkSmallGridProps | Prop | Type | Default | Description | |------|------|---------|-------------| | `variant` | `'gray' \| 'lilac'` | `'gray'` | Color variant for all tiles | | `heading` | `string` | Required | Section heading | | `description` | `string` | - | Optional description text | | `links` | `LinkItem[]` | Required | Array of link items | | `className` | `string` | - | Additional CSS classes | ### LinkItem (extends TileLinkProps) | Prop | Type | Default | Description | |------|------|---------|-------------| | `label` | `string` | Required | Link text/label | | `href` | `string` | - | Link destination | | `onClick` | `() => void` | - | Click handler | | `disabled` | `boolean` | `false` | Disabled state | | `className` | `string` | - | Additional CSS classes | **Note**: `variant` is controlled by the parent LinkSmallGrid component. ## Layout Structure ```

{heading}

{description}

{links.map(link => ( ))}
``` ## Performance - **Memoized Offset Calculations**: Uses `useMemo` to avoid recalculating offsets on every render - **Optimized Keys**: Uses `href` or `label` as React keys instead of array index for better reconciliation ## Files - `LinkSmallGrid.tsx` - React component - `LinkSmallGrid.scss` - Styles with BEM naming convention - `README.md` - This file ## Related Components - **TileLink**: Atomic component used for each tile in the grid - **PageGrid/PageGridRow/PageGridCol**: Grid system components - **calculateTileOffset**: Utility function for offset calculations (in `shared/utils/helpers.ts`) ## Design System Part of the Brand Design System (BDS) with `bds-` namespace prefix. ## Showcase See `about/link-small-grid-showcase.page.tsx` for examples with different link counts and variants.