# 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