Grid

A responsive grid layout container for organizing content in rows and columns with spatial navigation support.

Import

import { Grid } from '@smart-tv/ui';

Basic Usage

Create a basic grid layout with cards or content items.

<Grid focusKey="movie-grid" columns={4}>
{movies.map((movie) => (
<Card key={movie.id} focusKey={`movie-${movie.id}`}>
<CardContent>
<img src={movie.poster} alt={movie.title} />
<h3>{movie.title}</h3>
</CardContent>
</Card>
))}
</Grid>

Responsive Columns

Adapt grid columns based on screen size.

<Grid
focusKey="responsive-grid"
columns={{ sm: 2, md: 3, lg: 4, xl: 6 }}
gap={4}
>
{items.map((item) => (
<Card key={item.id} focusKey={`item-${item.id}`}>
{item.content}
</Card>
))}
</Grid>

Custom Spacing

Control spacing between grid items.

<Grid
focusKey="spaced-grid"
columns={3}
gap={8}
className="p-4"
>
<Card focusKey="item-1">Item 1</Card>
<Card focusKey="item-2">Item 2</Card>
<Card focusKey="item-3">Item 3</Card>
</Grid>

Auto-fit Layout

Automatically fit items based on minimum width.

<Grid
focusKey="autofit-grid"
autoFit="minmax(200px, 1fr)"
gap={4}
>
{items.map((item, idx) => (
<Card key={idx} focusKey={`item-${idx}`}>
{item}
</Card>
))}
</Grid>

Focus Boundary

Contain focus within the grid for better navigation control.

<Grid
focusKey="bounded-grid"
columns={3}
isFocusBoundary={true}
focusBoundaryDirections={['left', 'right']}
>
<Card focusKey="item-1">Item 1</Card>
<Card focusKey="item-2">Item 2</Card>
<Card focusKey="item-3">Item 3</Card>
</Grid>

Props

PropTypeDefaultDescription
focusKeystringrequiredUnique identifier
columnsnumber | object3Number of columns or responsive config
gapnumber4Gap between items (in spacing units)
autoFitstring-CSS grid auto-fit value
isFocusBoundarybooleanfalseContain focus within grid
focusBoundaryDirectionsarray-Directions to block focus escape
classNamestring-Additional CSS classes
childrenReactNode-Grid items

Best Practices

  • Use consistent card sizes for better visual alignment
  • Set appropriate gap values for comfortable navigation
  • Consider using responsive columns for different screen sizes
  • Enable focus boundary for better navigation control in sections
  • Use auto-fit for dynamic content with varying item counts