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/README.md +19 -0
- package/dist/core/scheduling/index.d.mts +1 -1
- package/dist/core/scheduling/index.d.ts +1 -1
- package/dist/{index-C3mZqSTf.d.mts → index-BfFHn43h.d.mts} +9 -1
- package/dist/{index-C3mZqSTf.d.ts → index-BfFHn43h.d.ts} +9 -1
- package/dist/index.d.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +980 -927
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +574 -521
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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 (
|
|
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
|
|
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__ */
|
|
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__ */
|
|
6464
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
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
|
|
6702
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
6652
6703
|
var Popover = ({ open, onOpenChange, children }) => {
|
|
6653
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
6735
|
+
import React11, {
|
|
6685
6736
|
useState as useState6,
|
|
6686
6737
|
useRef as useRef5,
|
|
6687
|
-
useEffect as
|
|
6738
|
+
useEffect as useEffect6,
|
|
6688
6739
|
useCallback as useCallback5,
|
|
6689
|
-
useMemo as
|
|
6740
|
+
useMemo as useMemo9
|
|
6690
6741
|
} from "react";
|
|
6691
6742
|
|
|
6692
6743
|
// src/components/ui/Input.tsx
|
|
6693
|
-
import
|
|
6694
|
-
import { jsx as
|
|
6695
|
-
var Input =
|
|
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__ */
|
|
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
|
|
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
|
|
6768
|
+
useEffect as useEffect4,
|
|
6718
6769
|
useCallback as useCallback3,
|
|
6719
|
-
useMemo as
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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__ */
|
|
6808
|
-
const emptyCells = Array.from({ length: emptyDays }, (_, i) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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 =
|
|
6891
|
+
const renderedMonths = useMemo8(
|
|
6841
6892
|
() => months.map(renderMonth),
|
|
6842
6893
|
[months, renderMonth]
|
|
6843
6894
|
);
|
|
6844
|
-
return /* @__PURE__ */
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
7139
|
-
/* @__PURE__ */
|
|
7140
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7160
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
7184
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7188
|
-
/* @__PURE__ */
|
|
7189
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7193
|
-
/* @__PURE__ */
|
|
7194
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7198
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
7277
|
-
/* @__PURE__ */
|
|
7278
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7312
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7318
|
-
/* @__PURE__ */
|
|
7319
|
-
/* @__PURE__ */
|
|
7320
|
-
/* @__PURE__ */
|
|
7321
|
-
/* @__PURE__ */
|
|
7322
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7334
|
-
/* @__PURE__ */
|
|
7335
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7353
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7371
|
-
/* @__PURE__ */
|
|
7372
|
-
/* @__PURE__ */
|
|
7373
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7443
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7461
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
7537
|
+
children: /* @__PURE__ */ jsx15(ArrowLeft, {})
|
|
7487
7538
|
}
|
|
7488
7539
|
),
|
|
7489
|
-
showDemote && /* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
7691
|
-
/* @__PURE__ */
|
|
7692
|
-
effectiveLag !== 0 && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
7762
|
+
children: /* @__PURE__ */ jsx15(DepEditIcon, {})
|
|
7712
7763
|
}
|
|
7713
7764
|
) })
|
|
7714
7765
|
]
|
|
7715
7766
|
}
|
|
7716
7767
|
),
|
|
7717
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
7768
|
-
/* @__PURE__ */
|
|
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__ */
|
|
7826
|
+
/* @__PURE__ */ jsx15("hr", { className: "gantt-tl-dep-edit-divider" }),
|
|
7776
7827
|
/* @__PURE__ */ jsxs10("div", { className: "gantt-tl-dep-edit-actions", children: [
|
|
7777
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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 =
|
|
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 =
|
|
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 =
|
|
7943
|
-
const isMilestone =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
8125
|
+
useEffect6(() => {
|
|
8075
8126
|
if (!isSourceRow && dependencySearchQuery !== "") {
|
|
8076
8127
|
setDependencySearchQuery("");
|
|
8077
8128
|
}
|
|
8078
8129
|
}, [isSourceRow, dependencySearchQuery]);
|
|
8079
|
-
|
|
8130
|
+
useEffect6(() => {
|
|
8080
8131
|
setHighlightedDependencyIndex(0);
|
|
8081
8132
|
}, [dependencySearchQuery, isSourceRow, dependencyPickMode]);
|
|
8082
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8342
|
+
useEffect6(() => {
|
|
8292
8343
|
if (editingProgress && progressInputRef.current) {
|
|
8293
8344
|
progressInputRef.current.focus();
|
|
8294
8345
|
progressInputRef.current.select();
|
|
8295
8346
|
}
|
|
8296
8347
|
}, [editingProgress]);
|
|
8297
|
-
|
|
8348
|
+
useEffect6(() => {
|
|
8298
8349
|
setDurationValue(getDuration(normalizedTask.startDate, normalizedTask.endDate));
|
|
8299
8350
|
}, [normalizedTask.startDate, normalizedTask.endDate, getDuration]);
|
|
8300
|
-
|
|
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__ */
|
|
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__ */
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8643
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8717
|
-
isAlreadyLinked && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8829
|
+
children: /* @__PURE__ */ jsx15(DragHandleIcon, {})
|
|
8779
8830
|
}
|
|
8780
8831
|
),
|
|
8781
|
-
/* @__PURE__ */
|
|
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(
|
|
8802
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8987
|
+
children: /* @__PURE__ */ jsx15(ChevronRightIcon, {})
|
|
8937
8988
|
}
|
|
8938
8989
|
)
|
|
8939
8990
|
] }),
|
|
8940
|
-
editingName ? /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
8977
|
-
/* @__PURE__ */
|
|
8978
|
-
/* @__PURE__ */
|
|
8979
|
-
/* @__PURE__ */
|
|
8980
|
-
] }) : /* @__PURE__ */
|
|
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__ */
|
|
8999
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
9086
|
+
children: /* @__PURE__ */ jsx15(PlusIcon, {})
|
|
9036
9087
|
}
|
|
9037
9088
|
),
|
|
9038
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
9152
|
+
/* @__PURE__ */ jsx15(ChevronRightIcon, {})
|
|
9102
9153
|
]
|
|
9103
9154
|
}
|
|
9104
9155
|
),
|
|
9105
|
-
colorMenuOpen && /* @__PURE__ */
|
|
9106
|
-
/* @__PURE__ */
|
|
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__ */
|
|
9168
|
+
children: /* @__PURE__ */ jsx15("span", { className: "gantt-tl-color-swatch-clear-line" })
|
|
9118
9169
|
}
|
|
9119
9170
|
),
|
|
9120
|
-
TASK_COLOR_PALETTE.map((paletteColor) => /* @__PURE__ */
|
|
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__ */
|
|
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(
|
|
9156
|
-
command.divider === "top" && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
9345
|
+
children: /* @__PURE__ */ jsx15("path", { d: "m18 15-6-6-6 6" })
|
|
9295
9346
|
}
|
|
9296
9347
|
)
|
|
9297
9348
|
}
|
|
9298
9349
|
),
|
|
9299
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
9439
|
+
children: /* @__PURE__ */ jsx15("path", { d: "m18 15-6-6-6 6" })
|
|
9389
9440
|
}
|
|
9390
9441
|
)
|
|
9391
9442
|
}
|
|
9392
9443
|
),
|
|
9393
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
9773
|
-
import { jsx as
|
|
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
|
-
|
|
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__ */
|
|
9814
|
-
/* @__PURE__ */
|
|
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__ */
|
|
9832
|
-
/* @__PURE__ */
|
|
9833
|
-
/* @__PURE__ */
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
-
|
|
10187
|
+
useEffect8(() => {
|
|
10137
10188
|
if (ref.current) {
|
|
10138
10189
|
ref.current.indeterminate = indeterminate;
|
|
10139
10190
|
}
|
|
10140
10191
|
}, [indeterminate]);
|
|
10141
|
-
return /* @__PURE__ */
|
|
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
|
-
|
|
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 =
|
|
10310
|
+
const orderedTasks = useMemo10(() => {
|
|
10260
10311
|
return normalizeHierarchyTasks(tasks);
|
|
10261
10312
|
}, [tasks]);
|
|
10262
|
-
const weekendPredicate =
|
|
10313
|
+
const weekendPredicate = useMemo10(
|
|
10263
10314
|
() => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
|
|
10264
10315
|
[customDays, isWeekend3]
|
|
10265
10316
|
);
|
|
10266
|
-
const visibleTasks =
|
|
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 =
|
|
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 =
|
|
10340
|
+
const visibleTaskNumberMap = useMemo10(
|
|
10290
10341
|
() => Object.fromEntries(buildTaskNumberMap(visibleTasks)),
|
|
10291
10342
|
[visibleTasks]
|
|
10292
10343
|
);
|
|
10293
|
-
const visibleTaskIds =
|
|
10294
|
-
const compositeParentIds =
|
|
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 =
|
|
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 =
|
|
10353
|
+
const renderedVisibleRowIndices = useMemo10(
|
|
10303
10354
|
() => visibleRowIndices ?? visibleTasks.map((_, index) => index),
|
|
10304
10355
|
[visibleRowIndices, visibleTasks]
|
|
10305
10356
|
);
|
|
10306
|
-
const renderedVisibleTasks =
|
|
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 =
|
|
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 =
|
|
10390
|
+
const originalTaskNumberMap = useMemo10(
|
|
10340
10391
|
() => Object.fromEntries(buildTaskNumberMap(orderedTasks)),
|
|
10341
10392
|
[orderedTasks]
|
|
10342
10393
|
);
|
|
10343
|
-
const nestingDepthMap =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
10999
|
+
const builtInColumns = useMemo10(
|
|
10949
11000
|
() => createBuiltInColumns({ businessDays, enableTaskMultiSelect }),
|
|
10950
11001
|
[businessDays, enableTaskMultiSelect]
|
|
10951
11002
|
);
|
|
10952
|
-
|
|
11003
|
+
useEffect8(() => {
|
|
10953
11004
|
setColumnWidthOverrides(normalizeColumnWidthMap(taskListColumnWidths));
|
|
10954
11005
|
}, [taskListColumnWidths]);
|
|
10955
|
-
const resolvedColumns =
|
|
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 =
|
|
11022
|
+
const resolvedColumnWidthTotal = useMemo10(
|
|
10972
11023
|
() => resolvedColumns.reduce((sum, col) => sum + (col.width ?? 120), 0),
|
|
10973
11024
|
[resolvedColumns]
|
|
10974
11025
|
);
|
|
10975
|
-
const generationSkeletonTaskListLayout =
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
11136
|
-
/* @__PURE__ */
|
|
11137
|
-
/* @__PURE__ */
|
|
11138
|
-
/* @__PURE__ */
|
|
11139
|
-
/* @__PURE__ */
|
|
11140
|
-
/* @__PURE__ */
|
|
11141
|
-
/* @__PURE__ */
|
|
11142
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
11257
|
+
React14.createElement(LINK_TYPE_ICONS[activeLinkType]),
|
|
11207
11258
|
" \u25BE"
|
|
11208
11259
|
]
|
|
11209
11260
|
}
|
|
11210
11261
|
) }),
|
|
11211
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
11221
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
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
|
-
|
|
11834
|
+
useEffect9(() => {
|
|
11784
11835
|
rowsRef.current = rows;
|
|
11785
11836
|
}, [rows]);
|
|
11786
|
-
|
|
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
|
-
|
|
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
|
|
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__ */
|
|
12085
|
-
/* @__PURE__ */
|
|
12086
|
-
/* @__PURE__ */
|
|
12087
|
-
/* @__PURE__ */
|
|
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__ */
|
|
12093
|
-
/* @__PURE__ */
|
|
12094
|
-
/* @__PURE__ */
|
|
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__ */
|
|
12100
|
-
/* @__PURE__ */
|
|
12101
|
-
/* @__PURE__ */
|
|
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__ */
|
|
12106
|
-
/* @__PURE__ */
|
|
12107
|
-
/* @__PURE__ */
|
|
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__ */
|
|
12111
|
-
var ResourceGroupChevronIcon = () => /* @__PURE__ */
|
|
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__ */
|
|
12117
|
-
/* @__PURE__ */
|
|
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 =
|
|
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
|
-
|
|
12204
|
+
useEffect10(() => {
|
|
12154
12205
|
if (!editingName) {
|
|
12155
12206
|
setNameValue(resource.name);
|
|
12156
12207
|
}
|
|
12157
12208
|
}, [editingName, resource.name]);
|
|
12158
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
12235
|
-
/* @__PURE__ */
|
|
12285
|
+
/* @__PURE__ */ jsx19(ResourceTypeIcon, { type }),
|
|
12286
|
+
/* @__PURE__ */ jsx19(ResourceTypeDropdownIcon, {})
|
|
12236
12287
|
]
|
|
12237
12288
|
}
|
|
12238
12289
|
) }),
|
|
12239
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
12339
|
+
children: /* @__PURE__ */ jsx19(ResourceStatusLockIcon, {})
|
|
12289
12340
|
}
|
|
12290
12341
|
),
|
|
12291
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
12359
|
+
children: /* @__PURE__ */ jsx19("span", { children: scopeLabel })
|
|
12309
12360
|
}
|
|
12310
12361
|
) }),
|
|
12311
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
12337
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
12343
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
12426
|
+
children: /* @__PURE__ */ jsx19("span", { "aria-hidden": "true", children: "\u22EE" })
|
|
12376
12427
|
}
|
|
12377
12428
|
) }),
|
|
12378
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
12442
|
-
/* @__PURE__ */
|
|
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 =
|
|
12500
|
-
const dateRange =
|
|
12501
|
-
const monthStart =
|
|
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 =
|
|
12556
|
+
const weekendPredicate = useMemo11(
|
|
12506
12557
|
() => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
|
|
12507
12558
|
[customDays, isWeekend3]
|
|
12508
12559
|
);
|
|
12509
|
-
const gridWidth =
|
|
12510
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
12583
|
+
const orderedResources = useMemo11(
|
|
12533
12584
|
() => resourceGrouping === "type" ? orderResourcesByType(resources) : resources,
|
|
12534
12585
|
[resourceGrouping, resources]
|
|
12535
12586
|
);
|
|
12536
|
-
const workedDaysByResourceId =
|
|
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 =
|
|
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
|
-
|
|
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__ */
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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(
|
|
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__ */
|
|
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__ */
|
|
13042
|
+
children: /* @__PURE__ */ jsx19(ResourceGroupChevronIcon, {})
|
|
12992
13043
|
}
|
|
12993
13044
|
),
|
|
12994
|
-
/* @__PURE__ */
|
|
12995
|
-
/* @__PURE__ */
|
|
12996
|
-
canAddResource && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
13128
|
-
displayLayout.groupHeaders.map((group) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
13264
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
13354
|
+
children: /* @__PURE__ */ jsx19("span", { "aria-hidden": "true", children: "\u22EE" })
|
|
13304
13355
|
}
|
|
13305
13356
|
),
|
|
13306
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
13367
|
+
/* @__PURE__ */ jsx19("span", { className: "gantt-resourceTimeline-itemTitle", children: layoutItem.item.title })
|
|
13317
13368
|
] }),
|
|
13318
|
-
layoutItem.item.subtitle && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
13324
|
-
/* @__PURE__ */
|
|
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
|
|
13346
|
-
import { jsx as
|
|
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 =
|
|
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 =
|
|
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 =
|
|
13505
|
+
const gridTemplateColumns = useMemo12(
|
|
13455
13506
|
() => resolvedColumnWidths.map((width) => `${width}px`).join(" "),
|
|
13456
13507
|
[resolvedColumnWidths]
|
|
13457
13508
|
);
|
|
13458
|
-
const totalWidth =
|
|
13509
|
+
const totalWidth = useMemo12(
|
|
13459
13510
|
() => resolvedColumnWidths.reduce((sum, width) => sum + width, 0),
|
|
13460
13511
|
[resolvedColumnWidths]
|
|
13461
13512
|
);
|
|
13462
|
-
const overlayDateMs =
|
|
13513
|
+
const overlayDateMs = useMemo12(
|
|
13463
13514
|
() => dateOverlay ? parseDateOnlyMs(dateOverlay.date) : null,
|
|
13464
13515
|
[dateOverlay]
|
|
13465
13516
|
);
|
|
13466
|
-
const hasGroupHeader =
|
|
13517
|
+
const hasGroupHeader = useMemo12(
|
|
13467
13518
|
() => columns.some((column) => !!column.groupId) || (columnGroups?.length ?? 0) > 0,
|
|
13468
13519
|
[columnGroups, columns]
|
|
13469
13520
|
);
|
|
13470
|
-
const groupMap =
|
|
13521
|
+
const groupMap = useMemo12(
|
|
13471
13522
|
() => new Map((columnGroups ?? []).map((group) => [group.id, group])),
|
|
13472
13523
|
[columnGroups]
|
|
13473
13524
|
);
|
|
13474
|
-
const headerSpans =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
13714
|
-
import { jsx as
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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 =
|
|
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 =
|
|
14225
|
+
const renderedRowIndices = useMemo13(
|
|
14175
14226
|
() => visibleRowIndices ?? tasks.map((_, index) => index),
|
|
14176
14227
|
[tasks, visibleRowIndices]
|
|
14177
14228
|
);
|
|
14178
|
-
const renderedDateIndices =
|
|
14229
|
+
const renderedDateIndices = useMemo13(
|
|
14179
14230
|
() => visibleDateIndices ?? dateRange.map((_, index) => index),
|
|
14180
14231
|
[dateRange, visibleDateIndices]
|
|
14181
14232
|
);
|
|
14182
|
-
const parentTaskIds =
|
|
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 =
|
|
14190
|
-
const renderedDateWindow =
|
|
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 =
|
|
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 =
|
|
14251
|
+
const taskById = useMemo13(
|
|
14201
14252
|
() => new Map(tasks.map((task) => [task.id, task])),
|
|
14202
14253
|
[tasks]
|
|
14203
14254
|
);
|
|
14204
|
-
const monthSeparatorIndices =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
14651
|
+
useEffect11(() => () => {
|
|
14601
14652
|
if (hoverFrameRef.current !== null) {
|
|
14602
14653
|
window.cancelAnimationFrame(hoverFrameRef.current);
|
|
14603
14654
|
}
|
|
14604
14655
|
}, []);
|
|
14605
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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__ */
|
|
15308
|
+
return /* @__PURE__ */ jsx22(ResourceTimelineChart, { ...props });
|
|
15258
15309
|
}
|
|
15259
|
-
return /* @__PURE__ */
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
15661
|
+
const isCustomWeekend = useMemo14(
|
|
15610
15662
|
() => createCustomDayPredicate({ customDays, isWeekend: isWeekend3 }),
|
|
15611
15663
|
[customDays, isWeekend3]
|
|
15612
15664
|
);
|
|
15613
|
-
const criticalTaskIds =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
15989
|
+
useEffect12(() => {
|
|
15938
15990
|
const result = validateDependencies(tasks);
|
|
15939
15991
|
setValidationResult(result);
|
|
15940
15992
|
onValidateDependencies?.(result);
|
|
15941
15993
|
}, [tasks, onValidateDependencies]);
|
|
15942
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
16228
|
+
const visibleTaskIndexMap = useMemo14(
|
|
16177
16229
|
() => new Map(visibleTasks.map((task, index) => [task.id, index])),
|
|
16178
16230
|
[visibleTasks]
|
|
16179
16231
|
);
|
|
16180
|
-
const forcedRenderedTaskIds =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
16310
|
+
const renderedDependencyTasks = useMemo14(
|
|
16259
16311
|
() => renderedChartTasks.map(({ task }) => task),
|
|
16260
16312
|
[renderedChartTasks]
|
|
16261
16313
|
);
|
|
16262
|
-
renderedTaskIdsRef.current =
|
|
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 =
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
16839
|
-
!disableDependencyEditing && /* @__PURE__ */
|
|
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__ */
|
|
16862
|
-
/* @__PURE__ */
|
|
16863
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
16892
|
-
dragGuideLines && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
|
17011
|
-
import { jsx as
|
|
17012
|
-
var Button =
|
|
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__ */
|
|
17073
|
+
return /* @__PURE__ */ jsx23("button", { ref, className: classes, ...props, children });
|
|
17021
17074
|
}
|
|
17022
17075
|
);
|
|
17023
17076
|
Button.displayName = "Button";
|