gantt-lib 0.135.1 → 0.135.3
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/dist/index.css.map +1 -1
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +55 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +55 -11
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +16 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -657,6 +657,8 @@ interface TaskChartSharedProps<TTask extends Task = Task> {
|
|
|
657
657
|
taskDateChangeMode?: TaskDateChangeMode;
|
|
658
658
|
/** Controlled callback for task-list date picker mode changes */
|
|
659
659
|
onTaskDateChangeModeChange?: (mode: TaskDateChangeMode) => void;
|
|
660
|
+
/** Render task-list dependencies as compact text for print/export layouts (default: false). */
|
|
661
|
+
printDependencyLabels?: boolean;
|
|
660
662
|
}
|
|
661
663
|
interface GanttModeProps<TTask extends Task = Task> extends TaskChartSharedProps<TTask> {
|
|
662
664
|
/** Omitted mode keeps the historical task-based gantt behavior. */
|
|
@@ -1087,6 +1089,8 @@ interface TaskListProps {
|
|
|
1087
1089
|
taskDateChangeMode?: TaskDateChangeMode;
|
|
1088
1090
|
/** Controlled callback for task-list date picker mode changes */
|
|
1089
1091
|
onTaskDateChangeModeChange?: (mode: TaskDateChangeMode) => void;
|
|
1092
|
+
/** Render dependencies as compact text for print/export layouts instead of interactive chips. */
|
|
1093
|
+
printDependencyLabels?: boolean;
|
|
1090
1094
|
/** Visible row indices from the shared chart viewport window */
|
|
1091
1095
|
visibleRowIndices?: number[];
|
|
1092
1096
|
/** Display-only placeholder rows appended below streamed task rows. */
|
package/dist/index.d.ts
CHANGED
|
@@ -657,6 +657,8 @@ interface TaskChartSharedProps<TTask extends Task = Task> {
|
|
|
657
657
|
taskDateChangeMode?: TaskDateChangeMode;
|
|
658
658
|
/** Controlled callback for task-list date picker mode changes */
|
|
659
659
|
onTaskDateChangeModeChange?: (mode: TaskDateChangeMode) => void;
|
|
660
|
+
/** Render task-list dependencies as compact text for print/export layouts (default: false). */
|
|
661
|
+
printDependencyLabels?: boolean;
|
|
660
662
|
}
|
|
661
663
|
interface GanttModeProps<TTask extends Task = Task> extends TaskChartSharedProps<TTask> {
|
|
662
664
|
/** Omitted mode keeps the historical task-based gantt behavior. */
|
|
@@ -1087,6 +1089,8 @@ interface TaskListProps {
|
|
|
1087
1089
|
taskDateChangeMode?: TaskDateChangeMode;
|
|
1088
1090
|
/** Controlled callback for task-list date picker mode changes */
|
|
1089
1091
|
onTaskDateChangeModeChange?: (mode: TaskDateChangeMode) => void;
|
|
1092
|
+
/** Render dependencies as compact text for print/export layouts instead of interactive chips. */
|
|
1093
|
+
printDependencyLabels?: boolean;
|
|
1090
1094
|
/** Visible row indices from the shared chart viewport window */
|
|
1091
1095
|
visibleRowIndices?: number[];
|
|
1092
1096
|
/** Display-only placeholder rows appended below streamed task rows. */
|
package/dist/index.js
CHANGED
|
@@ -6341,6 +6341,11 @@ var LINK_TYPE_LABELS_RU2 = {
|
|
|
6341
6341
|
function formatTaskNumberLabel(taskNumber) {
|
|
6342
6342
|
return taskNumber ? `${taskNumber}. ` : "";
|
|
6343
6343
|
}
|
|
6344
|
+
function formatDependencyPrintLabel(dep, predecessorTaskNumber, lag) {
|
|
6345
|
+
const effectiveLag = lag ?? 0;
|
|
6346
|
+
const lagSuffix = effectiveLag === 0 ? "" : effectiveLag > 0 ? `+${effectiveLag}` : String(effectiveLag);
|
|
6347
|
+
return `[${predecessorTaskNumber ?? dep.taskId}]${LINK_TYPE_LABELS_RU2[dep.type]}${lagSuffix}`;
|
|
6348
|
+
}
|
|
6344
6349
|
var ArrowLeft = () => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
6345
6350
|
"svg",
|
|
6346
6351
|
{
|
|
@@ -6752,7 +6757,7 @@ var areTaskListRowPropsEqual = (prevProps, nextProps) => {
|
|
|
6752
6757
|
const nextPickingTask = nextProps.selectingPredecessorFor === nextTask.id;
|
|
6753
6758
|
const prevAnyPicking = prevProps.selectingPredecessorFor != null;
|
|
6754
6759
|
const nextAnyPicking = nextProps.selectingPredecessorFor != null;
|
|
6755
|
-
return prevTaskUnchanged && prevProps.rowIndex === nextProps.rowIndex && prevProps.taskNumber === nextProps.taskNumber && prevProps.taskNumberMap === nextProps.taskNumberMap && prevProps.rowHeight === nextProps.rowHeight && prevIsSelected === nextIsSelected && prevProps.disableTaskNameEditing === nextProps.disableTaskNameEditing && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.allTasks === nextProps.allTasks && prevProps.activeLinkType === nextProps.activeLinkType && prevProps.dependencyPickMode === nextProps.dependencyPickMode && prevPickingTask === nextPickingTask && prevAnyPicking === nextAnyPicking && resolveSelectedChipRole(prevProps) === resolveSelectedChipRole(nextProps) && prevIsEditingTask === nextIsEditingTask && prevProps.isDragging === nextProps.isDragging && prevProps.isDragOver === nextProps.isDragOver && prevProps.dragOverPlacement === nextProps.dragOverPlacement && prevProps.isNestedDropTarget === nextProps.isNestedDropTarget && prevProps.isDirectChildDropTarget === nextProps.isDirectChildDropTarget && prevCollapsed === nextCollapsed && prevProps.canDemoteTask === nextProps.canDemoteTask && prevProps.isLastChild === nextProps.isLastChild && prevProps.nestingDepth === nextProps.nestingDepth && prevProps.hasVisibleChildren === nextProps.hasVisibleChildren && prevProps.ancestorLineModes === nextProps.ancestorLineModes && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.fillParentRow === nextProps.fillParentRow && prevProps.businessDays === nextProps.businessDays && prevProps.defaultTaskDurationDays === nextProps.defaultTaskDurationDays && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.isFilterHideMode === nextProps.isFilterHideMode && prevProps.resolvedColumns === nextProps.resolvedColumns && prevProps.isTaskSelected === nextProps.isTaskSelected && resolveActiveCustomCellForRow(prevProps) === resolveActiveCustomCellForRow(nextProps) && prevProps.taskListMenuCommands === nextProps.taskListMenuCommands && prevProps.hideTaskListRowActions === nextProps.hideTaskListRowActions && prevProps.rowClassName === nextProps.rowClassName && prevProps.getTaskListNamePrefixIcon === nextProps.getTaskListNamePrefixIcon && prevProps.taskDateChangeMode === nextProps.taskDateChangeMode;
|
|
6760
|
+
return prevTaskUnchanged && prevProps.rowIndex === nextProps.rowIndex && prevProps.taskNumber === nextProps.taskNumber && prevProps.taskNumberMap === nextProps.taskNumberMap && prevProps.rowHeight === nextProps.rowHeight && prevIsSelected === nextIsSelected && prevProps.disableTaskNameEditing === nextProps.disableTaskNameEditing && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.allTasks === nextProps.allTasks && prevProps.activeLinkType === nextProps.activeLinkType && prevProps.dependencyPickMode === nextProps.dependencyPickMode && prevPickingTask === nextPickingTask && prevAnyPicking === nextAnyPicking && resolveSelectedChipRole(prevProps) === resolveSelectedChipRole(nextProps) && prevIsEditingTask === nextIsEditingTask && prevProps.isDragging === nextProps.isDragging && prevProps.isDragOver === nextProps.isDragOver && prevProps.dragOverPlacement === nextProps.dragOverPlacement && prevProps.isNestedDropTarget === nextProps.isNestedDropTarget && prevProps.isDirectChildDropTarget === nextProps.isDirectChildDropTarget && prevCollapsed === nextCollapsed && prevProps.canDemoteTask === nextProps.canDemoteTask && prevProps.isLastChild === nextProps.isLastChild && prevProps.nestingDepth === nextProps.nestingDepth && prevProps.hasVisibleChildren === nextProps.hasVisibleChildren && prevProps.ancestorLineModes === nextProps.ancestorLineModes && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.fillParentRow === nextProps.fillParentRow && prevProps.businessDays === nextProps.businessDays && prevProps.defaultTaskDurationDays === nextProps.defaultTaskDurationDays && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.isFilterHideMode === nextProps.isFilterHideMode && prevProps.resolvedColumns === nextProps.resolvedColumns && prevProps.isTaskSelected === nextProps.isTaskSelected && resolveActiveCustomCellForRow(prevProps) === resolveActiveCustomCellForRow(nextProps) && prevProps.taskListMenuCommands === nextProps.taskListMenuCommands && prevProps.hideTaskListRowActions === nextProps.hideTaskListRowActions && prevProps.rowClassName === nextProps.rowClassName && prevProps.getTaskListNamePrefixIcon === nextProps.getTaskListNamePrefixIcon && prevProps.taskDateChangeMode === nextProps.taskDateChangeMode && prevProps.printDependencyLabels === nextProps.printDependencyLabels;
|
|
6756
6761
|
};
|
|
6757
6762
|
var TaskListRow = import_react11.default.memo(
|
|
6758
6763
|
({
|
|
@@ -6820,7 +6825,8 @@ var TaskListRow = import_react11.default.memo(
|
|
|
6820
6825
|
rowClassName,
|
|
6821
6826
|
getTaskListNamePrefixIcon,
|
|
6822
6827
|
taskDateChangeMode = "preserve-duration",
|
|
6823
|
-
onTaskDateChangeModeChange
|
|
6828
|
+
onTaskDateChangeModeChange,
|
|
6829
|
+
printDependencyLabels = false
|
|
6824
6830
|
}) => {
|
|
6825
6831
|
const [editingColumnId, setEditingColumnId] = (0, import_react11.useState)(null);
|
|
6826
6832
|
const [editingColumnStartValue, setEditingColumnStartValue] = (0, import_react11.useState)(void 0);
|
|
@@ -8306,7 +8312,11 @@ var TaskListRow = import_react11.default.memo(
|
|
|
8306
8312
|
),
|
|
8307
8313
|
sourcePickerContent
|
|
8308
8314
|
] }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
|
|
8309
|
-
chips.
|
|
8315
|
+
printDependencyLabels ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "gantt-tl-dependency-print-labels", children: chips.map(({ dep, lag }) => formatDependencyPrintLabel(
|
|
8316
|
+
dep,
|
|
8317
|
+
taskNumberMap[dep.taskId],
|
|
8318
|
+
lag
|
|
8319
|
+
)).join(", ") }) : chips.length >= 2 ? (
|
|
8310
8320
|
/* 2+ deps — show only "N связей" summary chip that opens a popover */
|
|
8311
8321
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Popover, { open: overflowOpen, onOpenChange: setOverflowOpen, children: [
|
|
8312
8322
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
@@ -8383,7 +8393,7 @@ var TaskListRow = import_react11.default.memo(
|
|
|
8383
8393
|
}
|
|
8384
8394
|
)
|
|
8385
8395
|
) : null,
|
|
8386
|
-
!disableDependencyEditing && !isPicking && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
8396
|
+
!printDependencyLabels && !disableDependencyEditing && !isPicking && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
8387
8397
|
"button",
|
|
8388
8398
|
{
|
|
8389
8399
|
type: "button",
|
|
@@ -9047,6 +9057,7 @@ var TaskList = ({
|
|
|
9047
9057
|
bodyMinHeight,
|
|
9048
9058
|
taskDateChangeMode = "preserve-duration",
|
|
9049
9059
|
onTaskDateChangeModeChange,
|
|
9060
|
+
printDependencyLabels = false,
|
|
9050
9061
|
visibleRowIndices,
|
|
9051
9062
|
skeletonRowCount = 0
|
|
9052
9063
|
}) => {
|
|
@@ -10204,7 +10215,8 @@ var TaskList = ({
|
|
|
10204
10215
|
rowClassName: getTaskListRowClassName?.(task),
|
|
10205
10216
|
getTaskListNamePrefixIcon,
|
|
10206
10217
|
taskDateChangeMode,
|
|
10207
|
-
onTaskDateChangeModeChange
|
|
10218
|
+
onTaskDateChangeModeChange,
|
|
10219
|
+
printDependencyLabels
|
|
10208
10220
|
}
|
|
10209
10221
|
)
|
|
10210
10222
|
},
|
|
@@ -14020,6 +14032,17 @@ var PLAN_FACT_COLUMN_OVERSCAN = 24;
|
|
|
14020
14032
|
var PLAN_FACT_COLUMN_WINDOW_STEP = 14;
|
|
14021
14033
|
var DEFAULT_INITIAL_VIEWPORT_HEIGHT = 768;
|
|
14022
14034
|
var DEFAULT_PLAN_FACT_COLUMN_WINDOW = PLAN_FACT_COLUMN_OVERSCAN + PLAN_FACT_COLUMN_WINDOW_STEP;
|
|
14035
|
+
function buildControlledScheduleIdentity(tasks) {
|
|
14036
|
+
return tasks.map((task, index) => [
|
|
14037
|
+
String(index),
|
|
14038
|
+
task.id,
|
|
14039
|
+
String(task.startDate),
|
|
14040
|
+
String(task.endDate),
|
|
14041
|
+
task.type ?? "",
|
|
14042
|
+
task.parentId ?? "",
|
|
14043
|
+
JSON.stringify(task.dependencies ?? [])
|
|
14044
|
+
].join("\0")).join("");
|
|
14045
|
+
}
|
|
14023
14046
|
function getInitialScrollViewportHeight(containerHeight, headerHeight) {
|
|
14024
14047
|
if (containerHeight === void 0) {
|
|
14025
14048
|
return 0;
|
|
@@ -14208,7 +14231,8 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14208
14231
|
getTaskListNamePrefixIcon,
|
|
14209
14232
|
rowContentLines = 1,
|
|
14210
14233
|
taskDateChangeMode: externalTaskDateChangeMode,
|
|
14211
|
-
onTaskDateChangeModeChange: externalOnTaskDateChangeModeChange
|
|
14234
|
+
onTaskDateChangeModeChange: externalOnTaskDateChangeModeChange,
|
|
14235
|
+
printDependencyLabels = false
|
|
14212
14236
|
} = props;
|
|
14213
14237
|
const dayWidth = !isTableMatrixMode ? props.dayWidth ?? 40 : 40;
|
|
14214
14238
|
const criticalPathMode = !isTableMatrixMode && !isPlanFactMode ? props.criticalPathMode : void 0;
|
|
@@ -14417,11 +14441,17 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14417
14441
|
[resolvedRowContentLines, rowHeight]
|
|
14418
14442
|
);
|
|
14419
14443
|
const normalizedTasks = (0, import_react19.useMemo)(() => normalizeHierarchyTasks(tasks), [tasks]);
|
|
14444
|
+
const controlledScheduleIdentity = (0, import_react19.useMemo)(
|
|
14445
|
+
() => buildControlledScheduleIdentity(normalizedTasks),
|
|
14446
|
+
[normalizedTasks]
|
|
14447
|
+
);
|
|
14448
|
+
const previousControlledScheduleIdentityRef = (0, import_react19.useRef)(null);
|
|
14449
|
+
const controlledScheduleChanged = previousControlledScheduleIdentityRef.current !== null && previousControlledScheduleIdentityRef.current !== controlledScheduleIdentity;
|
|
14420
14450
|
const [previewTasksById, setPreviewTasksById] = (0, import_react19.useState)(/* @__PURE__ */ new Map());
|
|
14421
14451
|
const previewNormalizedTasks = (0, import_react19.useMemo)(() => {
|
|
14422
|
-
if (previewTasksById.size === 0) return normalizedTasks;
|
|
14452
|
+
if (controlledScheduleChanged || previewTasksById.size === 0) return normalizedTasks;
|
|
14423
14453
|
return normalizedTasks.map((task) => previewTasksById.get(task.id) ?? task);
|
|
14424
|
-
}, [normalizedTasks, previewTasksById]);
|
|
14454
|
+
}, [controlledScheduleChanged, normalizedTasks, previewTasksById]);
|
|
14425
14455
|
const isCustomWeekend = (0, import_react19.useMemo)(
|
|
14426
14456
|
() => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
|
|
14427
14457
|
[customDays, isWeekend3]
|
|
@@ -14690,6 +14720,18 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14690
14720
|
}, [effectiveRowHeight, tasks, visibleTasks]);
|
|
14691
14721
|
const [dragGuideLines, setDragGuideLines] = (0, import_react19.useState)(null);
|
|
14692
14722
|
const [draggedTaskOverride, setDraggedTaskOverride] = (0, import_react19.useState)(null);
|
|
14723
|
+
(0, import_react19.useEffect)(() => {
|
|
14724
|
+
const previousIdentity = previousControlledScheduleIdentityRef.current;
|
|
14725
|
+
previousControlledScheduleIdentityRef.current = controlledScheduleIdentity;
|
|
14726
|
+
if (previousIdentity === null || previousIdentity === controlledScheduleIdentity) {
|
|
14727
|
+
return;
|
|
14728
|
+
}
|
|
14729
|
+
previewPositionStore.clear();
|
|
14730
|
+
setCascadeOverrides((current) => current.size === 0 ? current : /* @__PURE__ */ new Map());
|
|
14731
|
+
setPreviewTasksById((current) => current.size === 0 ? current : /* @__PURE__ */ new Map());
|
|
14732
|
+
setDraggedTaskOverride((current) => current === null ? current : null);
|
|
14733
|
+
setDragGuideLines((current) => current === null ? current : null);
|
|
14734
|
+
}, [controlledScheduleIdentity, previewPositionStore]);
|
|
14693
14735
|
(0, import_react19.useEffect)(() => {
|
|
14694
14736
|
const result = validateDependencies(tasks);
|
|
14695
14737
|
setValidationResult(result);
|
|
@@ -14891,6 +14933,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14891
14933
|
onTasksChange?.(normalized);
|
|
14892
14934
|
}, [onTasksChange, onReorder]);
|
|
14893
14935
|
const dependencyOverrides = (0, import_react19.useMemo)(() => {
|
|
14936
|
+
if (controlledScheduleChanged) return /* @__PURE__ */ new Map();
|
|
14894
14937
|
const map = new Map(cascadeOverrides);
|
|
14895
14938
|
if (draggedTaskOverride) {
|
|
14896
14939
|
map.set(draggedTaskOverride.taskId, {
|
|
@@ -14899,7 +14942,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14899
14942
|
});
|
|
14900
14943
|
}
|
|
14901
14944
|
return map;
|
|
14902
|
-
}, [cascadeOverrides, draggedTaskOverride]);
|
|
14945
|
+
}, [cascadeOverrides, controlledScheduleChanged, draggedTaskOverride]);
|
|
14903
14946
|
const handleCascadeProgress = (0, import_react19.useCallback)((overrides, previewTasks = []) => {
|
|
14904
14947
|
previewPositionStore.setPositions(overrides);
|
|
14905
14948
|
const renderedTaskIds = renderedTaskIdsRef.current;
|
|
@@ -14916,9 +14959,9 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14916
14959
|
});
|
|
14917
14960
|
}, [previewPositionStore]);
|
|
14918
14961
|
const previewVisibleTasks = (0, import_react19.useMemo)(() => {
|
|
14919
|
-
if (previewTasksById.size === 0) return visibleTasks;
|
|
14962
|
+
if (controlledScheduleChanged || previewTasksById.size === 0) return visibleTasks;
|
|
14920
14963
|
return visibleTasks.map((task) => previewTasksById.get(task.id) ?? task);
|
|
14921
|
-
}, [visibleTasks, previewTasksById]);
|
|
14964
|
+
}, [controlledScheduleChanged, visibleTasks, previewTasksById]);
|
|
14922
14965
|
const visibleTaskIndexMap = (0, import_react19.useMemo)(
|
|
14923
14966
|
() => new Map(visibleTasks.map((task, index) => [task.id, index])),
|
|
14924
14967
|
[visibleTasks]
|
|
@@ -15377,6 +15420,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
15377
15420
|
bodyMinHeight: tableBodyMinHeight,
|
|
15378
15421
|
taskDateChangeMode,
|
|
15379
15422
|
onTaskDateChangeModeChange: handleTaskDateChangeMode,
|
|
15423
|
+
printDependencyLabels,
|
|
15380
15424
|
visibleRowIndices: visibleTaskWindowIndices,
|
|
15381
15425
|
skeletonRowCount
|
|
15382
15426
|
}
|