crucıble

Lanes

Kanban board section on plain pointer events: drag cards within and between lanes as a lifted, velocity-tilted preview while siblings re-flow FLIP-style around a placeholder, the target lane lights up, and the card springs into its slot on release. Fully keyboard operable (Space to pick up, arrows to move, Space to drop, Escape to cancel) with live-region announcements, per-lane WIP limits that turn the header amber, and controlled or uncontrolled state.

motionpro

Installation

CLI

npx shadcn@latest add @crucible/lanes

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
lanesLanesLane[]Controlled board value. Pair with onLanesChange; if you never feed the change back in, cards spring back to where they came from.
defaultLanesLanesLane[]a built-in sample sprint boardInitial board for uncontrolled use.
onLanesChange(lanes: LanesLane[], detail: LanesMoveDetail) => voidFires after every committed move with the full next board + move detail.
accentColorstring"#a5b4fc"The single accent used for the drop-target lane, the placeholder slot, the lifted card's edge and focus rings. Any CSS color.
labelstring"Board"Accessible name for the board region.
refReact.Ref<LanesHandle>Imperative handle — moveCard(), getLanes().
classNamestring

Honors prefers-reduced-motion with a designed static fallback, and passes className through.