gantt-lib 0.136.0 → 0.136.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +49 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +49 -22
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +11 -2
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4264,16 +4264,17 @@ var useTaskDrag = (options) => {
|
|
|
4264
4264
|
|
|
4265
4265
|
// src/components/TaskRow/TaskRow.tsx
|
|
4266
4266
|
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
4267
|
+
var COMPOSITE_SEGMENT_CUT_MIN_PX = 10;
|
|
4267
4268
|
var formatCompositePreviewDate = (date) => {
|
|
4268
4269
|
const month = new Intl.DateTimeFormat("ru-RU", { month: "short", timeZone: "UTC" }).format(date).replace(/\.$/, "");
|
|
4269
4270
|
const yearSuffix = date.getUTCFullYear() === (/* @__PURE__ */ new Date()).getFullYear() ? "" : ` ${String(date.getUTCFullYear()).slice(-2)}`;
|
|
4270
4271
|
return `${date.getUTCDate()} ${month}${yearSuffix}`;
|
|
4271
4272
|
};
|
|
4272
4273
|
var arePropsEqual = (prevProps, nextProps) => {
|
|
4273
|
-
return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.deferCascadePreview === nextProps.deferCascadePreview && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.onCompositeToggle === nextProps.onCompositeToggle && prevProps.compactDetail === nextProps.compactDetail && prevProps.compositeParentColor === nextProps.compositeParentColor && prevProps.compositeExpanded === nextProps.compositeExpanded && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames;
|
|
4274
|
+
return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.deferCascadePreview === nextProps.deferCascadePreview && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.onCompositeToggle === nextProps.onCompositeToggle && prevProps.compactDetail === nextProps.compactDetail && prevProps.compositeParentColor === nextProps.compositeParentColor && prevProps.compositeExpanded === nextProps.compositeExpanded && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames && prevProps.showCompositeSegments === nextProps.showCompositeSegments;
|
|
4274
4275
|
};
|
|
4275
4276
|
var TaskRow = React2.memo(
|
|
4276
|
-
({ task, monthStart, dayWidth, rowHeight, onTasksChange, onScheduleIntent, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, deferCascadePreview = false, overridePosition, previewPositionStore, onCascadeProgress, onCascade, divider, highlightExpiredTasks, isCritical = false, showBaseline = false, isFilterMatch = false, businessDays, customDays, isWeekend: isWeekend3, disableTaskDrag = false, disableDependencyEditing = false, onDependencyPortPointerDown, isDependencyDragActive = false, viewMode = "day", showTaskDateLabels = true, showTaskNames = true, onCompositeToggle, compactDetail = false, compositeParentColor, compositeExpanded = false }) => {
|
|
4277
|
+
({ task, monthStart, dayWidth, rowHeight, onTasksChange, onScheduleIntent, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, deferCascadePreview = false, overridePosition, previewPositionStore, onCascadeProgress, onCascade, divider, highlightExpiredTasks, isCritical = false, showBaseline = false, isFilterMatch = false, businessDays, customDays, isWeekend: isWeekend3, disableTaskDrag = false, disableDependencyEditing = false, onDependencyPortPointerDown, isDependencyDragActive = false, viewMode = "day", showTaskDateLabels = true, showTaskNames = true, showCompositeSegments: showCompositeSegmentsProp = true, onCompositeToggle, compactDetail = false, compositeParentColor, compositeExpanded = false }) => {
|
|
4277
4278
|
const defaultParentBarColor = "#782FC4";
|
|
4278
4279
|
const [showCompositePreview, setShowCompositePreview] = useState2(false);
|
|
4279
4280
|
const [compositePreviewPosition, setCompositePreviewPosition] = useState2(null);
|
|
@@ -4455,22 +4456,32 @@ var TaskRow = React2.memo(
|
|
|
4455
4456
|
const compositeSegments = useMemo2(() => {
|
|
4456
4457
|
if (!task.composite || width <= 0) return [];
|
|
4457
4458
|
const laneEnds = [];
|
|
4458
|
-
|
|
4459
|
+
const segments2 = compositeChildren.map((child) => {
|
|
4459
4460
|
const segment = calculateTaskBar(parseUTCDate(child.startDate), parseUTCDate(child.endDate), monthStart, dayWidth);
|
|
4460
|
-
let lane =
|
|
4461
|
-
if (
|
|
4461
|
+
let lane = Math.max(0, laneEnds.length - 1);
|
|
4462
|
+
if (laneEnds.length > 0 && segment.left < laneEnds[lane]) {
|
|
4463
|
+
lane = laneEnds.length;
|
|
4464
|
+
}
|
|
4462
4465
|
laneEnds[lane] = segment.left + segment.width;
|
|
4463
4466
|
return {
|
|
4464
4467
|
id: child.id,
|
|
4465
4468
|
name: child.name,
|
|
4466
4469
|
left: (segment.left - left) / width * 100,
|
|
4467
4470
|
width: segment.width / width * 100,
|
|
4468
|
-
lane
|
|
4471
|
+
lane,
|
|
4472
|
+
pxLeft: segment.left - left,
|
|
4473
|
+
cut: false
|
|
4469
4474
|
};
|
|
4470
4475
|
});
|
|
4476
|
+
const lastCutByLane = [];
|
|
4477
|
+
for (const segment of [...segments2].sort((a, b) => a.pxLeft - b.pxLeft)) {
|
|
4478
|
+
segment.cut = segment.pxLeft >= 1 && segment.pxLeft - (lastCutByLane[segment.lane] ?? 0) >= COMPOSITE_SEGMENT_CUT_MIN_PX;
|
|
4479
|
+
if (segment.cut) lastCutByLane[segment.lane] = segment.pxLeft;
|
|
4480
|
+
}
|
|
4481
|
+
return segments2;
|
|
4471
4482
|
}, [task.composite, compositeChildren, monthStart, dayWidth, left, width, displayLeft]);
|
|
4472
4483
|
const compositeLaneCount = Math.max(1, ...compositeSegments.map((segment) => segment.lane + 1));
|
|
4473
|
-
const
|
|
4484
|
+
const shouldRenderCompositeSegments = showCompositeSegmentsProp && task.composite && compositeSegments.length > 0 && visualWidth / compositeSegments.length >= 22;
|
|
4474
4485
|
const shouldRenderBaseline = showBaseline && baselineGeometry !== null;
|
|
4475
4486
|
const hasPreviewPosition = isDragging || effectiveOverridePosition !== void 0;
|
|
4476
4487
|
const currentStartDate = hasPreviewPosition ? pixelsToDate(displayLeft, monthStart, dayWidth) : taskStartDate;
|
|
@@ -4599,19 +4610,33 @@ var TaskRow = React2.memo(
|
|
|
4599
4610
|
}
|
|
4600
4611
|
),
|
|
4601
4612
|
!milestone && /* @__PURE__ */ jsx2("div", { className: "gantt-tr-resizeHandle gantt-tr-resizeHandleLeft" }),
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4613
|
+
shouldRenderCompositeSegments && /* @__PURE__ */ jsxs2("span", { className: "gantt-tr-compositeSegments", "aria-hidden": "true", children: [
|
|
4614
|
+
compositeSegments.map((segment) => /* @__PURE__ */ jsx2(
|
|
4615
|
+
"span",
|
|
4616
|
+
{
|
|
4617
|
+
className: "gantt-tr-compositeSegment",
|
|
4618
|
+
style: {
|
|
4619
|
+
left: `${segment.left}%`,
|
|
4620
|
+
width: `${segment.width}%`,
|
|
4621
|
+
top: `${segment.lane / compositeLaneCount * 100}%`,
|
|
4622
|
+
height: `${100 / compositeLaneCount}%`
|
|
4623
|
+
}
|
|
4624
|
+
},
|
|
4625
|
+
segment.id
|
|
4626
|
+
)),
|
|
4627
|
+
compositeSegments.map((segment) => segment.cut ? /* @__PURE__ */ jsx2(
|
|
4628
|
+
"span",
|
|
4629
|
+
{
|
|
4630
|
+
className: "gantt-tr-compositeSegmentCut",
|
|
4631
|
+
style: {
|
|
4632
|
+
left: `${segment.left}%`,
|
|
4633
|
+
top: `${segment.lane / compositeLaneCount * 100}%`,
|
|
4634
|
+
height: `${100 / compositeLaneCount}%`
|
|
4635
|
+
}
|
|
4636
|
+
},
|
|
4637
|
+
`${segment.id}-cut`
|
|
4638
|
+
) : null)
|
|
4639
|
+
] }),
|
|
4615
4640
|
task.composite && /* @__PURE__ */ jsx2("span", { className: "gantt-tr-compositeHoverChevron", "aria-hidden": "true", children: /* @__PURE__ */ jsx2("svg", { className: `gantt-tr-compositeChevron${compositeExpanded ? " gantt-tr-compositeChevron-open" : ""}`, viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx2("path", { d: "m7 4 6 6-6 6", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
|
|
4616
4641
|
showDurationInside && /* @__PURE__ */ jsx2("span", { className: "gantt-tr-taskDuration", children: isVisualParent ? getChildCountLabel(childCount) : `${durationDays} \u0434` }),
|
|
4617
4642
|
progressWidth > 0 && showProgressInside && /* @__PURE__ */ jsxs2("span", { className: "gantt-tr-progressText", children: [
|
|
@@ -14343,6 +14368,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14343
14368
|
skeletonStartJitterDays = 0,
|
|
14344
14369
|
showTaskDateLabels = true,
|
|
14345
14370
|
showTaskNames = true,
|
|
14371
|
+
showCompositeSegments = true,
|
|
14346
14372
|
timelineMarkers,
|
|
14347
14373
|
additionalColumns,
|
|
14348
14374
|
hiddenTaskListColumns,
|
|
@@ -14564,8 +14590,8 @@ function TaskGanttChartInner(props, ref) {
|
|
|
14564
14590
|
const resolvedRowContentLines = isPlanFactMode ? Math.max(2, Math.floor(rowContentLines)) : Math.max(1, Math.floor(rowContentLines));
|
|
14565
14591
|
const shouldFillParentRowsInTaskList = fillParentRowsInTaskList ?? isPlanFactMode;
|
|
14566
14592
|
const effectiveRowHeight = useMemo13(
|
|
14567
|
-
() => Math.max(rowHeight, 10 + resolvedRowContentLines * 18),
|
|
14568
|
-
[resolvedRowContentLines, rowHeight]
|
|
14593
|
+
() => rowContentLines === 0 && !isPlanFactMode ? rowHeight : Math.max(rowHeight, 10 + resolvedRowContentLines * 18),
|
|
14594
|
+
[isPlanFactMode, resolvedRowContentLines, rowContentLines, rowHeight]
|
|
14569
14595
|
);
|
|
14570
14596
|
const normalizedTasks = useMemo13(() => {
|
|
14571
14597
|
const ordered = normalizeHierarchyTasks(tasks);
|
|
@@ -15909,6 +15935,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
15909
15935
|
viewMode,
|
|
15910
15936
|
showTaskDateLabels,
|
|
15911
15937
|
showTaskNames,
|
|
15938
|
+
showCompositeSegments,
|
|
15912
15939
|
onCompositeToggle: task.composite ? (source) => handleCompositeBarToggle(task.id, source) : void 0,
|
|
15913
15940
|
compositeExpanded: task.composite ? !collapsedParentIds.has(task.id) : void 0
|
|
15914
15941
|
}
|