interface

KanbanBoard

A data-driven Kanban board — glass Surface columns with a header, status dot, ticket count, and a stack of small glass ticket cards. Cards rise + fade in on the house spring, staggered across the whole board so it assembles as one calm cascade.

$ npx ondajs add kanban-board

KanbanBoard

A data-driven Kanban board — glass Surface columns, each with a header, a status dot, a live ticket count, and a stack of small glass ticket cards. Every card rises + fades in on the house spring, staggered across the whole board (left-to-right, top-to-bottom) so it assembles as one calm cascade rather than popping all at once. Pass columns to drive the content; give one column an accent to earn the rose. The board is static after the entrance — any "flying ticket" between columns is the consumer's job, not this component's. Self-contained except the shared Surface primitive and the useStaggeredEntrance hook.

Props

PropTypeDefaultNotes
columns{ title, accent?, cards: string[] }[]Todo / In Progress / DoneThe columns, laid out left-to-right; each holds its own ticket cards.
widthnumber1040Overall board width; split evenly across columns.
gapnumber20Gap between columns (and between cards within a column).
delaynumber0Frames before the first card enters.
staggernumber4Frames between successive cards rising in.
fontSizenumber22Column-header font size; wins over size.
size'hero' | 'heading' | 'subheading' | 'body' | 'caption'Semantic header size; resolves to canvas-aware px. fontSize wins when both are passed.
fontFamilystringClash DisplayDisplay font for headers and ticket labels.
placementregion or {x,y,anchor}Canvas placement.

Usage

TSX
import { KanbanBoard } from './components/onda/kanban-board/KanbanBoard';

export const BoardScene = () => (
  <KanbanBoard
    placement="center"
    columns={[
      { title: 'Backlog', cards: ['Research', 'Wireframes'] },
      { title: 'Building', accent: '#D96B82', cards: ['Hero animation'] },
      { title: 'Shipped', cards: ['Landing page', 'Docs'] },
    ]}
  />
);