# PageGrid Component A responsive grid system component for creating flexible layouts with support for multiple breakpoints. ## Overview The PageGrid component provides a flexible grid layout system with three main components: - `PageGrid` - The container component - `PageGrid.Row` - Row component for grouping columns - `PageGrid.Col` - Column component with responsive sizing and offset support ## Breakpoints The grid system supports the following breakpoints: - `base` - Default/mobile (applies to all sizes) - `sm` - Small screens - `md` - Medium screens - `lg` - Large screens - `xl` - Extra large screens ## Basic Usage ```tsx import { PageGrid } from '@/shared/components/PageGrid/page-grid'; function MyComponent() { return ( Column 1 Column 2 ); } ``` ## PageGrid Props The root `PageGrid` component accepts all standard HTML div attributes: | Prop | Type | Description | |------|------|-------------| | `className` | `string` | Additional CSS classes to apply | | `...rest` | `HTMLDivElement attributes` | Any other HTML div attributes | ## PageGrid.Row Props The `PageGrid.Row` component accepts all standard HTML div attributes: | Prop | Type | Description | |------|------|-------------| | `className` | `string` | Additional CSS classes to apply | | `...rest` | `HTMLDivElement attributes` | Any other HTML div attributes | ## PageGrid.Col Props | Prop | Type | Description | |------|------|-------------| | `span` | `number \| "auto" \| "fill" \| ResponsiveValue` | Column span width | | `offset` | `number \| ResponsiveValue` | Column offset (left margin) | | `className` | `string` | Additional CSS classes to apply | | `...rest` | `HTMLDivElement attributes` | Any other HTML div attributes | ### Span Values - **Number** (e.g., `1-12`): Fixed column width - **"auto"**: Column takes up only the space it needs - **"fill"**: Column fills remaining available space - **Responsive Object**: Different spans for different breakpoints ### Offset Values - **Number** (e.g., `1-12`): Number of columns to offset - **Responsive Object**: Different offsets for different breakpoints ## Examples ### Fixed Column Widths ```tsx Sidebar Main Content ``` ### Auto and Fill ```tsx Minimal Width Takes Remaining Space Another Auto ``` ### Responsive Layout Create layouts that adapt to different screen sizes: ```tsx Responsive Column ``` ### Using Offsets Center content or create spacing with offsets: ```tsx {/* Center an 8-column element */} Centered Content ``` ### Responsive Offsets ```tsx Content ``` ### Complex Responsive Layout ```tsx {/* Hero section */}

Page Title

{/* Sidebar - full width on mobile, 1/3 on desktop */} {/* Main content - full width on mobile, 2/3 on desktop */}
Main Content
``` ### Multiple Columns with Equal Width ```tsx Column 1 Column 2 Column 3 Column 4 ``` ### Nested Grids ```tsx Nested Column 1 Nested Column 2 ``` ## CSS Classes Generated The component generates the following CSS classes: ### Container - `xrpl-grid__container` ### Row - `xrpl-grid__row` ### Column Spans - `xrpl-grid__col-{number}` (e.g., `xrpl-grid__col-6`) - `xrpl-grid__col-auto` - `xrpl-grid__col` (for fill) - `xrpl-grid__col-{breakpoint}-{number}` (e.g., `xrpl-grid__col-md-6`) - `xrpl-grid__col-{breakpoint}-auto` - `xrpl-grid__col-{breakpoint}` (for fill) ### Column Offsets - `xrpl-grid__offset-{number}` (e.g., `xrpl-grid__offset-2`) - `xrpl-grid__offset-{breakpoint}-{number}` (e.g., `xrpl-grid__offset-md-2`) ## TypeScript Types ```typescript type PageGridBreakpoint = "base" | "sm" | "md" | "lg" | "xl"; type ResponsiveValue = T | Partial>; type PageGridSpanValue = number | "auto" | "fill"; type PageGridOffsetValue = number; interface PageGridColProps { span?: ResponsiveValue; offset?: ResponsiveValue; className?: string; // ... plus all HTMLDivElement attributes } ``` ## Best Practices 1. **Use semantic HTML**: Wrap content in appropriate semantic elements within columns 2. **Mobile-first**: Start with base/mobile layout and progressively enhance for larger screens 3. **Keep it simple**: Avoid overly complex nested grid structures when possible 4. **Test responsiveness**: Verify layouts work well at all breakpoint transitions 5. **Accessibility**: Ensure grid layouts maintain logical reading order for screen readers ## Notes - The total columns in the grid system is typically 12 (though this depends on your CSS implementation) - Responsive values cascade - if you don't specify a value for a breakpoint, it inherits from the previous breakpoint - All components forward refs, allowing you to attach refs to the underlying DOM elements