KQ-547 · GANTT/LANE

Gantt Lane

A plan on three weeks of grid. Bars arrive a shift from their lane in cascade() order on glide, hovering or focusing one lights its whole chain and draws the connectors with pathLength on flick, and dragging a bar tracks the pointer 1:1, pushes any dependent it would overrun, then settles onto the whole day on snap. Left and Right nudge the focused bar a day, Up and Down walk the lanes, Enter pins the chain and Escape unpins it.

KQ-547 · GANTT/LANE
Fieldline launch
Apr 6Apr 13Apr 20
  • Scope lockApr 6 to Apr 9
  • BuildApr 9 to Apr 15
  • Copy passApr 10 to Apr 14
  • ReviewApr 15 to Apr 18
  • Beta cohortApr 18 to Apr 23
  • LaunchApr 23 to Apr 26

Hover a bar, or drag it to a new day

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/gantt-lane

Props

tasks
GanttTask[]
default
Seeds the lanes as day offsets from the chart start; the chart owns positions after that and reports through onChange.
days
number
default 21
Columns in the grid. The lanes scroll horizontally under edge fades when they outrun the viewport.
today
number
default
Day offset the today line stands on. Omit it and no line is drawn.
onChange
(tasks: GanttTask[]) => void
default
Fires with the whole plan after a drag settles or a keyboard nudge lands.
formatDay
(day: number) => string
default Day {n}
Names a day offset for the header ticks, the bars' aria-describedby dates and the live readout.
onActiveChange
(id: string | null) => void
default
Fires with the hovered or focused task id, or null when nothing is lit.
label
React.ReactNode
default
Visible chart label. Omit it and pass aria-label to name the chart invisibly.