Board
Lanes of cards you move by pointer, touch or keyboard. The board reports each move and your app decides what happens; screen readers hear every pick up, move and drop.
bunx --bun shadcn@4.17.0 add @waimakers/board- npm dependencies
- @dnd-kit/core@6.3.1@dnd-kit/sortable@10.0.0
From the registry
A lane board over dnd-kit: Board / BoardColumn / BoardCard. onMove(cardId, toColumnId, toIndex) reports cross-column moves and same-column reorders. toIndex is the zero-based position in the destination column’s rendered list after removing the moved card; a drop on column space appends, and an empty column gives 0. onDragStateChange?(dragging) reports pickup and drop or cancellation, so callers can pause polling during a drag. shadcn publishes no board, so this is a brand primitive rather than a restyle. Keyboard-operable by construction: dnd-kit's KeyboardSensor with a lane-aware coordinateGetter (left/right cross lanes, up/down move within one) plus screen-reader announcements composed from the caller's own card and lane labels. Semantic role tokens only — a picked-up card is marked by a ring and a lift and a drop target by a dashed hairline, so neither state relies on colour, and no lane or card is filled with orange. The board scrolls sideways and a lane scrolls down; neither makes the page scroll horizontally. Honours prefers-reduced-motion.
Examples
Agent rollout
Agents moving from a request to live. Drag a card to another lane, or focus it, press space, move with the arrow keys and press space again.
Nothing moved yet.
Skill requests
Lane descriptions and an empty lane. The order inside a lane is kept, so a team can rank what comes next.