gantt-lib 0.135.9 → 0.136.1

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
@@ -93,6 +93,28 @@ export default function App() {
93
93
  }
94
94
  ```
95
95
 
96
+ ## Composite Tasks (Gantt Accordion)
97
+
98
+ Set `composite: true` on a task and link its detail rows with `parentId`. The
99
+ composite bar spans the dates of its children. Hovering the bar previews their
100
+ mini-bars; clicking the bar or the dedicated disclosure button in the task list
101
+ expands compact detail rows in both the table and Gantt chart. Clicking the task
102
+ name keeps its normal select/scroll behavior. Preview mini-bars and subtle
103
+ detail-row fills use the composite task color, and row hover stays synchronized
104
+ between the table and chart. Dragging the composite task moves the group;
105
+ dragging a child edits that child schedule.
106
+
107
+ ```tsx
108
+ const tasks: Task[] = [
109
+ { id: "flooring", name: "Flooring", composite: true, color: "#0f9caf", startDate: "2026-10-01", endDate: "2026-10-10" },
110
+ { id: "floor-1", parentId: "flooring", name: "Floor 1", startDate: "2026-10-01", endDate: "2026-10-03" },
111
+ { id: "floor-2", parentId: "flooring", name: "Floor 2", startDate: "2026-10-05", endDate: "2026-10-10" },
112
+ ];
113
+ ```
114
+
115
+ When using controlled `collapsedParentIds`, provide `onToggleCollapse` to update
116
+ the collapsed parent IDs in application state.
117
+
96
118
  ## Resource Planner Mode
97
119
 
98
120
  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.
@@ -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-DR8Q6-de.mjs';
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';
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-DR8Q6-de.js';
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';
2
2
  import 'react';
@@ -4,11 +4,13 @@ type GanttScheduleIntent = {
4
4
  type: 'move_task';
5
5
  taskId: string;
6
6
  startDate: string;
7
+ localOverride?: boolean;
7
8
  } | {
8
9
  type: 'resize_task';
9
10
  taskId: string;
10
11
  anchor: 'start' | 'end';
11
12
  date: string;
13
+ localOverride?: boolean;
12
14
  } | {
13
15
  type: 'change_duration';
14
16
  taskId: string;
@@ -16,6 +18,7 @@ type GanttScheduleIntent = {
16
18
  anchor: 'start' | 'end';
17
19
  /** Explicit target type for milestone <-> task transitions from the duration editor. */
18
20
  taskType?: 'task' | 'milestone';
21
+ localOverride?: boolean;
19
22
  };
20
23
  type GanttChartMode = 'gantt' | 'table-matrix' | 'plan-fact' | 'resource-planner';
21
24
  type TaskDateChangeMode = 'preserve-duration' | 'free';
@@ -181,6 +184,8 @@ interface Task {
181
184
  type?: 'task' | 'milestone';
182
185
  /** Optional parent task ID for hierarchy relationship */
183
186
  parentId?: string;
187
+ /** Show this parent as a compact composite bar, collapsed until opened. */
188
+ composite?: boolean;
184
189
  /**
185
190
  * Optional progress value from 0-100
186
191
  * - Decimal values are allowed and rounded to nearest integer for display
@@ -4,11 +4,13 @@ type GanttScheduleIntent = {
4
4
  type: 'move_task';
5
5
  taskId: string;
6
6
  startDate: string;
7
+ localOverride?: boolean;
7
8
  } | {
8
9
  type: 'resize_task';
9
10
  taskId: string;
10
11
  anchor: 'start' | 'end';
11
12
  date: string;
13
+ localOverride?: boolean;
12
14
  } | {
13
15
  type: 'change_duration';
14
16
  taskId: string;
@@ -16,6 +18,7 @@ type GanttScheduleIntent = {
16
18
  anchor: 'start' | 'end';
17
19
  /** Explicit target type for milestone <-> task transitions from the duration editor. */
18
20
  taskType?: 'task' | 'milestone';
21
+ localOverride?: boolean;
19
22
  };
20
23
  type GanttChartMode = 'gantt' | 'table-matrix' | 'plan-fact' | 'resource-planner';
21
24
  type TaskDateChangeMode = 'preserve-duration' | 'free';
@@ -181,6 +184,8 @@ interface Task {
181
184
  type?: 'task' | 'milestone';
182
185
  /** Optional parent task ID for hierarchy relationship */
183
186
  parentId?: string;
187
+ /** Show this parent as a compact composite bar, collapsed until opened. */
188
+ composite?: boolean;
184
189
  /**
185
190
  * Optional progress value from 0-100
186
191
  * - Decimal values are allowed and rounded to nearest integer for display