Board
Organism
A data-driven kanban board: columns scroll horizontally, each column is a drop zone in a sunken well headed by its label and item count, and every card carries a drag grip, an optional trailing badge, a two-line description, a free-form chips slot, and an optional kebab menu.
Playground
Every control sets a real prop of BoardProps. The JSX below updates as you go.
Web
iOS
Android
JSX · BoardProps
Variants
6 examples from src/organisms/board/board.md, each rendered live from its own JSX.
Anatomy
1
Board
2
Column
3
Card
4
Count
Dimmed parts appear only in some states or variants.
Props
18 props on BoardProps, 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
Roles
button
From the docs
Dragging is the kit's own drag-and-drop family, so it runs on iOS, Android, and the web from one code path and stays keyboard- and screen-reader-operable: press Space on a grip to grab, the arrow keys to move between positions and columns, Space to drop, Escape to cancel. The list stays controlled: a drop reports a BoardMove (source, target, insertion index, and the new neighbor ids) through onMove, and applyBoardMove is the standard reducer to apply it. Pass defaultItems instead of items for uncontrolled
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
Dragging is the kit's own drag-and-drop family, so it runs on iOS, Android, and the web from one code path and stays keyboard- and screen-reader-operable: press Space on a grip to grab, the arrow keys to move between positions and columns, Space to drop, Escape to cancel. The list stays controlled: a drop reports a BoardMove (source, target, insertion index, and the new neighbor ids) through onMove, and applyBoardMove is the standard reducer to apply it. Pass defaultItems instead of items for uncontrolled use, where the board applies each move itself.
For an action-driven work board, plain drops the lane wells and keeps the lane headers and dashed empty slots. renderItem supplies the domain card with its own controls. Add draggable to enable drag grips and drop targets while retaining the plain layout. A custom renderItem receives { dragHandle } as its second argument; place that supplied grip in the card's header. disabled prevents moves while a consumer saves a change. bleed extends horizontal scrolling through the owning container's inset. Plain lanes share the Board's measured width equally, with a 168px minimum per lane. Narrow containers scroll horizontally; long card text stays within its lane.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--bg2
--fd
--fm
--ft
--ion-ring
--ln
--sf
--sh-lg
--sh-sm
--tx3