@bimetal/kanban-headless
v0.35.0
Published
Canonical, framework-agnostic kanban controller (createKanbanController) on @bimetal/headless-core. Owns all board-interaction semantics — drag/drop, dialog, filter, WIP-error-as-state, undo. Instance #2 of the component family; frameworks bind it as pure
Maintainers
Readme
@bimetal/kanban-headless
The canonical, framework-agnostic kanban controller — instance #2 of the
BIMETAL component family. Built on @bimetal/headless-core exactly like the
calendar controller, so it shares the identity-stable getSnapshot/subscribe
contract and errors-as-state surface; framework bindings are pure bindings.
createKanbanController({ store, boardId, config }) owns every board
interaction decision:
- Dialog —
openCreateCard/openEditCard/saveCard/deleteCard. - Drag/drop —
dropCard(cardId, toColumnId, toIndex)/reorderCard, withstartDrag/updateDragPreview/endDragfor live previews. - WIP-error-as-state — a rejected create/move (WIP limit) surfaces as
snapshot.lastAction(a toast) and never throws into the binding. - Undo —
undo()reverts the whole board one step;Ctrl/Cmd+ZviahandleKeydown. - Filter / selection —
setFilter,selectCard/clearSelection.
The cut line is identical to the calendar controller: DOM measurement and
listener registration belong to the framework; every if belongs here.
