Cards, Columns, And Ordering
Canonical cards
Section titled “Canonical cards”Kanban reads and updates ordinary RevoGrid source rows. A card needs a stable ID, workflow-column value, and preferably a numeric order:
grid.source = [ { workId: 'PAY-104', summary: 'Retry declined payments', stage: 'active', rank: 1000, team: 'billing', },];
grid.kanban = { idField: 'workId', columnField: 'stage', orderField: 'rank', swimlaneField: 'team', columns: [ { prop: 'queued', name: 'Queued' }, { prop: 'active', name: 'Active' }, { prop: 'done', name: 'Done' }, ],};When a card has no rank, source order is used. The first move assigns fractional ranks between neighboring cards. If the available numeric gap becomes unsafe, Kanban rebalances only the destination bucket and reports the affected IDs in kanbancardmove.
Workflow columns
Section titled “Workflow columns”kanban.columns is the workflow schema; grid.columns remains the canonical
table/card-field schema. A card belongs to a workflow column when
card[columnField] === column.prop.
Workflow definitions reuse the safe RevoGrid header and sizing subset and add Kanban behavior such as WIP limits, collapse state, transition rules, metadata, and card filtering.
The array is optional and defaults to []. This supports loading workflow
metadata and cards independently: no columns plus no cards is an empty board,
while cards without configured columns use the managed Unmapped column by
default. Supplying workflow columns later rebuilds the projection from the same
canonical grid.source records.
columns: [ { prop: 'queued', name: 'Queued', size: 260 }, { prop: 'active', name: 'Active', minSize: 240, maxSize: 360, wipLimit: 4, allowedFrom: ['queued', 'active'], collapsible: true, },]Projected workflow columns keep the exact authored prop; no synthetic grid
property is introduced. If name is omitted, Kanban displays String(prop).
The default size is 288 and minSize is 220. The core column-move plugin
handles header dragging; kanbancolumnorderchange exposes the resulting prop
order for persistence.
Every workflow column is collapsible by default. Set collapsible: false to lock a column open, or use collapsed: true for its initial state. At runtime, setColumnCollapsed(prop, collapsed) changes one column and getCollapsedColumnProps() returns the active collapsed set. A collapsed column remains visible as a narrow rail with a vertical resolved-name badge, so users can restore it without losing board context.
Unknown and invalid data
Section titled “Unknown and invalid data”- Unknown statuses render in a localized Unmapped column by default. Set
unmappedColumn: falseonly when the host deliberately hides them. - Missing or duplicate card IDs produce blocking diagnostics. Those cards remain visible but cannot be moved.
- Duplicate column props produce a blocking configuration diagnostic.
- Invalid numeric ranks fall back to source order and produce a diagnostic.
Listen to kanbandiagnostics or call getDiagnostics() on the plugin during development and after remote data refreshes.
Counts
Section titled “Counts”Column and swimlane headers distinguish:
- visible count: cards passing RevoGrid filters, Kanban search, and the optional predicate;
- total count: all canonical cards in that bucket.
WIP limits always use total counts so a filter cannot accidentally permit over-capacity work.