gantt-lib 0.85.1 → 0.86.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/dist/index.mjs CHANGED
@@ -2837,6 +2837,7 @@ var TaskRow = React2.memo(
2837
2837
  "div",
2838
2838
  {
2839
2839
  "data-filter-match": isFilterMatch ? "true" : "false",
2840
+ "data-gantt-task-row-id": task.id,
2840
2841
  className: `gantt-tr-row ${isFilterMatch ? "gantt-tr-row-filter-match" : ""}`,
2841
2842
  style: { height: `${rowHeight}px` },
2842
2843
  children: [
@@ -6177,6 +6178,7 @@ var TaskListRow = React9.memo(
6177
6178
  isParent ? "gantt-tl-row-parent" : ""
6178
6179
  ].filter(Boolean).join(" "),
6179
6180
  style: { minHeight: `${rowHeight}px`, position: "relative" },
6181
+ "data-gantt-task-row-id": task.id,
6180
6182
  onClick: handleRowClickInternal,
6181
6183
  onKeyDown: handleRowKeyDown,
6182
6184
  onDragOver: (e) => onDragOver?.(rowIndex, e),
@@ -6460,7 +6462,7 @@ var TaskList = ({
6460
6462
  tasks,
6461
6463
  rowHeight,
6462
6464
  headerHeight,
6463
- taskListWidth = MIN_TASK_LIST_WIDTH,
6465
+ taskListWidth,
6464
6466
  onTasksChange,
6465
6467
  selectedTaskId,
6466
6468
  onTaskSelect,
@@ -7033,7 +7035,8 @@ var TaskList = ({
7033
7035
  () => resolvedColumns.reduce((sum, col) => sum + (col.width ?? 120), 0),
7034
7036
  [resolvedColumns]
7035
7037
  );
7036
- const effectiveTaskListWidth = Math.max(taskListWidth, MIN_TASK_LIST_WIDTH, resolvedColumnWidthTotal);
7038
+ const requestedTaskListWidth = taskListWidth ?? Math.min(MIN_TASK_LIST_WIDTH, resolvedColumnWidthTotal);
7039
+ const effectiveTaskListWidth = Math.max(requestedTaskListWidth, resolvedColumnWidthTotal);
7037
7040
  const tableHeaderHeight = headerHeight + 1;
7038
7041
  return /* @__PURE__ */ jsx14(
7039
7042
  "div",
@@ -9515,6 +9518,40 @@ function TaskGanttChartInner(props, ref) {
9515
9518
  const handleTaskSelect = useCallback8((taskId) => {
9516
9519
  setSelectedTaskId(taskId);
9517
9520
  }, []);
9521
+ const hoveredRowElementsRef = useRef9([]);
9522
+ const clearHoveredRows = useCallback8(() => {
9523
+ for (const element of hoveredRowElementsRef.current) {
9524
+ element.classList.remove("gantt-tl-row-hovered", "gantt-tr-row-hovered");
9525
+ }
9526
+ hoveredRowElementsRef.current = [];
9527
+ }, []);
9528
+ const applyHoveredRows = useCallback8((taskId) => {
9529
+ const root = scrollContentRef.current;
9530
+ if (!root) return;
9531
+ clearHoveredRows();
9532
+ const nextHoveredRows = Array.from(
9533
+ root.querySelectorAll("[data-gantt-task-row-id]")
9534
+ ).filter((element) => element.dataset.ganttTaskRowId === taskId);
9535
+ for (const element of nextHoveredRows) {
9536
+ if (element.classList.contains("gantt-tl-row")) {
9537
+ element.classList.add("gantt-tl-row-hovered");
9538
+ }
9539
+ if (element.classList.contains("gantt-tr-row")) {
9540
+ element.classList.add("gantt-tr-row-hovered");
9541
+ }
9542
+ }
9543
+ hoveredRowElementsRef.current = nextHoveredRows;
9544
+ }, [clearHoveredRows]);
9545
+ const handleSharedRowHover = useCallback8((event) => {
9546
+ const target = event.target;
9547
+ const row = target.closest("[data-gantt-task-row-id]");
9548
+ const taskId = row?.dataset.ganttTaskRowId;
9549
+ if (!taskId) return;
9550
+ if (hoveredRowElementsRef.current.some((element) => element.dataset.ganttTaskRowId === taskId)) {
9551
+ return;
9552
+ }
9553
+ applyHoveredRows(taskId);
9554
+ }, [applyHoveredRows]);
9518
9555
  const handleToggleCollapse = externalOnToggleCollapse ?? useCallback8((parentId) => {
9519
9556
  setInternalCollapsedParentIds((prev) => {
9520
9557
  const next = new Set(prev);
@@ -9747,157 +9784,166 @@ function TaskGanttChartInner(props, ref) {
9747
9784
  className: "gantt-scrollContainer",
9748
9785
  style: { height: containerHeight ?? "auto", cursor: "grab" },
9749
9786
  onMouseDown: handlePanStart,
9750
- children: /* @__PURE__ */ jsxs13("div", { ref: scrollContentRef, className: "gantt-scrollContent", children: [
9751
- /* @__PURE__ */ jsx16(
9752
- TaskList,
9753
- {
9754
- tasks: normalizedTasks,
9755
- rowHeight,
9756
- headerHeight,
9757
- taskListWidth,
9758
- onTasksChange: handleTaskChange,
9759
- selectedTaskId: selectedTaskId ?? void 0,
9760
- onTaskSelect: handleTaskSelect,
9761
- show: showTaskList,
9762
- hasRightShadow: taskListHasRightShadow,
9763
- disableTaskNameEditing,
9764
- disableDependencyEditing,
9765
- onScrollToTask: scrollToTask,
9766
- onSelectedChipChange: setSelectedChip,
9767
- onAdd,
9768
- onDelete: handleDelete,
9769
- onInsertAfter: handleInsertAfter,
9770
- onReorder: handleReorder,
9771
- editingTaskId,
9772
- enableAddTask,
9773
- defaultTaskDurationDays,
9774
- collapsedParentIds,
9775
- onToggleCollapse: handleToggleCollapse,
9776
- onPromoteTask: onPromoteTask ?? handlePromoteTask,
9777
- onDemoteTask: onDemoteTask ?? handleDemoteTask,
9778
- onUngroupTask: onUngroupTask ?? handleUngroupTask,
9779
- highlightedTaskIds: taskListHighlightedTaskIds,
9780
- customDays,
9781
- isWeekend: isWeekend3,
9782
- businessDays,
9783
- filterMode,
9784
- filteredTaskIds: matchedTaskIds,
9785
- isFilterActive: !!taskFilter,
9786
- additionalColumns,
9787
- hiddenTaskListColumns,
9788
- taskListMenuCommands
9789
- }
9790
- ),
9791
- /* @__PURE__ */ jsxs13(
9792
- "div",
9793
- {
9794
- className: showChart ? "gantt-chartSurface" : "gantt-chartSurface gantt-chart-hidden",
9795
- style: { minWidth: `${gridWidth}px`, flex: 1, display: showChart ? void 0 : "none" },
9796
- children: [
9797
- /* @__PURE__ */ jsx16(
9798
- "div",
9799
- {
9800
- className: "gantt-stickyHeader",
9801
- style: { width: `${gridWidth}px`, height: `${timelineHeaderHeight}px` },
9802
- children: /* @__PURE__ */ jsx16(
9803
- TimeScaleHeader_default,
9787
+ children: /* @__PURE__ */ jsxs13(
9788
+ "div",
9789
+ {
9790
+ ref: scrollContentRef,
9791
+ className: "gantt-scrollContent",
9792
+ onMouseOver: handleSharedRowHover,
9793
+ onMouseLeave: clearHoveredRows,
9794
+ children: [
9795
+ /* @__PURE__ */ jsx16(
9796
+ TaskList,
9797
+ {
9798
+ tasks: normalizedTasks,
9799
+ rowHeight,
9800
+ headerHeight,
9801
+ taskListWidth,
9802
+ onTasksChange: handleTaskChange,
9803
+ selectedTaskId: selectedTaskId ?? void 0,
9804
+ onTaskSelect: handleTaskSelect,
9805
+ show: showTaskList,
9806
+ hasRightShadow: taskListHasRightShadow,
9807
+ disableTaskNameEditing,
9808
+ disableDependencyEditing,
9809
+ onScrollToTask: scrollToTask,
9810
+ onSelectedChipChange: setSelectedChip,
9811
+ onAdd,
9812
+ onDelete: handleDelete,
9813
+ onInsertAfter: handleInsertAfter,
9814
+ onReorder: handleReorder,
9815
+ editingTaskId,
9816
+ enableAddTask,
9817
+ defaultTaskDurationDays,
9818
+ collapsedParentIds,
9819
+ onToggleCollapse: handleToggleCollapse,
9820
+ onPromoteTask: onPromoteTask ?? handlePromoteTask,
9821
+ onDemoteTask: onDemoteTask ?? handleDemoteTask,
9822
+ onUngroupTask: onUngroupTask ?? handleUngroupTask,
9823
+ highlightedTaskIds: taskListHighlightedTaskIds,
9824
+ customDays,
9825
+ isWeekend: isWeekend3,
9826
+ businessDays,
9827
+ filterMode,
9828
+ filteredTaskIds: matchedTaskIds,
9829
+ isFilterActive: !!taskFilter,
9830
+ additionalColumns,
9831
+ hiddenTaskListColumns,
9832
+ taskListMenuCommands
9833
+ }
9834
+ ),
9835
+ /* @__PURE__ */ jsxs13(
9836
+ "div",
9837
+ {
9838
+ className: showChart ? "gantt-chartSurface" : "gantt-chartSurface gantt-chart-hidden",
9839
+ style: { minWidth: `${gridWidth}px`, flex: 1, display: showChart ? void 0 : "none" },
9840
+ children: [
9841
+ /* @__PURE__ */ jsx16(
9842
+ "div",
9804
9843
  {
9805
- days: dateRange,
9806
- dayWidth,
9807
- headerHeight,
9808
- viewMode,
9809
- isCustomWeekend
9844
+ className: "gantt-stickyHeader",
9845
+ style: { width: `${gridWidth}px`, height: `${timelineHeaderHeight}px` },
9846
+ children: /* @__PURE__ */ jsx16(
9847
+ TimeScaleHeader_default,
9848
+ {
9849
+ days: dateRange,
9850
+ dayWidth,
9851
+ headerHeight,
9852
+ viewMode,
9853
+ isCustomWeekend
9854
+ }
9855
+ )
9810
9856
  }
9811
- )
9812
- }
9813
- ),
9814
- /* @__PURE__ */ jsxs13(
9815
- "div",
9816
- {
9817
- className: "gantt-taskArea",
9818
- style: {
9819
- position: "relative",
9820
- width: `${gridWidth}px`
9821
- },
9822
- children: [
9823
- /* @__PURE__ */ jsx16(
9824
- GridBackground_default,
9825
- {
9826
- dateRange,
9827
- dayWidth,
9828
- totalHeight: totalGridHeight,
9829
- viewMode,
9830
- isCustomWeekend
9831
- }
9832
- ),
9833
- todayInRange && /* @__PURE__ */ jsx16(TodayIndicator_default, { monthStart, dayWidth }),
9834
- /* @__PURE__ */ jsx16(
9835
- DependencyLines_default,
9836
- {
9837
- tasks: previewVisibleTasks,
9838
- allTasks: previewNormalizedTasks,
9839
- collapsedParentIds,
9840
- monthStart,
9841
- dayWidth,
9842
- rowHeight,
9843
- gridWidth,
9844
- dragOverrides: dependencyOverrides,
9845
- selectedDep: selectedChip,
9846
- businessDays,
9847
- weekendPredicate: isCustomWeekend
9848
- }
9849
- ),
9850
- dragGuideLines && /* @__PURE__ */ jsx16(
9851
- DragGuideLines_default,
9852
- {
9853
- isDragging: dragGuideLines.isDragging,
9854
- dragMode: dragGuideLines.dragMode,
9855
- left: dragGuideLines.left,
9856
- width: dragGuideLines.width,
9857
- totalHeight: totalGridHeight
9858
- }
9859
- ),
9860
- visibleTasks.map((task, index) => /* @__PURE__ */ jsx16(
9861
- TaskRow_default,
9862
- {
9863
- task,
9864
- monthStart,
9865
- dayWidth,
9866
- rowHeight,
9867
- onTasksChange: handleTaskChange,
9868
- onDragStateChange: (state) => {
9869
- if (state.isDragging) {
9870
- setDragGuideLines(state);
9871
- setDraggedTaskOverride({ taskId: task.id, left: state.left, width: state.width });
9872
- } else {
9873
- setDragGuideLines(null);
9874
- setDraggedTaskOverride(null);
9875
- }
9876
- },
9877
- rowIndex: index,
9878
- allTasks: normalizedTasks,
9879
- enableAutoSchedule: enableAutoSchedule ?? false,
9880
- disableConstraints: disableConstraints ?? false,
9881
- overridePosition: cascadeOverrides.get(task.id),
9882
- onCascadeProgress: handleCascadeProgress,
9883
- onCascade: handleCascade,
9884
- highlightExpiredTasks,
9885
- showBaseline,
9886
- isFilterMatch: filterMode === "highlight" ? matchedTaskIds.has(task.id) : false,
9887
- businessDays,
9888
- customDays,
9889
- isWeekend: isWeekend3,
9890
- disableTaskDrag
9857
+ ),
9858
+ /* @__PURE__ */ jsxs13(
9859
+ "div",
9860
+ {
9861
+ className: "gantt-taskArea",
9862
+ style: {
9863
+ position: "relative",
9864
+ width: `${gridWidth}px`
9891
9865
  },
9892
- task.id
9893
- ))
9894
- ]
9895
- }
9896
- )
9897
- ]
9898
- }
9899
- )
9900
- ] })
9866
+ children: [
9867
+ /* @__PURE__ */ jsx16(
9868
+ GridBackground_default,
9869
+ {
9870
+ dateRange,
9871
+ dayWidth,
9872
+ totalHeight: totalGridHeight,
9873
+ viewMode,
9874
+ isCustomWeekend
9875
+ }
9876
+ ),
9877
+ todayInRange && /* @__PURE__ */ jsx16(TodayIndicator_default, { monthStart, dayWidth }),
9878
+ /* @__PURE__ */ jsx16(
9879
+ DependencyLines_default,
9880
+ {
9881
+ tasks: previewVisibleTasks,
9882
+ allTasks: previewNormalizedTasks,
9883
+ collapsedParentIds,
9884
+ monthStart,
9885
+ dayWidth,
9886
+ rowHeight,
9887
+ gridWidth,
9888
+ dragOverrides: dependencyOverrides,
9889
+ selectedDep: selectedChip,
9890
+ businessDays,
9891
+ weekendPredicate: isCustomWeekend
9892
+ }
9893
+ ),
9894
+ dragGuideLines && /* @__PURE__ */ jsx16(
9895
+ DragGuideLines_default,
9896
+ {
9897
+ isDragging: dragGuideLines.isDragging,
9898
+ dragMode: dragGuideLines.dragMode,
9899
+ left: dragGuideLines.left,
9900
+ width: dragGuideLines.width,
9901
+ totalHeight: totalGridHeight
9902
+ }
9903
+ ),
9904
+ visibleTasks.map((task, index) => /* @__PURE__ */ jsx16(
9905
+ TaskRow_default,
9906
+ {
9907
+ task,
9908
+ monthStart,
9909
+ dayWidth,
9910
+ rowHeight,
9911
+ onTasksChange: handleTaskChange,
9912
+ onDragStateChange: (state) => {
9913
+ if (state.isDragging) {
9914
+ setDragGuideLines(state);
9915
+ setDraggedTaskOverride({ taskId: task.id, left: state.left, width: state.width });
9916
+ } else {
9917
+ setDragGuideLines(null);
9918
+ setDraggedTaskOverride(null);
9919
+ }
9920
+ },
9921
+ rowIndex: index,
9922
+ allTasks: normalizedTasks,
9923
+ enableAutoSchedule: enableAutoSchedule ?? false,
9924
+ disableConstraints: disableConstraints ?? false,
9925
+ overridePosition: cascadeOverrides.get(task.id),
9926
+ onCascadeProgress: handleCascadeProgress,
9927
+ onCascade: handleCascade,
9928
+ highlightExpiredTasks,
9929
+ showBaseline,
9930
+ isFilterMatch: filterMode === "highlight" ? matchedTaskIds.has(task.id) : false,
9931
+ businessDays,
9932
+ customDays,
9933
+ isWeekend: isWeekend3,
9934
+ disableTaskDrag
9935
+ },
9936
+ task.id
9937
+ ))
9938
+ ]
9939
+ }
9940
+ )
9941
+ ]
9942
+ }
9943
+ )
9944
+ ]
9945
+ }
9946
+ )
9901
9947
  }
9902
9948
  ) });
9903
9949
  }