gantt-lib 0.135.2 → 0.135.4

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.mjs CHANGED
@@ -3675,8 +3675,8 @@ function handleGlobalMouseMove(e) {
3675
3675
  if (draggedTask && isMilestoneTask(draggedTask)) {
3676
3676
  newWidth = dayWidth;
3677
3677
  }
3678
- const isParentResizePreview = draggedTask && (mode === "resize-left" || mode === "resize-right") && isTaskParent(activeDrag.taskId, allTasks);
3679
- if (isParentResizePreview && activeDrag.onCascadeProgress) {
3678
+ const isParentResizePreview = !activeDrag.deferCascadePreview && draggedTask && (mode === "resize-left" || mode === "resize-right") && isTaskParent(activeDrag.taskId, allTasks);
3679
+ if (!activeDrag.deferCascadePreview && isParentResizePreview && activeDrag.onCascadeProgress) {
3680
3680
  const { dayWidth: dw, monthStart: mStart } = activeDrag;
3681
3681
  const previewRange = resolveDragRangeForInteraction(activeDrag, draggedTask, mode, newLeft, newWidth);
3682
3682
  const anchor = mode === "resize-left" ? "end" : "start";
@@ -3727,7 +3727,7 @@ function handleGlobalMouseMove(e) {
3727
3727
  activeDrag.onCascadeProgress(liveOverrides, activeDrag.parentScalePreview.previewTasks);
3728
3728
  }
3729
3729
  }
3730
- if (!activeDrag.disableConstraints && activeDrag.onCascadeProgress && !isParentResizePreview) {
3730
+ if (!activeDrag.deferCascadePreview && !activeDrag.disableConstraints && activeDrag.onCascadeProgress && !isParentResizePreview) {
3731
3731
  const { dayWidth: dayWidth2, monthStart: mStart, taskId: dragId } = activeDrag;
3732
3732
  const originalDraggedTask = draggedTask ?? allTasks.find((t) => t.id === dragId);
3733
3733
  const previewRange = originalDraggedTask ? clampDateRangeForIncomingFS(
@@ -3851,6 +3851,7 @@ var useTaskDrag = (options) => {
3851
3851
  rowIndex,
3852
3852
  enableAutoSchedule = false,
3853
3853
  disableConstraints = false,
3854
+ deferCascadePreview = false,
3854
3855
  onCascadeProgress,
3855
3856
  onCascade,
3856
3857
  locked = false,
@@ -4188,13 +4189,14 @@ var useTaskDrag = (options) => {
4188
4189
  onCancel: handleCancel,
4189
4190
  allTasks,
4190
4191
  disableConstraints,
4192
+ deferCascadePreview,
4191
4193
  onCascadeProgress,
4192
4194
  businessDays,
4193
4195
  weekendPredicate,
4194
4196
  cascadeContext: shouldBuildCascadeContext ? createCascadeContext(allTasks) : void 0,
4195
4197
  scheduleIntentMode: Boolean(onScheduleIntent)
4196
4198
  };
4197
- }, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, onCascadeProgress, onCascade, effectiveLocked, viewMode]);
4199
+ }, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, deferCascadePreview, onCascadeProgress, onCascade, effectiveLocked, viewMode]);
4198
4200
  const handleMouseDown = useCallback((e) => {
4199
4201
  startDrag(e);
4200
4202
  }, [startDrag]);
