DashboardGrid
Organism
A 12-column widget board for overview screens. Each widget declares a span in twelfths, and the grid measures its OWN width (never the window) to pick a tier: a wide container honors every span, a narrower one reflows widgets to their narrowSpan, and a phone-sized one stacks them full width.
Playground
Every control sets a real prop of DashboardGridProps. The JSX below updates as you go.
Web
iOS
Android
JSX · DashboardGridProps
Variants
4 examples from src/organisms/dashboard-grid/dashboard-grid.md, each rendered live from its own JSX.
States
Hover, focus and press are pinned so they can be compared side by side; the rest are real props.
Anatomy
1
Grid
2
Widget
3
Drag handle
Dimmed parts appear only in some states or variants.
Props
9 props on DashboardGridProps, grouped as they are declared in source. Required props are marked *.
Accessibility and keyboard
Keyboard
Space
Lifts or drops the focused card
Arrow keys
Moves a lifted card
Escape
Cancels the move
Semantics
No role of its own in source; it reads as the content it renders.
From the docs
Cells render bare, because a widget arrives with its own surface (a Card, a Chart, a Stats row) and a second frame around it would only double up. A widget's title is its accessible name rather than a header the grid paints: customize mode uses it to name the widget's drag grip and its drop zone.
Locked, it is a plain static grid and no drag machinery is mounted at all; unlocked turns on customize mode, where every cell gains a grip and the board reorders by pointer, keyboard, or screen reader through the kit's own drag-and-drop. The order is a plain array of ids, controlled through order and onOrderChange so the app can persist it, or left to the grid with defaultOrder.
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
Cells render bare, because a widget arrives with its own surface (a Card, a Chart, a Stats row) and a second frame around it would only double up. A widget's title is its accessible name rather than a header the grid paints: customize mode uses it to name the widget's drag grip and its drop zone.
Locked, it is a plain static grid and no drag machinery is mounted at all; unlocked turns on customize mode, where every cell gains a grip and the board reorders by pointer, keyboard, or screen reader through the kit's own drag-and-drop. The order is a plain array of ids, controlled through order and onOrderChange so the app can persist it, or left to the grid with defaultOrder.
The board takes its widgets through items, the collection prop every other collection-taking component in the kit uses.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--fd
--ft
--ln
--sf
--tx2