gantt-lib 0.136.0 → 0.137.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -115,6 +115,83 @@ const tasks: Task[] = [
115
115
  When using controlled `collapsedParentIds`, provide `onToggleCollapse` to update
116
116
  the collapsed parent IDs in application state.
117
117
 
118
+ ## Row Activities (Flow Line)
119
+
120
+ Give a row `activities` to turn it into a multi-bar lane — several works inside
121
+ one row, packed into sub-lanes (e.g. finishing works on one floor). Sequential
122
+ works share a lane; concurrent ones stack below and the row grows to fit the
123
+ busiest day. Activities are plain bars: drag to move, drag an edge to resize,
124
+ both snap to days. The hover tooltip is a narrow one-liner pinned above the bar:
125
+ the row (floor) name, a middle dot, then the work name — e.g. `Floor 12 ·
126
+ Wallpaper`; there is no native `title`. No hierarchy, dependencies, or
127
+ per-activity progress — works in the default gantt mode only.
128
+
129
+ Set `activityChain: true` to enable the ОН-conveyor (finish-to-start chain):
130
+ inside the row every work follows the previous one, and identical works (same
131
+ `id` or `name`) of consecutive chained rows are linked as well, so dragging one
132
+ work pulls the whole conveyor below — live, while the pointer moves, like every
133
+ other bar in the chart — the classic line-of-balance flow.
134
+
135
+ Consecutive works of a lane are linked: a plain gap is drawn as a horizontal
136
+ arrow with the lag («+N») at its head, while overlapping works (or works in
137
+ different lanes) get the standard orthogonal Gantt connector, routed down when
138
+ the successor drops to a lower lane. Turn links and lag labels off with
139
+ `showActivityLinks` and `showActivityLag`.
140
+
141
+ Click-activation is opt-in via `activityClickToDrag`: the first click arms a
142
+ work (a plain drag pans the canvas) and only the armed work is dragged.
143
+ `activityActivationMode` picks the activation visual — `'none'` (default),
144
+ `'dim'` (other work types fade) or `'highlight'` (the chain of the same work,
145
+ matched by `id` or `name` across rows, is outlined). Appearance is tuned with
146
+ `--gantt-activity-dim-opacity`, `--gantt-activity-active-outline`,
147
+ `--gantt-activity-chain-outline`, `--gantt-activity-tip-bg` and
148
+ `--gantt-activity-tip-color`.
149
+
150
+ The tooltip header (`row · work`) is fixed; extend it with declarative
151
+ `tooltipFields` on the activity (label–value rows, any React node as the value)
152
+ and/or the `activityTooltip(context)` render prop, whose context carries
153
+ `{ task, activity, startDate, endDate, durationDays }` — use it to show dates,
154
+ duration, crew, anything.
155
+
156
+ Two conveyor modes are available via `activityChain`. `true` — rigid: dragging a
157
+ work translates the whole downstream chain by the same delta. `'push'` —
158
+ выталкивание (ASAP): when a work moves earlier the downstream gaps fill in
159
+ immediately; when it moves later, successors stay put (the gap stretches) until
160
+ the predecessor's end crosses their start — then they get pushed. An activity's
161
+ `lag` (days) sets a constant gap before its start (e.g. technological curing):
162
+ both fill and push keep «predecessor end + lag» exactly. The lag belongs to the
163
+ same-floor sequence only — the vertical «same work on the floor above» link
164
+ carries no lag. Starts are clamped so
165
+ a dragged work cannot violate its own incoming links. Gaps wider than zero are
166
+ drawn as horizontal arrows between consecutive works of one lane.
167
+
168
+ In `'push'` mode the clamp is live and visible: the bar physically stops at the
169
+ binding predecessor instead of snapping back on drop, the blocking work gets a
170
+ red outline, and the dragged bar shows a stop edge with a «Блок: … · зазор N д»
171
+ line in the tooltip. The binding gap is labelled «+N» at the arrow head in the
172
+ dependency-line colour, matching the dependency lag labels.
173
+
174
+ ```tsx
175
+ const tasks: Task[] = [
176
+ {
177
+ id: "floor-12",
178
+ name: "Floor 12",
179
+ startDate: "2026-03-24",
180
+ endDate: "2026-04-02",
181
+ activityChain: true,
182
+ activities: [
183
+ { id: "screed", name: "Screed", startDate: "2026-03-24", endDate: "2026-03-26", color: "#8b5cf6" },
184
+ { id: "wallpaper", name: "Wallpaper", startDate: "2026-03-27", endDate: "2026-03-30", color: "#f59e0b" },
185
+ {
186
+ id: "doors", name: "Doors", startDate: "2026-03-31", endDate: "2026-04-01", color: "#10b981",
187
+ lag: 1, // constant gap (days) before this work starts — same-row chain only
188
+ tooltipFields: [{ label: "Contractor", value: "SK Stroy" }],
189
+ },
190
+ ],
191
+ },
192
+ ];
193
+ ```
194
+
118
195
  ## Resource Planner Mode
119
196
 
120
197
  Use `mode="resource-planner"` when the primary rows are people, equipment, rooms, or other resources instead of tasks. Omitted `mode` still renders the default task Gantt chart.
@@ -218,6 +295,9 @@ interface Task {
218
295
  locked?: boolean;
219
296
  divider?: 'top' | 'bottom';
220
297
  parentId?: string;
298
+ activities?: TaskActivity[]; // multi-bar lane mode for the row
299
+ activityChain?: boolean | 'push'; // ОН-conveyor: chained dragging; 'push' = ASAP с выталкиванием
300
+ // Gantt props: activityClickToDrag, activityActivationMode, showActivityLinks, showActivityLag, activityTooltip
221
301
  }
222
302
  ```
223
303
 
@@ -1,2 +1,2 @@
1
- export { ai as CascadeContext, C as CriticalPathOptions, D as DAY_MS, f as DependencyError, L as LinkType, n as ScaleTaskSubtreeAnchor, o as ScaleTaskSubtreeErrorCode, p as ScaleTaskSubtreeExternalPolicy, q as ScaleTaskSubtreeOptions, S as ScaleTaskSubtreeResult, r as ScaleTaskSubtreeWarning, aj as ScheduleCommandOptions, ak as ScheduleCommandResult, al as ScheduleDependency, am as ScheduleTask, an as ScheduleTaskUpdate, T as Task, ao as TaskDependency, V as ValidationResult, ap as addBusinessDays, t as alignToWorkingDay, u as areTasksHierarchicallyRelated, v as buildAdjacencyList, w as buildTaskRangeFromEnd, x as buildTaskRangeFromStart, y as calculateSuccessorDate, z as cascadeByLinks, aq as cascadeTaskProgress, A as clampTaskRangeForIncomingFS, E as computeCriticalPath, F as computeLagFromDates, H as computeParentDates, I as computeParentProgress, ar as createCascadeContext, J as detectCycles, K as extendCriticalIdsToParents, N as findParentId, O as getAllDependencyEdges, P as getAllDescendants, Q as getBusinessDayOffset, as as getBusinessDaysCount, U as getChildren, X as getDependencyLag, Y as getSuccessorChain, Z as getTaskDuration, _ as getTransitiveCascadeChain, $ as isAncestorTask, a0 as isTaskParent, a1 as moveTaskRange, a2 as moveTaskWithCascade, a3 as normalizeDependencyLag, a4 as normalizePredecessorDates, a5 as normalizeTaskDependencyLags, a6 as normalizeUTCDate, a7 as parseDateOnly, a8 as recalculateIncomingLags, a9 as recalculateProjectSchedule, aa as recalculateTaskFromDependencies, ab as reflowTasksOnModeSwitch, ac as removeDependenciesBetweenTasks, ad as resizeTaskWithCascade, ae as scaleTaskSubtreeDuration, af as shiftBusinessDayOffset, at as subtractBusinessDays, ag as universalCascade, ah as validateDependencies } from '../../index-D99kbU4p.mjs';
1
+ export { al as CascadeContext, C as CriticalPathOptions, D as DAY_MS, g as DependencyError, L as LinkType, o as ScaleTaskSubtreeAnchor, p as ScaleTaskSubtreeErrorCode, q as ScaleTaskSubtreeExternalPolicy, r as ScaleTaskSubtreeOptions, S as ScaleTaskSubtreeResult, s as ScaleTaskSubtreeWarning, am as ScheduleCommandOptions, an as ScheduleCommandResult, ao as ScheduleDependency, ap as ScheduleTask, aq as ScheduleTaskUpdate, T as Task, ar as TaskDependency, V as ValidationResult, as as addBusinessDays, v as alignToWorkingDay, w as areTasksHierarchicallyRelated, x as buildAdjacencyList, y as buildTaskRangeFromEnd, z as buildTaskRangeFromStart, E as calculateSuccessorDate, F as cascadeByLinks, at as cascadeTaskProgress, H as clampTaskRangeForIncomingFS, I as computeCriticalPath, J as computeLagFromDates, K as computeParentDates, N as computeParentProgress, au as createCascadeContext, O as detectCycles, P as extendCriticalIdsToParents, Q as findParentId, U as getAllDependencyEdges, X as getAllDescendants, Y as getBusinessDayOffset, av as getBusinessDaysCount, Z as getChildren, _ as getDependencyLag, $ as getSuccessorChain, a0 as getTaskDuration, a1 as getTransitiveCascadeChain, a2 as isAncestorTask, a3 as isTaskParent, a4 as moveTaskRange, a5 as moveTaskWithCascade, a6 as normalizeDependencyLag, a7 as normalizePredecessorDates, a8 as normalizeTaskDependencyLags, a9 as normalizeUTCDate, aa as parseDateOnly, ab as recalculateIncomingLags, ac as recalculateProjectSchedule, ad as recalculateTaskFromDependencies, ae as reflowTasksOnModeSwitch, af as removeDependenciesBetweenTasks, ag as resizeTaskWithCascade, ah as scaleTaskSubtreeDuration, ai as shiftBusinessDayOffset, aw as subtractBusinessDays, aj as universalCascade, ak as validateDependencies } from '../../index-DheG4h0O.mjs';
2
2
  import 'react';
@@ -1,2 +1,2 @@
1
- export { ai as CascadeContext, C as CriticalPathOptions, D as DAY_MS, f as DependencyError, L as LinkType, n as ScaleTaskSubtreeAnchor, o as ScaleTaskSubtreeErrorCode, p as ScaleTaskSubtreeExternalPolicy, q as ScaleTaskSubtreeOptions, S as ScaleTaskSubtreeResult, r as ScaleTaskSubtreeWarning, aj as ScheduleCommandOptions, ak as ScheduleCommandResult, al as ScheduleDependency, am as ScheduleTask, an as ScheduleTaskUpdate, T as Task, ao as TaskDependency, V as ValidationResult, ap as addBusinessDays, t as alignToWorkingDay, u as areTasksHierarchicallyRelated, v as buildAdjacencyList, w as buildTaskRangeFromEnd, x as buildTaskRangeFromStart, y as calculateSuccessorDate, z as cascadeByLinks, aq as cascadeTaskProgress, A as clampTaskRangeForIncomingFS, E as computeCriticalPath, F as computeLagFromDates, H as computeParentDates, I as computeParentProgress, ar as createCascadeContext, J as detectCycles, K as extendCriticalIdsToParents, N as findParentId, O as getAllDependencyEdges, P as getAllDescendants, Q as getBusinessDayOffset, as as getBusinessDaysCount, U as getChildren, X as getDependencyLag, Y as getSuccessorChain, Z as getTaskDuration, _ as getTransitiveCascadeChain, $ as isAncestorTask, a0 as isTaskParent, a1 as moveTaskRange, a2 as moveTaskWithCascade, a3 as normalizeDependencyLag, a4 as normalizePredecessorDates, a5 as normalizeTaskDependencyLags, a6 as normalizeUTCDate, a7 as parseDateOnly, a8 as recalculateIncomingLags, a9 as recalculateProjectSchedule, aa as recalculateTaskFromDependencies, ab as reflowTasksOnModeSwitch, ac as removeDependenciesBetweenTasks, ad as resizeTaskWithCascade, ae as scaleTaskSubtreeDuration, af as shiftBusinessDayOffset, at as subtractBusinessDays, ag as universalCascade, ah as validateDependencies } from '../../index-D99kbU4p.js';
1
+ export { al as CascadeContext, C as CriticalPathOptions, D as DAY_MS, g as DependencyError, L as LinkType, o as ScaleTaskSubtreeAnchor, p as ScaleTaskSubtreeErrorCode, q as ScaleTaskSubtreeExternalPolicy, r as ScaleTaskSubtreeOptions, S as ScaleTaskSubtreeResult, s as ScaleTaskSubtreeWarning, am as ScheduleCommandOptions, an as ScheduleCommandResult, ao as ScheduleDependency, ap as ScheduleTask, aq as ScheduleTaskUpdate, T as Task, ar as TaskDependency, V as ValidationResult, as as addBusinessDays, v as alignToWorkingDay, w as areTasksHierarchicallyRelated, x as buildAdjacencyList, y as buildTaskRangeFromEnd, z as buildTaskRangeFromStart, E as calculateSuccessorDate, F as cascadeByLinks, at as cascadeTaskProgress, H as clampTaskRangeForIncomingFS, I as computeCriticalPath, J as computeLagFromDates, K as computeParentDates, N as computeParentProgress, au as createCascadeContext, O as detectCycles, P as extendCriticalIdsToParents, Q as findParentId, U as getAllDependencyEdges, X as getAllDescendants, Y as getBusinessDayOffset, av as getBusinessDaysCount, Z as getChildren, _ as getDependencyLag, $ as getSuccessorChain, a0 as getTaskDuration, a1 as getTransitiveCascadeChain, a2 as isAncestorTask, a3 as isTaskParent, a4 as moveTaskRange, a5 as moveTaskWithCascade, a6 as normalizeDependencyLag, a7 as normalizePredecessorDates, a8 as normalizeTaskDependencyLags, a9 as normalizeUTCDate, aa as parseDateOnly, ab as recalculateIncomingLags, ac as recalculateProjectSchedule, ad as recalculateTaskFromDependencies, ae as reflowTasksOnModeSwitch, af as removeDependenciesBetweenTasks, ag as resizeTaskWithCascade, ah as scaleTaskSubtreeDuration, ai as shiftBusinessDayOffset, aw as subtractBusinessDays, aj as universalCascade, ak as validateDependencies } from '../../index-DheG4h0O.js';
2
2
  import 'react';
@@ -159,6 +159,50 @@ interface ValidationResult {
159
159
  /** Array of errors/warnings (empty if valid) */
160
160
  errors: DependencyError[];
161
161
  }
162
+ /**
163
+ * A single work bar rendered inside a multi-activity task row.
164
+ * Activities are visual bars packed into sub-lanes of one row — no hierarchy,
165
+ * no dependencies, no progress of their own.
166
+ */
167
+ interface TaskActivityTooltipField {
168
+ /** Field caption, e.g. "Подрядчик" */
169
+ label: string;
170
+ /** Field value — any renderable content (string, badge, icon, JSX) */
171
+ value: ReactNode;
172
+ }
173
+ interface TaskActivity {
174
+ /** Unique identifier within the host task */
175
+ id: string;
176
+ /** Display name rendered inside the activity bar */
177
+ name: string;
178
+ /** Activity start date (ISO string or Date object) */
179
+ startDate: string | Date;
180
+ /** Activity end date (ISO string or Date object) */
181
+ endDate: string | Date;
182
+ /** Optional color; falls back to the default task bar color */
183
+ color?: string;
184
+ /**
185
+ * Обязательный зазор в днях между концом предыдущей работы этой же строки
186
+ * (этажа) и началом этой (например технологическая выдержка). Задан — зазор
187
+ * постоянный; не задан — последователь подтягивается вплотную («как можно
188
+ * раньше»), а зазор тянется, пока его держит другая связь. На вертикальную
189
+ * связь «та же работа этажом выше» лаг не переносится.
190
+ */
191
+ lag?: number;
192
+ /** Extra rows rendered in the hover tooltip under the header (e.g. contractor). */
193
+ tooltipFields?: TaskActivityTooltipField[];
194
+ }
195
+ /**
196
+ * Context handed to the `activityTooltip` render prop: everything needed to
197
+ * compose a custom activity tooltip (dates, duration, host task, work).
198
+ */
199
+ interface ActivityTooltipContext {
200
+ task: Task;
201
+ activity: TaskActivity;
202
+ startDate: Date;
203
+ endDate: Date;
204
+ durationDays: number;
205
+ }
162
206
  /**
163
207
  * Task data structure for Gantt chart
164
208
  */
@@ -221,6 +265,21 @@ interface Task {
221
265
  planByDate?: Record<string, number>;
222
266
  /** Optional actual quantities keyed by ISO date (YYYY-MM-DD), used by plan-fact mode. */
223
267
  factByDate?: Record<string, number>;
268
+ /**
269
+ * Optional list of works rendered as bars packed into sub-lanes of this row
270
+ * (e.g. finishing works on one floor). Replaces the main bar for the row and
271
+ * grows the row height to fit concurrent activities. Works in gantt mode only.
272
+ */
273
+ activities?: TaskActivity[];
274
+ /**
275
+ * ОН-конвейер (finish-to-start chain) for row activities. Inside the row every
276
+ * work follows the previous one; identical works of consecutive chained rows
277
+ * (floors) are linked too. `true` — жёсткий конвейер: перетаскивание сдвигает
278
+ * всю цепочку ниже на ту же дельту. `'push'` — режим «выталкивания» (ASAP):
279
+ * промежутки заполняются при движении вверх по потоку, вниз последователь
280
+ * сдвигается только после коллизии; лаг работы держит зазор постоянным.
281
+ */
282
+ activityChain?: boolean | 'push';
224
283
  }
225
284
  /**
226
285
  * Date range for Gantt chart display
@@ -772,4 +831,4 @@ type ScaleTaskSubtreeResult = {
772
831
  */
773
832
  declare function scaleTaskSubtreeDuration(parentId: string, targetDuration: number, snapshot: Task[], options?: ScaleTaskSubtreeOptions): ScaleTaskSubtreeResult;
774
833
 
775
- export { isAncestorTask as $, clampTaskRangeForIncomingFS as A, type BuiltInResourceTableColumnId as B, type CriticalPathOptions as C, DAY_MS as D, computeCriticalPath as E, computeLagFromDates as F, type GanttScheduleIntent as G, computeParentDates as H, computeParentProgress as I, detectCycles as J, extendCriticalIdsToParents as K, type LinkType as L, type MonthSpan as M, findParentId as N, getAllDependencyEdges as O, getAllDescendants as P, getBusinessDayOffset as Q, type ResourceTimelineItem as R, type ScaleTaskSubtreeResult as S, type Task as T, getChildren as U, type ValidationResult as V, type WeekendBlock as W, getDependencyLag as X, getSuccessorChain as Y, getTaskDuration as Z, getTransitiveCascadeChain as _, type GanttDateRange as a, isTaskParent as a0, moveTaskRange as a1, moveTaskWithCascade as a2, normalizeDependencyLag as a3, normalizePredecessorDates as a4, normalizeTaskDependencyLags as a5, normalizeUTCDate as a6, parseDateOnly as a7, recalculateIncomingLags as a8, recalculateProjectSchedule as a9, recalculateTaskFromDependencies as aa, reflowTasksOnModeSwitch as ab, removeDependenciesBetweenTasks as ac, resizeTaskWithCascade as ad, scaleTaskSubtreeDuration as ae, shiftBusinessDayOffset as af, universalCascade as ag, validateDependencies as ah, type CascadeContext as ai, type ScheduleCommandOptions as aj, type ScheduleCommandResult as ak, type ScheduleDependency as al, type ScheduleTask as am, type ScheduleTaskUpdate as an, type TaskDependency as ao, addBusinessDays as ap, cascadeTaskProgress as aq, createCascadeContext as ar, getBusinessDaysCount as as, subtractBusinessDays as at, type TimelineMarker as b, type TaskDateChangeMode as c, type ResourcePlannerChartProps as d, type ResourceTimelineResource as e, type DependencyError as f, type GanttChartMode as g, type GridConfig as h, type GridLine as i, type ResourceTableColumnId as j, type ResourceTableColumnWidthMap as k, type ResourceTimelineMove as l, type ResourceTimelineResourceMenuCommand as m, type ScaleTaskSubtreeAnchor as n, type ScaleTaskSubtreeErrorCode as o, type ScaleTaskSubtreeExternalPolicy as p, type ScaleTaskSubtreeOptions as q, type ScaleTaskSubtreeWarning as r, type TaskBarGeometry as s, alignToWorkingDay as t, areTasksHierarchicallyRelated as u, buildAdjacencyList as v, buildTaskRangeFromEnd as w, buildTaskRangeFromStart as x, calculateSuccessorDate as y, cascadeByLinks as z };
834
+ export { getSuccessorChain as $, type ActivityTooltipContext as A, type BuiltInResourceTableColumnId as B, type CriticalPathOptions as C, DAY_MS as D, calculateSuccessorDate as E, cascadeByLinks as F, type GanttScheduleIntent as G, clampTaskRangeForIncomingFS as H, computeCriticalPath as I, computeLagFromDates as J, computeParentDates as K, type LinkType as L, type MonthSpan as M, computeParentProgress as N, detectCycles as O, extendCriticalIdsToParents as P, findParentId as Q, type ResourceTimelineItem as R, type ScaleTaskSubtreeResult as S, type Task as T, getAllDependencyEdges as U, type ValidationResult as V, type WeekendBlock as W, getAllDescendants as X, getBusinessDayOffset as Y, getChildren as Z, getDependencyLag as _, type GanttDateRange as a, getTaskDuration as a0, getTransitiveCascadeChain as a1, isAncestorTask as a2, isTaskParent as a3, moveTaskRange as a4, moveTaskWithCascade as a5, normalizeDependencyLag as a6, normalizePredecessorDates as a7, normalizeTaskDependencyLags as a8, normalizeUTCDate as a9, parseDateOnly as aa, recalculateIncomingLags as ab, recalculateProjectSchedule as ac, recalculateTaskFromDependencies as ad, reflowTasksOnModeSwitch as ae, removeDependenciesBetweenTasks as af, resizeTaskWithCascade as ag, scaleTaskSubtreeDuration as ah, shiftBusinessDayOffset as ai, universalCascade as aj, validateDependencies as ak, type CascadeContext as al, type ScheduleCommandOptions as am, type ScheduleCommandResult as an, type ScheduleDependency as ao, type ScheduleTask as ap, type ScheduleTaskUpdate as aq, type TaskDependency as ar, addBusinessDays as as, cascadeTaskProgress as at, createCascadeContext as au, getBusinessDaysCount as av, subtractBusinessDays as aw, type TimelineMarker as b, type TaskDateChangeMode as c, type ResourcePlannerChartProps as d, type TaskActivity as e, type ResourceTimelineResource as f, type DependencyError as g, type GanttChartMode as h, type GridConfig as i, type GridLine as j, type ResourceTableColumnId as k, type ResourceTableColumnWidthMap as l, type ResourceTimelineMove as m, type ResourceTimelineResourceMenuCommand as n, type ScaleTaskSubtreeAnchor as o, type ScaleTaskSubtreeErrorCode as p, type ScaleTaskSubtreeExternalPolicy as q, type ScaleTaskSubtreeOptions as r, type ScaleTaskSubtreeWarning as s, type TaskActivityTooltipField as t, type TaskBarGeometry as u, alignToWorkingDay as v, areTasksHierarchicallyRelated as w, buildAdjacencyList as x, buildTaskRangeFromEnd as y, buildTaskRangeFromStart as z };
@@ -159,6 +159,50 @@ interface ValidationResult {
159
159
  /** Array of errors/warnings (empty if valid) */
160
160
  errors: DependencyError[];
161
161
  }
162
+ /**
163
+ * A single work bar rendered inside a multi-activity task row.
164
+ * Activities are visual bars packed into sub-lanes of one row — no hierarchy,
165
+ * no dependencies, no progress of their own.
166
+ */
167
+ interface TaskActivityTooltipField {
168
+ /** Field caption, e.g. "Подрядчик" */
169
+ label: string;
170
+ /** Field value — any renderable content (string, badge, icon, JSX) */
171
+ value: ReactNode;
172
+ }
173
+ interface TaskActivity {
174
+ /** Unique identifier within the host task */
175
+ id: string;
176
+ /** Display name rendered inside the activity bar */
177
+ name: string;
178
+ /** Activity start date (ISO string or Date object) */
179
+ startDate: string | Date;
180
+ /** Activity end date (ISO string or Date object) */
181
+ endDate: string | Date;
182
+ /** Optional color; falls back to the default task bar color */
183
+ color?: string;
184
+ /**
185
+ * Обязательный зазор в днях между концом предыдущей работы этой же строки
186
+ * (этажа) и началом этой (например технологическая выдержка). Задан — зазор
187
+ * постоянный; не задан — последователь подтягивается вплотную («как можно
188
+ * раньше»), а зазор тянется, пока его держит другая связь. На вертикальную
189
+ * связь «та же работа этажом выше» лаг не переносится.
190
+ */
191
+ lag?: number;
192
+ /** Extra rows rendered in the hover tooltip under the header (e.g. contractor). */
193
+ tooltipFields?: TaskActivityTooltipField[];
194
+ }
195
+ /**
196
+ * Context handed to the `activityTooltip` render prop: everything needed to
197
+ * compose a custom activity tooltip (dates, duration, host task, work).
198
+ */
199
+ interface ActivityTooltipContext {
200
+ task: Task;
201
+ activity: TaskActivity;
202
+ startDate: Date;
203
+ endDate: Date;
204
+ durationDays: number;
205
+ }
162
206
  /**
163
207
  * Task data structure for Gantt chart
164
208
  */
@@ -221,6 +265,21 @@ interface Task {
221
265
  planByDate?: Record<string, number>;
222
266
  /** Optional actual quantities keyed by ISO date (YYYY-MM-DD), used by plan-fact mode. */
223
267
  factByDate?: Record<string, number>;
268
+ /**
269
+ * Optional list of works rendered as bars packed into sub-lanes of this row
270
+ * (e.g. finishing works on one floor). Replaces the main bar for the row and
271
+ * grows the row height to fit concurrent activities. Works in gantt mode only.
272
+ */
273
+ activities?: TaskActivity[];
274
+ /**
275
+ * ОН-конвейер (finish-to-start chain) for row activities. Inside the row every
276
+ * work follows the previous one; identical works of consecutive chained rows
277
+ * (floors) are linked too. `true` — жёсткий конвейер: перетаскивание сдвигает
278
+ * всю цепочку ниже на ту же дельту. `'push'` — режим «выталкивания» (ASAP):
279
+ * промежутки заполняются при движении вверх по потоку, вниз последователь
280
+ * сдвигается только после коллизии; лаг работы держит зазор постоянным.
281
+ */
282
+ activityChain?: boolean | 'push';
224
283
  }
225
284
  /**
226
285
  * Date range for Gantt chart display
@@ -772,4 +831,4 @@ type ScaleTaskSubtreeResult = {
772
831
  */
773
832
  declare function scaleTaskSubtreeDuration(parentId: string, targetDuration: number, snapshot: Task[], options?: ScaleTaskSubtreeOptions): ScaleTaskSubtreeResult;
774
833
 
775
- export { isAncestorTask as $, clampTaskRangeForIncomingFS as A, type BuiltInResourceTableColumnId as B, type CriticalPathOptions as C, DAY_MS as D, computeCriticalPath as E, computeLagFromDates as F, type GanttScheduleIntent as G, computeParentDates as H, computeParentProgress as I, detectCycles as J, extendCriticalIdsToParents as K, type LinkType as L, type MonthSpan as M, findParentId as N, getAllDependencyEdges as O, getAllDescendants as P, getBusinessDayOffset as Q, type ResourceTimelineItem as R, type ScaleTaskSubtreeResult as S, type Task as T, getChildren as U, type ValidationResult as V, type WeekendBlock as W, getDependencyLag as X, getSuccessorChain as Y, getTaskDuration as Z, getTransitiveCascadeChain as _, type GanttDateRange as a, isTaskParent as a0, moveTaskRange as a1, moveTaskWithCascade as a2, normalizeDependencyLag as a3, normalizePredecessorDates as a4, normalizeTaskDependencyLags as a5, normalizeUTCDate as a6, parseDateOnly as a7, recalculateIncomingLags as a8, recalculateProjectSchedule as a9, recalculateTaskFromDependencies as aa, reflowTasksOnModeSwitch as ab, removeDependenciesBetweenTasks as ac, resizeTaskWithCascade as ad, scaleTaskSubtreeDuration as ae, shiftBusinessDayOffset as af, universalCascade as ag, validateDependencies as ah, type CascadeContext as ai, type ScheduleCommandOptions as aj, type ScheduleCommandResult as ak, type ScheduleDependency as al, type ScheduleTask as am, type ScheduleTaskUpdate as an, type TaskDependency as ao, addBusinessDays as ap, cascadeTaskProgress as aq, createCascadeContext as ar, getBusinessDaysCount as as, subtractBusinessDays as at, type TimelineMarker as b, type TaskDateChangeMode as c, type ResourcePlannerChartProps as d, type ResourceTimelineResource as e, type DependencyError as f, type GanttChartMode as g, type GridConfig as h, type GridLine as i, type ResourceTableColumnId as j, type ResourceTableColumnWidthMap as k, type ResourceTimelineMove as l, type ResourceTimelineResourceMenuCommand as m, type ScaleTaskSubtreeAnchor as n, type ScaleTaskSubtreeErrorCode as o, type ScaleTaskSubtreeExternalPolicy as p, type ScaleTaskSubtreeOptions as q, type ScaleTaskSubtreeWarning as r, type TaskBarGeometry as s, alignToWorkingDay as t, areTasksHierarchicallyRelated as u, buildAdjacencyList as v, buildTaskRangeFromEnd as w, buildTaskRangeFromStart as x, calculateSuccessorDate as y, cascadeByLinks as z };
834
+ export { getSuccessorChain as $, type ActivityTooltipContext as A, type BuiltInResourceTableColumnId as B, type CriticalPathOptions as C, DAY_MS as D, calculateSuccessorDate as E, cascadeByLinks as F, type GanttScheduleIntent as G, clampTaskRangeForIncomingFS as H, computeCriticalPath as I, computeLagFromDates as J, computeParentDates as K, type LinkType as L, type MonthSpan as M, computeParentProgress as N, detectCycles as O, extendCriticalIdsToParents as P, findParentId as Q, type ResourceTimelineItem as R, type ScaleTaskSubtreeResult as S, type Task as T, getAllDependencyEdges as U, type ValidationResult as V, type WeekendBlock as W, getAllDescendants as X, getBusinessDayOffset as Y, getChildren as Z, getDependencyLag as _, type GanttDateRange as a, getTaskDuration as a0, getTransitiveCascadeChain as a1, isAncestorTask as a2, isTaskParent as a3, moveTaskRange as a4, moveTaskWithCascade as a5, normalizeDependencyLag as a6, normalizePredecessorDates as a7, normalizeTaskDependencyLags as a8, normalizeUTCDate as a9, parseDateOnly as aa, recalculateIncomingLags as ab, recalculateProjectSchedule as ac, recalculateTaskFromDependencies as ad, reflowTasksOnModeSwitch as ae, removeDependenciesBetweenTasks as af, resizeTaskWithCascade as ag, scaleTaskSubtreeDuration as ah, shiftBusinessDayOffset as ai, universalCascade as aj, validateDependencies as ak, type CascadeContext as al, type ScheduleCommandOptions as am, type ScheduleCommandResult as an, type ScheduleDependency as ao, type ScheduleTask as ap, type ScheduleTaskUpdate as aq, type TaskDependency as ar, addBusinessDays as as, cascadeTaskProgress as at, createCascadeContext as au, getBusinessDaysCount as av, subtractBusinessDays as aw, type TimelineMarker as b, type TaskDateChangeMode as c, type ResourcePlannerChartProps as d, type TaskActivity as e, type ResourceTimelineResource as f, type DependencyError as g, type GanttChartMode as h, type GridConfig as i, type GridLine as j, type ResourceTableColumnId as k, type ResourceTableColumnWidthMap as l, type ResourceTimelineMove as m, type ResourceTimelineResourceMenuCommand as n, type ScaleTaskSubtreeAnchor as o, type ScaleTaskSubtreeErrorCode as p, type ScaleTaskSubtreeExternalPolicy as q, type ScaleTaskSubtreeOptions as r, type ScaleTaskSubtreeWarning as s, type TaskActivityTooltipField as t, type TaskBarGeometry as u, alignToWorkingDay as v, areTasksHierarchicallyRelated as w, buildAdjacencyList as x, buildTaskRangeFromEnd as y, buildTaskRangeFromStart as z };