@@ -4252,10 +4254,10 @@ var useTaskDrag = (options) => {
4252
4254
  // src/components/TaskRow/TaskRow.tsx
4253
4255
  import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
4254
4256
  var arePropsEqual = (prevProps, nextProps) => {
4255
- return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames;
4257
+ return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.deferCascadePreview === nextProps.deferCascadePreview && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames;
4256
4258
  };
4257
4259
  var TaskRow = React2.memo(
4258
- ({ task, monthStart, dayWidth, rowHeight, onTasksChange, onScheduleIntent, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, overridePosition, previewPositionStore, onCascadeProgress, onCascade, divider, highlightExpiredTasks, isCritical = false, showBaseline = false, isFilterMatch = false, businessDays, customDays, isWeekend: isWeekend3, disableTaskDrag = false, disableDependencyEditing = false, onDependencyPortPointerDown, isDependencyDragActive = false, viewMode = "day", showTaskDateLabels = true, showTaskNames = true }) => {
4260
+ ({ task, monthStart, dayWidth, rowHeight, onTasksChange, onScheduleIntent, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, deferCascadePreview = false, overridePosition, previewPositionStore, onCascadeProgress, onCascade, divider, highlightExpiredTasks, isCritical = false, showBaseline = false, isFilterMatch = false, businessDays, customDays, isWeekend: isWeekend3, disableTaskDrag = false, disableDependencyEditing = false, onDependencyPortPointerDown, isDependencyDragActive = false, viewMode = "day", showTaskDateLabels = true, showTaskNames = true }) => {
4259
4261
  const defaultParentBarColor = "#782FC4";
4260
4262
  const { divider: taskDivider } = task;
4261
4263
  const normalizedTask = useMemo2(() => normalizeTaskDatesForType(task), [task]);
@@ -4377,6 +4379,7 @@ var TaskRow = React2.memo(
4377
4379
  rowIndex,
4378
4380
  enableAutoSchedule,
4379
4381
  disableConstraints,
4382
+ deferCascadePreview,
4380
4383
  locked: task.locked,
4381
4384
  disableTaskDrag,
4382
4385
  onCascadeProgress,
@@ -4800,7 +4803,8 @@ var DragGuideLines = ({
4800
4803
  dragMode,
4801
4804
  left,
4802
4805
  width,
4803
- totalHeight
4806
+ totalHeight,
4807
+ top = 0
4804
4808
  }) => {
4805
4809
  if (!isDragging || !dragMode) {
4806
4810
  return null;
@@ -4814,6 +4818,7 @@ var DragGuideLines = ({
4814
4818
  className: "gantt-dgl-guideLine",
4815
4819
  style: {
4816
4820
  left: `${left}px`,
4821
+ top: `${top}px`,
4817
4822
  height: `${totalHeight}px`
4818
4823
  }
4819
4824
  }
@@ -4824,6 +4829,7 @@ var DragGuideLines = ({
4824
4829
  className: "gantt-dgl-guideLine",
4825
4830
  style: {
4826
4831
  left: `${left + width}px`,
4832
+ top: `${top}px`,
4827
4833
  height: `${totalHeight}px`
4828
4834
  }
4829
4835
  }
@@ -6217,6 +6223,11 @@ var LINK_TYPE_LABELS_RU2 = {
6217
6223
  function formatTaskNumberLabel(taskNumber) {
6218
6224
  return taskNumber ? `${taskNumber}. ` : "";
6219
6225
  }
6226
+ function formatDependencyPrintLabel(dep, predecessorTaskNumber, lag) {
6227
+ const effectiveLag = lag ?? 0;
6228
+ const lagSuffix = effectiveLag === 0 ? "" : effectiveLag > 0 ? `+${effectiveLag}` : String(effectiveLag);
6229
+ return `[${predecessorTaskNumber ?? dep.taskId}]${LINK_TYPE_LABELS_RU2[dep.type]}${lagSuffix}`;
6230
+ }
6220
6231
  var ArrowLeft = () => /* @__PURE__ */ jsxs10(
6221
6232
  "svg",
6222
6233
  {
@@ -6628,7 +6639,7 @@ var areTaskListRowPropsEqual = (prevProps, nextProps) => {
6628
6639
  const nextPickingTask = nextProps.selectingPredecessorFor === nextTask.id;
6629
6640
  const prevAnyPicking = prevProps.selectingPredecessorFor != null;
6630
6641
  const nextAnyPicking = nextProps.selectingPredecessorFor != null;
6631
- 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;
6642
+ 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;
6632
6643
  };
6633
6644
  var TaskListRow = React10.memo(
6634
6645
  ({
@@ -6696,7 +6707,8 @@ var TaskListRow = React10.memo(
6696
6707
  rowClassName,
6697
6708
  getTaskListNamePrefixIcon,
6698
6709
  taskDateChangeMode = "preserve-duration",
6699
- onTaskDateChangeModeChange
6710
+ onTaskDateChangeModeChange,
6711
+ printDependencyLabels = false
6700
6712
  }) => {
6701
6713
  const [editingColumnId, setEditingColumnId] = useState5(null);
6702
6714
  const [editingColumnStartValue, setEditingColumnStartValue] = useState5(void 0);
@@ -8182,7 +8194,11 @@ var TaskListRow = React10.memo(
8182
8194
  ),
8183
8195
  sourcePickerContent
8184
8196
  ] }) : /* @__PURE__ */ jsxs10(Fragment3, { children: [
8185
- chips.length >= 2 ? (
8197
+ printDependencyLabels ? /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dependency-print-labels", children: chips.map(({ dep, lag }) => formatDependencyPrintLabel(
8198
+ dep,
8199
+ taskNumberMap[dep.taskId],
8200
+ lag
8201
+ )).join(", ") }) : chips.length >= 2 ? (
8186
8202
  /* 2+ deps — show only "N связей" summary chip that opens a popover */
8187
8203
  /* @__PURE__ */ jsxs10(Popover, { open: overflowOpen, onOpenChange: setOverflowOpen, children: [
8188
8204
  /* @__PURE__ */ jsx14(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
@@ -8259,7 +8275,7 @@ var TaskListRow = React10.memo(
8259
8275
  }
8260
8276
  )
8261
8277
  ) : null,
8262
- !disableDependencyEditing && !isPicking && /* @__PURE__ */ jsx14(
8278
+ !printDependencyLabels && !disableDependencyEditing && !isPicking && /* @__PURE__ */ jsx14(
8263
8279
  "button",
8264
8280
  {
8265
8281
  type: "button",
@@ -8923,6 +8939,7 @@ var TaskList = ({
8923
8939
  bodyMinHeight,
8924
8940
  taskDateChangeMode = "preserve-duration",
8925
8941
  onTaskDateChangeModeChange,
8942
+ printDependencyLabels = false,
8926
8943
  visibleRowIndices,
8927
8944
  skeletonRowCount = 0
8928
8945
  }) => {
@@ -10080,7 +10097,8 @@ var TaskList = ({
10080
10097
  rowClassName: getTaskListRowClassName?.(task),
10081
10098
  getTaskListNamePrefixIcon,
10082
10099
  taskDateChangeMode,
10083
- onTaskDateChangeModeChange
10100
+ onTaskDateChangeModeChange,
10101
+ printDependencyLabels
10084
10102
  }
10085
10103
  )
10086
10104
  },
@@ -14095,7 +14113,8 @@ function TaskGanttChartInner(props, ref) {
14095
14113
  getTaskListNamePrefixIcon,
14096
14114
  rowContentLines = 1,
14097
14115
  taskDateChangeMode: externalTaskDateChangeMode,
14098
- onTaskDateChangeModeChange: externalOnTaskDateChangeModeChange
14116
+ onTaskDateChangeModeChange: externalOnTaskDateChangeModeChange,
14117
+ printDependencyLabels = false
14099
14118
  } = props;
14100
14119
  const dayWidth = !isTableMatrixMode ? props.dayWidth ?? 40 : 40;
14101
14120
  const criticalPathMode = !isTableMatrixMode && !isPlanFactMode ? props.criticalPathMode : void 0;
@@ -15283,6 +15302,7 @@ function TaskGanttChartInner(props, ref) {
15283
15302
  bodyMinHeight: tableBodyMinHeight,
15284
15303
  taskDateChangeMode,
15285
15304
  onTaskDateChangeModeChange: handleTaskDateChangeMode,
15305
+ printDependencyLabels,
15286
15306
  visibleRowIndices: visibleTaskWindowIndices,
15287
15307
  skeletonRowCount
15288
15308
  }
@@ -15499,7 +15519,8 @@ function TaskGanttChartInner(props, ref) {
15499
15519
  dragMode: dragGuideLines.dragMode,
15500
15520
  left: dragGuideLines.left,
15501
15521
  width: dragGuideLines.width,
15502
- totalHeight: totalGridHeight
15522
+ totalHeight: Math.min(totalGridHeight, scrollViewport.viewportHeight),
15523
+ top: Math.max(0, scrollViewport.scrollTop)
15503
15524
  }
15504
15525
  ),
15505
15526
  renderedChartTasks.map(({ task, index }) => /* @__PURE__ */ jsx21(
@@ -15536,6 +15557,7 @@ function TaskGanttChartInner(props, ref) {
15536
15557
  allTasks: normalizedTasks,
15537
15558
  enableAutoSchedule: enableAutoSchedule ?? false,
15538
15559
  disableConstraints: disableConstraints ?? false,
15560
+ deferCascadePreview: normalizedTasks.length >= 1e3,
15539
15561
  previewPositionStore,
15540
15562
  onCascadeProgress: handleCascadeProgress,
15541
15563
  onCascade: handleCascade,