gantt-lib 0.138.0 → 0.139.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/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  "use client";
4
4
 
5
5
  // src/components/GanttChart/GanttChart.tsx
6
- import { useMemo as useMemo13, useCallback as useCallback10, useRef as useRef13, useState as useState13, useEffect as useEffect11, useImperativeHandle, forwardRef } from "react";
6
+ import { useMemo as useMemo14, useCallback as useCallback10, useRef as useRef13, useState as useState13, useEffect as useEffect12, useImperativeHandle, forwardRef } from "react";
7
7
 
8
8
  // src/core/scheduling/dateMath.ts
9
9
  var DAY_MS = 24 * 60 * 60 * 1e3;
@@ -6069,6 +6069,8 @@ var DependencyLines = React6.memo(({
6069
6069
  dragOverrides,
6070
6070
  selectedDep,
6071
6071
  criticalTaskIds,
6072
+ showLag = true,
6073
+ activityEndpoints = false,
6072
6074
  businessDays = true,
6073
6075
  weekendPredicate,
6074
6076
  onDependencyClick,
@@ -6186,14 +6188,17 @@ var DependencyLines = React6.memo(({
6186
6188
  }
6187
6189
  const isVirtual = predecessor.isVirtual || successor.isVirtual;
6188
6190
  let reverseOrder = false;
6189
- if (predecessorIndex !== void 0 && successorIndex !== void 0) {
6191
+ if (!activityEndpoints && predecessorIndex !== void 0 && successorIndex !== void 0) {
6190
6192
  reverseOrder = predecessorIndex > successorIndex;
6191
6193
  } else {
6192
6194
  reverseOrder = predecessor.rowTop > successor.rowTop;
6193
6195
  }
6194
6196
  let fromY;
6195
6197
  let toY;
6196
- if (reverseOrder) {
6198
+ if (activityEndpoints && predecessor.rowTop === successor.rowTop) {
6199
+ fromY = predecessor.rowTop + predecessor.rowHeight / 2;
6200
+ toY = successor.rowTop + successor.rowHeight / 2;
6201
+ } else if (reverseOrder) {
6197
6202
  fromY = predecessor.rowTop + 10;
6198
6203
  toY = successor.rowTop + successor.rowHeight - 6;
6199
6204
  } else {
@@ -6235,7 +6240,7 @@ var DependencyLines = React6.memo(({
6235
6240
  }
6236
6241
  }
6237
6242
  return lines2;
6238
- }, [tasks, allTasks, taskPositions, taskIndices, cycleInfo, collapsedParentIds, criticalTaskIds]);
6243
+ }, [tasks, allTasks, taskPositions, taskIndices, cycleInfo, collapsedParentIds, criticalTaskIds, activityEndpoints]);
6239
6244
  const visibleLines = useMemo6(() => {
6240
6245
  if (!horizontalWindow) return lines;
6241
6246
  return lines.filter((line) => Math.max(line.fromX, line.toX) >= horizontalWindow.startPx && Math.min(line.fromX, line.toX) <= horizontalWindow.endPx);
@@ -6399,7 +6404,7 @@ var DependencyLines = React6.memo(({
6399
6404
  ]
6400
6405
  }
6401
6406
  ),
6402
- lag !== 0 && /* @__PURE__ */ jsx7(
6407
+ showLag && lag !== 0 && /* @__PURE__ */ jsx7(
6403
6408
  "text",
6404
6409
  {
6405
6410
  className: "gantt-dependency-lag-label",
@@ -6420,8 +6425,54 @@ var DependencyLines = React6.memo(({
6420
6425
  DependencyLines.displayName = "DependencyLines";
6421
6426
  var DependencyLines_default = DependencyLines;
6422
6427
 
6428
+ // src/components/DependencyLines/ActivityDependencyLines.tsx
6429
+ import { useEffect as useEffect3, useMemo as useMemo7, useReducer } from "react";
6430
+ import { jsx as jsx8 } from "react/jsx-runtime";
6431
+ var activityKey = (taskId, activityId) => JSON.stringify([taskId, activityId]);
6432
+ function ActivityDependencyLines(props) {
6433
+ const { tasks, dependencies, monthStart, dayWidth, previewStore } = props;
6434
+ const [previewVersion, refresh] = useReducer((value) => value + 1, 0);
6435
+ useEffect3(() => {
6436
+ const cleanups = tasks.filter((task) => task.activities?.length).map((task) => previewStore?.subscribeTask(task.id, refresh));
6437
+ return () => cleanups.forEach((cleanup) => cleanup?.());
6438
+ }, [tasks, previewStore]);
6439
+ const layout = useMemo7(() => {
6440
+ const flattened = [], rendered = [], tops = [], heights = [];
6441
+ const indices = /* @__PURE__ */ new Map();
6442
+ const incoming = /* @__PURE__ */ new Map();
6443
+ for (const edge of dependencies) {
6444
+ const id = activityKey(edge.successorTaskId, edge.successorActivityId);
6445
+ const values = incoming.get(id) ?? [];
6446
+ values.push({ taskId: activityKey(edge.predecessorTaskId, edge.predecessorActivityId), type: edge.type, lag: edge.lag });
6447
+ incoming.set(id, values);
6448
+ }
6449
+ for (const task of tasks) {
6450
+ const row = props.rowIndexByTaskId.get(task.id);
6451
+ if (row === void 0 || !task.activities?.length) continue;
6452
+ const height = props.rowHeights[row] ?? props.rowHeight;
6453
+ if (height < props.rowHeight) continue;
6454
+ const packed = computeActivityLanes(task.activities, monthStart, dayWidth);
6455
+ const offset = Math.max(0, (height - packed.laneCount * ACTIVITY_LANE_STEP) / 2);
6456
+ const segments2 = new Map(packed.segments.map((segment) => [segment.id, segment]));
6457
+ for (const activity of task.activities) {
6458
+ const segment = segments2.get(activity.id);
6459
+ const id = activityKey(task.id, activity.id), index = flattened.length;
6460
+ const delta = previewStore?.getTaskOverrides(task.id)?.get(activity.id) ?? 0;
6461
+ const node = { id, name: activity.name, startDate: shiftActivityDate(activity.startDate, delta), endDate: shiftActivityDate(activity.endDate, delta), dependencies: incoming.get(id) };
6462
+ flattened.push(node);
6463
+ if (props.renderedTaskIds.has(task.id)) rendered.push(node);
6464
+ indices.set(id, index);
6465
+ tops.push((props.rowTops[row] ?? row * props.rowHeight) + offset + segment.lane * ACTIVITY_LANE_STEP + (ACTIVITY_LANE_STEP - ACTIVITY_LANE_BAR_HEIGHT) / 2);
6466
+ heights.push(ACTIVITY_LANE_BAR_HEIGHT);
6467
+ }
6468
+ }
6469
+ return { flattened, rendered, indices, tops, heights };
6470
+ }, [tasks, dependencies, monthStart, dayWidth, props.rowIndexByTaskId, props.rowTops, props.rowHeights, props.rowHeight, props.renderedTaskIds, previewStore, previewVersion]);
6471
+ return /* @__PURE__ */ jsx8(DependencyLines, { tasks: layout.rendered, allTasks: layout.flattened, monthStart, dayWidth, rowHeight: ACTIVITY_LANE_BAR_HEIGHT, gridWidth: props.gridWidth, totalHeight: props.totalHeight, rowIndexByTaskId: layout.indices, rowTops: layout.tops, rowHeights: layout.heights, horizontalWindow: props.horizontalWindow, showLag: props.showLag, activityEndpoints: true });
6472
+ }
6473
+
6423
6474
  // src/components/DependencyCreationOverlay/DependencyCreationOverlay.tsx
6424
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
6475
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
6425
6476
  var LINK_TYPE_LABELS_RU = {
6426
6477
  FS: "\u041E\u041D",
6427
6478
  SS: "\u041D\u041D",
@@ -6453,15 +6504,15 @@ var DependencyCreationOverlay = ({ drag, width, height }) => {
6453
6504
  height,
6454
6505
  "aria-hidden": "true",
6455
6506
  children: [
6456
- /* @__PURE__ */ jsx8(
6507
+ /* @__PURE__ */ jsx9(
6457
6508
  "path",
6458
6509
  {
6459
6510
  className: `gantt-dependencyCreation-path ${drag.target ? "gantt-dependencyCreation-pathTargeted" : ""}`,
6460
6511
  d: getPath(drag)
6461
6512
  }
6462
6513
  ),
6463
- /* @__PURE__ */ jsx8("circle", { className: "gantt-dependencyCreation-source", cx: drag.source.x, cy: drag.source.y, r: "4" }),
6464
- /* @__PURE__ */ jsx8(
6514
+ /* @__PURE__ */ jsx9("circle", { className: "gantt-dependencyCreation-source", cx: drag.source.x, cy: drag.source.y, r: "4" }),
6515
+ /* @__PURE__ */ jsx9(
6465
6516
  "circle",
6466
6517
  {
6467
6518
  className: `gantt-dependencyCreation-target ${drag.target ? "gantt-dependencyCreation-targetValid" : ""}`,
@@ -6470,14 +6521,14 @@ var DependencyCreationOverlay = ({ drag, width, height }) => {
6470
6521
  r: "5"
6471
6522
  }
6472
6523
  ),
6473
- drag.linkType && /* @__PURE__ */ jsx8("text", { className: "gantt-dependencyCreation-label", x: drag.current.x + 10, y: drag.current.y - 10, children: LINK_TYPE_LABELS_RU[drag.linkType] ?? drag.linkType })
6524
+ drag.linkType && /* @__PURE__ */ jsx9("text", { className: "gantt-dependencyCreation-label", x: drag.current.x + 10, y: drag.current.y - 10, children: LINK_TYPE_LABELS_RU[drag.linkType] ?? drag.linkType })
6474
6525
  ]
6475
6526
  }
6476
6527
  );
6477
6528
  };
6478
6529
 
6479
6530
  // src/components/TaskList/TaskList.tsx
6480
- import React13, { useMemo as useMemo9, useCallback as useCallback6, useState as useState8, useEffect as useEffect7, useRef as useRef8 } from "react";
6531
+ import React14, { useMemo as useMemo10, useCallback as useCallback6, useState as useState8, useEffect as useEffect8, useRef as useRef8 } from "react";
6481
6532
 
6482
6533
  // src/utils/taskListReorder.ts
6483
6534
  function getDescendantIds(taskId, tasks) {
@@ -6648,9 +6699,9 @@ function getVisibleReorderPlan(orderedTasks, visibleTasks, movedTaskId, target)
6648
6699
 
6649
6700
  // src/components/ui/Popover.tsx
6650
6701
  import * as RadixPopover from "@radix-ui/react-popover";
6651
- import { jsx as jsx9 } from "react/jsx-runtime";
6702
+ import { jsx as jsx10 } from "react/jsx-runtime";
6652
6703
  var Popover = ({ open, onOpenChange, children }) => {
6653
- return /* @__PURE__ */ jsx9(RadixPopover.Root, { open, onOpenChange, children });
6704
+ return /* @__PURE__ */ jsx10(RadixPopover.Root, { open, onOpenChange, children });
6654
6705
  };
6655
6706
  var PopoverTrigger = RadixPopover.Trigger;
6656
6707
  var PopoverContent = ({
@@ -6662,7 +6713,7 @@ var PopoverContent = ({
6662
6713
  collisionPadding = 8,
6663
6714
  onInteractOutside
6664
6715
  }) => {
6665
- const content = /* @__PURE__ */ jsx9(
6716
+ const content = /* @__PURE__ */ jsx10(
6666
6717
  RadixPopover.Content,
6667
6718
  {
6668
6719
  className: `gantt-popover${className ? ` ${className}` : ""}`,
@@ -6675,26 +6726,26 @@ var PopoverContent = ({
6675
6726
  }
6676
6727
  );
6677
6728
  if (portal) {
6678
- return /* @__PURE__ */ jsx9(RadixPopover.Portal, { children: content });
6729
+ return /* @__PURE__ */ jsx10(RadixPopover.Portal, { children: content });
6679
6730
  }
6680
6731
  return content;
6681
6732
  };
6682
6733
 
6683
6734
  // src/components/TaskList/TaskListRow.tsx
6684
- import React10, {
6735
+ import React11, {
6685
6736
  useState as useState6,
6686
6737
  useRef as useRef5,
6687
- useEffect as useEffect5,
6738
+ useEffect as useEffect6,
6688
6739
  useCallback as useCallback5,
6689
- useMemo as useMemo8
6740
+ useMemo as useMemo9
6690
6741
  } from "react";
6691
6742
 
6692
6743
  // src/components/ui/Input.tsx
6693
- import React7 from "react";
6694
- import { jsx as jsx10 } from "react/jsx-runtime";
6695
- var Input = React7.forwardRef(
6744
+ import React8 from "react";
6745
+ import { jsx as jsx11 } from "react/jsx-runtime";
6746
+ var Input = React8.forwardRef(
6696
6747
  ({ className, ...props }, ref) => {
6697
- return /* @__PURE__ */ jsx10(
6748
+ return /* @__PURE__ */ jsx11(
6698
6749
  "input",
6699
6750
  {
6700
6751
  ref,
@@ -6707,16 +6758,16 @@ var Input = React7.forwardRef(
6707
6758
  Input.displayName = "Input";
6708
6759
 
6709
6760
  // src/components/ui/DatePicker.tsx
6710
- import { useState as useState5, useCallback as useCallback4, useEffect as useEffect4, useRef as useRef4 } from "react";
6761
+ import { useState as useState5, useCallback as useCallback4, useEffect as useEffect5, useRef as useRef4 } from "react";
6711
6762
  import { format as format3, isValid, parse, addDays, addMonths as addMonths2, addYears, subMonths as subMonths2, subYears, subDays } from "date-fns";
6712
6763
 
6713
6764
  // src/components/ui/Calendar.tsx
6714
6765
  import {
6715
6766
  useState as useState4,
6716
6767
  useRef as useRef3,
6717
- useEffect as useEffect3,
6768
+ useEffect as useEffect4,
6718
6769
  useCallback as useCallback3,
6719
- useMemo as useMemo7
6770
+ useMemo as useMemo8
6720
6771
  } from "react";
6721
6772
  import {
6722
6773
  startOfMonth,
@@ -6732,7 +6783,7 @@ import {
6732
6783
  startOfDay
6733
6784
  } from "date-fns";
6734
6785
  import { ru as ru2 } from "date-fns/locale";
6735
- import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
6786
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
6736
6787
  function getDayClassName(day, selected, isWeekendProp) {
6737
6788
  const classes = ["gantt-day-btn"];
6738
6789
  if (selected && isSameDay(day, selected)) classes.push("selected");
@@ -6750,7 +6801,7 @@ var Calendar = ({
6750
6801
  isWeekend: isWeekendProp
6751
6802
  }) => {
6752
6803
  const scrollRef = useRef3(null);
6753
- const initialMonth = useMemo7(
6804
+ const initialMonth = useMemo8(
6754
6805
  () => startOfMonth(initialDate ?? selected ?? /* @__PURE__ */ new Date()),
6755
6806
  // eslint-disable-next-line react-hooks/exhaustive-deps
6756
6807
  []
@@ -6769,7 +6820,7 @@ var Calendar = ({
6769
6820
  }
6770
6821
  });
6771
6822
  }, []);
6772
- useEffect3(() => {
6823
+ useEffect4(() => {
6773
6824
  const container = scrollRef.current;
6774
6825
  if (!container) return;
6775
6826
  const handleScroll = () => {
@@ -6787,7 +6838,7 @@ var Calendar = ({
6787
6838
  container.addEventListener("scroll", handleScroll);
6788
6839
  return () => container.removeEventListener("scroll", handleScroll);
6789
6840
  }, [loadMoreMonths]);
6790
- useEffect3(() => {
6841
+ useEffect4(() => {
6791
6842
  if (!scrollRef.current) return;
6792
6843
  const target = selected ?? initialDate ?? /* @__PURE__ */ new Date();
6793
6844
  const monthKey = format2(startOfMonth(target), "yyyy-MM");
@@ -6804,13 +6855,13 @@ var Calendar = ({
6804
6855
  const monthKey = format2(month, "yyyy-MM");
6805
6856
  const monthLabel = format2(month, "LLLL yyyy", { locale: ru2 });
6806
6857
  const weekdayLabels = ["\u041F\u043D", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041F\u0442", "\u0421\u0431", "\u0412\u0441"];
6807
- const weekdayHeaders = weekdayLabels.map((label, i) => /* @__PURE__ */ jsx11("div", { className: "gantt-cal-weekday", children: label }, `wd-${i}`));
6808
- const emptyCells = Array.from({ length: emptyDays }, (_, i) => /* @__PURE__ */ jsx11("div", { className: "gantt-cal-empty-day" }, `e-${i}`));
6858
+ const weekdayHeaders = weekdayLabels.map((label, i) => /* @__PURE__ */ jsx12("div", { className: "gantt-cal-weekday", children: label }, `wd-${i}`));
6859
+ const emptyCells = Array.from({ length: emptyDays }, (_, i) => /* @__PURE__ */ jsx12("div", { className: "gantt-cal-empty-day" }, `e-${i}`));
6809
6860
  const dayCells = Array.from({ length: totalDays }, (_, i) => {
6810
6861
  const dayNum = i + 1;
6811
6862
  const day = new Date(Date.UTC(month.getFullYear(), month.getMonth(), dayNum));
6812
6863
  const className = getDayClassName(day, selected, isWeekendProp);
6813
- return /* @__PURE__ */ jsx11(
6864
+ return /* @__PURE__ */ jsx12(
6814
6865
  "button",
6815
6866
  {
6816
6867
  type: "button",
@@ -6827,7 +6878,7 @@ var Calendar = ({
6827
6878
  );
6828
6879
  });
6829
6880
  return /* @__PURE__ */ jsxs7("div", { className: "gantt-cal-month", "data-month": monthKey, children: [
6830
- /* @__PURE__ */ jsx11("div", { className: "gantt-cal-month-header", children: monthLabel }),
6881
+ /* @__PURE__ */ jsx12("div", { className: "gantt-cal-month-header", children: monthLabel }),
6831
6882
  /* @__PURE__ */ jsxs7("div", { className: "gantt-cal-month-days", children: [
6832
6883
  weekdayHeaders,
6833
6884
  emptyCells,
@@ -6837,16 +6888,16 @@ var Calendar = ({
6837
6888
  },
6838
6889
  [selected, onSelect, disabled, isWeekendProp]
6839
6890
  );
6840
- const renderedMonths = useMemo7(
6891
+ const renderedMonths = useMemo8(
6841
6892
  () => months.map(renderMonth),
6842
6893
  [months, renderMonth]
6843
6894
  );
6844
- return /* @__PURE__ */ jsx11("div", { ref: scrollRef, className: "gantt-cal-container", children: renderedMonths });
6895
+ return /* @__PURE__ */ jsx12("div", { ref: scrollRef, className: "gantt-cal-container", children: renderedMonths });
6845
6896
  };
6846
6897
  Calendar.displayName = "Calendar";
6847
6898
 
6848
6899
  // src/components/ui/DatePicker.tsx
6849
- import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
6900
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
6850
6901
  var segments = [
6851
6902
  { start: 0, end: 2, label: "day", max: 31 },
6852
6903
  { start: 3, end: 5, label: "month", max: 12 },
@@ -6905,7 +6956,7 @@ var DatePicker = ({
6905
6956
  })();
6906
6957
  const activeDate = draftDate ?? selectedDate;
6907
6958
  const displayValue = selectedDate ? formatUTCDate(selectedDate, displayFormat) : placeholder;
6908
- useEffect4(() => {
6959
+ useEffect5(() => {
6909
6960
  if (value) {
6910
6961
  const d = /* @__PURE__ */ new Date(value + "T00:00:00Z");
6911
6962
  if (isValid(d)) {
@@ -6922,7 +6973,7 @@ var DatePicker = ({
6922
6973
  const seg = segments[idx] ?? segments[0];
6923
6974
  dateInputRef.current.setSelectionRange(seg.start, seg.end);
6924
6975
  }, []);
6925
- useEffect4(() => {
6976
+ useEffect5(() => {
6926
6977
  if (open) {
6927
6978
  setTimeout(() => {
6928
6979
  if (dateInputRef.current) {
@@ -7114,7 +7165,7 @@ var DatePicker = ({
7114
7165
  setOpen(nextOpen);
7115
7166
  }, [commitDate, open]);
7116
7167
  return /* @__PURE__ */ jsxs8(Popover, { open, onOpenChange: disabled ? void 0 : handleOpenChange, children: [
7117
- /* @__PURE__ */ jsx12(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx12(
7168
+ /* @__PURE__ */ jsx13(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx13(
7118
7169
  "button",
7119
7170
  {
7120
7171
  type: "button",
@@ -7135,9 +7186,9 @@ var DatePicker = ({
7135
7186
  side: "bottom",
7136
7187
  children: [
7137
7188
  /* @__PURE__ */ jsxs8("div", { className: "gantt-datepicker-input-row", children: [
7138
- /* @__PURE__ */ jsx12("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(-7), tabIndex: -1, children: "-7" }),
7139
- /* @__PURE__ */ jsx12("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(-1), tabIndex: -1, children: "-1" }),
7140
- /* @__PURE__ */ jsx12(
7189
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(-7), tabIndex: -1, children: "-7" }),
7190
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(-1), tabIndex: -1, children: "-1" }),
7191
+ /* @__PURE__ */ jsx13(
7141
7192
  "input",
7142
7193
  {
7143
7194
  ref: dateInputRef,
@@ -7156,10 +7207,10 @@ var DatePicker = ({
7156
7207
  autoComplete: "off"
7157
7208
  }
7158
7209
  ),
7159
- /* @__PURE__ */ jsx12("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(1), tabIndex: -1, children: "+1" }),
7160
- /* @__PURE__ */ jsx12("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(7), tabIndex: -1, children: "+7" })
7210
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(1), tabIndex: -1, children: "+1" }),
7211
+ /* @__PURE__ */ jsx13("button", { type: "button", className: "gantt-datepicker-shift-btn", onMouseDown: handleShiftButtonMouseDown, onClick: () => handleDayShift(7), tabIndex: -1, children: "+7" })
7161
7212
  ] }),
7162
- /* @__PURE__ */ jsx12(
7213
+ /* @__PURE__ */ jsx13(
7163
7214
  Calendar,
7164
7215
  {
7165
7216
  mode: "single",
@@ -7169,7 +7220,7 @@ var DatePicker = ({
7169
7220
  isWeekend: isWeekend3
7170
7221
  }
7171
7222
  ),
7172
- footer ? /* @__PURE__ */ jsx12("div", { className: "gantt-datepicker-footer", children: footer }) : null
7223
+ footer ? /* @__PURE__ */ jsx13("div", { className: "gantt-datepicker-footer", children: footer }) : null
7173
7224
  ]
7174
7225
  }
7175
7226
  )
@@ -7178,24 +7229,24 @@ var DatePicker = ({
7178
7229
  DatePicker.displayName = "DatePicker";
7179
7230
 
7180
7231
  // src/components/TaskList/DepIcons.tsx
7181
- import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
7232
+ import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
7182
7233
  var DepIconFS = () => /* @__PURE__ */ jsxs9("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
7183
- /* @__PURE__ */ jsx13("path", { d: "m10 15 5 5 5-5" }),
7184
- /* @__PURE__ */ jsx13("path", { d: "M4 4h7a4 4 0 0 1 4 4v12" })
7234
+ /* @__PURE__ */ jsx14("path", { d: "m10 15 5 5 5-5" }),
7235
+ /* @__PURE__ */ jsx14("path", { d: "M4 4h7a4 4 0 0 1 4 4v12" })
7185
7236
  ] });
7186
7237
  var DepIconSS = () => /* @__PURE__ */ jsxs9("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
7187
- /* @__PURE__ */ jsx13("path", { d: "M3 5v14" }),
7188
- /* @__PURE__ */ jsx13("path", { d: "M21 12H7" }),
7189
- /* @__PURE__ */ jsx13("path", { d: "m15 18 6-6-6-6" })
7238
+ /* @__PURE__ */ jsx14("path", { d: "M3 5v14" }),
7239
+ /* @__PURE__ */ jsx14("path", { d: "M21 12H7" }),
7240
+ /* @__PURE__ */ jsx14("path", { d: "m15 18 6-6-6-6" })
7190
7241
  ] });
7191
7242
  var DepIconFF = () => /* @__PURE__ */ jsxs9("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
7192
- /* @__PURE__ */ jsx13("path", { d: "M17 12H3" }),
7193
- /* @__PURE__ */ jsx13("path", { d: "m11 18 6-6-6-6" }),
7194
- /* @__PURE__ */ jsx13("path", { d: "M21 5v14" })
7243
+ /* @__PURE__ */ jsx14("path", { d: "M17 12H3" }),
7244
+ /* @__PURE__ */ jsx14("path", { d: "m11 18 6-6-6-6" }),
7245
+ /* @__PURE__ */ jsx14("path", { d: "M21 5v14" })
7195
7246
  ] });
7196
7247
  var DepIconSF = () => /* @__PURE__ */ jsxs9("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
7197
- /* @__PURE__ */ jsx13("path", { d: "m14 15-5 5-5-5" }),
7198
- /* @__PURE__ */ jsx13("path", { d: "M20 4h-7a4 4 0 0 0-4 4v12" })
7248
+ /* @__PURE__ */ jsx14("path", { d: "m14 15-5 5-5-5" }),
7249
+ /* @__PURE__ */ jsx14("path", { d: "M20 4h-7a4 4 0 0 0-4 4v12" })
7199
7250
  ] });
7200
7251
  var LINK_TYPE_ICONS = {
7201
7252
  FS: DepIconFS,
@@ -7245,7 +7296,7 @@ function buildDefaultTaskDateRange(startDate, {
7245
7296
  }
7246
7297
 
7247
7298
  // src/components/TaskList/TaskListRow.tsx
7248
- import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
7299
+ import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
7249
7300
  var DAY_MS4 = 24 * 60 * 60 * 1e3;
7250
7301
  var LINK_TYPE_ORDER = ["FS", "SS", "FF", "SF"];
7251
7302
  var getInclusiveDurationDays = (startDate, endDate) => {
@@ -7273,13 +7324,13 @@ var TrashIcon = () => /* @__PURE__ */ jsxs10(
7273
7324
  strokeLinecap: "round",
7274
7325
  strokeLinejoin: "round",
7275
7326
  children: [
7276
- /* @__PURE__ */ jsx14("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }),
7277
- /* @__PURE__ */ jsx14("path", { d: "M3 6h18" }),
7278
- /* @__PURE__ */ jsx14("path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
7327
+ /* @__PURE__ */ jsx15("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }),
7328
+ /* @__PURE__ */ jsx15("path", { d: "M3 6h18" }),
7329
+ /* @__PURE__ */ jsx15("path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
7279
7330
  ]
7280
7331
  }
7281
7332
  );
7282
- var PlusIcon = () => /* @__PURE__ */ jsx14(
7333
+ var PlusIcon = () => /* @__PURE__ */ jsx15(
7283
7334
  "svg",
7284
7335
  {
7285
7336
  xmlns: "http://www.w3.org/2000/svg",
@@ -7291,7 +7342,7 @@ var PlusIcon = () => /* @__PURE__ */ jsx14(
7291
7342
  strokeWidth: "2",
7292
7343
  strokeLinecap: "round",
7293
7344
  strokeLinejoin: "round",
7294
- children: /* @__PURE__ */ jsx14("path", { d: "M12 5v14M5 12h14" })
7345
+ children: /* @__PURE__ */ jsx15("path", { d: "M12 5v14M5 12h14" })
7295
7346
  }
7296
7347
  );
7297
7348
  var DepEditIcon = () => /* @__PURE__ */ jsxs10(
@@ -7308,18 +7359,18 @@ var DepEditIcon = () => /* @__PURE__ */ jsxs10(
7308
7359
  strokeLinejoin: "round",
7309
7360
  "aria-hidden": "true",
7310
7361
  children: [
7311
- /* @__PURE__ */ jsx14("path", { d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }),
7312
- /* @__PURE__ */ jsx14("path", { d: "m15 5 4 4" })
7362
+ /* @__PURE__ */ jsx15("path", { d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" }),
7363
+ /* @__PURE__ */ jsx15("path", { d: "m15 5 4 4" })
7313
7364
  ]
7314
7365
  }
7315
7366
  );
7316
7367
  var DragHandleIcon = () => /* @__PURE__ */ jsxs10("svg", { width: "10", height: "14", viewBox: "0 0 10 14", fill: "currentColor", children: [
7317
- /* @__PURE__ */ jsx14("circle", { cx: "2", cy: "2", r: "1.5" }),
7318
- /* @__PURE__ */ jsx14("circle", { cx: "8", cy: "2", r: "1.5" }),
7319
- /* @__PURE__ */ jsx14("circle", { cx: "2", cy: "7", r: "1.5" }),
7320
- /* @__PURE__ */ jsx14("circle", { cx: "8", cy: "7", r: "1.5" }),
7321
- /* @__PURE__ */ jsx14("circle", { cx: "2", cy: "12", r: "1.5" }),
7322
- /* @__PURE__ */ jsx14("circle", { cx: "8", cy: "12", r: "1.5" })
7368
+ /* @__PURE__ */ jsx15("circle", { cx: "2", cy: "2", r: "1.5" }),
7369
+ /* @__PURE__ */ jsx15("circle", { cx: "8", cy: "2", r: "1.5" }),
7370
+ /* @__PURE__ */ jsx15("circle", { cx: "2", cy: "7", r: "1.5" }),
7371
+ /* @__PURE__ */ jsx15("circle", { cx: "8", cy: "7", r: "1.5" }),
7372
+ /* @__PURE__ */ jsx15("circle", { cx: "2", cy: "12", r: "1.5" }),
7373
+ /* @__PURE__ */ jsx15("circle", { cx: "8", cy: "12", r: "1.5" })
7323
7374
  ] });
7324
7375
  var VerticalDotsIcon = () => /* @__PURE__ */ jsxs10(
7325
7376
  "svg",
@@ -7330,9 +7381,9 @@ var VerticalDotsIcon = () => /* @__PURE__ */ jsxs10(
7330
7381
  viewBox: "0 0 24 24",
7331
7382
  fill: "currentColor",
7332
7383
  children: [
7333
- /* @__PURE__ */ jsx14("circle", { cx: "12", cy: "5", r: "2" }),
7334
- /* @__PURE__ */ jsx14("circle", { cx: "12", cy: "12", r: "2" }),
7335
- /* @__PURE__ */ jsx14("circle", { cx: "12", cy: "19", r: "2" })
7384
+ /* @__PURE__ */ jsx15("circle", { cx: "12", cy: "5", r: "2" }),
7385
+ /* @__PURE__ */ jsx15("circle", { cx: "12", cy: "12", r: "2" }),
7386
+ /* @__PURE__ */ jsx15("circle", { cx: "12", cy: "19", r: "2" })
7336
7387
  ]
7337
7388
  }
7338
7389
  );
@@ -7349,8 +7400,8 @@ var CopyIcon = () => /* @__PURE__ */ jsxs10(
7349
7400
  strokeLinecap: "round",
7350
7401
  strokeLinejoin: "round",
7351
7402
  children: [
7352
- /* @__PURE__ */ jsx14("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }),
7353
- /* @__PURE__ */ jsx14("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })
7403
+ /* @__PURE__ */ jsx15("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }),
7404
+ /* @__PURE__ */ jsx15("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })
7354
7405
  ]
7355
7406
  }
7356
7407
  );
@@ -7367,10 +7418,10 @@ var UngroupIcon = () => /* @__PURE__ */ jsxs10(
7367
7418
  strokeLinecap: "round",
7368
7419
  strokeLinejoin: "round",
7369
7420
  children: [
7370
- /* @__PURE__ */ jsx14("path", { d: "M3 12h10" }),
7371
- /* @__PURE__ */ jsx14("path", { d: "m6 9-3 3 3 3" }),
7372
- /* @__PURE__ */ jsx14("path", { d: "M13 6h8" }),
7373
- /* @__PURE__ */ jsx14("path", { d: "M13 18h8" })
7421
+ /* @__PURE__ */ jsx15("path", { d: "M3 12h10" }),
7422
+ /* @__PURE__ */ jsx15("path", { d: "m6 9-3 3 3 3" }),
7423
+ /* @__PURE__ */ jsx15("path", { d: "M13 6h8" }),
7424
+ /* @__PURE__ */ jsx15("path", { d: "M13 18h8" })
7374
7425
  ]
7375
7426
  }
7376
7427
  );
@@ -7397,7 +7448,7 @@ var TASK_COLOR_PALETTE = [
7397
7448
  // { label: "Океан2", value: "#0626ba" },
7398
7449
  // { label: "Виноград", value: "#AE3EC9" },
7399
7450
  ];
7400
- var ChevronRightIcon = () => /* @__PURE__ */ jsx14(
7451
+ var ChevronRightIcon = () => /* @__PURE__ */ jsx15(
7401
7452
  "svg",
7402
7453
  {
7403
7454
  xmlns: "http://www.w3.org/2000/svg",
@@ -7409,7 +7460,7 @@ var ChevronRightIcon = () => /* @__PURE__ */ jsx14(
7409
7460
  strokeWidth: "2",
7410
7461
  strokeLinecap: "round",
7411
7462
  strokeLinejoin: "round",
7412
- children: /* @__PURE__ */ jsx14("path", { d: "m9 18 6-6-6-6" })
7463
+ children: /* @__PURE__ */ jsx15("path", { d: "m9 18 6-6-6-6" })
7413
7464
  }
7414
7465
  );
7415
7466
  var LINK_TYPE_LABELS_RU2 = {
@@ -7439,8 +7490,8 @@ var ArrowLeft = () => /* @__PURE__ */ jsxs10(
7439
7490
  strokeLinecap: "round",
7440
7491
  strokeLinejoin: "round",
7441
7492
  children: [
7442
- /* @__PURE__ */ jsx14("path", { d: "m12 19-7-7 7-7" }),
7443
- /* @__PURE__ */ jsx14("path", { d: "M19 12H5" })
7493
+ /* @__PURE__ */ jsx15("path", { d: "m12 19-7-7 7-7" }),
7494
+ /* @__PURE__ */ jsx15("path", { d: "M19 12H5" })
7444
7495
  ]
7445
7496
  }
7446
7497
  );
@@ -7457,8 +7508,8 @@ var ArrowRight = () => /* @__PURE__ */ jsxs10(
7457
7508
  strokeLinecap: "round",
7458
7509
  strokeLinejoin: "round",
7459
7510
  children: [
7460
- /* @__PURE__ */ jsx14("path", { d: "M5 12h14" }),
7461
- /* @__PURE__ */ jsx14("path", { d: "m12 5 7 7-7 7" })
7511
+ /* @__PURE__ */ jsx15("path", { d: "M5 12h14" }),
7512
+ /* @__PURE__ */ jsx15("path", { d: "m12 5 7 7-7 7" })
7462
7513
  ]
7463
7514
  }
7464
7515
  );
@@ -7473,7 +7524,7 @@ var HierarchyButton = ({
7473
7524
  const showDemote = canDemote && !!onDemote;
7474
7525
  if (!canPromote && !showDemote) return null;
7475
7526
  return /* @__PURE__ */ jsxs10(Fragment3, { children: [
7476
- canPromote && /* @__PURE__ */ jsx14(
7527
+ canPromote && /* @__PURE__ */ jsx15(
7477
7528
  "button",
7478
7529
  {
7479
7530
  type: "button",
@@ -7483,10 +7534,10 @@ var HierarchyButton = ({
7483
7534
  onPromote(e);
7484
7535
  },
7485
7536
  title: "\u041F\u043E\u0432\u044B\u0441\u0438\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C",
7486
- children: /* @__PURE__ */ jsx14(ArrowLeft, {})
7537
+ children: /* @__PURE__ */ jsx15(ArrowLeft, {})
7487
7538
  }
7488
7539
  ),
7489
- showDemote && /* @__PURE__ */ jsx14(
7540
+ showDemote && /* @__PURE__ */ jsx15(
7490
7541
  "button",
7491
7542
  {
7492
7543
  type: "button",
@@ -7496,7 +7547,7 @@ var HierarchyButton = ({
7496
7547
  onDemote(e);
7497
7548
  },
7498
7549
  title: "\u041F\u043E\u043D\u0438\u0437\u0438\u0442\u044C \u0443\u0440\u043E\u0432\u0435\u043D\u044C",
7499
- children: /* @__PURE__ */ jsx14(ArrowRight, {})
7550
+ children: /* @__PURE__ */ jsx15(ArrowRight, {})
7500
7551
  }
7501
7552
  )
7502
7553
  ] });
@@ -7524,7 +7575,7 @@ var DepChip = ({
7524
7575
  const [popoverOpen, setPopoverOpen] = useState6(false);
7525
7576
  const lagAbs = Math.abs(lag ?? 0);
7526
7577
  const [inputAbs, setInputAbs] = useState6(lagAbs === 0 ? "" : String(lagAbs));
7527
- useEffect5(() => {
7578
+ useEffect6(() => {
7528
7579
  const abs = Math.abs(lag ?? 0);
7529
7580
  setInputAbs(abs === 0 ? "" : String(abs));
7530
7581
  }, [lag]);
@@ -7687,9 +7738,9 @@ var DepChip = ({
7687
7738
  },
7688
7739
  "aria-label": `[${LINK_TYPE_LABELS_RU2[dep.type]}] ${formatTaskNumberLabel(predecessorTaskNumber)}${depName}`,
7689
7740
  children: [
7690
- predecessorTaskNumber && /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dep-chip-task-number", children: predecessorTaskNumber }),
7691
- /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dep-chip", children: /* @__PURE__ */ jsx14(Icon, {}) }),
7692
- effectiveLag !== 0 && /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dep-chip-lag", children: effectiveLag > 0 ? `+${effectiveLag}` : `${effectiveLag}` }),
7741
+ predecessorTaskNumber && /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dep-chip-task-number", children: predecessorTaskNumber }),
7742
+ /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dep-chip", children: /* @__PURE__ */ jsx15(Icon, {}) }),
7743
+ effectiveLag !== 0 && /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dep-chip-lag", children: effectiveLag > 0 ? `+${effectiveLag}` : `${effectiveLag}` }),
7693
7744
  /* @__PURE__ */ jsxs10("span", { className: "gantt-tl-dep-chip-tooltip", role: "tooltip", children: [
7694
7745
  "[",
7695
7746
  LINK_TYPE_LABELS_RU2[dep.type],
@@ -7700,7 +7751,7 @@ var DepChip = ({
7700
7751
  ]
7701
7752
  }
7702
7753
  ),
7703
- isSelected && !disableDependencyEditing && /* @__PURE__ */ jsx14(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx14(
7754
+ isSelected && !disableDependencyEditing && /* @__PURE__ */ jsx15(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx15(
7704
7755
  "button",
7705
7756
  {
7706
7757
  type: "button",
@@ -7708,13 +7759,13 @@ var DepChip = ({
7708
7759
  "aria-label": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0432\u044F\u0437\u044C",
7709
7760
  title: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0432\u044F\u0437\u044C",
7710
7761
  onClick: (e) => e.stopPropagation(),
7711
- children: /* @__PURE__ */ jsx14(DepEditIcon, {})
7762
+ children: /* @__PURE__ */ jsx15(DepEditIcon, {})
7712
7763
  }
7713
7764
  ) })
7714
7765
  ]
7715
7766
  }
7716
7767
  ),
7717
- /* @__PURE__ */ jsx14(
7768
+ /* @__PURE__ */ jsx15(
7718
7769
  PopoverContent,
7719
7770
  {
7720
7771
  className: "gantt-tl-dep-edit-popover",
@@ -7730,7 +7781,7 @@ var DepChip = ({
7730
7781
  actionVerb,
7731
7782
  preWord ? ` ${preWord}` : ""
7732
7783
  ] }),
7733
- /* @__PURE__ */ jsx14(
7784
+ /* @__PURE__ */ jsx15(
7734
7785
  "button",
7735
7786
  {
7736
7787
  type: "button",
@@ -7739,7 +7790,7 @@ var DepChip = ({
7739
7790
  children: "\u2212"
7740
7791
  }
7741
7792
  ),
7742
- /* @__PURE__ */ jsx14(
7793
+ /* @__PURE__ */ jsx15(
7743
7794
  "input",
7744
7795
  {
7745
7796
  type: "number",
@@ -7755,7 +7806,7 @@ var DepChip = ({
7755
7806
  }
7756
7807
  }
7757
7808
  ),
7758
- !(dep.type === "SF" && effectiveLag === 0) && /* @__PURE__ */ jsx14(
7809
+ !(dep.type === "SF" && effectiveLag === 0) && /* @__PURE__ */ jsx15(
7759
7810
  "button",
7760
7811
  {
7761
7812
  type: "button",
@@ -7764,17 +7815,17 @@ var DepChip = ({
7764
7815
  children: "+"
7765
7816
  }
7766
7817
  ),
7767
- effectiveLag !== 0 && /* @__PURE__ */ jsx14("span", { children: "\u0434." }),
7768
- /* @__PURE__ */ jsx14("span", { children: afterWhat })
7818
+ effectiveLag !== 0 && /* @__PURE__ */ jsx15("span", { children: "\u0434." }),
7819
+ /* @__PURE__ */ jsx15("span", { children: afterWhat })
7769
7820
  ] }),
7770
7821
  /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-dep-edit-pred", children: [
7771
7822
  formatTaskNumberLabel(predecessorTaskNumber),
7772
7823
  depName
7773
7824
  ] }),
7774
7825
  !disableDependencyEditing && /* @__PURE__ */ jsxs10(Fragment3, { children: [
7775
- /* @__PURE__ */ jsx14("hr", { className: "gantt-tl-dep-edit-divider" }),
7826
+ /* @__PURE__ */ jsx15("hr", { className: "gantt-tl-dep-edit-divider" }),
7776
7827
  /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-dep-edit-actions", children: [
7777
- /* @__PURE__ */ jsx14(
7828
+ /* @__PURE__ */ jsx15(
7778
7829
  "button",
7779
7830
  {
7780
7831
  type: "button",
@@ -7786,7 +7837,7 @@ var DepChip = ({
7786
7837
  children: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
7787
7838
  }
7788
7839
  ),
7789
- /* @__PURE__ */ jsx14(
7840
+ /* @__PURE__ */ jsx15(
7790
7841
  "button",
7791
7842
  {
7792
7843
  type: "button",
@@ -7839,7 +7890,7 @@ var areTaskListRowPropsEqual = (prevProps, nextProps) => {
7839
7890
  const nextAnyPicking = nextProps.selectingPredecessorFor != null;
7840
7891
  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;
7841
7892
  };
7842
- var TaskListRow = React10.memo(
7893
+ var TaskListRow = React11.memo(
7843
7894
  ({
7844
7895
  task,
7845
7896
  rowIndex,
@@ -7915,7 +7966,7 @@ var TaskListRow = React10.memo(
7915
7966
  const editingDuration = editingColumnId === "duration";
7916
7967
  const editingProgress = editingColumnId === "progress";
7917
7968
  const taskListNamePrefixIcon = getTaskListNamePrefixIcon?.(task) ?? null;
7918
- const columnWidthStyleMap = useMemo8(() => {
7969
+ const columnWidthStyleMap = useMemo9(() => {
7919
7970
  return new Map(
7920
7971
  (resolvedColumns ?? []).map((column) => {
7921
7972
  const width = column.width ?? 120;
@@ -7939,8 +7990,8 @@ var TaskListRow = React10.memo(
7939
7990
  flex: `0 0 ${fallbackWidth}px`
7940
7991
  };
7941
7992
  }, [columnWidthStyleMap]);
7942
- const normalizedTask = useMemo8(() => normalizeTaskDatesForType(task), [task]);
7943
- const isMilestone = useMemo8(() => isMilestoneTask(normalizedTask), [normalizedTask]);
7993
+ const normalizedTask = useMemo9(() => normalizeTaskDatesForType(task), [task]);
7994
+ const isMilestone = useMemo9(() => isMilestoneTask(normalizedTask), [normalizedTask]);
7944
7995
  const [nameValue, setNameValue] = useState6("");
7945
7996
  const nameInputRef = useRef5(null);
7946
7997
  const [durationValue, setDurationValue] = useState6(
@@ -7963,7 +8014,7 @@ var TaskListRow = React10.memo(
7963
8014
  );
7964
8015
  const rowRef = useRef5(null);
7965
8016
  const isSelected = selectedTaskId === task.id;
7966
- const isParent = useMemo8(
8017
+ const isParent = useMemo9(
7967
8018
  () => isTaskParent(task.id, allTasks),
7968
8019
  [task.id, allTasks]
7969
8020
  );
@@ -7971,7 +8022,7 @@ var TaskListRow = React10.memo(
7971
8022
  const rowFillLevel = Math.min(nestingDepth, 2);
7972
8023
  const isTotalRow = Boolean(task.isTotal);
7973
8024
  const isMilestoneRow = normalizedTask.type === "milestone";
7974
- const weekendPredicate = useMemo8(
8025
+ const weekendPredicate = useMemo9(
7975
8026
  () => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
7976
8027
  [customDays, isWeekend3]
7977
8028
  );
@@ -7994,7 +8045,7 @@ var TaskListRow = React10.memo(
7994
8045
  const compositeIconModeRef = useRef5(compositeIconMode);
7995
8046
  const [compositeIconAnimation, setCompositeIconAnimation] = useState6(null);
7996
8047
  const [compositeIconAnimationPhase, setCompositeIconAnimationPhase] = useState6(null);
7997
- useEffect5(() => {
8048
+ useEffect6(() => {
7998
8049
  const nextMode = isCollapsed ? "composite" : "down";
7999
8050
  if (nextMode === compositeIconModeRef.current) {
8000
8051
  setCompositeIconAnimation(null);
@@ -8024,7 +8075,7 @@ var TaskListRow = React10.memo(
8024
8075
  const isSourceRow = isPicking && selectingPredecessorFor === task.id;
8025
8076
  const [dependencySearchQuery, setDependencySearchQuery] = useState6("");
8026
8077
  const [highlightedDependencyIndex, setHighlightedDependencyIndex] = useState6(0);
8027
- const chips = useMemo8(() => {
8078
+ const chips = useMemo9(() => {
8028
8079
  const taskById = new Map((allTasks ?? []).map((t) => [t.id, t]));
8029
8080
  return (task.dependencies ?? []).map((dep) => {
8030
8081
  const pred = taskById.get(dep.taskId);
@@ -8033,7 +8084,7 @@ var TaskListRow = React10.memo(
8033
8084
  });
8034
8085
  }, [task.dependencies, allTasks]);
8035
8086
  const linkWord = chips.length <= 4 ? "\u0441\u0432\u044F\u0437\u0438" : "\u0441\u0432\u044F\u0437\u0435\u0439";
8036
- const dependencySearchCandidates = useMemo8(() => {
8087
+ const dependencySearchCandidates = useMemo9(() => {
8037
8088
  if (!isSourceRow) return [];
8038
8089
  const normalizedQuery = dependencySearchQuery.trim().toLowerCase();
8039
8090
  return allTasks.filter((candidate) => candidate.id !== task.id).map((candidate) => {
@@ -8060,7 +8111,7 @@ var TaskListRow = React10.memo(
8060
8111
  taskNumberMap,
8061
8112
  task.dependencies
8062
8113
  ]);
8063
- useEffect5(() => {
8114
+ useEffect6(() => {
8064
8115
  if (editingName && nameInputRef.current) {
8065
8116
  nameInputRef.current.focus();
8066
8117
  if (editTriggerRef.current === "keypress") {
@@ -8071,15 +8122,15 @@ var TaskListRow = React10.memo(
8071
8122
  }
8072
8123
  }
8073
8124
  }, [editingName]);
8074
- useEffect5(() => {
8125
+ useEffect6(() => {
8075
8126
  if (!isSourceRow && dependencySearchQuery !== "") {
8076
8127
  setDependencySearchQuery("");
8077
8128
  }
8078
8129
  }, [isSourceRow, dependencySearchQuery]);
8079
- useEffect5(() => {
8130
+ useEffect6(() => {
8080
8131
  setHighlightedDependencyIndex(0);
8081
8132
  }, [dependencySearchQuery, isSourceRow, dependencyPickMode]);
8082
- useEffect5(() => {
8133
+ useEffect6(() => {
8083
8134
  if (dependencySearchCandidates.length === 0) {
8084
8135
  setHighlightedDependencyIndex(0);
8085
8136
  return;
@@ -8088,13 +8139,13 @@ var TaskListRow = React10.memo(
8088
8139
  setHighlightedDependencyIndex(dependencySearchCandidates.length - 1);
8089
8140
  }
8090
8141
  }, [dependencySearchCandidates, highlightedDependencyIndex]);
8091
- useEffect5(() => {
8142
+ useEffect6(() => {
8092
8143
  if (isSourceRow && dependencySearchInputRef.current) {
8093
8144
  dependencySearchInputRef.current.focus();
8094
8145
  dependencySearchInputRef.current.select();
8095
8146
  }
8096
8147
  }, [isSourceRow, dependencyPickMode, activeLinkType]);
8097
- useEffect5(() => {
8148
+ useEffect6(() => {
8098
8149
  if (!isSourceRow || dependencySearchCandidates.length === 0) {
8099
8150
  return;
8100
8151
  }
@@ -8106,7 +8157,7 @@ var TaskListRow = React10.memo(
8106
8157
  block: "nearest"
8107
8158
  });
8108
8159
  }, [isSourceRow, highlightedDependencyIndex, dependencySearchCandidates]);
8109
- useEffect5(() => {
8160
+ useEffect6(() => {
8110
8161
  if (editingTaskId === task.id && !disableTaskNameEditing && autoEditedForRef.current !== editingTaskId) {
8111
8162
  autoEditedForRef.current = editingTaskId;
8112
8163
  nameConfirmedRef.current = false;
@@ -8288,16 +8339,16 @@ var TaskListRow = React10.memo(
8288
8339
  },
8289
8340
  [progressValue, task, onTasksChange, handleProgressCancel, allTasks]
8290
8341
  );
8291
- useEffect5(() => {
8342
+ useEffect6(() => {
8292
8343
  if (editingProgress && progressInputRef.current) {
8293
8344
  progressInputRef.current.focus();
8294
8345
  progressInputRef.current.select();
8295
8346
  }
8296
8347
  }, [editingProgress]);
8297
- useEffect5(() => {
8348
+ useEffect6(() => {
8298
8349
  setDurationValue(getDuration(normalizedTask.startDate, normalizedTask.endDate));
8299
8350
  }, [normalizedTask.startDate, normalizedTask.endDate, getDuration]);
8300
- useEffect5(() => {
8351
+ useEffect6(() => {
8301
8352
  if (editingDuration && durationInputRef.current) {
8302
8353
  durationInputRef.current.focus();
8303
8354
  durationInputRef.current.select();
@@ -8443,7 +8494,7 @@ var TaskListRow = React10.memo(
8443
8494
  [task, onTasksChange, businessDays, getDuration, weekendPredicate, allTasks, isMilestone, emitMilestoneDateChange, taskDateChangeMode]
8444
8495
  );
8445
8496
  const datePickerFooter = onTaskDateChangeModeChange ? /* @__PURE__ */ jsxs10("label", { className: "gantt-datepicker-mode-checkbox", children: [
8446
- /* @__PURE__ */ jsx14(
8497
+ /* @__PURE__ */ jsx15(
8447
8498
  "input",
8448
8499
  {
8449
8500
  type: "checkbox",
@@ -8451,7 +8502,7 @@ var TaskListRow = React10.memo(
8451
8502
  onChange: (event) => onTaskDateChangeModeChange(event.target.checked ? "preserve-duration" : "free")
8452
8503
  }
8453
8504
  ),
8454
- /* @__PURE__ */ jsx14("span", { children: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C" })
8505
+ /* @__PURE__ */ jsx15("span", { children: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C" })
8455
8506
  ] }) : null;
8456
8507
  const handleRowClickInternal = useCallback5(() => {
8457
8508
  onRowClick?.(task.id);
@@ -8511,7 +8562,7 @@ var TaskListRow = React10.memo(
8511
8562
  },
8512
8563
  [onUngroupTask, task.id]
8513
8564
  );
8514
- const visibleCustomMenuCommands = useMemo8(
8565
+ const visibleCustomMenuCommands = useMemo9(
8515
8566
  () => taskListMenuCommands.filter(
8516
8567
  (command) => {
8517
8568
  const scope = command.scope ?? "all";
@@ -8609,7 +8660,7 @@ var TaskListRow = React10.memo(
8609
8660
  onClick: (e) => e.stopPropagation(),
8610
8661
  children: [
8611
8662
  /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-dep-source-direction", children: [
8612
- /* @__PURE__ */ jsx14(
8663
+ /* @__PURE__ */ jsx15(
8613
8664
  "button",
8614
8665
  {
8615
8666
  type: "button",
@@ -8618,7 +8669,7 @@ var TaskListRow = React10.memo(
8618
8669
  children: "\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C"
8619
8670
  }
8620
8671
  ),
8621
- /* @__PURE__ */ jsx14(
8672
+ /* @__PURE__ */ jsx15(
8622
8673
  "button",
8623
8674
  {
8624
8675
  type: "button",
@@ -8628,7 +8679,7 @@ var TaskListRow = React10.memo(
8628
8679
  }
8629
8680
  )
8630
8681
  ] }),
8631
- /* @__PURE__ */ jsx14("div", { className: "gantt-tl-dep-source-types", children: LINK_TYPE_ORDER.map((linkType) => {
8682
+ /* @__PURE__ */ jsx15("div", { className: "gantt-tl-dep-source-types", children: LINK_TYPE_ORDER.map((linkType) => {
8632
8683
  const Icon = LINK_TYPE_ICONS[linkType];
8633
8684
  return /* @__PURE__ */ jsxs10(
8634
8685
  "button",
@@ -8639,14 +8690,14 @@ var TaskListRow = React10.memo(
8639
8690
  "aria-label": `\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0442\u0438\u043F \u0441\u0432\u044F\u0437\u0438 ${linkType}`,
8640
8691
  title: linkType,
8641
8692
  children: [
8642
- /* @__PURE__ */ jsx14(Icon, {}),
8643
- /* @__PURE__ */ jsx14("span", { children: LINK_TYPE_LABELS_RU2[linkType] })
8693
+ /* @__PURE__ */ jsx15(Icon, {}),
8694
+ /* @__PURE__ */ jsx15("span", { children: LINK_TYPE_LABELS_RU2[linkType] })
8644
8695
  ]
8645
8696
  },
8646
8697
  linkType
8647
8698
  );
8648
8699
  }) }),
8649
- /* @__PURE__ */ jsx14("div", { className: "gantt-tl-dep-source-picker-head", children: /* @__PURE__ */ jsx14(
8700
+ /* @__PURE__ */ jsx15("div", { className: "gantt-tl-dep-source-picker-head", children: /* @__PURE__ */ jsx15(
8650
8701
  "input",
8651
8702
  {
8652
8703
  ref: dependencySearchInputRef,
@@ -8688,7 +8739,7 @@ var TaskListRow = React10.memo(
8688
8739
  }
8689
8740
  }
8690
8741
  ) }),
8691
- /* @__PURE__ */ jsx14(
8742
+ /* @__PURE__ */ jsx15(
8692
8743
  "div",
8693
8744
  {
8694
8745
  ref: dependencySearchListRef,
@@ -8713,8 +8764,8 @@ var TaskListRow = React10.memo(
8713
8764
  },
8714
8765
  title: label,
8715
8766
  children: [
8716
- /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dep-source-option-label", children: label }),
8717
- isAlreadyLinked && /* @__PURE__ */ jsx14(
8767
+ /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dep-source-option-label", children: label }),
8768
+ isAlreadyLinked && /* @__PURE__ */ jsx15(
8718
8769
  "span",
8719
8770
  {
8720
8771
  className: "gantt-tl-dep-source-option-remove",
@@ -8729,7 +8780,7 @@ var TaskListRow = React10.memo(
8729
8780
  ]
8730
8781
  },
8731
8782
  candidate.id
8732
- )) : /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dep-source-hint", children: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E" })
8783
+ )) : /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dep-source-hint", children: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E" })
8733
8784
  }
8734
8785
  )
8735
8786
  ]
@@ -8739,13 +8790,13 @@ var TaskListRow = React10.memo(
8739
8790
  const isSelectedDependencyOwner = selectedChip != null && selectedChip.successorId === task.id;
8740
8791
  const startDateISO = toISODate2(normalizedTask.startDate);
8741
8792
  const endDateISO = editingDuration ? getEndDate(normalizedTask.startDate, durationValue) : toISODate2(normalizedTask.endDate);
8742
- const selectionCell = /* @__PURE__ */ jsx14(
8793
+ const selectionCell = /* @__PURE__ */ jsx15(
8743
8794
  "div",
8744
8795
  {
8745
8796
  className: "gantt-tl-cell gantt-tl-cell-selection",
8746
8797
  style: getColumnStyle("selection", 36),
8747
8798
  onClick: (e) => e.stopPropagation(),
8748
- children: /* @__PURE__ */ jsx14(
8799
+ children: /* @__PURE__ */ jsx15(
8749
8800
  "input",
8750
8801
  {
8751
8802
  type: "checkbox",
@@ -8764,7 +8815,7 @@ var TaskListRow = React10.memo(
8764
8815
  style: getColumnStyle("number", 40),
8765
8816
  onClick: handleNumberClick,
8766
8817
  children: [
8767
- onDragStart && /* @__PURE__ */ jsx14(
8818
+ onDragStart && /* @__PURE__ */ jsx15(
8768
8819
  "span",
8769
8820
  {
8770
8821
  className: "gantt-tl-drag-handle",
@@ -8775,10 +8826,10 @@ var TaskListRow = React10.memo(
8775
8826
  },
8776
8827
  onDragEnd: (e) => onDragEnd?.(e),
8777
8828
  onClick: (e) => e.stopPropagation(),
8778
- children: /* @__PURE__ */ jsx14(DragHandleIcon, {})
8829
+ children: /* @__PURE__ */ jsx15(DragHandleIcon, {})
8779
8830
  }
8780
8831
  ),
8781
- /* @__PURE__ */ jsx14("span", { className: "gantt-tl-num-label", children: taskNumber || rowIndex + 1 })
8832
+ /* @__PURE__ */ jsx15("span", { className: "gantt-tl-num-label", children: taskNumber || rowIndex + 1 })
8782
8833
  ]
8783
8834
  }
8784
8835
  );
@@ -8798,8 +8849,8 @@ var TaskListRow = React10.memo(
8798
8849
  isChild && !editingName && /* @__PURE__ */ jsxs10(Fragment3, { children: [
8799
8850
  !isFilterHideMode && /* @__PURE__ */ jsxs10(Fragment3, { children: [
8800
8851
  ancestorLineModes.map(
8801
- (mode, idx) => mode ? /* @__PURE__ */ jsxs10(React10.Fragment, { children: [
8802
- /* @__PURE__ */ jsx14(
8852
+ (mode, idx) => mode ? /* @__PURE__ */ jsxs10(React11.Fragment, { children: [
8853
+ /* @__PURE__ */ jsx15(
8803
8854
  "span",
8804
8855
  {
8805
8856
  "data-testid": `gantt-tl-ancestor-connector-${idx}`,
@@ -8815,7 +8866,7 @@ var TaskListRow = React10.memo(
8815
8866
  }
8816
8867
  }
8817
8868
  ),
8818
- mode === "half" && /* @__PURE__ */ jsx14(
8869
+ mode === "half" && /* @__PURE__ */ jsx15(
8819
8870
  "span",
8820
8871
  {
8821
8872
  "data-testid": `gantt-tl-ancestor-connector-cap-${idx}`,
@@ -8833,7 +8884,7 @@ var TaskListRow = React10.memo(
8833
8884
  )
8834
8885
  ] }, idx) : null
8835
8886
  ),
8836
- nestingDepth > 0 && /* @__PURE__ */ jsx14(
8887
+ nestingDepth > 0 && /* @__PURE__ */ jsx15(
8837
8888
  "span",
8838
8889
  {
8839
8890
  "data-testid": "gantt-tl-child-connector-vertical",
@@ -8849,7 +8900,7 @@ var TaskListRow = React10.memo(
8849
8900
  }
8850
8901
  }
8851
8902
  ),
8852
- /* @__PURE__ */ jsx14(
8903
+ /* @__PURE__ */ jsx15(
8853
8904
  "span",
8854
8905
  {
8855
8906
  style: {
@@ -8864,7 +8915,7 @@ var TaskListRow = React10.memo(
8864
8915
  }
8865
8916
  }
8866
8917
  ),
8867
- /* @__PURE__ */ jsx14(
8918
+ /* @__PURE__ */ jsx15(
8868
8919
  "span",
8869
8920
  {
8870
8921
  style: {
@@ -8880,7 +8931,7 @@ var TaskListRow = React10.memo(
8880
8931
  }
8881
8932
  )
8882
8933
  ] }),
8883
- task.composite && !isFilterHideMode && !isCollapsed && !editingName && /* @__PURE__ */ jsx14(
8934
+ task.composite && !isFilterHideMode && !isCollapsed && !editingName && /* @__PURE__ */ jsx15(
8884
8935
  "span",
8885
8936
  {
8886
8937
  "data-testid": "gantt-tl-parent-connector-tail",
@@ -8896,7 +8947,7 @@ var TaskListRow = React10.memo(
8896
8947
  }
8897
8948
  }
8898
8949
  ),
8899
- isParent && !task.composite && !editingName && /* @__PURE__ */ jsx14(Fragment3, { children: /* @__PURE__ */ jsx14(
8950
+ isParent && !task.composite && !editingName && /* @__PURE__ */ jsx15(Fragment3, { children: /* @__PURE__ */ jsx15(
8900
8951
  "button",
8901
8952
  {
8902
8953
  type: "button",
@@ -8904,12 +8955,12 @@ var TaskListRow = React10.memo(
8904
8955
  onClick: handleToggleCollapse,
8905
8956
  style: { left: `${nestingDepth * 20 - 2}px` },
8906
8957
  "aria-label": isCollapsed ? "Expand children" : "Collapse children",
8907
- children: /* @__PURE__ */ jsx14(ChevronRightIcon, {})
8958
+ children: /* @__PURE__ */ jsx15(ChevronRightIcon, {})
8908
8959
  }
8909
8960
  ) })
8910
8961
  ] }),
8911
8962
  !isChild && isParent && !task.composite && !editingName && /* @__PURE__ */ jsxs10(Fragment3, { children: [
8912
- !isFilterHideMode && !isCollapsed && /* @__PURE__ */ jsx14(
8963
+ !isFilterHideMode && !isCollapsed && /* @__PURE__ */ jsx15(
8913
8964
  "span",
8914
8965
  {
8915
8966
  "data-testid": "gantt-tl-parent-connector-tail",
@@ -8925,7 +8976,7 @@ var TaskListRow = React10.memo(
8925
8976
  }
8926
8977
  }
8927
8978
  ),
8928
- /* @__PURE__ */ jsx14(
8979
+ /* @__PURE__ */ jsx15(
8929
8980
  "button",
8930
8981
  {
8931
8982
  type: "button",
@@ -8933,11 +8984,11 @@ var TaskListRow = React10.memo(
8933
8984
  onClick: handleToggleCollapse,
8934
8985
  style: { left: `${nestingDepth * 20 - 2}px` },
8935
8986
  "aria-label": isCollapsed ? "Expand children" : "Collapse children",
8936
- children: /* @__PURE__ */ jsx14(ChevronRightIcon, {})
8987
+ children: /* @__PURE__ */ jsx15(ChevronRightIcon, {})
8937
8988
  }
8938
8989
  )
8939
8990
  ] }),
8940
- editingName ? /* @__PURE__ */ jsx14(
8991
+ editingName ? /* @__PURE__ */ jsx15(
8941
8992
  Input,
8942
8993
  {
8943
8994
  ref: nameInputRef,
@@ -8951,7 +9002,7 @@ var TaskListRow = React10.memo(
8951
9002
  onClick: (e) => e.stopPropagation()
8952
9003
  }
8953
9004
  ) : /* @__PURE__ */ jsxs10(Fragment3, { children: [
8954
- task.composite && /* @__PURE__ */ jsx14(
9005
+ task.composite && /* @__PURE__ */ jsx15(
8955
9006
  "button",
8956
9007
  {
8957
9008
  type: "button",
@@ -8961,7 +9012,7 @@ var TaskListRow = React10.memo(
8961
9012
  "aria-label": isCollapsed ? `\u0420\u0430\u0441\u043A\u0440\u044B\u0442\u044C ${task.name}` : `\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C ${task.name}`,
8962
9013
  "aria-expanded": !isCollapsed,
8963
9014
  title: isCollapsed ? "\u0420\u0430\u0441\u043A\u0440\u044B\u0442\u044C \u044D\u0442\u0430\u0436\u0438" : "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u044D\u0442\u0430\u0436\u0438",
8964
- children: /* @__PURE__ */ jsx14(
9015
+ children: /* @__PURE__ */ jsx15(
8965
9016
  "svg",
8966
9017
  {
8967
9018
  className: compositeIconAnimation && compositeIconAnimationPhase ? `gantt-tl-compositeGlyph-${compositeIconMode}-${compositeIconAnimation}-${compositeIconAnimationPhase}` : void 0,
@@ -8973,11 +9024,11 @@ var TaskListRow = React10.memo(
8973
9024
  strokeLinejoin: "round",
8974
9025
  "aria-hidden": "true",
8975
9026
  children: compositeIconMode === "composite" ? /* @__PURE__ */ jsxs10(Fragment3, { children: [
8976
- /* @__PURE__ */ jsx14("path", { d: "M21 5H11" }),
8977
- /* @__PURE__ */ jsx14("path", { d: "M21 12H11" }),
8978
- /* @__PURE__ */ jsx14("path", { d: "M21 19H11" }),
8979
- /* @__PURE__ */ jsx14("path", { d: "m3 8 4 4-4 4" })
8980
- ] }) : /* @__PURE__ */ jsx14("path", { d: "m6 9 6 6 6-6" })
9027
+ /* @__PURE__ */ jsx15("path", { d: "M21 5H11" }),
9028
+ /* @__PURE__ */ jsx15("path", { d: "M21 12H11" }),
9029
+ /* @__PURE__ */ jsx15("path", { d: "M21 19H11" }),
9030
+ /* @__PURE__ */ jsx15("path", { d: "m3 8 4 4-4 4" })
9031
+ ] }) : /* @__PURE__ */ jsx15("path", { d: "m6 9 6 6 6-6" })
8981
9032
  }
8982
9033
  )
8983
9034
  }
@@ -8995,13 +9046,13 @@ var TaskListRow = React10.memo(
8995
9046
  paddingRight: task.color ? "20px" : void 0
8996
9047
  },
8997
9048
  children: [
8998
- taskListNamePrefixIcon ? /* @__PURE__ */ jsx14("span", { className: "gantt-tl-name-trigger-icon", "aria-hidden": "true", children: taskListNamePrefixIcon }) : null,
8999
- /* @__PURE__ */ jsx14("span", { className: "gantt-tl-name-trigger-text", children: task.name })
9049
+ taskListNamePrefixIcon ? /* @__PURE__ */ jsx15("span", { className: "gantt-tl-name-trigger-icon", "aria-hidden": "true", children: taskListNamePrefixIcon }) : null,
9050
+ /* @__PURE__ */ jsx15("span", { className: "gantt-tl-name-trigger-text", children: task.name })
9000
9051
  ]
9001
9052
  }
9002
9053
  )
9003
9054
  ] }),
9004
- !editingName && task.color && /* @__PURE__ */ jsx14(
9055
+ !editingName && task.color && /* @__PURE__ */ jsx15(
9005
9056
  "span",
9006
9057
  {
9007
9058
  className: "gantt-tl-name-color-stripe",
@@ -9010,7 +9061,7 @@ var TaskListRow = React10.memo(
9010
9061
  }
9011
9062
  ),
9012
9063
  !editingName && !hideTaskListRowActions && (onInsertAfter || onDelete || onPromoteTask || onDemoteTask || onUngroupTask || onDuplicateTask || onTasksChange || hasContextMenu) && /* @__PURE__ */ jsxs10("div", { className: `gantt-tl-name-actions${contextMenuOpen ? " gantt-tl-name-actions-open" : ""}`, children: [
9013
- onInsertAfter && /* @__PURE__ */ jsx14(
9064
+ onInsertAfter && /* @__PURE__ */ jsx15(
9014
9065
  "button",
9015
9066
  {
9016
9067
  type: "button",
@@ -9032,10 +9083,10 @@ var TaskListRow = React10.memo(
9032
9083
  onInsertAfter(task.id, newTask);
9033
9084
  },
9034
9085
  "aria-label": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443 \u043F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0439",
9035
- children: /* @__PURE__ */ jsx14(PlusIcon, {})
9086
+ children: /* @__PURE__ */ jsx15(PlusIcon, {})
9036
9087
  }
9037
9088
  ),
9038
- /* @__PURE__ */ jsx14(
9089
+ /* @__PURE__ */ jsx15(
9039
9090
  HierarchyButton,
9040
9091
  {
9041
9092
  isChild,
@@ -9049,7 +9100,7 @@ var TaskListRow = React10.memo(
9049
9100
  setContextMenuOpen(open);
9050
9101
  if (!open) closeColorMenu();
9051
9102
  }, children: [
9052
- /* @__PURE__ */ jsx14(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx14(
9103
+ /* @__PURE__ */ jsx15(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx15(
9053
9104
  "button",
9054
9105
  {
9055
9106
  type: "button",
@@ -9059,7 +9110,7 @@ var TaskListRow = React10.memo(
9059
9110
  setContextMenuOpen((v) => !v);
9060
9111
  },
9061
9112
  "aria-label": "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E",
9062
- children: /* @__PURE__ */ jsx14(VerticalDotsIcon, {})
9113
+ children: /* @__PURE__ */ jsx15(VerticalDotsIcon, {})
9063
9114
  }
9064
9115
  ) }),
9065
9116
  /* @__PURE__ */ jsxs10(PopoverContent, { className: "gantt-tl-context-menu", portal: true, align: "end", children: [
@@ -9088,7 +9139,7 @@ var TaskListRow = React10.memo(
9088
9139
  "aria-haspopup": "menu",
9089
9140
  children: [
9090
9141
  /* @__PURE__ */ jsxs10("span", { className: "gantt-tl-context-menu-item-main", children: [
9091
- task.color && /* @__PURE__ */ jsx14(
9142
+ task.color && /* @__PURE__ */ jsx15(
9092
9143
  "span",
9093
9144
  {
9094
9145
  className: "gantt-tl-color-swatch gantt-tl-color-swatch-inline",
@@ -9098,12 +9149,12 @@ var TaskListRow = React10.memo(
9098
9149
  ),
9099
9150
  "\u0426\u0432\u0435\u0442"
9100
9151
  ] }),
9101
- /* @__PURE__ */ jsx14(ChevronRightIcon, {})
9152
+ /* @__PURE__ */ jsx15(ChevronRightIcon, {})
9102
9153
  ]
9103
9154
  }
9104
9155
  ),
9105
- colorMenuOpen && /* @__PURE__ */ jsx14("div", { className: "gantt-tl-context-submenu", role: "menu", "aria-label": "\u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430", children: /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-color-grid", children: [
9106
- /* @__PURE__ */ jsx14(
9156
+ colorMenuOpen && /* @__PURE__ */ jsx15("div", { className: "gantt-tl-context-submenu", role: "menu", "aria-label": "\u0412\u044B\u0431\u043E\u0440 \u0446\u0432\u0435\u0442\u0430", children: /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-color-grid", children: [
9157
+ /* @__PURE__ */ jsx15(
9107
9158
  "button",
9108
9159
  {
9109
9160
  type: "button",
@@ -9114,10 +9165,10 @@ var TaskListRow = React10.memo(
9114
9165
  },
9115
9166
  "aria-label": "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0446\u0432\u0435\u0442",
9116
9167
  title: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0446\u0432\u0435\u0442",
9117
- children: /* @__PURE__ */ jsx14("span", { className: "gantt-tl-color-swatch-clear-line" })
9168
+ children: /* @__PURE__ */ jsx15("span", { className: "gantt-tl-color-swatch-clear-line" })
9118
9169
  }
9119
9170
  ),
9120
- TASK_COLOR_PALETTE.map((paletteColor) => /* @__PURE__ */ jsx14(
9171
+ TASK_COLOR_PALETTE.map((paletteColor) => /* @__PURE__ */ jsx15(
9121
9172
  "button",
9122
9173
  {
9123
9174
  type: "button",
@@ -9147,13 +9198,13 @@ var TaskListRow = React10.memo(
9147
9198
  onDuplicateTask(task.id);
9148
9199
  },
9149
9200
  children: [
9150
- /* @__PURE__ */ jsx14(CopyIcon, {}),
9201
+ /* @__PURE__ */ jsx15(CopyIcon, {}),
9151
9202
  "\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C"
9152
9203
  ]
9153
9204
  }
9154
9205
  ),
9155
- visibleCustomMenuCommands.map((command) => /* @__PURE__ */ jsxs10(React10.Fragment, { children: [
9156
- command.divider === "top" && /* @__PURE__ */ jsx14("hr", { className: "gantt-tl-context-menu-divider" }),
9206
+ visibleCustomMenuCommands.map((command) => /* @__PURE__ */ jsxs10(React11.Fragment, { children: [
9207
+ command.divider === "top" && /* @__PURE__ */ jsx15("hr", { className: "gantt-tl-context-menu-divider" }),
9157
9208
  /* @__PURE__ */ jsxs10(
9158
9209
  "button",
9159
9210
  {
@@ -9167,7 +9218,7 @@ var TaskListRow = React10.memo(
9167
9218
  ]
9168
9219
  }
9169
9220
  ),
9170
- command.divider === "bottom" && /* @__PURE__ */ jsx14("hr", { className: "gantt-tl-context-menu-divider" })
9221
+ command.divider === "bottom" && /* @__PURE__ */ jsx15("hr", { className: "gantt-tl-context-menu-divider" })
9171
9222
  ] }, command.id)),
9172
9223
  isParent && onUngroupTask && /* @__PURE__ */ jsxs10(
9173
9224
  "button",
@@ -9176,7 +9227,7 @@ var TaskListRow = React10.memo(
9176
9227
  className: "gantt-tl-context-menu-item",
9177
9228
  onClick: handleUngroup,
9178
9229
  children: [
9179
- /* @__PURE__ */ jsx14(UngroupIcon, {}),
9230
+ /* @__PURE__ */ jsx15(UngroupIcon, {}),
9180
9231
  "\u0420\u0430\u0437\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C"
9181
9232
  ]
9182
9233
  }
@@ -9192,7 +9243,7 @@ var TaskListRow = React10.memo(
9192
9243
  onDelete(task.id);
9193
9244
  },
9194
9245
  children: [
9195
- /* @__PURE__ */ jsx14(TrashIcon, {}),
9246
+ /* @__PURE__ */ jsx15(TrashIcon, {}),
9196
9247
  "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0442\u0443"
9197
9248
  ]
9198
9249
  }
@@ -9201,13 +9252,13 @@ var TaskListRow = React10.memo(
9201
9252
  ] })
9202
9253
  ] })
9203
9254
  ] });
9204
- const startDateCell = /* @__PURE__ */ jsx14(
9255
+ const startDateCell = /* @__PURE__ */ jsx15(
9205
9256
  "div",
9206
9257
  {
9207
9258
  className: "gantt-tl-cell gantt-tl-cell-date",
9208
9259
  style: getColumnStyle("startDate", 90),
9209
9260
  onClick: (e) => e.stopPropagation(),
9210
- children: /* @__PURE__ */ jsx14(
9261
+ children: /* @__PURE__ */ jsx15(
9211
9262
  DatePicker,
9212
9263
  {
9213
9264
  value: startDateISO,
@@ -9222,13 +9273,13 @@ var TaskListRow = React10.memo(
9222
9273
  )
9223
9274
  }
9224
9275
  );
9225
- const endDateCell = /* @__PURE__ */ jsx14(
9276
+ const endDateCell = /* @__PURE__ */ jsx15(
9226
9277
  "div",
9227
9278
  {
9228
9279
  className: "gantt-tl-cell gantt-tl-cell-date",
9229
9280
  style: getColumnStyle("endDate", 90),
9230
9281
  onClick: (e) => e.stopPropagation(),
9231
- children: /* @__PURE__ */ jsx14(
9282
+ children: /* @__PURE__ */ jsx15(
9232
9283
  DatePicker,
9233
9284
  {
9234
9285
  value: endDateISO,
@@ -9256,7 +9307,7 @@ var TaskListRow = React10.memo(
9256
9307
  className: "gantt-tl-number-editor",
9257
9308
  onClick: (e) => e.stopPropagation(),
9258
9309
  children: [
9259
- /* @__PURE__ */ jsx14(
9310
+ /* @__PURE__ */ jsx15(
9260
9311
  Input,
9261
9312
  {
9262
9313
  ref: durationInputRef,
@@ -9271,7 +9322,7 @@ var TaskListRow = React10.memo(
9271
9322
  }
9272
9323
  ),
9273
9324
  /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-number-steppers", "aria-hidden": "true", children: [
9274
- /* @__PURE__ */ jsx14(
9325
+ /* @__PURE__ */ jsx15(
9275
9326
  "button",
9276
9327
  {
9277
9328
  type: "button",
@@ -9279,7 +9330,7 @@ var TaskListRow = React10.memo(
9279
9330
  tabIndex: -1,
9280
9331
  onMouseDown: (e) => e.preventDefault(),
9281
9332
  onClick: () => handleDurationAdjust(1),
9282
- children: /* @__PURE__ */ jsx14(
9333
+ children: /* @__PURE__ */ jsx15(
9283
9334
  "svg",
9284
9335
  {
9285
9336
  xmlns: "http://www.w3.org/2000/svg",
@@ -9291,12 +9342,12 @@ var TaskListRow = React10.memo(
9291
9342
  strokeWidth: "2",
9292
9343
  strokeLinecap: "round",
9293
9344
  strokeLinejoin: "round",
9294
- children: /* @__PURE__ */ jsx14("path", { d: "m18 15-6-6-6 6" })
9345
+ children: /* @__PURE__ */ jsx15("path", { d: "m18 15-6-6-6 6" })
9295
9346
  }
9296
9347
  )
9297
9348
  }
9298
9349
  ),
9299
- /* @__PURE__ */ jsx14(
9350
+ /* @__PURE__ */ jsx15(
9300
9351
  "button",
9301
9352
  {
9302
9353
  type: "button",
@@ -9304,7 +9355,7 @@ var TaskListRow = React10.memo(
9304
9355
  tabIndex: -1,
9305
9356
  onMouseDown: (e) => e.preventDefault(),
9306
9357
  onClick: () => handleDurationAdjust(-1),
9307
- children: /* @__PURE__ */ jsx14(
9358
+ children: /* @__PURE__ */ jsx15(
9308
9359
  "svg",
9309
9360
  {
9310
9361
  xmlns: "http://www.w3.org/2000/svg",
@@ -9316,7 +9367,7 @@ var TaskListRow = React10.memo(
9316
9367
  strokeWidth: "2",
9317
9368
  strokeLinecap: "round",
9318
9369
  strokeLinejoin: "round",
9319
- children: /* @__PURE__ */ jsx14("path", { d: "m6 9 6 6 6-6" })
9370
+ children: /* @__PURE__ */ jsx15("path", { d: "m6 9 6 6 6-6" })
9320
9371
  }
9321
9372
  )
9322
9373
  }
@@ -9325,7 +9376,7 @@ var TaskListRow = React10.memo(
9325
9376
  ]
9326
9377
  }
9327
9378
  ),
9328
- /* @__PURE__ */ jsx14(
9379
+ /* @__PURE__ */ jsx15(
9329
9380
  "span",
9330
9381
  {
9331
9382
  className: "gantt-tl-duration-display",
@@ -9349,7 +9400,7 @@ var TaskListRow = React10.memo(
9349
9400
  className: "gantt-tl-number-editor",
9350
9401
  onClick: (e) => e.stopPropagation(),
9351
9402
  children: [
9352
- /* @__PURE__ */ jsx14(
9403
+ /* @__PURE__ */ jsx15(
9353
9404
  Input,
9354
9405
  {
9355
9406
  ref: progressInputRef,
@@ -9365,7 +9416,7 @@ var TaskListRow = React10.memo(
9365
9416
  }
9366
9417
  ),
9367
9418
  /* @__PURE__ */ jsxs10("div", { className: "gantt-tl-number-steppers", "aria-hidden": "true", children: [
9368
- /* @__PURE__ */ jsx14(
9419
+ /* @__PURE__ */ jsx15(
9369
9420
  "button",
9370
9421
  {
9371
9422
  type: "button",
@@ -9373,7 +9424,7 @@ var TaskListRow = React10.memo(
9373
9424
  tabIndex: -1,
9374
9425
  onMouseDown: (e) => e.preventDefault(),
9375
9426
  onClick: () => handleProgressAdjust(1),
9376
- children: /* @__PURE__ */ jsx14(
9427
+ children: /* @__PURE__ */ jsx15(
9377
9428
  "svg",
9378
9429
  {
9379
9430
  xmlns: "http://www.w3.org/2000/svg",
@@ -9385,12 +9436,12 @@ var TaskListRow = React10.memo(
9385
9436
  strokeWidth: "2",
9386
9437
  strokeLinecap: "round",
9387
9438
  strokeLinejoin: "round",
9388
- children: /* @__PURE__ */ jsx14("path", { d: "m18 15-6-6-6 6" })
9439
+ children: /* @__PURE__ */ jsx15("path", { d: "m18 15-6-6-6 6" })
9389
9440
  }
9390
9441
  )
9391
9442
  }
9392
9443
  ),
9393
- /* @__PURE__ */ jsx14(
9444
+ /* @__PURE__ */ jsx15(
9394
9445
  "button",
9395
9446
  {
9396
9447
  type: "button",
@@ -9398,7 +9449,7 @@ var TaskListRow = React10.memo(
9398
9449
  tabIndex: -1,
9399
9450
  onMouseDown: (e) => e.preventDefault(),
9400
9451
  onClick: () => handleProgressAdjust(-1),
9401
- children: /* @__PURE__ */ jsx14(
9452
+ children: /* @__PURE__ */ jsx15(
9402
9453
  "svg",
9403
9454
  {
9404
9455
  xmlns: "http://www.w3.org/2000/svg",
@@ -9410,7 +9461,7 @@ var TaskListRow = React10.memo(
9410
9461
  strokeWidth: "2",
9411
9462
  strokeLinecap: "round",
9412
9463
  strokeLinejoin: "round",
9413
- children: /* @__PURE__ */ jsx14("path", { d: "m6 9 6 6 6-6" })
9464
+ children: /* @__PURE__ */ jsx15("path", { d: "m6 9 6 6 6-6" })
9414
9465
  }
9415
9466
  )
9416
9467
  }
@@ -9419,7 +9470,7 @@ var TaskListRow = React10.memo(
9419
9470
  ]
9420
9471
  }
9421
9472
  ),
9422
- /* @__PURE__ */ jsx14(
9473
+ /* @__PURE__ */ jsx15(
9423
9474
  "span",
9424
9475
  {
9425
9476
  className: "gantt-tl-progress-display",
@@ -9435,14 +9486,14 @@ var TaskListRow = React10.memo(
9435
9486
  ]
9436
9487
  }
9437
9488
  );
9438
- const dependenciesCell = /* @__PURE__ */ jsx14(
9489
+ const dependenciesCell = /* @__PURE__ */ jsx15(
9439
9490
  "div",
9440
9491
  {
9441
9492
  className: "gantt-tl-cell gantt-tl-cell-deps",
9442
9493
  style: getColumnStyle("dependencies", 128),
9443
9494
  onClick: isSourceRow ? handleSourceCellClick : isPicking ? handlePredecessorPick : void 0,
9444
9495
  children: isSourceRow ? /* @__PURE__ */ jsxs10(Fragment3, { children: [
9445
- /* @__PURE__ */ jsx14(
9496
+ /* @__PURE__ */ jsx15(
9446
9497
  "span",
9447
9498
  {
9448
9499
  className: "gantt-tl-dep-source-hint",
@@ -9452,14 +9503,14 @@ var TaskListRow = React10.memo(
9452
9503
  ),
9453
9504
  sourcePickerContent
9454
9505
  ] }) : /* @__PURE__ */ jsxs10(Fragment3, { children: [
9455
- printDependencyLabels ? /* @__PURE__ */ jsx14("span", { className: "gantt-tl-dependency-print-labels", children: chips.map(({ dep, lag }) => formatDependencyPrintLabel(
9506
+ printDependencyLabels ? /* @__PURE__ */ jsx15("span", { className: "gantt-tl-dependency-print-labels", children: chips.map(({ dep, lag }) => formatDependencyPrintLabel(
9456
9507
  dep,
9457
9508
  taskNumberMap[dep.taskId],
9458
9509
  lag
9459
9510
  )).join(", ") }) : chips.length >= 2 ? (
9460
9511
  /* 2+ deps — show only "N связей" summary chip that opens a popover */
9461
9512
  /* @__PURE__ */ jsxs10(Popover, { open: overflowOpen, onOpenChange: setOverflowOpen, children: [
9462
- /* @__PURE__ */ jsx14(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
9513
+ /* @__PURE__ */ jsx15(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs10(
9463
9514
  "button",
9464
9515
  {
9465
9516
  type: "button",
@@ -9475,12 +9526,12 @@ var TaskListRow = React10.memo(
9475
9526
  ]
9476
9527
  }
9477
9528
  ) }),
9478
- /* @__PURE__ */ jsx14(PopoverContent, { portal: true, align: "start", children: /* @__PURE__ */ jsx14(
9529
+ /* @__PURE__ */ jsx15(PopoverContent, { portal: true, align: "start", children: /* @__PURE__ */ jsx15(
9479
9530
  "div",
9480
9531
  {
9481
9532
  className: "gantt-tl-dep-overflow-list",
9482
9533
  onClick: (e) => e.stopPropagation(),
9483
- children: chips.map(({ dep, lag, predecessorName }) => /* @__PURE__ */ jsx14(
9534
+ children: chips.map(({ dep, lag, predecessorName }) => /* @__PURE__ */ jsx15(
9484
9535
  DepChip,
9485
9536
  {
9486
9537
  lag,
@@ -9509,7 +9560,7 @@ var TaskListRow = React10.memo(
9509
9560
  ] })
9510
9561
  ) : chips.length === 1 ? (
9511
9562
  /* Single chip — unified DepChip */
9512
- /* @__PURE__ */ jsx14(
9563
+ /* @__PURE__ */ jsx15(
9513
9564
  DepChip,
9514
9565
  {
9515
9566
  lag: chips[0].lag,
@@ -9533,7 +9584,7 @@ var TaskListRow = React10.memo(
9533
9584
  }
9534
9585
  )
9535
9586
  ) : null,
9536
- !printDependencyLabels && !disableDependencyEditing && !isPicking && /* @__PURE__ */ jsx14(
9587
+ !printDependencyLabels && !disableDependencyEditing && !isPicking && /* @__PURE__ */ jsx15(
9537
9588
  "button",
9538
9589
  {
9539
9590
  type: "button",
@@ -9598,7 +9649,7 @@ var TaskListRow = React10.memo(
9598
9649
  focusCustomCell(nextCell.taskId, nextCell.columnId);
9599
9650
  });
9600
9651
  }, [focusCustomCell, onActiveCustomCellChange, resolvedColumns, task.id]);
9601
- return /* @__PURE__ */ jsx14(
9652
+ return /* @__PURE__ */ jsx15(
9602
9653
  "div",
9603
9654
  {
9604
9655
  ref: rowRef,
@@ -9640,7 +9691,7 @@ var TaskListRow = React10.memo(
9640
9691
  tabIndex: isSelected ? 0 : -1,
9641
9692
  children: resolvedColumns?.map((col) => {
9642
9693
  const builtIn = builtInCells[col.id];
9643
- if (builtIn) return /* @__PURE__ */ jsx14(React10.Fragment, { children: builtIn }, col.id);
9694
+ if (builtIn) return /* @__PURE__ */ jsx15(React11.Fragment, { children: builtIn }, col.id);
9644
9695
  const isEditing = editingColumnId === col.id;
9645
9696
  const editorFn = col.renderEditor;
9646
9697
  const isActiveCustomCell = activeCustomCell?.taskId === task.id && activeCustomCell?.columnId === col.id;
@@ -9678,7 +9729,7 @@ var TaskListRow = React10.memo(
9678
9729
  });
9679
9730
  }
9680
9731
  };
9681
- return /* @__PURE__ */ jsx14(
9732
+ return /* @__PURE__ */ jsx15(
9682
9733
  "div",
9683
9734
  {
9684
9735
  className: `gantt-tl-cell gantt-tl-cell-custom gantt-tl-cell-align-${col.align ?? "left"}`,
@@ -9747,7 +9798,7 @@ var TaskListRow = React10.memo(
9747
9798
  }
9748
9799
  } : void 0,
9749
9800
  style: { width: col.width ?? 120, minWidth: col.width ?? 120, flexShrink: 0 },
9750
- children: isEditing && editorFn ? /* @__PURE__ */ jsx14(
9801
+ children: isEditing && editorFn ? /* @__PURE__ */ jsx15(
9751
9802
  "div",
9752
9803
  {
9753
9804
  className: "gantt-tl-cell-custom-editor",
@@ -9756,7 +9807,7 @@ var TaskListRow = React10.memo(
9756
9807
  onClick: (e) => e.stopPropagation(),
9757
9808
  children: editorFn(columnContext)
9758
9809
  }
9759
- ) : /* @__PURE__ */ jsx14("div", { className: "gantt-tl-cell-custom-content", children: col.renderCell(columnContext) })
9810
+ ) : /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell-custom-content", children: col.renderCell(columnContext) })
9760
9811
  },
9761
9812
  col.id
9762
9813
  );
@@ -9769,8 +9820,8 @@ var TaskListRow = React10.memo(
9769
9820
  TaskListRow.displayName = "TaskListRow";
9770
9821
 
9771
9822
  // src/components/TaskList/NewTaskRow.tsx
9772
- import { useState as useState7, useRef as useRef6, useEffect as useEffect6 } from "react";
9773
- import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
9823
+ import { useState as useState7, useRef as useRef6, useEffect as useEffect7 } from "react";
9824
+ import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
9774
9825
  var NewTaskRow = ({
9775
9826
  rowHeight,
9776
9827
  onConfirm,
@@ -9782,7 +9833,7 @@ var NewTaskRow = ({
9782
9833
  const confirmedRef = useRef6(false);
9783
9834
  const inputInnerPadding = 4;
9784
9835
  const levelOffset = nestingDepth > 0 ? nestingDepth * 20 + 8 : 0;
9785
- useEffect6(() => {
9836
+ useEffect7(() => {
9786
9837
  if (inputRef.current) {
9787
9838
  inputRef.current.focus();
9788
9839
  inputRef.current.select();
@@ -9810,8 +9861,8 @@ var NewTaskRow = ({
9810
9861
  }
9811
9862
  };
9812
9863
  return /* @__PURE__ */ jsxs11("div", { className: "gantt-tl-row gantt-tl-row-new", style: { height: `${rowHeight}px` }, children: [
9813
- /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell gantt-tl-cell-number" }),
9814
- /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell gantt-tl-cell-name gantt-tl-cell-new-name", children: /* @__PURE__ */ jsx15(
9864
+ /* @__PURE__ */ jsx16("div", { className: "gantt-tl-cell gantt-tl-cell-number" }),
9865
+ /* @__PURE__ */ jsx16("div", { className: "gantt-tl-cell gantt-tl-cell-name gantt-tl-cell-new-name", children: /* @__PURE__ */ jsx16(
9815
9866
  Input,
9816
9867
  {
9817
9868
  ref: inputRef,
@@ -9828,15 +9879,15 @@ var NewTaskRow = ({
9828
9879
  }
9829
9880
  }
9830
9881
  ) }),
9831
- /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell" }),
9832
- /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell" }),
9833
- /* @__PURE__ */ jsx15("div", { className: "gantt-tl-cell" })
9882
+ /* @__PURE__ */ jsx16("div", { className: "gantt-tl-cell" }),
9883
+ /* @__PURE__ */ jsx16("div", { className: "gantt-tl-cell" }),
9884
+ /* @__PURE__ */ jsx16("div", { className: "gantt-tl-cell" })
9834
9885
  ] });
9835
9886
  };
9836
9887
 
9837
9888
  // src/components/GenerationSkeleton/GenerationSkeleton.tsx
9838
9889
  import { useRef as useRef7 } from "react";
9839
- import { Fragment as Fragment4, jsx as jsx16 } from "react/jsx-runtime";
9890
+ import { Fragment as Fragment4, jsx as jsx17 } from "react/jsx-runtime";
9840
9891
  var MAX_SKELETON_ROWS = 200;
9841
9892
  var SHIMMER_DURATION_MS = 1450;
9842
9893
  function stableRowJitter(rowIndex, maxDays) {
@@ -9867,7 +9918,7 @@ var GenerationSkeletonRows = ({
9867
9918
  shimmerDelayRef.current = `-${Date.now() % SHIMMER_DURATION_MS}ms`;
9868
9919
  }
9869
9920
  if (safeCount === 0) return null;
9870
- return /* @__PURE__ */ jsx16(
9921
+ return /* @__PURE__ */ jsx17(
9871
9922
  "div",
9872
9923
  {
9873
9924
  className: `gantt-generation-skeleton gantt-generation-skeleton-${variant}`,
@@ -9890,12 +9941,12 @@ var GenerationSkeletonRows = ({
9890
9941
  width: `${chartBarDays * Math.max(1, chartDayWidth)}px`,
9891
9942
  marginLeft: `${Math.max(0, chartStartDayOffset - chartStartJitter) * Math.max(1, chartDayWidth)}px`
9892
9943
  } : void 0;
9893
- return /* @__PURE__ */ jsx16(
9944
+ return /* @__PURE__ */ jsx17(
9894
9945
  "div",
9895
9946
  {
9896
9947
  className: "gantt-generation-skeleton-row",
9897
9948
  style: { top: `${(startTop ?? startIndex * rowHeight) + index * rowHeight}px`, height: `${rowHeight}px` },
9898
- children: variant === "task-list" ? /* @__PURE__ */ jsx16(Fragment4, { children: /* @__PURE__ */ jsx16("span", { className: `gantt-generation-skeleton-label ${shortShape ? "gantt-generation-skeleton-label-short" : ""} ${mediumShape ? "gantt-generation-skeleton-label-medium" : ""}` }) }) : /* @__PURE__ */ jsx16("span", { className: `gantt-generation-skeleton-bar ${parentShape ? "gantt-generation-skeleton-bar-parent" : ""} ${shortShape ? "gantt-generation-skeleton-bar-short" : ""}`, style: chartBarStyle })
9949
+ children: variant === "task-list" ? /* @__PURE__ */ jsx17(Fragment4, { children: /* @__PURE__ */ jsx17("span", { className: `gantt-generation-skeleton-label ${shortShape ? "gantt-generation-skeleton-label-short" : ""} ${mediumShape ? "gantt-generation-skeleton-label-medium" : ""}` }) }) : /* @__PURE__ */ jsx17("span", { className: `gantt-generation-skeleton-bar ${parentShape ? "gantt-generation-skeleton-bar-parent" : ""} ${shortShape ? "gantt-generation-skeleton-bar-short" : ""}`, style: chartBarStyle })
9899
9950
  },
9900
9951
  rowIndex
9901
9952
  );
@@ -10025,7 +10076,7 @@ function buildTaskNumberMap(tasks) {
10025
10076
  }
10026
10077
 
10027
10078
  // src/components/TaskList/TaskList.tsx
10028
- import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
10079
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
10029
10080
  var LINK_TYPE_ORDER2 = ["FS", "SS", "FF", "SF"];
10030
10081
  var MIN_TASK_LIST_WIDTH = 530;
10031
10082
  var DEFAULT_COLUMN_MIN_WIDTH = 40;
@@ -10133,12 +10184,12 @@ var SelectAllCheckbox = ({
10133
10184
  onChange
10134
10185
  }) => {
10135
10186
  const ref = useRef8(null);
10136
- useEffect7(() => {
10187
+ useEffect8(() => {
10137
10188
  if (ref.current) {
10138
10189
  ref.current.indeterminate = indeterminate;
10139
10190
  }
10140
10191
  }, [indeterminate]);
10141
- return /* @__PURE__ */ jsx17(
10192
+ return /* @__PURE__ */ jsx18(
10142
10193
  "input",
10143
10194
  {
10144
10195
  ref,
@@ -10221,7 +10272,7 @@ var TaskList = ({
10221
10272
  const columnResizeHeaderRef = useRef8(null);
10222
10273
  const resizeStateRef = useRef8(null);
10223
10274
  const effectiveSelectedTaskIds = selectedTaskIds ?? internalSelectedTaskIds;
10224
- useEffect7(() => {
10275
+ useEffect8(() => {
10225
10276
  if (!isColumnResizeMode) {
10226
10277
  return;
10227
10278
  }
@@ -10256,14 +10307,14 @@ var TaskList = ({
10256
10307
  return next;
10257
10308
  });
10258
10309
  }, []);
10259
- const orderedTasks = useMemo9(() => {
10310
+ const orderedTasks = useMemo10(() => {
10260
10311
  return normalizeHierarchyTasks(tasks);
10261
10312
  }, [tasks]);
10262
- const weekendPredicate = useMemo9(
10313
+ const weekendPredicate = useMemo10(
10263
10314
  () => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
10264
10315
  [customDays, isWeekend3]
10265
10316
  );
10266
- const visibleTasks = useMemo9(() => {
10317
+ const visibleTasks = useMemo10(() => {
10267
10318
  const parentMap = new Map(orderedTasks.map((t) => [t.id, t.parentId]));
10268
10319
  function isAnyAncestorCollapsed(parentId) {
10269
10320
  let current = parentId;
@@ -10282,35 +10333,35 @@ var TaskList = ({
10282
10333
  }
10283
10334
  return tasks2;
10284
10335
  }, [orderedTasks, collapsedParentIds, filterMode, filteredTaskIds, isFilterActive, criticalPathMode, criticalTaskIds]);
10285
- const totalHeight = useMemo9(
10336
+ const totalHeight = useMemo10(
10286
10337
  () => (rowTops && rowHeights && visibleTasks.length > 0 ? rowTops[visibleTasks.length - 1] + rowHeights[visibleTasks.length - 1] : visibleTasks.length * rowHeight) + Math.max(0, Math.floor(skeletonRowCount)) * rowHeight,
10287
10338
  [rowHeight, rowTops, rowHeights, skeletonRowCount, visibleTasks.length]
10288
10339
  );
10289
- const visibleTaskNumberMap = useMemo9(
10340
+ const visibleTaskNumberMap = useMemo10(
10290
10341
  () => Object.fromEntries(buildTaskNumberMap(visibleTasks)),
10291
10342
  [visibleTasks]
10292
10343
  );
10293
- const visibleTaskIds = useMemo9(() => visibleTasks.map((task) => task.id), [visibleTasks]);
10294
- const compositeParentIds = useMemo9(
10344
+ const visibleTaskIds = useMemo10(() => visibleTasks.map((task) => task.id), [visibleTasks]);
10345
+ const compositeParentIds = useMemo10(
10295
10346
  () => new Set(tasks.filter((task) => task.composite).map((task) => task.id)),
10296
10347
  [tasks]
10297
10348
  );
10298
- const compositeParentsById = useMemo9(
10349
+ const compositeParentsById = useMemo10(
10299
10350
  () => new Map(tasks.filter((task) => task.composite).map((task) => [task.id, task])),
10300
10351
  [tasks]
10301
10352
  );
10302
- const renderedVisibleRowIndices = useMemo9(
10353
+ const renderedVisibleRowIndices = useMemo10(
10303
10354
  () => visibleRowIndices ?? visibleTasks.map((_, index) => index),
10304
10355
  [visibleRowIndices, visibleTasks]
10305
10356
  );
10306
- const renderedVisibleTasks = useMemo9(
10357
+ const renderedVisibleTasks = useMemo10(
10307
10358
  () => renderedVisibleRowIndices.map((index) => {
10308
10359
  const task = visibleTasks[index];
10309
10360
  return task ? { index, task } : null;
10310
10361
  }).filter((entry) => entry !== null),
10311
10362
  [renderedVisibleRowIndices, visibleTasks]
10312
10363
  );
10313
- const selectedVisibleTaskCount = useMemo9(
10364
+ const selectedVisibleTaskCount = useMemo10(
10314
10365
  () => visibleTaskIds.filter((taskId) => effectiveSelectedTaskIds.has(taskId)).length,
10315
10366
  [effectiveSelectedTaskIds, visibleTaskIds]
10316
10367
  );
@@ -10336,11 +10387,11 @@ var TaskList = ({
10336
10387
  }
10337
10388
  emitSelectedTaskIdsChange(nextSelectedTaskIds);
10338
10389
  }, [effectiveSelectedTaskIds, emitSelectedTaskIdsChange, visibleTaskIds]);
10339
- const originalTaskNumberMap = useMemo9(
10390
+ const originalTaskNumberMap = useMemo10(
10340
10391
  () => Object.fromEntries(buildTaskNumberMap(orderedTasks)),
10341
10392
  [orderedTasks]
10342
10393
  );
10343
- const nestingDepthMap = useMemo9(() => {
10394
+ const nestingDepthMap = useMemo10(() => {
10344
10395
  const depthMap = /* @__PURE__ */ new Map();
10345
10396
  const taskById = new Map(tasks.map((t) => [t.id, t]));
10346
10397
  function getDepth(taskId) {
@@ -10359,7 +10410,7 @@ var TaskList = ({
10359
10410
  }
10360
10411
  return depthMap;
10361
10412
  }, [tasks]);
10362
- const lastChildIds = useMemo9(() => {
10413
+ const lastChildIds = useMemo10(() => {
10363
10414
  const last = /* @__PURE__ */ new Set();
10364
10415
  const seenParents = /* @__PURE__ */ new Set();
10365
10416
  for (let i = visibleTasks.length - 1; i >= 0; i--) {
@@ -10371,14 +10422,14 @@ var TaskList = ({
10371
10422
  }
10372
10423
  return last;
10373
10424
  }, [visibleTasks]);
10374
- const visibleParentIds = useMemo9(() => {
10425
+ const visibleParentIds = useMemo10(() => {
10375
10426
  const parentIds = /* @__PURE__ */ new Set();
10376
10427
  for (const task of visibleTasks) {
10377
10428
  if (task.parentId) parentIds.add(task.parentId);
10378
10429
  }
10379
10430
  return parentIds;
10380
10431
  }, [visibleTasks]);
10381
- const ancestorLineModesMap = useMemo9(() => {
10432
+ const ancestorLineModesMap = useMemo10(() => {
10382
10433
  const taskById = new Map(tasks.map((t) => [t.id, t]));
10383
10434
  const isDescendantOf2 = (taskId, ancestorId) => {
10384
10435
  let current = taskById.get(taskId);
@@ -10416,7 +10467,7 @@ var TaskList = ({
10416
10467
  const [dependencyError, setDependencyError] = useState8(null);
10417
10468
  const overlayRef = useRef8(null);
10418
10469
  const [selectedChip, setSelectedChip] = useState8(controlledSelectedChip ? { ...controlledSelectedChip, linkType: controlledSelectedChip.linkType } : null);
10419
- useEffect7(() => {
10470
+ useEffect8(() => {
10420
10471
  if (controlledSelectedChip !== void 0) {
10421
10472
  setSelectedChip(controlledSelectedChip ? { ...controlledSelectedChip, linkType: controlledSelectedChip.linkType } : null);
10422
10473
  }
@@ -10425,7 +10476,7 @@ var TaskList = ({
10425
10476
  setSelectedChip(chip);
10426
10477
  onSelectedChipChange?.(chip);
10427
10478
  }, [onSelectedChipChange]);
10428
- useEffect7(() => {
10479
+ useEffect8(() => {
10429
10480
  if (!selectingPredecessorFor && !selectedChip && !selectedTaskId && !activeCustomCell) return;
10430
10481
  const pendingCanvasMouseDownRef = {
10431
10482
  container: null,
@@ -10839,7 +10890,7 @@ var TaskList = ({
10839
10890
  }
10840
10891
  return insertAfterTaskId;
10841
10892
  }, [orderedTasks]);
10842
- const pendingInsertDisplayTaskId = useMemo9(() => {
10893
+ const pendingInsertDisplayTaskId = useMemo10(() => {
10843
10894
  if (!pendingInsert) {
10844
10895
  return null;
10845
10896
  }
@@ -10860,7 +10911,7 @@ var TaskList = ({
10860
10911
  }
10861
10912
  return displayTaskId;
10862
10913
  }, [pendingInsert, visibleTasks]);
10863
- const pendingInsertRowIndex = useMemo9(
10914
+ const pendingInsertRowIndex = useMemo10(
10864
10915
  () => pendingInsertDisplayTaskId ? visibleTasks.findIndex((task) => task.id === pendingInsertDisplayTaskId) : -1,
10865
10916
  [pendingInsertDisplayTaskId, visibleTasks]
10866
10917
  );
@@ -10945,14 +10996,14 @@ var TaskList = ({
10945
10996
  const duplicatedTasks = duplicateTaskSubtree(taskId, orderedTasks);
10946
10997
  onReorder?.(duplicatedTasks);
10947
10998
  }, [orderedTasks, onReorder]);
10948
- const builtInColumns = useMemo9(
10999
+ const builtInColumns = useMemo10(
10949
11000
  () => createBuiltInColumns({ businessDays, enableTaskMultiSelect }),
10950
11001
  [businessDays, enableTaskMultiSelect]
10951
11002
  );
10952
- useEffect7(() => {
11003
+ useEffect8(() => {
10953
11004
  setColumnWidthOverrides(normalizeColumnWidthMap(taskListColumnWidths));
10954
11005
  }, [taskListColumnWidths]);
10955
- const resolvedColumns = useMemo9(
11006
+ const resolvedColumns = useMemo10(
10956
11007
  () => resolveTaskListColumns(
10957
11008
  builtInColumns,
10958
11009
  additionalColumns ?? [],
@@ -10968,11 +11019,11 @@ var TaskList = ({
10968
11019
  }),
10969
11020
  [builtInColumns, additionalColumns, hiddenTaskListColumns, columnWidthOverrides]
10970
11021
  );
10971
- const resolvedColumnWidthTotal = useMemo9(
11022
+ const resolvedColumnWidthTotal = useMemo10(
10972
11023
  () => resolvedColumns.reduce((sum, col) => sum + (col.width ?? 120), 0),
10973
11024
  [resolvedColumns]
10974
11025
  );
10975
- const generationSkeletonTaskListLayout = useMemo9(() => {
11026
+ const generationSkeletonTaskListLayout = useMemo10(() => {
10976
11027
  let left = 0;
10977
11028
  const layout = {
10978
11029
  nameLeft: 40,
@@ -11001,7 +11052,7 @@ var TaskList = ({
11001
11052
  return next;
11002
11053
  });
11003
11054
  }, [onTaskListColumnWidthsChange]);
11004
- useEffect7(() => {
11055
+ useEffect8(() => {
11005
11056
  const updateResizedColumn = (clientX) => {
11006
11057
  const resizeState = resizeStateRef.current;
11007
11058
  if (!resizeState) {
@@ -11104,7 +11155,7 @@ var TaskList = ({
11104
11155
  document.body.style.userSelect = "none";
11105
11156
  document.body.style.touchAction = "none";
11106
11157
  }, [resolvedColumns]);
11107
- const renderResizeHandle = useCallback6((columnId) => /* @__PURE__ */ jsx17(
11158
+ const renderResizeHandle = useCallback6((columnId) => /* @__PURE__ */ jsx18(
11108
11159
  "button",
11109
11160
  {
11110
11161
  type: "button",
@@ -11132,20 +11183,20 @@ var TaskList = ({
11132
11183
  className: "gantt-tl-column-resize-icon lucide lucide-unfold-horizontal-icon lucide-unfold-horizontal",
11133
11184
  "aria-hidden": "true",
11134
11185
  children: [
11135
- /* @__PURE__ */ jsx17("path", { d: "M16 12h6" }),
11136
- /* @__PURE__ */ jsx17("path", { d: "M8 12H2" }),
11137
- /* @__PURE__ */ jsx17("path", { d: "M12 2v2" }),
11138
- /* @__PURE__ */ jsx17("path", { d: "M12 8v2" }),
11139
- /* @__PURE__ */ jsx17("path", { d: "M12 14v2" }),
11140
- /* @__PURE__ */ jsx17("path", { d: "M12 20v2" }),
11141
- /* @__PURE__ */ jsx17("path", { d: "m19 15 3-3-3-3" }),
11142
- /* @__PURE__ */ jsx17("path", { d: "m5 9-3 3 3 3" })
11186
+ /* @__PURE__ */ jsx18("path", { d: "M16 12h6" }),
11187
+ /* @__PURE__ */ jsx18("path", { d: "M8 12H2" }),
11188
+ /* @__PURE__ */ jsx18("path", { d: "M12 2v2" }),
11189
+ /* @__PURE__ */ jsx18("path", { d: "M12 8v2" }),
11190
+ /* @__PURE__ */ jsx18("path", { d: "M12 14v2" }),
11191
+ /* @__PURE__ */ jsx18("path", { d: "M12 20v2" }),
11192
+ /* @__PURE__ */ jsx18("path", { d: "m19 15 3-3-3-3" }),
11193
+ /* @__PURE__ */ jsx18("path", { d: "m5 9-3 3 3 3" })
11143
11194
  ]
11144
11195
  }
11145
11196
  )
11146
11197
  }
11147
11198
  ), [startColumnResize]);
11148
- return /* @__PURE__ */ jsx17(
11199
+ return /* @__PURE__ */ jsx18(
11149
11200
  "div",
11150
11201
  {
11151
11202
  ref: overlayRef,
@@ -11155,7 +11206,7 @@ var TaskList = ({
11155
11206
  "--gantt-row-content-lines": String(Math.max(2, Math.floor(rowContentLines)))
11156
11207
  },
11157
11208
  children: /* @__PURE__ */ jsxs12("div", { className: "gantt-tl-table", children: [
11158
- /* @__PURE__ */ jsx17(
11209
+ /* @__PURE__ */ jsx18(
11159
11210
  "div",
11160
11211
  {
11161
11212
  ref: columnResizeHeaderRef,
@@ -11172,7 +11223,7 @@ var TaskList = ({
11172
11223
  "data-column-id": "selection",
11173
11224
  style: { width: col.width, minWidth: col.width, maxWidth: col.width, flex: `0 0 ${col.width}px`, position: "relative" },
11174
11225
  children: [
11175
- /* @__PURE__ */ jsx17(
11226
+ /* @__PURE__ */ jsx18(
11176
11227
  SelectAllCheckbox,
11177
11228
  {
11178
11229
  checked: areAllVisibleTasksSelected,
@@ -11195,7 +11246,7 @@ var TaskList = ({
11195
11246
  style: { width: col.width, minWidth: col.width, maxWidth: col.width, flex: `0 0 ${col.width}px`, position: "relative" },
11196
11247
  children: [
11197
11248
  /* @__PURE__ */ jsxs12(Popover, { open: typeMenuOpen, onOpenChange: setTypeMenuOpen, children: [
11198
- /* @__PURE__ */ jsx17(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs12(
11249
+ /* @__PURE__ */ jsx18(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs12(
11199
11250
  "button",
11200
11251
  {
11201
11252
  className: "gantt-tl-dep-type-trigger",
@@ -11203,12 +11254,12 @@ var TaskList = ({
11203
11254
  onClick: (e) => e.stopPropagation(),
11204
11255
  children: [
11205
11256
  "\u0421\u0432\u044F\u0437\u0438 ",
11206
- React13.createElement(LINK_TYPE_ICONS[activeLinkType]),
11257
+ React14.createElement(LINK_TYPE_ICONS[activeLinkType]),
11207
11258
  " \u25BE"
11208
11259
  ]
11209
11260
  }
11210
11261
  ) }),
11211
- /* @__PURE__ */ jsx17(PopoverContent, { portal: true, align: "start", children: /* @__PURE__ */ jsx17("div", { className: "gantt-tl-dep-type-menu", children: LINK_TYPE_ORDER2.map((lt) => /* @__PURE__ */ jsxs12(
11262
+ /* @__PURE__ */ jsx18(PopoverContent, { portal: true, align: "start", children: /* @__PURE__ */ jsx18("div", { className: "gantt-tl-dep-type-menu", children: LINK_TYPE_ORDER2.map((lt) => /* @__PURE__ */ jsxs12(
11212
11263
  "button",
11213
11264
  {
11214
11265
  className: `gantt-tl-dep-type-option${activeLinkType === lt ? " active" : ""}`,
@@ -11217,14 +11268,14 @@ var TaskList = ({
11217
11268
  setTypeMenuOpen(false);
11218
11269
  },
11219
11270
  children: [
11220
- React13.createElement(LINK_TYPE_ICONS[lt]),
11221
- /* @__PURE__ */ jsx17("span", { children: LINK_TYPE_LABELS[lt] })
11271
+ React14.createElement(LINK_TYPE_ICONS[lt]),
11272
+ /* @__PURE__ */ jsx18("span", { children: LINK_TYPE_LABELS[lt] })
11222
11273
  ]
11223
11274
  },
11224
11275
  lt
11225
11276
  )) }) })
11226
11277
  ] }),
11227
- dependencyError && /* @__PURE__ */ jsx17("div", { className: "gantt-tl-dep-error", children: dependencyError }),
11278
+ dependencyError && /* @__PURE__ */ jsx18("div", { className: "gantt-tl-dep-error", children: dependencyError }),
11228
11279
  renderResizeHandle(col.id)
11229
11280
  ]
11230
11281
  },
@@ -11274,7 +11325,7 @@ var TaskList = ({
11274
11325
  position: "relative"
11275
11326
  },
11276
11327
  children: [
11277
- shouldShowBeforeFirstDropZone && /* @__PURE__ */ jsx17(
11328
+ shouldShowBeforeFirstDropZone && /* @__PURE__ */ jsx18(
11278
11329
  "div",
11279
11330
  {
11280
11331
  className: [
@@ -11291,7 +11342,7 @@ var TaskList = ({
11291
11342
  const previousVisibleTask = index > 0 ? visibleTasks[index - 1] : void 0;
11292
11343
  const canDemoteTask = index === 0 || !task.parentId || previousVisibleTask?.id !== task.parentId;
11293
11344
  const topOffset = (rowTops?.[index] ?? index * rowHeight) + (hasVisiblePendingInsert && index > pendingInsertRowIndex ? rowHeight : 0);
11294
- return /* @__PURE__ */ jsx17(
11345
+ return /* @__PURE__ */ jsx18(
11295
11346
  "div",
11296
11347
  {
11297
11348
  style: {
@@ -11300,7 +11351,7 @@ var TaskList = ({
11300
11351
  left: 0,
11301
11352
  right: 0
11302
11353
  },
11303
- children: /* @__PURE__ */ jsx17(
11354
+ children: /* @__PURE__ */ jsx18(
11304
11355
  TaskListRow,
11305
11356
  {
11306
11357
  task,
@@ -11380,7 +11431,7 @@ var TaskList = ({
11380
11431
  task.id
11381
11432
  );
11382
11433
  }),
11383
- hasVisiblePendingInsert && /* @__PURE__ */ jsx17(
11434
+ hasVisiblePendingInsert && /* @__PURE__ */ jsx18(
11384
11435
  "div",
11385
11436
  {
11386
11437
  style: {
@@ -11389,7 +11440,7 @@ var TaskList = ({
11389
11440
  left: 0,
11390
11441
  right: 0
11391
11442
  },
11392
- children: /* @__PURE__ */ jsx17(
11443
+ children: /* @__PURE__ */ jsx18(
11393
11444
  NewTaskRow,
11394
11445
  {
11395
11446
  rowHeight,
@@ -11400,7 +11451,7 @@ var TaskList = ({
11400
11451
  )
11401
11452
  }
11402
11453
  ),
11403
- /* @__PURE__ */ jsx17(
11454
+ /* @__PURE__ */ jsx18(
11404
11455
  GenerationSkeleton_default,
11405
11456
  {
11406
11457
  count: skeletonRowCount,
@@ -11414,7 +11465,7 @@ var TaskList = ({
11414
11465
  ]
11415
11466
  }
11416
11467
  ),
11417
- isCreating && !pendingInsert && /* @__PURE__ */ jsx17(
11468
+ isCreating && !pendingInsert && /* @__PURE__ */ jsx18(
11418
11469
  NewTaskRow,
11419
11470
  {
11420
11471
  rowHeight,
@@ -11461,7 +11512,7 @@ var TaskList = ({
11461
11512
  };
11462
11513
 
11463
11514
  // src/components/ResourceTimelineChart/ResourceTimelineChart.tsx
11464
- import React14, { useCallback as useCallback8, useEffect as useEffect9, useMemo as useMemo10, useRef as useRef10, useState as useState10 } from "react";
11515
+ import React15, { useCallback as useCallback8, useEffect as useEffect10, useMemo as useMemo11, useRef as useRef10, useState as useState10 } from "react";
11465
11516
 
11466
11517
  // src/utils/resourceTimelineLayout.ts
11467
11518
  var isInvalidDate = (date) => Number.isNaN(date.getTime());
@@ -11663,7 +11714,7 @@ var layoutResourceTimelineItems = (resources, options) => {
11663
11714
  };
11664
11715
 
11665
11716
  // src/hooks/useResourceItemDrag.ts
11666
- import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef9, useState as useState9 } from "react";
11717
+ import { useCallback as useCallback7, useEffect as useEffect9, useRef as useRef9, useState as useState9 } from "react";
11667
11718
  var RESOURCE_CURSOR_STYLE_ID = "gantt-resource-global-drag-cursor-style";
11668
11719
  function ensureResourceGlobalCursorStyle() {
11669
11720
  if (typeof document === "undefined") return;
@@ -11780,10 +11831,10 @@ var useResourceItemDrag = ({
11780
11831
  const onResourceItemMoveRef = useRef9(onResourceItemMove);
11781
11832
  const rafRef = useRef9(null);
11782
11833
  const [preview, setPreview] = useState9(null);
11783
- useEffect8(() => {
11834
+ useEffect9(() => {
11784
11835
  rowsRef.current = rows;
11785
11836
  }, [rows]);
11786
- useEffect8(() => {
11837
+ useEffect9(() => {
11787
11838
  onResourceItemMoveRef.current = onResourceItemMove;
11788
11839
  }, [onResourceItemMove]);
11789
11840
  const clearRaf = useCallback7(() => {
@@ -11798,7 +11849,7 @@ var useResourceItemDrag = ({
11798
11849
  activeDragRef.current = null;
11799
11850
  setPreview(null);
11800
11851
  }, [clearRaf]);
11801
- useEffect8(() => {
11852
+ useEffect9(() => {
11802
11853
  const handleMouseMove = (event) => {
11803
11854
  const activeDrag = activeDragRef.current;
11804
11855
  if (!activeDrag || rafRef.current !== null) {
@@ -11917,7 +11968,7 @@ var useResourceItemDrag = ({
11917
11968
  };
11918
11969
 
11919
11970
  // src/components/ResourceTimelineChart/ResourceTimelineChart.tsx
11920
- import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
11971
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
11921
11972
  var DEFAULT_DAY_WIDTH = 40;
11922
11973
  var DEFAULT_HEADER_HEIGHT = 40;
11923
11974
  var DEFAULT_LANE_HEIGHT = 40;
@@ -12081,40 +12132,40 @@ var orderResourcesByType = (resources) => {
12081
12132
  var ResourceTypeIcon = ({ type }) => {
12082
12133
  if (type === "\u041B\u044E\u0434\u0438") {
12083
12134
  return /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceTypeIcon gantt-resourceTimeline-resourceTypeIconPeople", width: "16", height: "16", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12084
- /* @__PURE__ */ jsx18("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
12085
- /* @__PURE__ */ jsx18("circle", { cx: "9", cy: "7", r: "4" }),
12086
- /* @__PURE__ */ jsx18("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
12087
- /* @__PURE__ */ jsx18("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
12135
+ /* @__PURE__ */ jsx19("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
12136
+ /* @__PURE__ */ jsx19("circle", { cx: "9", cy: "7", r: "4" }),
12137
+ /* @__PURE__ */ jsx19("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
12138
+ /* @__PURE__ */ jsx19("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
12088
12139
  ] });
12089
12140
  }
12090
12141
  if (type === "\u041E\u0431\u043E\u0440\u0443\u0434\u043E\u0432\u0430\u043D\u0438\u0435") {
12091
12142
  return /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceTypeIcon gantt-resourceTimeline-resourceTypeIconEquipment", width: "16", height: "16", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12092
- /* @__PURE__ */ jsx18("path", { d: "m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9" }),
12093
- /* @__PURE__ */ jsx18("path", { d: "m18 15 4-4" }),
12094
- /* @__PURE__ */ jsx18("path", { d: "m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5" })
12143
+ /* @__PURE__ */ jsx19("path", { d: "m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9" }),
12144
+ /* @__PURE__ */ jsx19("path", { d: "m18 15 4-4" }),
12145
+ /* @__PURE__ */ jsx19("path", { d: "m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5" })
12095
12146
  ] });
12096
12147
  }
12097
12148
  if (type === "\u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B") {
12098
12149
  return /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceTypeIcon gantt-resourceTimeline-resourceTypeIconMaterials", width: "16", height: "16", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12099
- /* @__PURE__ */ jsx18("path", { d: "M10 22v-8" }),
12100
- /* @__PURE__ */ jsx18("path", { d: "M2.336 8.89 10 14l11.715-7.029" }),
12101
- /* @__PURE__ */ jsx18("path", { d: "M22 14a2 2 0 0 1-.971 1.715l-10 6a2 2 0 0 1-2.138-.05l-6-4A2 2 0 0 1 2 16v-6a2 2 0 0 1 .971-1.715l10-6a2 2 0 0 1 2.138.05l6 4A2 2 0 0 1 22 8z" })
12150
+ /* @__PURE__ */ jsx19("path", { d: "M10 22v-8" }),
12151
+ /* @__PURE__ */ jsx19("path", { d: "M2.336 8.89 10 14l11.715-7.029" }),
12152
+ /* @__PURE__ */ jsx19("path", { d: "M22 14a2 2 0 0 1-.971 1.715l-10 6a2 2 0 0 1-2.138-.05l-6-4A2 2 0 0 1 2 16v-6a2 2 0 0 1 .971-1.715l10-6a2 2 0 0 1 2.138.05l6 4A2 2 0 0 1 22 8z" })
12102
12153
  ] });
12103
12154
  }
12104
12155
  return /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceTypeIcon gantt-resourceTimeline-resourceTypeIconOther", width: "16", height: "16", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12105
- /* @__PURE__ */ jsx18("circle", { cx: "12", cy: "12", r: "9" }),
12106
- /* @__PURE__ */ jsx18("path", { d: "M12 8v4" }),
12107
- /* @__PURE__ */ jsx18("path", { d: "M12 16h.01" })
12156
+ /* @__PURE__ */ jsx19("circle", { cx: "12", cy: "12", r: "9" }),
12157
+ /* @__PURE__ */ jsx19("path", { d: "M12 8v4" }),
12158
+ /* @__PURE__ */ jsx19("path", { d: "M12 16h.01" })
12108
12159
  ] });
12109
12160
  };
12110
- var ResourceTypeDropdownIcon = () => /* @__PURE__ */ jsx18("svg", { className: "gantt-resourceTimeline-resourceTypeDropdownIcon", width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: /* @__PURE__ */ jsx18("path", { d: "M2 3.5 5 6.5 8 3.5" }) });
12111
- var ResourceGroupChevronIcon = () => /* @__PURE__ */ jsx18("svg", { className: "gantt-resourceTimeline-resourceGroupChevronIcon", width: "12", height: "12", viewBox: "0 0 12 12", "aria-hidden": "true", children: /* @__PURE__ */ jsx18("path", { d: "M4 2.5 7.5 6 4 9.5" }) });
12161
+ var ResourceTypeDropdownIcon = () => /* @__PURE__ */ jsx19("svg", { className: "gantt-resourceTimeline-resourceTypeDropdownIcon", width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: /* @__PURE__ */ jsx19("path", { d: "M2 3.5 5 6.5 8 3.5" }) });
12162
+ var ResourceGroupChevronIcon = () => /* @__PURE__ */ jsx19("svg", { className: "gantt-resourceTimeline-resourceGroupChevronIcon", width: "12", height: "12", viewBox: "0 0 12 12", "aria-hidden": "true", children: /* @__PURE__ */ jsx19("path", { d: "M4 2.5 7.5 6 4 9.5" }) });
12112
12163
  function isInactiveResourceStatus(status) {
12113
12164
  return status?.trim().toLocaleLowerCase() === "inactive";
12114
12165
  }
12115
12166
  var ResourceStatusLockIcon = () => /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceStatusIcon", width: "12", height: "12", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12116
- /* @__PURE__ */ jsx18("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }),
12117
- /* @__PURE__ */ jsx18("path", { d: "M8 11V8a4 4 0 1 1 8 0v3" })
12167
+ /* @__PURE__ */ jsx19("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }),
12168
+ /* @__PURE__ */ jsx19("path", { d: "M8 11V8a4 4 0 1 1 8 0v3" })
12118
12169
  ] });
12119
12170
  var ResourceHeader = ({
12120
12171
  resource,
@@ -12138,7 +12189,7 @@ var ResourceHeader = ({
12138
12189
  const [nameValue, setNameValue] = useState10(resource.name);
12139
12190
  const nameInputRef = useRef10(null);
12140
12191
  const nameConfirmedRef = useRef10(false);
12141
- const visibleCommands = useMemo10(
12192
+ const visibleCommands = useMemo11(
12142
12193
  () => menuCommands.filter((command) => command.isVisible?.(resource) ?? true),
12143
12194
  [menuCommands, resource]
12144
12195
  );
@@ -12150,12 +12201,12 @@ var ResourceHeader = ({
12150
12201
  const applyResourcePatch = useCallback8((patch) => {
12151
12202
  onResourceChange?.({ ...resource, ...patch });
12152
12203
  }, [onResourceChange, resource]);
12153
- useEffect9(() => {
12204
+ useEffect10(() => {
12154
12205
  if (!editingName) {
12155
12206
  setNameValue(resource.name);
12156
12207
  }
12157
12208
  }, [editingName, resource.name]);
12158
- useEffect9(() => {
12209
+ useEffect10(() => {
12159
12210
  if (editingName && nameInputRef.current) {
12160
12211
  nameInputRef.current.focus();
12161
12212
  nameInputRef.current.select();
@@ -12215,10 +12266,10 @@ var ResourceHeader = ({
12215
12266
  gridTemplateColumns: columnTemplate
12216
12267
  },
12217
12268
  children: [
12218
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceNumber", children: rowIndex + 1 }),
12269
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceNumber", children: rowIndex + 1 }),
12219
12270
  /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceName", children: [
12220
12271
  /* @__PURE__ */ jsxs13(Popover, { open: typeMenuOpen, onOpenChange: setTypeMenuOpen, children: [
12221
- /* @__PURE__ */ jsx18(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs13(
12272
+ /* @__PURE__ */ jsx19(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs13(
12222
12273
  "button",
12223
12274
  {
12224
12275
  type: "button",
@@ -12231,12 +12282,12 @@ var ResourceHeader = ({
12231
12282
  setTypeMenuOpen((open) => !open);
12232
12283
  },
12233
12284
  children: [
12234
- /* @__PURE__ */ jsx18(ResourceTypeIcon, { type }),
12235
- /* @__PURE__ */ jsx18(ResourceTypeDropdownIcon, {})
12285
+ /* @__PURE__ */ jsx19(ResourceTypeIcon, { type }),
12286
+ /* @__PURE__ */ jsx19(ResourceTypeDropdownIcon, {})
12236
12287
  ]
12237
12288
  }
12238
12289
  ) }),
12239
- /* @__PURE__ */ jsx18(PopoverContent, { className: "gantt-resourceTimeline-resourceOptionMenu", portal: true, align: "start", children: RESOURCE_TYPE_OPTIONS.map((option) => /* @__PURE__ */ jsxs13(
12290
+ /* @__PURE__ */ jsx19(PopoverContent, { className: "gantt-resourceTimeline-resourceOptionMenu", portal: true, align: "start", children: RESOURCE_TYPE_OPTIONS.map((option) => /* @__PURE__ */ jsxs13(
12240
12291
  "button",
12241
12292
  {
12242
12293
  type: "button",
@@ -12247,14 +12298,14 @@ var ResourceHeader = ({
12247
12298
  applyResourcePatch({ type: option });
12248
12299
  },
12249
12300
  children: [
12250
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceOptionIcon", children: /* @__PURE__ */ jsx18(ResourceTypeIcon, { type: option }) }),
12301
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceOptionIcon", children: /* @__PURE__ */ jsx19(ResourceTypeIcon, { type: option }) }),
12251
12302
  option
12252
12303
  ]
12253
12304
  },
12254
12305
  option
12255
12306
  )) })
12256
12307
  ] }),
12257
- editingName ? /* @__PURE__ */ jsx18(
12308
+ editingName ? /* @__PURE__ */ jsx19(
12258
12309
  Input,
12259
12310
  {
12260
12311
  ref: nameInputRef,
@@ -12266,7 +12317,7 @@ var ResourceHeader = ({
12266
12317
  "aria-label": `\u041D\u043E\u0432\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 ${resource.name}`,
12267
12318
  className: "gantt-tl-name-input gantt-resourceTimeline-resourceNameInput"
12268
12319
  }
12269
- ) : /* @__PURE__ */ jsx18(
12320
+ ) : /* @__PURE__ */ jsx19(
12270
12321
  "button",
12271
12322
  {
12272
12323
  type: "button",
@@ -12279,22 +12330,22 @@ var ResourceHeader = ({
12279
12330
  },
12280
12331
  onDoubleClick: handleNameDoubleClick,
12281
12332
  children: /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceNameContent", children: [
12282
- isInactive && /* @__PURE__ */ jsx18(
12333
+ isInactive && /* @__PURE__ */ jsx19(
12283
12334
  "span",
12284
12335
  {
12285
12336
  className: "gantt-resourceTimeline-resourceStatusMarker",
12286
12337
  "aria-label": `\u0420\u0435\u0441\u0443\u0440\u0441 ${resource.name} \u043D\u0435\u0430\u043A\u0442\u0438\u0432\u0435\u043D`,
12287
12338
  title: "\u041D\u0435\u0430\u043A\u0442\u0438\u0432\u0435\u043D",
12288
- children: /* @__PURE__ */ jsx18(ResourceStatusLockIcon, {})
12339
+ children: /* @__PURE__ */ jsx19(ResourceStatusLockIcon, {})
12289
12340
  }
12290
12341
  ),
12291
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceNameText", children: resource.name })
12342
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceNameText", children: resource.name })
12292
12343
  ] })
12293
12344
  }
12294
12345
  )
12295
12346
  ] }),
12296
12347
  /* @__PURE__ */ jsxs13(Popover, { open: scopeMenuOpen, onOpenChange: setScopeMenuOpen, children: [
12297
- /* @__PURE__ */ jsx18(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx18(
12348
+ /* @__PURE__ */ jsx19(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx19(
12298
12349
  "button",
12299
12350
  {
12300
12351
  type: "button",
@@ -12305,10 +12356,10 @@ var ResourceHeader = ({
12305
12356
  event.stopPropagation();
12306
12357
  setScopeMenuOpen((open) => !open);
12307
12358
  },
12308
- children: /* @__PURE__ */ jsx18("span", { children: scopeLabel })
12359
+ children: /* @__PURE__ */ jsx19("span", { children: scopeLabel })
12309
12360
  }
12310
12361
  ) }),
12311
- /* @__PURE__ */ jsx18(PopoverContent, { className: "gantt-resourceTimeline-resourceOptionMenu", portal: true, align: "start", children: RESOURCE_SCOPE_OPTIONS.map((option) => /* @__PURE__ */ jsxs13(
12362
+ /* @__PURE__ */ jsx19(PopoverContent, { className: "gantt-resourceTimeline-resourceOptionMenu", portal: true, align: "start", children: RESOURCE_SCOPE_OPTIONS.map((option) => /* @__PURE__ */ jsxs13(
12312
12363
  "button",
12313
12364
  {
12314
12365
  type: "button",
@@ -12319,7 +12370,7 @@ var ResourceHeader = ({
12319
12370
  applyResourcePatch({ scope: option });
12320
12371
  },
12321
12372
  children: [
12322
- /* @__PURE__ */ jsx18("span", { className: `gantt-resourceTimeline-resourceOptionScopeDot gantt-resourceTimeline-resourceScope${option}` }),
12373
+ /* @__PURE__ */ jsx19("span", { className: `gantt-resourceTimeline-resourceOptionScopeDot gantt-resourceTimeline-resourceScope${option}` }),
12323
12374
  RESOURCE_SCOPE_LABELS[option] ?? option
12324
12375
  ]
12325
12376
  },
@@ -12333,21 +12384,21 @@ var ResourceHeader = ({
12333
12384
  "aria-label": `\u041D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0440\u0435\u0441\u0443\u0440\u0441\u0430 ${resource.name}: ${assignmentCount}, ${workedDays} \u0434\u043D.`,
12334
12385
  children: [
12335
12386
  /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceWorkedDays", children: [
12336
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceMetricValue", children: workedDays > 0 ? workedDays : "-" }),
12337
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceMetricLabel", children: workedDays > 0 ? "\u0434\u043D." : "" })
12387
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceMetricValue", children: workedDays > 0 ? workedDays : "-" }),
12388
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceMetricLabel", children: workedDays > 0 ? "\u0434\u043D." : "" })
12338
12389
  ] }),
12339
12390
  /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceAssignmentCount", children: [
12340
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceMetricValue", children: assignmentCount > 0 ? assignmentCount : "" }),
12391
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceMetricValue", children: assignmentCount > 0 ? assignmentCount : "" }),
12341
12392
  assignmentCount > 0 && /* @__PURE__ */ jsxs13("svg", { className: "gantt-resourceTimeline-resourceAssignmentIcon", width: "14", height: "14", viewBox: "0 0 24 24", "aria-hidden": "true", children: [
12342
- /* @__PURE__ */ jsx18("rect", { width: "15", height: "5", x: "4", y: "5", rx: "2" }),
12343
- /* @__PURE__ */ jsx18("rect", { width: "10", height: "5", x: "4", y: "14", rx: "2" })
12393
+ /* @__PURE__ */ jsx19("rect", { width: "15", height: "5", x: "4", y: "5", rx: "2" }),
12394
+ /* @__PURE__ */ jsx19("rect", { width: "10", height: "5", x: "4", y: "14", rx: "2" })
12344
12395
  ] })
12345
12396
  ] })
12346
12397
  ]
12347
12398
  }
12348
12399
  ),
12349
12400
  /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceActions", children: [
12350
- conflictCount > 0 && /* @__PURE__ */ jsx18(
12401
+ conflictCount > 0 && /* @__PURE__ */ jsx19(
12351
12402
  "button",
12352
12403
  {
12353
12404
  type: "button",
@@ -12362,7 +12413,7 @@ var ResourceHeader = ({
12362
12413
  }
12363
12414
  ),
12364
12415
  hasMenu && /* @__PURE__ */ jsxs13(Popover, { open: menuOpen, onOpenChange: setMenuOpen, children: [
12365
- /* @__PURE__ */ jsx18(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx18(
12416
+ /* @__PURE__ */ jsx19(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx19(
12366
12417
  "button",
12367
12418
  {
12368
12419
  className: "gantt-resourceTimeline-resourceMenuButton",
@@ -12372,10 +12423,10 @@ var ResourceHeader = ({
12372
12423
  event.stopPropagation();
12373
12424
  setMenuOpen((open) => !open);
12374
12425
  },
12375
- children: /* @__PURE__ */ jsx18("span", { "aria-hidden": "true", children: "\u22EE" })
12426
+ children: /* @__PURE__ */ jsx19("span", { "aria-hidden": "true", children: "\u22EE" })
12376
12427
  }
12377
12428
  ) }),
12378
- /* @__PURE__ */ jsx18(PopoverContent, { className: "gantt-resourceTimeline-resourceMenu", portal: true, align: "end", children: visibleCommands.map((command) => /* @__PURE__ */ jsxs13(
12429
+ /* @__PURE__ */ jsx19(PopoverContent, { className: "gantt-resourceTimeline-resourceMenu", portal: true, align: "end", children: visibleCommands.map((command) => /* @__PURE__ */ jsxs13(
12379
12430
  "button",
12380
12431
  {
12381
12432
  type: "button",
@@ -12399,7 +12450,7 @@ var NewResourceRow = ({ height, onConfirm, onCancel, columnTemplate }) => {
12399
12450
  const [nameValue, setNameValue] = useState10("");
12400
12451
  const inputRef = useRef10(null);
12401
12452
  const confirmedRef = useRef10(false);
12402
- useEffect9(() => {
12453
+ useEffect10(() => {
12403
12454
  inputRef.current?.focus();
12404
12455
  inputRef.current?.select();
12405
12456
  }, []);
@@ -12438,8 +12489,8 @@ var NewResourceRow = ({ height, onConfirm, onCancel, columnTemplate }) => {
12438
12489
  gridTemplateColumns: columnTemplate
12439
12490
  },
12440
12491
  children: [
12441
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceNumber", children: "+" }),
12442
- /* @__PURE__ */ jsx18(
12492
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceNumber", children: "+" }),
12493
+ /* @__PURE__ */ jsx19(
12443
12494
  Input,
12444
12495
  {
12445
12496
  ref: inputRef,
@@ -12496,21 +12547,21 @@ function ResourceTimelineChart({
12496
12547
  const [activeConflictItemId, setActiveConflictItemId] = useState10(null);
12497
12548
  const [resourceColumnHasRightShadow, setResourceColumnHasRightShadow] = useState10(false);
12498
12549
  const [resourceColumnWidthOverrides, setResourceColumnWidthOverrides] = useState10(() => normalizeResourceColumnWidthMap(resourceTableColumnWidths));
12499
- const validItems = useMemo10(() => collectValidItems(resources), [resources]);
12500
- const dateRange = useMemo10(() => getMultiMonthDays(validItems), [validItems]);
12501
- const monthStart = useMemo10(() => {
12550
+ const validItems = useMemo11(() => collectValidItems(resources), [resources]);
12551
+ const dateRange = useMemo11(() => getMultiMonthDays(validItems), [validItems]);
12552
+ const monthStart = useMemo11(() => {
12502
12553
  const firstDay = dateRange[0] ?? /* @__PURE__ */ new Date();
12503
12554
  return new Date(Date.UTC(firstDay.getUTCFullYear(), firstDay.getUTCMonth(), 1));
12504
12555
  }, [dateRange]);
12505
- const weekendPredicate = useMemo10(
12556
+ const weekendPredicate = useMemo11(
12506
12557
  () => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
12507
12558
  [customDays, isWeekend3]
12508
12559
  );
12509
- const gridWidth = useMemo10(() => Math.round(dateRange.length * dayWidth), [dateRange.length, dayWidth]);
12510
- useEffect9(() => {
12560
+ const gridWidth = useMemo11(() => Math.round(dateRange.length * dayWidth), [dateRange.length, dayWidth]);
12561
+ useEffect10(() => {
12511
12562
  setResourceColumnWidthOverrides(normalizeResourceColumnWidthMap(resourceTableColumnWidths));
12512
12563
  }, [resourceTableColumnWidths]);
12513
- const resolvedResourceColumnWidths = useMemo10(
12564
+ const resolvedResourceColumnWidths = useMemo11(
12514
12565
  () => ({
12515
12566
  number: getResourceColumnWidth("number", resourceColumnWidthOverrides),
12516
12567
  name: getResourceColumnWidth("name", resourceColumnWidthOverrides),
@@ -12520,20 +12571,20 @@ function ResourceTimelineChart({
12520
12571
  }),
12521
12572
  [resourceColumnWidthOverrides]
12522
12573
  );
12523
- const resourceColumnTemplate = useMemo10(
12574
+ const resourceColumnTemplate = useMemo11(
12524
12575
  () => `${resolvedResourceColumnWidths.number}px minmax(${resolvedResourceColumnWidths.name}px, 1fr) ${resolvedResourceColumnWidths.availability}px ${resolvedResourceColumnWidths.assignments}px ${resolvedResourceColumnWidths.actions}px`,
12525
12576
  [resolvedResourceColumnWidths]
12526
12577
  );
12527
- const resolvedResourceColumnWidthTotal = useMemo10(
12578
+ const resolvedResourceColumnWidthTotal = useMemo11(
12528
12579
  () => Object.values(resolvedResourceColumnWidths).reduce((sum, width) => sum + width, 0),
12529
12580
  [resolvedResourceColumnWidths]
12530
12581
  );
12531
12582
  const effectiveRowHeaderWidth = Math.max(rowHeaderWidth, DEFAULT_ROW_HEADER_WIDTH, resolvedResourceColumnWidthTotal);
12532
- const orderedResources = useMemo10(
12583
+ const orderedResources = useMemo11(
12533
12584
  () => resourceGrouping === "type" ? orderResourcesByType(resources) : resources,
12534
12585
  [resourceGrouping, resources]
12535
12586
  );
12536
- const workedDaysByResourceId = useMemo10(() => {
12587
+ const workedDaysByResourceId = useMemo11(() => {
12537
12588
  const map = /* @__PURE__ */ new Map();
12538
12589
  for (const resource of resources) {
12539
12590
  const workedDays = resource.items.reduce((sum, item) => {
@@ -12552,7 +12603,7 @@ function ResourceTimelineChart({
12552
12603
  }
12553
12604
  return map;
12554
12605
  }, [businessDays, resources, weekendPredicate]);
12555
- const layout = useMemo10(
12606
+ const layout = useMemo11(
12556
12607
  () => layoutResourceTimelineItems(orderedResources, {
12557
12608
  monthStart,
12558
12609
  dayWidth,
@@ -12574,7 +12625,7 @@ function ResourceTimelineChart({
12574
12625
  return next;
12575
12626
  });
12576
12627
  }, [onResourceTableColumnWidthsChange]);
12577
- useEffect9(() => {
12628
+ useEffect10(() => {
12578
12629
  const handleMouseMove = (event) => {
12579
12630
  const resizeState = resourceColumnResizeRef.current;
12580
12631
  if (!resizeState) {
@@ -12618,7 +12669,7 @@ function ResourceTimelineChart({
12618
12669
  document.body.style.cursor = "col-resize";
12619
12670
  document.body.style.userSelect = "none";
12620
12671
  }, [resolvedResourceColumnWidths]);
12621
- const renderResizeHandle = useCallback8((columnId) => /* @__PURE__ */ jsx18(
12672
+ const renderResizeHandle = useCallback8((columnId) => /* @__PURE__ */ jsx19(
12622
12673
  "button",
12623
12674
  {
12624
12675
  type: "button",
@@ -12643,7 +12694,7 @@ function ResourceTimelineChart({
12643
12694
  return next;
12644
12695
  });
12645
12696
  }, []);
12646
- const displayLayout = useMemo10(() => {
12697
+ const displayLayout = useMemo11(() => {
12647
12698
  if (resourceGrouping !== "type") {
12648
12699
  return {
12649
12700
  rows: layout.rows,
@@ -12726,11 +12777,11 @@ function ResourceTimelineChart({
12726
12777
  totalHeight: currentTop
12727
12778
  };
12728
12779
  }, [collapsedResourceGroups, creatingResourceGroupType, layout, resourceAddRowHeight, resourceGrouping]);
12729
- const todayInRange = useMemo10(() => {
12780
+ const todayInRange = useMemo11(() => {
12730
12781
  const today = getTodayLocalUtcDate();
12731
12782
  return dateRange.some((day) => day.getTime() === today.getTime());
12732
12783
  }, [dateRange]);
12733
- const itemsByResourceId = useMemo10(() => {
12784
+ const itemsByResourceId = useMemo11(() => {
12734
12785
  const map = /* @__PURE__ */ new Map();
12735
12786
  for (const item of displayLayout.items) {
12736
12787
  const next = map.get(item.resourceId) ?? [];
@@ -12739,7 +12790,7 @@ function ResourceTimelineChart({
12739
12790
  }
12740
12791
  return map;
12741
12792
  }, [displayLayout.items]);
12742
- const conflictItemsByResourceId = useMemo10(() => {
12793
+ const conflictItemsByResourceId = useMemo11(() => {
12743
12794
  const map = /* @__PURE__ */ new Map();
12744
12795
  for (const item of displayLayout.items) {
12745
12796
  if (item.conflictRanges.length === 0) {
@@ -12843,7 +12894,7 @@ function ResourceTimelineChart({
12843
12894
  weekendPredicate,
12844
12895
  onResourceItemMove
12845
12896
  });
12846
- useEffect9(() => {
12897
+ useEffect10(() => {
12847
12898
  const container = scrollContainerRef.current;
12848
12899
  if (!container) return;
12849
12900
  const updateShadow = () => {
@@ -12883,7 +12934,7 @@ function ResourceTimelineChart({
12883
12934
  container.style.cursor = "grabbing";
12884
12935
  event.preventDefault();
12885
12936
  }, []);
12886
- useEffect9(() => {
12937
+ useEffect10(() => {
12887
12938
  const handlePanMove = (event) => {
12888
12939
  const pan = panStateRef.current;
12889
12940
  const container = scrollContainerRef.current;
@@ -12912,7 +12963,7 @@ function ResourceTimelineChart({
12912
12963
  window.removeEventListener("mouseup", handlePanEnd);
12913
12964
  };
12914
12965
  }, [allowVerticalPan]);
12915
- useEffect9(() => {
12966
+ useEffect10(() => {
12916
12967
  const nextNavigation = /* @__PURE__ */ new Map();
12917
12968
  for (const [resourceId, resourceItems] of itemsByResourceId.entries()) {
12918
12969
  if (resourceItems.length === 0) {
@@ -12922,14 +12973,14 @@ function ResourceTimelineChart({
12922
12973
  }
12923
12974
  resourceNavigationIndexRef.current = nextNavigation;
12924
12975
  }, [itemsByResourceId]);
12925
- useEffect9(() => {
12976
+ useEffect10(() => {
12926
12977
  return () => {
12927
12978
  if (conflictHighlightTimeoutRef.current) {
12928
12979
  window.clearTimeout(conflictHighlightTimeoutRef.current);
12929
12980
  }
12930
12981
  };
12931
12982
  }, []);
12932
- return /* @__PURE__ */ jsx18("div", { className: "gantt-container gantt-resourceTimeline", children: /* @__PURE__ */ jsx18(
12983
+ return /* @__PURE__ */ jsx19("div", { className: "gantt-container gantt-resourceTimeline", children: /* @__PURE__ */ jsx19(
12933
12984
  "div",
12934
12985
  {
12935
12986
  ref: scrollContainerRef,
@@ -12961,23 +13012,23 @@ function ResourceTimelineChart({
12961
13012
  "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435",
12962
13013
  renderResizeHandle("name")
12963
13014
  ] }),
12964
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceHeaderCell", "aria-label": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0441\u0442\u044C", children: renderResizeHandle("availability") }),
13015
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceHeaderCell", "aria-label": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0441\u0442\u044C", children: renderResizeHandle("availability") }),
12965
13016
  /* @__PURE__ */ jsxs13("span", { className: "gantt-resourceTimeline-resourceHeaderCell", children: [
12966
13017
  "\u041D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F",
12967
13018
  renderResizeHandle("assignments")
12968
13019
  ] }),
12969
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceHeaderCell gantt-resourceTimeline-resourceHeaderActions", "aria-label": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F", children: renderResizeHandle("actions") })
13020
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceHeaderCell gantt-resourceTimeline-resourceHeaderActions", "aria-label": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F", children: renderResizeHandle("actions") })
12970
13021
  ]
12971
13022
  }
12972
13023
  ),
12973
- displayLayout.groupHeaders.length > 0 ? displayLayout.groupHeaders.map((group) => /* @__PURE__ */ jsxs13(React14.Fragment, { children: [
13024
+ displayLayout.groupHeaders.length > 0 ? displayLayout.groupHeaders.map((group) => /* @__PURE__ */ jsxs13(React15.Fragment, { children: [
12974
13025
  /* @__PURE__ */ jsxs13(
12975
13026
  "div",
12976
13027
  {
12977
13028
  className: "gantt-resourceTimeline-resourceGroupHeader",
12978
13029
  style: { height: `${group.height}px` },
12979
13030
  children: [
12980
- /* @__PURE__ */ jsx18(
13031
+ /* @__PURE__ */ jsx19(
12981
13032
  "button",
12982
13033
  {
12983
13034
  type: "button",
@@ -12988,12 +13039,12 @@ function ResourceTimelineChart({
12988
13039
  event.stopPropagation();
12989
13040
  toggleResourceGroupCollapsed(group.key);
12990
13041
  },
12991
- children: /* @__PURE__ */ jsx18(ResourceGroupChevronIcon, {})
13042
+ children: /* @__PURE__ */ jsx19(ResourceGroupChevronIcon, {})
12992
13043
  }
12993
13044
  ),
12994
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceGroupTitle", children: group.label }),
12995
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resourceGroupCount", children: group.count }),
12996
- canAddResource && /* @__PURE__ */ jsx18(
13045
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceGroupTitle", children: group.label }),
13046
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resourceGroupCount", children: group.count }),
13047
+ canAddResource && /* @__PURE__ */ jsx19(
12997
13048
  "button",
12998
13049
  {
12999
13050
  type: "button",
@@ -13012,7 +13063,7 @@ function ResourceTimelineChart({
13012
13063
  ),
13013
13064
  displayLayout.rows.filter((row) => getResourceType(row.resource) === group.key).map((row) => {
13014
13065
  const rowIndex = displayLayout.rows.findIndex((candidate) => candidate.resourceId === row.resourceId);
13015
- return /* @__PURE__ */ jsx18(
13066
+ return /* @__PURE__ */ jsx19(
13016
13067
  ResourceHeader,
13017
13068
  {
13018
13069
  resource: row.resource,
@@ -13032,7 +13083,7 @@ function ResourceTimelineChart({
13032
13083
  row.resourceId
13033
13084
  );
13034
13085
  }),
13035
- displayLayout.groupAddRows.some((row) => row.key === group.key) && /* @__PURE__ */ jsx18(
13086
+ displayLayout.groupAddRows.some((row) => row.key === group.key) && /* @__PURE__ */ jsx19(
13036
13087
  NewResourceRow,
13037
13088
  {
13038
13089
  height: resourceAddRowHeight,
@@ -13041,7 +13092,7 @@ function ResourceTimelineChart({
13041
13092
  columnTemplate: resourceColumnTemplate
13042
13093
  }
13043
13094
  )
13044
- ] }, group.key)) : displayLayout.rows.map((row, rowIndex) => /* @__PURE__ */ jsx18(
13095
+ ] }, group.key)) : displayLayout.rows.map((row, rowIndex) => /* @__PURE__ */ jsx19(
13045
13096
  ResourceHeader,
13046
13097
  {
13047
13098
  resource: row.resource,
@@ -13060,7 +13111,7 @@ function ResourceTimelineChart({
13060
13111
  },
13061
13112
  row.resourceId
13062
13113
  )),
13063
- canAddResource && (isCreatingResource ? /* @__PURE__ */ jsx18(
13114
+ canAddResource && (isCreatingResource ? /* @__PURE__ */ jsx19(
13064
13115
  NewResourceRow,
13065
13116
  {
13066
13117
  height: resourceAddRowHeight,
@@ -13068,7 +13119,7 @@ function ResourceTimelineChart({
13068
13119
  onCancel: handleCancelNewResource,
13069
13120
  columnTemplate: resourceColumnTemplate
13070
13121
  }
13071
- ) : /* @__PURE__ */ jsx18(
13122
+ ) : /* @__PURE__ */ jsx19(
13072
13123
  "button",
13073
13124
  {
13074
13125
  className: "gantt-resourceTimeline-addResourceButton",
@@ -13090,12 +13141,12 @@ function ResourceTimelineChart({
13090
13141
  className: "gantt-resourceTimeline-chartSurface",
13091
13142
  style: { minWidth: `${gridWidth}px` },
13092
13143
  children: [
13093
- /* @__PURE__ */ jsx18(
13144
+ /* @__PURE__ */ jsx19(
13094
13145
  "div",
13095
13146
  {
13096
13147
  className: "gantt-resourceTimeline-stickyHeader",
13097
13148
  style: { width: `${gridWidth}px`, height: `${timelineHeaderHeight}px` },
13098
- children: /* @__PURE__ */ jsx18(
13149
+ children: /* @__PURE__ */ jsx19(
13099
13150
  TimeScaleHeader_default,
13100
13151
  {
13101
13152
  days: dateRange,
@@ -13114,7 +13165,7 @@ function ResourceTimelineChart({
13114
13165
  className: "gantt-resourceTimeline-grid",
13115
13166
  style: { width: `${gridWidth}px`, height: `${displayTotalHeight}px` },
13116
13167
  children: [
13117
- /* @__PURE__ */ jsx18(
13168
+ /* @__PURE__ */ jsx19(
13118
13169
  GridBackground_default,
13119
13170
  {
13120
13171
  dateRange,
@@ -13124,8 +13175,8 @@ function ResourceTimelineChart({
13124
13175
  isCustomWeekend: weekendPredicate
13125
13176
  }
13126
13177
  ),
13127
- todayInRange && /* @__PURE__ */ jsx18(TodayIndicator_default, { monthStart, dayWidth }),
13128
- displayLayout.groupHeaders.map((group) => /* @__PURE__ */ jsx18(
13178
+ todayInRange && /* @__PURE__ */ jsx19(TodayIndicator_default, { monthStart, dayWidth }),
13179
+ displayLayout.groupHeaders.map((group) => /* @__PURE__ */ jsx19(
13129
13180
  "div",
13130
13181
  {
13131
13182
  className: "gantt-resourceTimeline-row gantt-resourceTimeline-groupRow",
@@ -13137,7 +13188,7 @@ function ResourceTimelineChart({
13137
13188
  },
13138
13189
  `group-row-${group.key}`
13139
13190
  )),
13140
- displayLayout.rows.map((row) => /* @__PURE__ */ jsx18(
13191
+ displayLayout.rows.map((row) => /* @__PURE__ */ jsx19(
13141
13192
  "div",
13142
13193
  {
13143
13194
  className: "gantt-resourceTimeline-row",
@@ -13149,7 +13200,7 @@ function ResourceTimelineChart({
13149
13200
  },
13150
13201
  row.resourceId
13151
13202
  )),
13152
- canAddResource && /* @__PURE__ */ jsx18(
13203
+ canAddResource && /* @__PURE__ */ jsx19(
13153
13204
  "div",
13154
13205
  {
13155
13206
  className: "gantt-resourceTimeline-row gantt-resourceTimeline-rowNew",
@@ -13160,7 +13211,7 @@ function ResourceTimelineChart({
13160
13211
  }
13161
13212
  }
13162
13213
  ),
13163
- displayLayout.groupAddRows.map((row) => /* @__PURE__ */ jsx18(
13214
+ displayLayout.groupAddRows.map((row) => /* @__PURE__ */ jsx19(
13164
13215
  "div",
13165
13216
  {
13166
13217
  className: "gantt-resourceTimeline-row gantt-resourceTimeline-rowNew",
@@ -13260,10 +13311,10 @@ function ResourceTimelineChart({
13260
13311
  },
13261
13312
  children: [
13262
13313
  !readonly && !layoutItem.item.locked && /* @__PURE__ */ jsxs13(Fragment5, { children: [
13263
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resizeHandle gantt-resourceTimeline-resizeHandleStart" }),
13264
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-resizeHandle gantt-resourceTimeline-resizeHandleEnd" })
13314
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resizeHandle gantt-resourceTimeline-resizeHandleStart" }),
13315
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-resizeHandle gantt-resourceTimeline-resizeHandleEnd" })
13265
13316
  ] }),
13266
- weekendOverlaySegments.map((segment, index) => /* @__PURE__ */ jsx18(
13317
+ weekendOverlaySegments.map((segment, index) => /* @__PURE__ */ jsx19(
13267
13318
  "span",
13268
13319
  {
13269
13320
  className: "gantt-resourceTimeline-weekendOverlay",
@@ -13275,7 +13326,7 @@ function ResourceTimelineChart({
13275
13326
  },
13276
13327
  `weekend-overlay-${index}`
13277
13328
  )),
13278
- conflictOverlaySegments.map((segment, index) => /* @__PURE__ */ jsx18(
13329
+ conflictOverlaySegments.map((segment, index) => /* @__PURE__ */ jsx19(
13279
13330
  "span",
13280
13331
  {
13281
13332
  className: "gantt-resourceTimeline-conflictOverlay",
@@ -13287,7 +13338,7 @@ function ResourceTimelineChart({
13287
13338
  },
13288
13339
  `conflict-overlay-${index}`
13289
13340
  )),
13290
- hasItemMenu && /* @__PURE__ */ jsx18(
13341
+ hasItemMenu && /* @__PURE__ */ jsx19(
13291
13342
  "button",
13292
13343
  {
13293
13344
  type: "button",
@@ -13300,12 +13351,12 @@ function ResourceTimelineChart({
13300
13351
  event.stopPropagation();
13301
13352
  onResourceItemMenuClick?.(layoutItem.item);
13302
13353
  },
13303
- children: /* @__PURE__ */ jsx18("span", { "aria-hidden": "true", children: "\u22EE" })
13354
+ children: /* @__PURE__ */ jsx19("span", { "aria-hidden": "true", children: "\u22EE" })
13304
13355
  }
13305
13356
  ),
13306
- /* @__PURE__ */ jsx18("div", { className: "gantt-resourceTimeline-itemInner", children: renderItem ? renderItem(layoutItem.item, renderContext) : /* @__PURE__ */ jsxs13("div", { className: "gantt-resourceTimeline-defaultItemContent", children: [
13357
+ /* @__PURE__ */ jsx19("div", { className: "gantt-resourceTimeline-itemInner", children: renderItem ? renderItem(layoutItem.item, renderContext) : /* @__PURE__ */ jsxs13("div", { className: "gantt-resourceTimeline-defaultItemContent", children: [
13307
13358
  /* @__PURE__ */ jsxs13("div", { className: "gantt-resourceTimeline-defaultItemMain", children: [
13308
- /* @__PURE__ */ jsx18(
13359
+ /* @__PURE__ */ jsx19(
13309
13360
  "span",
13310
13361
  {
13311
13362
  className: "gantt-resourceTimeline-itemDurationChip",
@@ -13313,15 +13364,15 @@ function ResourceTimelineChart({
13313
13364
  children: durationValue
13314
13365
  }
13315
13366
  ),
13316
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-itemTitle", children: layoutItem.item.title })
13367
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-itemTitle", children: layoutItem.item.title })
13317
13368
  ] }),
13318
- layoutItem.item.subtitle && /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-itemSubtitle", children: layoutItem.item.subtitle })
13369
+ layoutItem.item.subtitle && /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-itemSubtitle", children: layoutItem.item.subtitle })
13319
13370
  ] }) }),
13320
13371
  /* @__PURE__ */ jsxs13("div", { className: "gantt-resourceTimeline-itemTooltip", role: "tooltip", children: [
13321
- /* @__PURE__ */ jsx18("div", { className: "gantt-resourceTimeline-itemTooltipLine gantt-resourceTimeline-itemTooltipLinePrimary", children: tooltipFirstLine }),
13372
+ /* @__PURE__ */ jsx19("div", { className: "gantt-resourceTimeline-itemTooltipLine gantt-resourceTimeline-itemTooltipLinePrimary", children: tooltipFirstLine }),
13322
13373
  tooltipSecondLine && /* @__PURE__ */ jsxs13("div", { className: "gantt-resourceTimeline-itemTooltipLine gantt-resourceTimeline-itemTooltipLineSecondary", children: [
13323
- tooltipSecondLineIcon && /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-itemTooltipIcon", "aria-hidden": "true", children: tooltipSecondLineIcon }),
13324
- /* @__PURE__ */ jsx18("span", { className: "gantt-resourceTimeline-itemTooltipText", children: tooltipSecondLine })
13374
+ tooltipSecondLineIcon && /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-itemTooltipIcon", "aria-hidden": "true", children: tooltipSecondLineIcon }),
13375
+ /* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-itemTooltipText", children: tooltipSecondLine })
13325
13376
  ] })
13326
13377
  ] })
13327
13378
  ]
@@ -13342,8 +13393,8 @@ function ResourceTimelineChart({
13342
13393
  }
13343
13394
 
13344
13395
  // src/components/TableMatrix/TableMatrix.tsx
13345
- import { useLayoutEffect, useMemo as useMemo11, useRef as useRef11, useState as useState11 } from "react";
13346
- import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
13396
+ import { useLayoutEffect, useMemo as useMemo12, useRef as useRef11, useState as useState11 } from "react";
13397
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
13347
13398
  var AUTO_COLUMN_MIN_WIDTH = 72;
13348
13399
  var AUTO_COLUMN_MAX_WIDTH = 180;
13349
13400
  var DAY_MS5 = 24 * 60 * 60 * 1e3;
@@ -13411,7 +13462,7 @@ function TableMatrix({
13411
13462
  }) {
13412
13463
  const measureRef = useRef11(null);
13413
13464
  const [measuredAutoWidths, setMeasuredAutoWidths] = useState11([]);
13414
- const hasAutoWidthColumns = useMemo11(
13465
+ const hasAutoWidthColumns = useMemo12(
13415
13466
  () => columns.some((column) => typeof column.width !== "number"),
13416
13467
  [columns]
13417
13468
  );
@@ -13442,7 +13493,7 @@ function TableMatrix({
13442
13493
  return changed ? nextWidths : previousWidths;
13443
13494
  });
13444
13495
  }, [columns, hasAutoWidthColumns, tasks]);
13445
- const resolvedColumnWidths = useMemo11(
13496
+ const resolvedColumnWidths = useMemo12(
13446
13497
  () => columns.map((column, index) => {
13447
13498
  if (typeof column.width === "number") return column.width;
13448
13499
  const minWidth = getAutoMinWidth(column);
@@ -13451,27 +13502,27 @@ function TableMatrix({
13451
13502
  }),
13452
13503
  [columns, measuredAutoWidths]
13453
13504
  );
13454
- const gridTemplateColumns = useMemo11(
13505
+ const gridTemplateColumns = useMemo12(
13455
13506
  () => resolvedColumnWidths.map((width) => `${width}px`).join(" "),
13456
13507
  [resolvedColumnWidths]
13457
13508
  );
13458
- const totalWidth = useMemo11(
13509
+ const totalWidth = useMemo12(
13459
13510
  () => resolvedColumnWidths.reduce((sum, width) => sum + width, 0),
13460
13511
  [resolvedColumnWidths]
13461
13512
  );
13462
- const overlayDateMs = useMemo11(
13513
+ const overlayDateMs = useMemo12(
13463
13514
  () => dateOverlay ? parseDateOnlyMs(dateOverlay.date) : null,
13464
13515
  [dateOverlay]
13465
13516
  );
13466
- const hasGroupHeader = useMemo11(
13517
+ const hasGroupHeader = useMemo12(
13467
13518
  () => columns.some((column) => !!column.groupId) || (columnGroups?.length ?? 0) > 0,
13468
13519
  [columnGroups, columns]
13469
13520
  );
13470
- const groupMap = useMemo11(
13521
+ const groupMap = useMemo12(
13471
13522
  () => new Map((columnGroups ?? []).map((group) => [group.id, group])),
13472
13523
  [columnGroups]
13473
13524
  );
13474
- const headerSpans = useMemo11(() => {
13525
+ const headerSpans = useMemo12(() => {
13475
13526
  if (!hasGroupHeader) return [];
13476
13527
  if (columnGroups?.some((group) => typeof group.width === "number")) {
13477
13528
  return columnGroups.map((group) => ({
@@ -13504,7 +13555,7 @@ function TableMatrix({
13504
13555
  const headerContentHeight = Math.max(0, headerHeight - 1);
13505
13556
  const topRowHeight = hasGroupHeader ? Math.ceil(headerContentHeight / 2) : headerContentHeight;
13506
13557
  const bottomRowHeight = hasGroupHeader ? Math.floor(headerContentHeight / 2) : 0;
13507
- const parentTaskIds = useMemo11(() => {
13558
+ const parentTaskIds = useMemo12(() => {
13508
13559
  const ids = /* @__PURE__ */ new Set();
13509
13560
  for (const task of allTasks) {
13510
13561
  if (task.parentId) {
@@ -13513,7 +13564,7 @@ function TableMatrix({
13513
13564
  }
13514
13565
  return ids;
13515
13566
  }, [allTasks]);
13516
- const nestingDepthMap = useMemo11(() => {
13567
+ const nestingDepthMap = useMemo12(() => {
13517
13568
  const depthMap = /* @__PURE__ */ new Map();
13518
13569
  const taskById = new Map(allTasks.map((task) => [task.id, task]));
13519
13570
  const getDepth = (taskId, seen = /* @__PURE__ */ new Set()) => {
@@ -13534,7 +13585,7 @@ function TableMatrix({
13534
13585
  }
13535
13586
  return depthMap;
13536
13587
  }, [allTasks]);
13537
- const renderedRows = useMemo11(() => {
13588
+ const renderedRows = useMemo12(() => {
13538
13589
  if (!visibleRowIndices) {
13539
13590
  return tasks.map((task, index) => ({ task, index }));
13540
13591
  }
@@ -13545,7 +13596,7 @@ function TableMatrix({
13545
13596
  }, [tasks, visibleRowIndices]);
13546
13597
  return /* @__PURE__ */ jsxs14("div", { className: "gantt-mx-root", style: { width: `${totalWidth}px` }, children: [
13547
13598
  hasAutoWidthColumns && /* @__PURE__ */ jsxs14("div", { ref: measureRef, className: "gantt-mx-measure", "aria-hidden": "true", children: [
13548
- columns.map((column, columnIndex) => typeof column.width === "number" ? null : /* @__PURE__ */ jsx19(
13599
+ columns.map((column, columnIndex) => typeof column.width === "number" ? null : /* @__PURE__ */ jsx20(
13549
13600
  "div",
13550
13601
  {
13551
13602
  "data-gantt-mx-measure-column": columnIndex,
@@ -13554,7 +13605,7 @@ function TableMatrix({
13554
13605
  },
13555
13606
  `header:${column.id}`
13556
13607
  )),
13557
- tasks.map((task) => columns.map((column, columnIndex) => typeof column.width === "number" ? null : /* @__PURE__ */ jsx19(
13608
+ tasks.map((task) => columns.map((column, columnIndex) => typeof column.width === "number" ? null : /* @__PURE__ */ jsx20(
13558
13609
  "div",
13559
13610
  {
13560
13611
  "data-gantt-mx-measure-column": columnIndex,
@@ -13565,7 +13616,7 @@ function TableMatrix({
13565
13616
  )))
13566
13617
  ] }),
13567
13618
  /* @__PURE__ */ jsxs14("div", { className: "gantt-mx-header", style: { height: `${headerHeight}px` }, children: [
13568
- hasGroupHeader && /* @__PURE__ */ jsx19(
13619
+ hasGroupHeader && /* @__PURE__ */ jsx20(
13569
13620
  "div",
13570
13621
  {
13571
13622
  className: "gantt-mx-headerRow gantt-mx-headerGroupRow",
@@ -13573,7 +13624,7 @@ function TableMatrix({
13573
13624
  gridTemplateColumns: headerSpans.map((span) => `${span.width ?? 0}px`).join(" "),
13574
13625
  height: `${topRowHeight}px`
13575
13626
  },
13576
- children: headerSpans.map((span) => /* @__PURE__ */ jsx19(
13627
+ children: headerSpans.map((span) => /* @__PURE__ */ jsx20(
13577
13628
  "div",
13578
13629
  {
13579
13630
  className: joinClasses("gantt-mx-groupCell", span.className),
@@ -13584,7 +13635,7 @@ function TableMatrix({
13584
13635
  ))
13585
13636
  }
13586
13637
  ),
13587
- /* @__PURE__ */ jsx19(
13638
+ /* @__PURE__ */ jsx20(
13588
13639
  "div",
13589
13640
  {
13590
13641
  className: "gantt-mx-headerRow",
@@ -13601,7 +13652,7 @@ function TableMatrix({
13601
13652
  ),
13602
13653
  style: column.minWidth !== void 0 ? { minWidth: `${column.minWidth}px` } : void 0,
13603
13654
  children: [
13604
- shouldRenderOverlayEdge && /* @__PURE__ */ jsx19(
13655
+ shouldRenderOverlayEdge && /* @__PURE__ */ jsx20(
13605
13656
  "span",
13606
13657
  {
13607
13658
  className: "gantt-mx-dateOverlayEdge",
@@ -13611,7 +13662,7 @@ function TableMatrix({
13611
13662
  }
13612
13663
  }
13613
13664
  ),
13614
- /* @__PURE__ */ jsx19("span", { className: "gantt-mx-headerContent", children: column.header })
13665
+ /* @__PURE__ */ jsx20("span", { className: "gantt-mx-headerContent", children: column.header })
13615
13666
  ]
13616
13667
  },
13617
13668
  column.id
@@ -13620,7 +13671,7 @@ function TableMatrix({
13620
13671
  }
13621
13672
  )
13622
13673
  ] }),
13623
- /* @__PURE__ */ jsx19(
13674
+ /* @__PURE__ */ jsx20(
13624
13675
  "div",
13625
13676
  {
13626
13677
  className: "gantt-mx-body",
@@ -13634,7 +13685,7 @@ function TableMatrix({
13634
13685
  const nestingDepth = nestingDepthMap.get(task.id) ?? 0;
13635
13686
  const rowFillLevel = Math.min(nestingDepth, 2);
13636
13687
  const isTotal = Boolean(task.isTotal);
13637
- return /* @__PURE__ */ jsx19(
13688
+ return /* @__PURE__ */ jsx20(
13638
13689
  "div",
13639
13690
  {
13640
13691
  "data-gantt-task-row-id": task.id,
@@ -13674,7 +13725,7 @@ function TableMatrix({
13674
13725
  onCellClick?.({ task, column, rowIndex: index, columnIndex, event });
13675
13726
  },
13676
13727
  children: [
13677
- shouldRenderOverlay && /* @__PURE__ */ jsx19(
13728
+ shouldRenderOverlay && /* @__PURE__ */ jsx20(
13678
13729
  "span",
13679
13730
  {
13680
13731
  className: joinClasses("gantt-mx-dateOverlay", dateOverlay && dateOverlay.className),
@@ -13684,7 +13735,7 @@ function TableMatrix({
13684
13735
  }
13685
13736
  }
13686
13737
  ),
13687
- shouldRenderOverlayEdge && /* @__PURE__ */ jsx19(
13738
+ shouldRenderOverlayEdge && /* @__PURE__ */ jsx20(
13688
13739
  "span",
13689
13740
  {
13690
13741
  className: "gantt-mx-dateOverlayEdge",
@@ -13694,7 +13745,7 @@ function TableMatrix({
13694
13745
  }
13695
13746
  }
13696
13747
  ),
13697
- /* @__PURE__ */ jsx19("div", { className: "gantt-mx-cellContent", children: column.renderCell(task) })
13748
+ /* @__PURE__ */ jsx20("div", { className: "gantt-mx-cellContent", children: column.renderCell(task) })
13698
13749
  ]
13699
13750
  },
13700
13751
  `${task.id}:${column.id}`
@@ -13710,8 +13761,8 @@ function TableMatrix({
13710
13761
  }
13711
13762
 
13712
13763
  // src/components/PlanFactMatrix/PlanFactMatrix.tsx
13713
- import React16, { useCallback as useCallback9, useEffect as useEffect10, useMemo as useMemo12, useRef as useRef12, useState as useState12 } from "react";
13714
- import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
13764
+ import React17, { useCallback as useCallback9, useEffect as useEffect11, useMemo as useMemo13, useRef as useRef12, useState as useState12 } from "react";
13765
+ import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
13715
13766
  var DAY_MS6 = 24 * 60 * 60 * 1e3;
13716
13767
  function joinClasses2(...values) {
13717
13768
  return values.filter(Boolean).join(" ");
@@ -13804,7 +13855,7 @@ function PlanFactCellEditor({
13804
13855
  }) {
13805
13856
  const [draft, setDraft] = useState12(startValue ?? (value === void 0 ? "" : String(value)));
13806
13857
  const inputRef = useRef12(null);
13807
- useEffect10(() => {
13858
+ useEffect11(() => {
13808
13859
  inputRef.current?.focus();
13809
13860
  if (startValue === void 0) {
13810
13861
  inputRef.current?.select();
@@ -13820,7 +13871,7 @@ function PlanFactCellEditor({
13820
13871
  }
13821
13872
  onCommit(parsed);
13822
13873
  }, [draft, onCancel, onCommit]);
13823
- return /* @__PURE__ */ jsx20(
13874
+ return /* @__PURE__ */ jsx21(
13824
13875
  "input",
13825
13876
  {
13826
13877
  ref: inputRef,
@@ -13934,7 +13985,7 @@ function PlanFactRowInner({
13934
13985
  showOverflowTooltip,
13935
13986
  hideOverflowTooltip
13936
13987
  }) {
13937
- return /* @__PURE__ */ jsx20(
13988
+ return /* @__PURE__ */ jsx21(
13938
13989
  "div",
13939
13990
  {
13940
13991
  "data-gantt-task-row-id": task.id,
@@ -14069,7 +14120,7 @@ function PlanFactRowInner({
14069
14120
  }
14070
14121
  },
14071
14122
  children: [
14072
- isEditing ? /* @__PURE__ */ jsx20(
14123
+ isEditing ? /* @__PURE__ */ jsx21(
14073
14124
  PlanFactCellEditor,
14074
14125
  {
14075
14126
  value,
@@ -14095,7 +14146,7 @@ function PlanFactRowInner({
14095
14146
  focusCell(nextActiveCell);
14096
14147
  }
14097
14148
  }
14098
- ) : /* @__PURE__ */ jsx20(
14149
+ ) : /* @__PURE__ */ jsx21(
14099
14150
  "span",
14100
14151
  {
14101
14152
  className: "gantt-pf-cellValue",
@@ -14109,7 +14160,7 @@ function PlanFactRowInner({
14109
14160
  children: isParent ? "" : formatValue(value)
14110
14161
  }
14111
14162
  ),
14112
- showFillHandle && /* @__PURE__ */ jsx20(
14163
+ showFillHandle && /* @__PURE__ */ jsx21(
14113
14164
  "span",
14114
14165
  {
14115
14166
  className: "gantt-pf-fillHandle",
@@ -14137,7 +14188,7 @@ function arePlanFactRowsEqual(previous, next) {
14137
14188
  const nextRangeTouchesRow = doesRangeTouchRow(next.renderedRangeBounds, next.rowIndex);
14138
14189
  return previous.task === next.task && previous.rowIndex === next.rowIndex && previous.dateRange === next.dateRange && previous.dateKeys === next.dateKeys && previous.renderedDateIndices === next.renderedDateIndices && previous.totalWidth === next.totalWidth && previous.rowHeight === next.rowHeight && previous.subrowHeight === next.subrowHeight && previous.dayWidth === next.dayWidth && previous.plannedRange === next.plannedRange && previous.todayDateIndex === next.todayDateIndex && previous.isParent === next.isParent && previous.isHighlighted === next.isHighlighted && previous.selectedTaskId === previous.task.id === (next.selectedTaskId === next.task.id) && getCellSignatureForTask(previous.activeCell, previous.task.id) === getCellSignatureForTask(next.activeCell, next.task.id) && getEditingCellSignatureForTask(previous.editingCell, previous.task.id) === getEditingCellSignatureForTask(next.editingCell, next.task.id) && getRangeAnchorSignatureForTask(previous.selectedRange, previous.task.id) === getRangeAnchorSignatureForTask(next.selectedRange, next.task.id) && previousRangeTouchesRow === nextRangeTouchesRow && (!nextRangeTouchesRow || areRangeBoundsEqual(previous.renderedRangeBounds, next.renderedRangeBounds));
14139
14190
  }
14140
- var PlanFactRow = React16.memo(PlanFactRowInner, arePlanFactRowsEqual);
14191
+ var PlanFactRow = React17.memo(PlanFactRowInner, arePlanFactRowsEqual);
14141
14192
  function PlanFactMatrix({
14142
14193
  tasks,
14143
14194
  allTasks = tasks,
@@ -14171,37 +14222,37 @@ function PlanFactMatrix({
14171
14222
  const bodyRef = useRef12(null);
14172
14223
  const totalWidth = dateRange.length * dayWidth;
14173
14224
  const subrowHeight = rowHeight / 2;
14174
- const renderedRowIndices = useMemo12(
14225
+ const renderedRowIndices = useMemo13(
14175
14226
  () => visibleRowIndices ?? tasks.map((_, index) => index),
14176
14227
  [tasks, visibleRowIndices]
14177
14228
  );
14178
- const renderedDateIndices = useMemo12(
14229
+ const renderedDateIndices = useMemo13(
14179
14230
  () => visibleDateIndices ?? dateRange.map((_, index) => index),
14180
14231
  [dateRange, visibleDateIndices]
14181
14232
  );
14182
- const parentTaskIds = useMemo12(() => {
14233
+ const parentTaskIds = useMemo13(() => {
14183
14234
  const ids = /* @__PURE__ */ new Set();
14184
14235
  for (const task of allTasks) {
14185
14236
  if (task.parentId) ids.add(task.parentId);
14186
14237
  }
14187
14238
  return ids;
14188
14239
  }, [allTasks]);
14189
- const dateKeys = useMemo12(() => dateRange.map(formatDateKey), [dateRange]);
14190
- const renderedDateWindow = useMemo12(
14240
+ const dateKeys = useMemo13(() => dateRange.map(formatDateKey), [dateRange]);
14241
+ const renderedDateWindow = useMemo13(
14191
14242
  () => getRenderedDateWindow(dateRange, renderedDateIndices),
14192
14243
  [dateRange, renderedDateIndices]
14193
14244
  );
14194
14245
  const dateRangeStartMs = dateRange[0] ? getDateOnlyMs(dateRange[0]) : 0;
14195
- const taskIndexById = useMemo12(() => {
14246
+ const taskIndexById = useMemo13(() => {
14196
14247
  const indexById = /* @__PURE__ */ new Map();
14197
14248
  tasks.forEach((task, index) => indexById.set(task.id, index));
14198
14249
  return indexById;
14199
14250
  }, [tasks]);
14200
- const taskById = useMemo12(
14251
+ const taskById = useMemo13(
14201
14252
  () => new Map(tasks.map((task) => [task.id, task])),
14202
14253
  [tasks]
14203
14254
  );
14204
- const monthSeparatorIndices = useMemo12(() => {
14255
+ const monthSeparatorIndices = useMemo13(() => {
14205
14256
  const indices = [];
14206
14257
  for (let index = 1; index < dateRange.length; index += 1) {
14207
14258
  if (dateRange[index].getUTCDate() === 1) {
@@ -14210,7 +14261,7 @@ function PlanFactMatrix({
14210
14261
  }
14211
14262
  return indices;
14212
14263
  }, [dateRange]);
14213
- const plannedRangeByTaskId = useMemo12(() => {
14264
+ const plannedRangeByTaskId = useMemo13(() => {
14214
14265
  const rangeByTaskId = /* @__PURE__ */ new Map();
14215
14266
  for (const task of tasks) {
14216
14267
  rangeByTaskId.set(task.id, getPlannedIndexRange(task, dateRangeStartMs, dateRange.length));
@@ -14307,7 +14358,7 @@ function PlanFactMatrix({
14307
14358
  };
14308
14359
  }, [taskIndexById]);
14309
14360
  const renderedRange = fillRange ?? selectedRange;
14310
- const renderedRangeBounds = useMemo12(
14361
+ const renderedRangeBounds = useMemo13(
14311
14362
  () => renderedRange ? getRangeBounds(renderedRange) : null,
14312
14363
  [getRangeBounds, renderedRange]
14313
14364
  );
@@ -14574,7 +14625,7 @@ function PlanFactMatrix({
14574
14625
  onTaskSelect?.(nextCell.taskId);
14575
14626
  focusCell(selectedRange?.anchor ?? cell);
14576
14627
  }, [dateRange.length, focusCell, onTaskSelect, parentTaskIds, selectedRange, tasks]);
14577
- useEffect10(() => {
14628
+ useEffect11(() => {
14578
14629
  const endSelection = () => {
14579
14630
  let pendingFillRange = null;
14580
14631
  if (hoverFrameRef.current !== null) {
@@ -14597,12 +14648,12 @@ function PlanFactMatrix({
14597
14648
  window.removeEventListener("mouseup", endSelection);
14598
14649
  };
14599
14650
  }, [applyFillRange, flushPendingHoverCell]);
14600
- useEffect10(() => () => {
14651
+ useEffect11(() => () => {
14601
14652
  if (hoverFrameRef.current !== null) {
14602
14653
  window.cancelAnimationFrame(hoverFrameRef.current);
14603
14654
  }
14604
14655
  }, []);
14605
- useEffect10(() => {
14656
+ useEffect11(() => {
14606
14657
  const handleKeyDown = (event) => {
14607
14658
  if (event.key !== "Escape") return;
14608
14659
  clearSelection();
@@ -14632,7 +14683,7 @@ function PlanFactMatrix({
14632
14683
  },
14633
14684
  children: [
14634
14685
  /* @__PURE__ */ jsxs15("div", { className: "gantt-pf-header", style: { width: `${totalWidth}px`, height: `${headerHeight}px` }, children: [
14635
- /* @__PURE__ */ jsx20(
14686
+ /* @__PURE__ */ jsx21(
14636
14687
  "div",
14637
14688
  {
14638
14689
  className: "gantt-pf-dateWindow",
@@ -14640,7 +14691,7 @@ function PlanFactMatrix({
14640
14691
  left: `${renderedDateWindow.startIndex * dayWidth}px`,
14641
14692
  width: `${renderedDateWindow.days.length * dayWidth}px`
14642
14693
  },
14643
- children: /* @__PURE__ */ jsx20(
14694
+ children: /* @__PURE__ */ jsx21(
14644
14695
  TimeScaleHeader_default,
14645
14696
  {
14646
14697
  days: renderedDateWindow.days,
@@ -14652,7 +14703,7 @@ function PlanFactMatrix({
14652
14703
  )
14653
14704
  }
14654
14705
  ),
14655
- todayDateIndex !== void 0 && todayDateIndex >= renderedDateWindow.startIndex && todayDateIndex < renderedDateWindow.startIndex + renderedDateWindow.days.length && /* @__PURE__ */ jsx20(
14706
+ todayDateIndex !== void 0 && todayDateIndex >= renderedDateWindow.startIndex && todayDateIndex < renderedDateWindow.startIndex + renderedDateWindow.days.length && /* @__PURE__ */ jsx21(
14656
14707
  "span",
14657
14708
  {
14658
14709
  className: "gantt-pf-headerTodayLine",
@@ -14664,7 +14715,7 @@ function PlanFactMatrix({
14664
14715
  }
14665
14716
  )
14666
14717
  ] }),
14667
- /* @__PURE__ */ jsx20("div", { className: "gantt-pf-monthSeparatorLayer", "aria-hidden": "true", children: monthSeparatorIndices.map((dateIndex) => /* @__PURE__ */ jsx20(
14718
+ /* @__PURE__ */ jsx21("div", { className: "gantt-pf-monthSeparatorLayer", "aria-hidden": "true", children: monthSeparatorIndices.map((dateIndex) => /* @__PURE__ */ jsx21(
14668
14719
  "span",
14669
14720
  {
14670
14721
  className: "gantt-pf-monthSeparator",
@@ -14686,7 +14737,7 @@ function PlanFactMatrix({
14686
14737
  width: `${totalWidth}px`
14687
14738
  },
14688
14739
  children: [
14689
- /* @__PURE__ */ jsx20(
14740
+ /* @__PURE__ */ jsx21(
14690
14741
  "div",
14691
14742
  {
14692
14743
  className: "gantt-pf-dateWindow gantt-pf-dateWindow-body",
@@ -14694,7 +14745,7 @@ function PlanFactMatrix({
14694
14745
  left: `${renderedDateWindow.startIndex * dayWidth}px`,
14695
14746
  width: `${renderedDateWindow.days.length * dayWidth}px`
14696
14747
  },
14697
- children: /* @__PURE__ */ jsx20(
14748
+ children: /* @__PURE__ */ jsx21(
14698
14749
  GridBackground_default,
14699
14750
  {
14700
14751
  dateRange: renderedDateWindow.days,
@@ -14712,7 +14763,7 @@ function PlanFactMatrix({
14712
14763
  if (!task) return null;
14713
14764
  const isParent = parentTaskIds.has(task.id);
14714
14765
  const isHighlighted = filterMode === "highlight" && !!highlightedTaskIds?.has(task.id);
14715
- return /* @__PURE__ */ jsx20(
14766
+ return /* @__PURE__ */ jsx21(
14716
14767
  PlanFactRow,
14717
14768
  {
14718
14769
  task,
@@ -14757,7 +14808,7 @@ function PlanFactMatrix({
14757
14808
  ]
14758
14809
  }
14759
14810
  ),
14760
- overflowTooltip && /* @__PURE__ */ jsx20(
14811
+ overflowTooltip && /* @__PURE__ */ jsx21(
14761
14812
  "div",
14762
14813
  {
14763
14814
  className: "gantt-pf-overflowTooltip",
@@ -15113,7 +15164,7 @@ async function printGanttChart({
15113
15164
  }
15114
15165
 
15115
15166
  // src/components/GanttChart/GanttChart.tsx
15116
- import { Fragment as Fragment6, jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
15167
+ import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
15117
15168
  var SCROLL_TO_ROW_CONTEXT_ROWS = 2;
15118
15169
  var TASK_ROW_OVERSCAN = 8;
15119
15170
  var SCROLL_TOP_BUCKET_PX = 64;
@@ -15254,9 +15305,9 @@ function arePreviewTaskMapsEqual(left, right) {
15254
15305
  }
15255
15306
  function GanttChartInner(props, ref) {
15256
15307
  if (props.mode === "resource-planner") {
15257
- return /* @__PURE__ */ jsx21(ResourceTimelineChart, { ...props });
15308
+ return /* @__PURE__ */ jsx22(ResourceTimelineChart, { ...props });
15258
15309
  }
15259
- return /* @__PURE__ */ jsx21(
15310
+ return /* @__PURE__ */ jsx22(
15260
15311
  TaskGanttChart,
15261
15312
  {
15262
15313
  ...props,
@@ -15315,6 +15366,7 @@ function TaskGanttChartInner(props, ref) {
15315
15366
  activityClickToDrag = false,
15316
15367
  activityActivationMode = "none",
15317
15368
  showActivityLinks = true,
15369
+ activityDependencies,
15318
15370
  showActivityLag = true,
15319
15371
  activityTooltip,
15320
15372
  timelineMarkers,
@@ -15426,7 +15478,7 @@ function TaskGanttChartInner(props, ref) {
15426
15478
  dependencyCreationRef.current = nextDrag;
15427
15479
  setDependencyCreationDrag(nextDrag);
15428
15480
  }, [disableDependencyEditing, getDependencyPortPoint]);
15429
- useEffect11(() => {
15481
+ useEffect12(() => {
15430
15482
  if (!dependencyCreationDrag) return;
15431
15483
  const handlePointerMove = (event) => {
15432
15484
  const activeDrag = dependencyCreationRef.current;
@@ -15510,12 +15562,12 @@ function TaskGanttChartInner(props, ref) {
15510
15562
  document.removeEventListener("keydown", handleKeyDown);
15511
15563
  };
15512
15564
  }, [businessDays, customDays, dependencyCreationDrag !== null, getDependencyPortPoint, getVisualDependencyType, isWeekend3, onTasksChange, tasks]);
15513
- useEffect11(() => {
15565
+ useEffect12(() => {
15514
15566
  if (!dependencyCreationError) return;
15515
15567
  const timeout = window.setTimeout(() => setDependencyCreationError(null), 3e3);
15516
15568
  return () => window.clearTimeout(timeout);
15517
15569
  }, [dependencyCreationError]);
15518
- useEffect11(() => {
15570
+ useEffect12(() => {
15519
15571
  if (!dependencyLineMenu) return;
15520
15572
  const closeMenu = (event) => {
15521
15573
  const target = event.target;
@@ -15561,11 +15613,11 @@ function TaskGanttChartInner(props, ref) {
15561
15613
  const handleTaskDateChangeMode = externalOnTaskDateChangeModeChange ?? setInternalTaskDateChangeMode;
15562
15614
  const resolvedRowContentLines = isPlanFactMode ? Math.max(2, Math.floor(rowContentLines)) : Math.max(1, Math.floor(rowContentLines));
15563
15615
  const shouldFillParentRowsInTaskList = fillParentRowsInTaskList ?? isPlanFactMode;
15564
- const effectiveRowHeight = useMemo13(
15616
+ const effectiveRowHeight = useMemo14(
15565
15617
  () => rowContentLines === 0 && !isPlanFactMode ? rowHeight : Math.max(rowHeight, 10 + resolvedRowContentLines * 18),
15566
15618
  [isPlanFactMode, resolvedRowContentLines, rowContentLines, rowHeight]
15567
15619
  );
15568
- const normalizedTasks = useMemo13(() => {
15620
+ const normalizedTasks = useMemo14(() => {
15569
15621
  const ordered = normalizeHierarchyTasks(tasks);
15570
15622
  const ranges = /* @__PURE__ */ new Map();
15571
15623
  for (const task of ordered) {
@@ -15587,7 +15639,7 @@ function TaskGanttChartInner(props, ref) {
15587
15639
  } : task;
15588
15640
  });
15589
15641
  }, [tasks]);
15590
- const collapsedParentIds = useMemo13(() => {
15642
+ const collapsedParentIds = useMemo14(() => {
15591
15643
  if (externalCollapsedParentIds) return externalCollapsedParentIds;
15592
15644
  const ids = new Set(internalCollapsedParentIds);
15593
15645
  for (const task of normalizedTasks) {
@@ -15595,22 +15647,22 @@ function TaskGanttChartInner(props, ref) {
15595
15647
  }
15596
15648
  return ids;
15597
15649
  }, [externalCollapsedParentIds, internalCollapsedParentIds, normalizedTasks, expandedCompositeIds]);
15598
- const controlledScheduleIdentity = useMemo13(
15650
+ const controlledScheduleIdentity = useMemo14(
15599
15651
  () => buildControlledScheduleIdentity(normalizedTasks),
15600
15652
  [normalizedTasks]
15601
15653
  );
15602
15654
  const previousControlledScheduleIdentityRef = useRef13(null);
15603
15655
  const controlledScheduleChanged = previousControlledScheduleIdentityRef.current !== null && previousControlledScheduleIdentityRef.current !== controlledScheduleIdentity;
15604
15656
  const [previewTasksById, setPreviewTasksById] = useState13(/* @__PURE__ */ new Map());
15605
- const previewNormalizedTasks = useMemo13(() => {
15657
+ const previewNormalizedTasks = useMemo14(() => {
15606
15658
  if (controlledScheduleChanged || previewTasksById.size === 0) return normalizedTasks;
15607
15659
  return normalizedTasks.map((task) => previewTasksById.get(task.id) ?? task);
15608
15660
  }, [controlledScheduleChanged, normalizedTasks, previewTasksById]);
15609
- const isCustomWeekend = useMemo13(
15661
+ const isCustomWeekend = useMemo14(
15610
15662
  () => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
15611
15663
  [customDays, isWeekend3]
15612
15664
  );
15613
- const criticalTaskIds = useMemo13(() => {
15665
+ const criticalTaskIds = useMemo14(() => {
15614
15666
  if (!criticalPathMode) return /* @__PURE__ */ new Set();
15615
15667
  const leafCritical = computeCriticalPath(previewNormalizedTasks, {
15616
15668
  businessDays,
@@ -15618,7 +15670,7 @@ function TaskGanttChartInner(props, ref) {
15618
15670
  });
15619
15671
  return extendCriticalIdsToParents(leafCritical, previewNormalizedTasks);
15620
15672
  }, [criticalPathMode, previewNormalizedTasks, businessDays, isCustomWeekend]);
15621
- const dateRangeTasks = useMemo13(() => {
15673
+ const dateRangeTasks = useMemo14(() => {
15622
15674
  if (isPlanFactMode) {
15623
15675
  return getPlanFactRangeTasks(normalizedTasks);
15624
15676
  }
@@ -15638,7 +15690,7 @@ function TaskGanttChartInner(props, ref) {
15638
15690
  }
15639
15691
  return rangeTasks;
15640
15692
  }, [isPlanFactMode, normalizedTasks, showBaseline]);
15641
- const dateRange = useMemo13(
15693
+ const dateRange = useMemo14(
15642
15694
  () => {
15643
15695
  if (!isPlanFactMode && explicitDateRange) {
15644
15696
  const exactDays = getDateRangeDays(explicitDateRange);
@@ -15650,19 +15702,19 @@ function TaskGanttChartInner(props, ref) {
15650
15702
  );
15651
15703
  const [validationResult, setValidationResult] = useState13(null);
15652
15704
  const [cascadeOverrides, setCascadeOverrides] = useState13(/* @__PURE__ */ new Map());
15653
- const gridWidth = useMemo13(
15705
+ const gridWidth = useMemo14(
15654
15706
  () => Math.round(dateRange.length * dayWidth),
15655
15707
  [dateRange.length, dayWidth]
15656
15708
  );
15657
15709
  const renderGridWidth = Math.max(gridWidth, skeletonRowCount > 0 ? 720 : 0);
15658
- const matrixWidth = useMemo13(
15710
+ const matrixWidth = useMemo14(
15659
15711
  () => matrixColumns.reduce((sum, column) => {
15660
15712
  if (typeof column.width !== "number") return void 0;
15661
15713
  return sum !== void 0 ? sum + column.width : void 0;
15662
15714
  }, 0),
15663
15715
  [matrixColumns]
15664
15716
  );
15665
- const visibleTasks = useMemo13(() => {
15717
+ const visibleTasks = useMemo14(() => {
15666
15718
  const parentMap = new Map(normalizedTasks.map((t) => [t.id, t.parentId]));
15667
15719
  function isAnyAncestorCollapsed(parentId) {
15668
15720
  let current = parentId;
@@ -15681,7 +15733,7 @@ function TaskGanttChartInner(props, ref) {
15681
15733
  }
15682
15734
  return tasks2;
15683
15735
  }, [normalizedTasks, collapsedParentIds, filterMode, taskFilter, criticalPathMode, criticalTaskIds]);
15684
- const monthStart = useMemo13(() => {
15736
+ const monthStart = useMemo14(() => {
15685
15737
  if (dateRange.length === 0) {
15686
15738
  return new Date(Date.UTC((/* @__PURE__ */ new Date()).getUTCFullYear(), (/* @__PURE__ */ new Date()).getUTCMonth(), 1));
15687
15739
  }
@@ -15691,7 +15743,7 @@ function TaskGanttChartInner(props, ref) {
15691
15743
  }
15692
15744
  return new Date(Date.UTC(firstDay.getUTCFullYear(), firstDay.getUTCMonth(), 1));
15693
15745
  }, [dateRange, explicitDateRange, isPlanFactMode]);
15694
- const activityLaneCounts = useMemo13(() => {
15746
+ const activityLaneCounts = useMemo14(() => {
15695
15747
  const counts = /* @__PURE__ */ new Map();
15696
15748
  for (const task of visibleTasks) {
15697
15749
  if (task.activities && task.activities.length > 0) {
@@ -15700,7 +15752,7 @@ function TaskGanttChartInner(props, ref) {
15700
15752
  }
15701
15753
  return counts;
15702
15754
  }, [visibleTasks, monthStart, dayWidth]);
15703
- const compositeRowLayout = useMemo13(() => {
15755
+ const compositeRowLayout = useMemo14(() => {
15704
15756
  const compositeIds = new Set(normalizedTasks.filter((task) => task.composite).map((task) => task.id));
15705
15757
  const tops = [];
15706
15758
  const heights = [];
@@ -15713,15 +15765,15 @@ function TaskGanttChartInner(props, ref) {
15713
15765
  }
15714
15766
  return { tops, heights, totalHeight: top };
15715
15767
  }, [normalizedTasks, visibleTasks, effectiveRowHeight, activityLaneCounts]);
15716
- const compositeParentsById = useMemo13(
15768
+ const compositeParentsById = useMemo14(
15717
15769
  () => new Map(normalizedTasks.filter((task) => task.composite).map((task) => [task.id, task])),
15718
15770
  [normalizedTasks]
15719
15771
  );
15720
- const matchedTaskIds = useMemo13(() => {
15772
+ const matchedTaskIds = useMemo14(() => {
15721
15773
  if (!taskFilter) return /* @__PURE__ */ new Set();
15722
15774
  return new Set(visibleTasks.filter(taskFilter).map((task) => task.id));
15723
15775
  }, [visibleTasks, taskFilter]);
15724
- const taskListHighlightedTaskIds = useMemo13(() => {
15776
+ const taskListHighlightedTaskIds = useMemo14(() => {
15725
15777
  if (filterMode === "hide") {
15726
15778
  return /* @__PURE__ */ new Set();
15727
15779
  }
@@ -15737,12 +15789,12 @@ function TaskGanttChartInner(props, ref) {
15737
15789
  }
15738
15790
  return mergedHighlightedTaskIds;
15739
15791
  }, [filterMode, highlightedTaskIds, matchedTaskIds, criticalPathMode, criticalTaskIds]);
15740
- const totalGridHeight = useMemo13(
15792
+ const totalGridHeight = useMemo14(
15741
15793
  () => compositeRowLayout.totalHeight + Math.max(0, Math.floor(skeletonRowCount)) * effectiveRowHeight,
15742
15794
  [compositeRowLayout.totalHeight, effectiveRowHeight, skeletonRowCount]
15743
15795
  );
15744
15796
  const timelineHeaderHeight = headerHeight + 1;
15745
- const tableBodyMinHeight = useMemo13(() => {
15797
+ const tableBodyMinHeight = useMemo14(() => {
15746
15798
  if (!isTableMatrixMode && !isPlanFactMode || containerHeight === void 0) {
15747
15799
  return void 0;
15748
15800
  }
@@ -15751,12 +15803,12 @@ function TaskGanttChartInner(props, ref) {
15751
15803
  }
15752
15804
  return `calc(${containerHeight} - ${timelineHeaderHeight}px)`;
15753
15805
  }, [containerHeight, isPlanFactMode, isTableMatrixMode, timelineHeaderHeight]);
15754
- const todayIndex = useMemo13(() => {
15806
+ const todayIndex = useMemo14(() => {
15755
15807
  const today = getTodayLocalUtcDate();
15756
15808
  return dateRange.findIndex((day) => day.getTime() === today.getTime());
15757
15809
  }, [dateRange]);
15758
15810
  const todayInRange = todayIndex !== -1;
15759
- const visibleTimelineMarkers = useMemo13(() => {
15811
+ const visibleTimelineMarkers = useMemo14(() => {
15760
15812
  if (isTableMatrixMode || !timelineMarkers || timelineMarkers.length === 0 || dateRange.length === 0) {
15761
15813
  return [];
15762
15814
  }
@@ -15767,7 +15819,7 @@ function TaskGanttChartInner(props, ref) {
15767
15819
  return markerDate >= rangeStartMs && markerDate <= rangeEndMs;
15768
15820
  });
15769
15821
  }, [dateRange, isTableMatrixMode, timelineMarkers]);
15770
- useEffect11(() => {
15822
+ useEffect12(() => {
15771
15823
  if (isTableMatrixMode) return;
15772
15824
  if (hasAutoScrolledToTodayRef.current) return;
15773
15825
  const container = scrollContainerRef.current;
@@ -15781,7 +15833,7 @@ function TaskGanttChartInner(props, ref) {
15781
15833
  container.scrollLeft = Math.max(0, scrollLeft);
15782
15834
  hasAutoScrolledToTodayRef.current = true;
15783
15835
  }, [dateRange, dayWidth, isTableMatrixMode]);
15784
- useEffect11(() => {
15836
+ useEffect12(() => {
15785
15837
  const container = scrollContainerRef.current;
15786
15838
  if (!container) return;
15787
15839
  let frameId = null;
@@ -15918,7 +15970,7 @@ function TaskGanttChartInner(props, ref) {
15918
15970
  }, [effectiveRowHeight, compositeRowLayout, tasks, visibleTasks]);
15919
15971
  const [dragGuideLines, setDragGuideLines] = useState13(null);
15920
15972
  const [draggedTaskOverride, setDraggedTaskOverride] = useState13(null);
15921
- useEffect11(() => {
15973
+ useEffect12(() => {
15922
15974
  const previousIdentity = previousControlledScheduleIdentityRef.current;
15923
15975
  previousControlledScheduleIdentityRef.current = controlledScheduleIdentity;
15924
15976
  if (previousIdentity === null || previousIdentity === controlledScheduleIdentity) {
@@ -15934,12 +15986,12 @@ function TaskGanttChartInner(props, ref) {
15934
15986
  setDraggedTaskOverride((current) => current === null ? current : null);
15935
15987
  setDragGuideLines((current) => current === null ? current : null);
15936
15988
  }, [controlledScheduleIdentity, previewPositionStore, activityPreviewStore, activityBlockStore, activityDragOwner, activityActivationStore]);
15937
- useEffect11(() => {
15989
+ useEffect12(() => {
15938
15990
  const result = validateDependencies(tasks);
15939
15991
  setValidationResult(result);
15940
15992
  onValidateDependencies?.(result);
15941
15993
  }, [tasks, onValidateDependencies]);
15942
- useEffect11(() => () => {
15994
+ useEffect12(() => () => {
15943
15995
  if (clearSelectedTaskTimeoutRef.current !== null) {
15944
15996
  window.clearTimeout(clearSelectedTaskTimeoutRef.current);
15945
15997
  }
@@ -16143,7 +16195,7 @@ function TaskGanttChartInner(props, ref) {
16143
16195
  }
16144
16196
  onTasksChange?.(normalized);
16145
16197
  }, [onTasksChange, onReorder]);
16146
- const dependencyOverrides = useMemo13(() => {
16198
+ const dependencyOverrides = useMemo14(() => {
16147
16199
  if (controlledScheduleChanged) return /* @__PURE__ */ new Map();
16148
16200
  const map = new Map(cascadeOverrides);
16149
16201
  if (draggedTaskOverride) {
@@ -16169,22 +16221,22 @@ function TaskGanttChartInner(props, ref) {
16169
16221
  return arePreviewTaskMapsEqual(current, next) ? current : next;
16170
16222
  });
16171
16223
  }, [previewPositionStore]);
16172
- const previewVisibleTasks = useMemo13(() => {
16224
+ const previewVisibleTasks = useMemo14(() => {
16173
16225
  if (controlledScheduleChanged || previewTasksById.size === 0) return visibleTasks;
16174
16226
  return visibleTasks.map((task) => previewTasksById.get(task.id) ?? task);
16175
16227
  }, [controlledScheduleChanged, visibleTasks, previewTasksById]);
16176
- const visibleTaskIndexMap = useMemo13(
16228
+ const visibleTaskIndexMap = useMemo14(
16177
16229
  () => new Map(visibleTasks.map((task, index) => [task.id, index])),
16178
16230
  [visibleTasks]
16179
16231
  );
16180
- const forcedRenderedTaskIds = useMemo13(() => {
16232
+ const forcedRenderedTaskIds = useMemo14(() => {
16181
16233
  const ids = /* @__PURE__ */ new Set();
16182
16234
  if (draggedTaskOverride) {
16183
16235
  ids.add(draggedTaskOverride.taskId);
16184
16236
  }
16185
16237
  return ids;
16186
16238
  }, [draggedTaskOverride]);
16187
- const horizontalWindow = useMemo13(() => {
16239
+ const horizontalWindow = useMemo14(() => {
16188
16240
  const width = scrollViewport.viewportWidth;
16189
16241
  if (width <= 0) return void 0;
16190
16242
  const left = scrollViewport.chartScrollLeft;
@@ -16193,7 +16245,7 @@ function TaskGanttChartInner(props, ref) {
16193
16245
  endPx: left + width + HORIZONTAL_WINDOW_OVERSCAN_PX
16194
16246
  };
16195
16247
  }, [scrollViewport.chartScrollLeft, scrollViewport.viewportWidth]);
16196
- const visibleTaskWindowIndices = useMemo13(() => {
16248
+ const visibleTaskWindowIndices = useMemo14(() => {
16197
16249
  const totalTasks = visibleTasks.length;
16198
16250
  if (totalTasks === 0) {
16199
16251
  return [];
@@ -16235,7 +16287,7 @@ function TaskGanttChartInner(props, ref) {
16235
16287
  }
16236
16288
  return Array.from(indices).sort((left, right) => left - right);
16237
16289
  }, [compositeRowLayout, forceFullRenderForPrint, forcedRenderedTaskIds, scrollViewport, visibleTaskIndexMap, visibleTasks.length]);
16238
- const visiblePlanFactDateIndices = useMemo13(() => {
16290
+ const visiblePlanFactDateIndices = useMemo14(() => {
16239
16291
  if (forceFullRenderForPrint) {
16240
16292
  return void 0;
16241
16293
  }
@@ -16248,18 +16300,18 @@ function TaskGanttChartInner(props, ref) {
16248
16300
  (_, index) => window2.start + index
16249
16301
  );
16250
16302
  }, [dateRange.length, forceFullRenderForPrint, isPlanFactMode, planFactDateWindow]);
16251
- const renderedChartTasks = useMemo13(
16303
+ const renderedChartTasks = useMemo14(
16252
16304
  () => visibleTaskWindowIndices.map((index) => {
16253
16305
  const task = previewVisibleTasks[index];
16254
16306
  return task ? { index, task } : null;
16255
16307
  }).filter((entry) => entry !== null),
16256
16308
  [previewVisibleTasks, visibleTaskWindowIndices]
16257
16309
  );
16258
- const renderedDependencyTasks = useMemo13(
16310
+ const renderedDependencyTasks = useMemo14(
16259
16311
  () => renderedChartTasks.map(({ task }) => task),
16260
16312
  [renderedChartTasks]
16261
16313
  );
16262
- renderedTaskIdsRef.current = useMemo13(
16314
+ renderedTaskIdsRef.current = useMemo14(
16263
16315
  () => new Set(renderedChartTasks.map(({ task }) => task.id)),
16264
16316
  [renderedChartTasks]
16265
16317
  );
@@ -16338,7 +16390,7 @@ function TaskGanttChartInner(props, ref) {
16338
16390
  lastCompositeBarToggleRef.current = { id: taskId, time: now, source };
16339
16391
  handleToggleCollapse(taskId);
16340
16392
  };
16341
- const allParentIds = useMemo13(() => {
16393
+ const allParentIds = useMemo14(() => {
16342
16394
  const taskIds = new Set(normalizedTasks.map((task) => task.id));
16343
16395
  return new Set(normalizedTasks.map((task) => task.parentId).filter((parentId) => Boolean(parentId && taskIds.has(parentId))));
16344
16396
  }, [normalizedTasks]);
@@ -16551,7 +16603,7 @@ function TaskGanttChartInner(props, ref) {
16551
16603
  container.style.cursor = "grabbing";
16552
16604
  e.preventDefault();
16553
16605
  }, [activityActivationStore]);
16554
- useEffect11(() => {
16606
+ useEffect12(() => {
16555
16607
  const flushPanMove = () => {
16556
16608
  const pan = panStateRef.current;
16557
16609
  if (!pan?.active) return;
@@ -16594,12 +16646,12 @@ function TaskGanttChartInner(props, ref) {
16594
16646
  window.removeEventListener("mouseup", handlePanEnd);
16595
16647
  };
16596
16648
  }, []);
16597
- return /* @__PURE__ */ jsx21(
16649
+ return /* @__PURE__ */ jsx22(
16598
16650
  "div",
16599
16651
  {
16600
16652
  ref: containerRef,
16601
16653
  className: isTableMatrixMode ? "gantt-container gantt-container-tableMatrix" : isPlanFactMode ? "gantt-container gantt-container-planFact" : "gantt-container",
16602
- children: /* @__PURE__ */ jsx21(
16654
+ children: /* @__PURE__ */ jsx22(
16603
16655
  "div",
16604
16656
  {
16605
16657
  ref: scrollContainerRef,
@@ -16614,7 +16666,7 @@ function TaskGanttChartInner(props, ref) {
16614
16666
  onMouseOver: handleSharedRowHover,
16615
16667
  onMouseLeave: clearHoveredRows,
16616
16668
  children: [
16617
- /* @__PURE__ */ jsx21(
16669
+ /* @__PURE__ */ jsx22(
16618
16670
  TaskList,
16619
16671
  {
16620
16672
  tasks: normalizedTasks,
@@ -16680,7 +16732,7 @@ function TaskGanttChartInner(props, ref) {
16680
16732
  skeletonRowCount
16681
16733
  }
16682
16734
  ),
16683
- /* @__PURE__ */ jsx21(
16735
+ /* @__PURE__ */ jsx22(
16684
16736
  "div",
16685
16737
  {
16686
16738
  className: isTableMatrixMode || isPlanFactMode || showChart ? "gantt-chartSurface" : "gantt-chartSurface gantt-chart-hidden",
@@ -16690,7 +16742,7 @@ function TaskGanttChartInner(props, ref) {
16690
16742
  flex: isTableMatrixMode || isPlanFactMode ? "0 0 auto" : 1,
16691
16743
  display: isTableMatrixMode || isPlanFactMode || showChart ? void 0 : "none"
16692
16744
  },
16693
- children: isTableMatrixMode ? /* @__PURE__ */ jsx21(
16745
+ children: isTableMatrixMode ? /* @__PURE__ */ jsx22(
16694
16746
  TableMatrix,
16695
16747
  {
16696
16748
  tasks: visibleTasks,
@@ -16708,7 +16760,7 @@ function TaskGanttChartInner(props, ref) {
16708
16760
  filterMode,
16709
16761
  visibleRowIndices: visibleTaskWindowIndices
16710
16762
  }
16711
- ) : isPlanFactMode ? /* @__PURE__ */ jsx21(
16763
+ ) : isPlanFactMode ? /* @__PURE__ */ jsx22(
16712
16764
  PlanFactMatrix,
16713
16765
  {
16714
16766
  tasks: visibleTasks,
@@ -16736,7 +16788,7 @@ function TaskGanttChartInner(props, ref) {
16736
16788
  className: "gantt-stickyHeader",
16737
16789
  style: { width: `${renderGridWidth}px`, height: `${timelineHeaderHeight}px` },
16738
16790
  children: [
16739
- /* @__PURE__ */ jsx21(
16791
+ /* @__PURE__ */ jsx22(
16740
16792
  TimeScaleHeader_default,
16741
16793
  {
16742
16794
  days: dateRange,
@@ -16749,7 +16801,7 @@ function TaskGanttChartInner(props, ref) {
16749
16801
  onTimelineHoverEnd: () => setActiveTimelineTooltip(null)
16750
16802
  }
16751
16803
  ),
16752
- activeTimelineTooltip && /* @__PURE__ */ jsx21("div", { className: "gantt-timelineTooltipLayer", "aria-hidden": "true", children: /* @__PURE__ */ jsx21(
16804
+ activeTimelineTooltip && /* @__PURE__ */ jsx22("div", { className: "gantt-timelineTooltipLayer", "aria-hidden": "true", children: /* @__PURE__ */ jsx22(
16753
16805
  "div",
16754
16806
  {
16755
16807
  className: "gantt-timelineTooltip",
@@ -16773,7 +16825,7 @@ function TaskGanttChartInner(props, ref) {
16773
16825
  height: `${totalGridHeight}px`
16774
16826
  },
16775
16827
  children: [
16776
- /* @__PURE__ */ jsx21(
16828
+ /* @__PURE__ */ jsx22(
16777
16829
  GridBackground_default,
16778
16830
  {
16779
16831
  dateRange,
@@ -16784,7 +16836,7 @@ function TaskGanttChartInner(props, ref) {
16784
16836
  horizontalWindow
16785
16837
  }
16786
16838
  ),
16787
- todayInRange && /* @__PURE__ */ jsx21(
16839
+ todayInRange && /* @__PURE__ */ jsx22(
16788
16840
  TodayIndicator_default,
16789
16841
  {
16790
16842
  monthStart,
@@ -16793,7 +16845,7 @@ function TaskGanttChartInner(props, ref) {
16793
16845
  onHoverEnd: () => setActiveTimelineTooltip(null)
16794
16846
  }
16795
16847
  ),
16796
- visibleTimelineMarkers.length > 0 && /* @__PURE__ */ jsx21(
16848
+ visibleTimelineMarkers.length > 0 && /* @__PURE__ */ jsx22(
16797
16849
  TimelineMarkers_default,
16798
16850
  {
16799
16851
  rangeStart: monthStart,
@@ -16804,7 +16856,8 @@ function TaskGanttChartInner(props, ref) {
16804
16856
  onHoverEnd: () => setActiveTimelineTooltip(null)
16805
16857
  }
16806
16858
  ),
16807
- /* @__PURE__ */ jsx21(
16859
+ showActivityLinks && activityDependencies !== void 0 && /* @__PURE__ */ jsx22(ActivityDependencyLines, { tasks: visibleTasks, renderedTaskIds: renderedTaskIdsRef.current, dependencies: activityDependencies, monthStart, dayWidth, rowHeight: effectiveRowHeight, gridWidth: renderGridWidth, totalHeight: totalGridHeight, rowIndexByTaskId: visibleTaskIndexMap, rowTops: compositeRowLayout.tops, rowHeights: compositeRowLayout.heights, showLag: showActivityLag, previewStore: activityPreviewStore, horizontalWindow }),
16860
+ /* @__PURE__ */ jsx22(
16808
16861
  DependencyLines_default,
16809
16862
  {
16810
16863
  tasks: renderedDependencyTasks,
@@ -16835,8 +16888,8 @@ function TaskGanttChartInner(props, ref) {
16835
16888
  role: "dialog",
16836
16889
  "aria-label": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0441\u043E \u0441\u0432\u044F\u0437\u044C\u044E",
16837
16890
  children: [
16838
- /* @__PURE__ */ jsx21("span", { className: "gantt-dependencyLineMenuType", children: dependencyLineMenu.linkType === "FS" ? "\u041E\u041D" : dependencyLineMenu.linkType === "SS" ? "\u041D\u041D" : dependencyLineMenu.linkType === "FF" ? "\u041E\u041E" : "\u041D\u041E" }),
16839
- !disableDependencyEditing && /* @__PURE__ */ jsx21(
16891
+ /* @__PURE__ */ jsx22("span", { className: "gantt-dependencyLineMenuType", children: dependencyLineMenu.linkType === "FS" ? "\u041E\u041D" : dependencyLineMenu.linkType === "SS" ? "\u041D\u041D" : dependencyLineMenu.linkType === "FF" ? "\u041E\u041E" : "\u041D\u041E" }),
16892
+ !disableDependencyEditing && /* @__PURE__ */ jsx22(
16840
16893
  "button",
16841
16894
  {
16842
16895
  type: "button",
@@ -16858,15 +16911,15 @@ function TaskGanttChartInner(props, ref) {
16858
16911
  strokeLinejoin: "round",
16859
16912
  "aria-hidden": "true",
16860
16913
  children: [
16861
- /* @__PURE__ */ jsx21("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }),
16862
- /* @__PURE__ */ jsx21("path", { d: "M3 6h18" }),
16863
- /* @__PURE__ */ jsx21("path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
16914
+ /* @__PURE__ */ jsx22("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6" }),
16915
+ /* @__PURE__ */ jsx22("path", { d: "M3 6h18" }),
16916
+ /* @__PURE__ */ jsx22("path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
16864
16917
  ]
16865
16918
  }
16866
16919
  )
16867
16920
  }
16868
16921
  ),
16869
- /* @__PURE__ */ jsx21(
16922
+ /* @__PURE__ */ jsx22(
16870
16923
  "button",
16871
16924
  {
16872
16925
  type: "button",
@@ -16880,7 +16933,7 @@ function TaskGanttChartInner(props, ref) {
16880
16933
  ]
16881
16934
  }
16882
16935
  ),
16883
- /* @__PURE__ */ jsx21(
16936
+ /* @__PURE__ */ jsx22(
16884
16937
  DependencyCreationOverlay,
16885
16938
  {
16886
16939
  drag: dependencyCreationDrag,
@@ -16888,8 +16941,8 @@ function TaskGanttChartInner(props, ref) {
16888
16941
  height: totalGridHeight
16889
16942
  }
16890
16943
  ),
16891
- dependencyCreationError && /* @__PURE__ */ jsx21("div", { className: "gantt-dependencyCreation-error", role: "status", children: dependencyCreationError }),
16892
- dragGuideLines && /* @__PURE__ */ jsx21(
16944
+ dependencyCreationError && /* @__PURE__ */ jsx22("div", { className: "gantt-dependencyCreation-error", role: "status", children: dependencyCreationError }),
16945
+ dragGuideLines && /* @__PURE__ */ jsx22(
16893
16946
  DragGuideLines_default,
16894
16947
  {
16895
16948
  isDragging: dragGuideLines.isDragging,
@@ -16900,7 +16953,7 @@ function TaskGanttChartInner(props, ref) {
16900
16953
  top: Math.max(0, scrollViewport.scrollTop)
16901
16954
  }
16902
16955
  ),
16903
- renderedChartTasks.map(({ task, index }) => /* @__PURE__ */ jsx21(
16956
+ renderedChartTasks.map(({ task, index }) => /* @__PURE__ */ jsx22(
16904
16957
  "div",
16905
16958
  {
16906
16959
  style: {
@@ -16910,7 +16963,7 @@ function TaskGanttChartInner(props, ref) {
16910
16963
  right: 0,
16911
16964
  height: `${compositeRowLayout.heights[index]}px`
16912
16965
  },
16913
- children: /* @__PURE__ */ jsx21(
16966
+ children: /* @__PURE__ */ jsx22(
16914
16967
  TaskRow_default,
16915
16968
  {
16916
16969
  task,
@@ -16946,7 +16999,7 @@ function TaskGanttChartInner(props, ref) {
16946
16999
  activityActivationStore,
16947
17000
  activityClickToDrag,
16948
17001
  activityActivationMode,
16949
- showActivityLinks,
17002
+ showActivityLinks: showActivityLinks && activityDependencies === void 0,
16950
17003
  showActivityLag,
16951
17004
  activityTooltip,
16952
17005
  horizontalWindow,
@@ -16975,7 +17028,7 @@ function TaskGanttChartInner(props, ref) {
16975
17028
  },
16976
17029
  task.id
16977
17030
  )),
16978
- /* @__PURE__ */ jsx21(
17031
+ /* @__PURE__ */ jsx22(
16979
17032
  GenerationSkeleton_default,
16980
17033
  {
16981
17034
  count: skeletonRowCount,
@@ -17007,9 +17060,9 @@ var GanttChart = forwardRef(GanttChartInner);
17007
17060
  GanttChart.displayName = "GanttChart";
17008
17061
 
17009
17062
  // src/components/ui/Button.tsx
17010
- import React18 from "react";
17011
- import { jsx as jsx22 } from "react/jsx-runtime";
17012
- var Button = React18.forwardRef(
17063
+ import React19 from "react";
17064
+ import { jsx as jsx23 } from "react/jsx-runtime";
17065
+ var Button = React19.forwardRef(
17013
17066
  ({ className, variant = "default", size = "default", children, ...props }, ref) => {
17014
17067
  const classes = [
17015
17068
  "gantt-btn",
@@ -17017,7 +17070,7 @@ var Button = React18.forwardRef(
17017
17070
  size !== "default" ? `gantt-btn-${size}` : "",
17018
17071
  className || ""
17019
17072
  ].filter(Boolean).join(" ");
17020
- return /* @__PURE__ */ jsx22("button", { ref, className: classes, ...props, children });
17073
+ return /* @__PURE__ */ jsx23("button", { ref, className: classes, ...props, children });
17021
17074
  }
17022
17075
  );
17023
17076
  Button.displayName = "Button";