gantt-lib 0.135.3 → 0.135.5
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.d.mts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +17 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -796,6 +796,8 @@ interface TaskRowProps {
|
|
|
796
796
|
enableAutoSchedule?: boolean;
|
|
797
797
|
/** Whether to disable constraint checking during drag */
|
|
798
798
|
disableConstraints?: boolean;
|
|
799
|
+
/** Keep the dragged bar live but defer the cascade preview until drop. */
|
|
800
|
+
deferCascadePreview?: boolean;
|
|
799
801
|
/** Position override for cascade preview — when set, overrides both static and drag position */
|
|
800
802
|
overridePosition?: {
|
|
801
803
|
left: number;
|
|
@@ -967,6 +969,7 @@ interface DragGuideLinesProps {
|
|
|
967
969
|
left: number;
|
|
968
970
|
width: number;
|
|
969
971
|
totalHeight: number;
|
|
972
|
+
top?: number;
|
|
970
973
|
}
|
|
971
974
|
declare const DragGuideLines: React$1.FC<DragGuideLinesProps>;
|
|
972
975
|
|
|
@@ -1269,6 +1272,8 @@ interface UseTaskDragOptions {
|
|
|
1269
1272
|
enableAutoSchedule?: boolean;
|
|
1270
1273
|
/** When true, dependency constraint checking is skipped during drag (default: false) */
|
|
1271
1274
|
disableConstraints?: boolean;
|
|
1275
|
+
/** Skip live cascade and parent scaling on large charts; drop semantics remain unchanged. */
|
|
1276
|
+
deferCascadePreview?: boolean;
|
|
1272
1277
|
/** Callback for real-time cascade preview — called each RAF with non-dragged chain member positions */
|
|
1273
1278
|
onCascadeProgress?: (overrides: Map<string, {
|
|
1274
1279
|
left: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -796,6 +796,8 @@ interface TaskRowProps {
|
|
|
796
796
|
enableAutoSchedule?: boolean;
|
|
797
797
|
/** Whether to disable constraint checking during drag */
|
|
798
798
|
disableConstraints?: boolean;
|
|
799
|
+
/** Keep the dragged bar live but defer the cascade preview until drop. */
|
|
800
|
+
deferCascadePreview?: boolean;
|
|
799
801
|
/** Position override for cascade preview — when set, overrides both static and drag position */
|
|
800
802
|
overridePosition?: {
|
|
801
803
|
left: number;
|
|
@@ -967,6 +969,7 @@ interface DragGuideLinesProps {
|
|
|
967
969
|
left: number;
|
|
968
970
|
width: number;
|
|
969
971
|
totalHeight: number;
|
|
972
|
+
top?: number;
|
|
970
973
|
}
|
|
971
974
|
declare const DragGuideLines: React$1.FC<DragGuideLinesProps>;
|
|
972
975
|
|
|
@@ -1269,6 +1272,8 @@ interface UseTaskDragOptions {
|
|
|
1269
1272
|
enableAutoSchedule?: boolean;
|
|
1270
1273
|
/** When true, dependency constraint checking is skipped during drag (default: false) */
|
|
1271
1274
|
disableConstraints?: boolean;
|
|
1275
|
+
/** Skip live cascade and parent scaling on large charts; drop semantics remain unchanged. */
|
|
1276
|
+
deferCascadePreview?: boolean;
|
|
1272
1277
|
/** Callback for real-time cascade preview — called each RAF with non-dragged chain member positions */
|
|
1273
1278
|
onCascadeProgress?: (overrides: Map<string, {
|
|
1274
1279
|
left: number;
|
package/dist/index.js
CHANGED
|
@@ -3823,8 +3823,8 @@ function handleGlobalMouseMove(e) {
|
|
|
3823
3823
|
if (draggedTask && isMilestoneTask(draggedTask)) {
|
|
3824
3824
|
newWidth = dayWidth;
|
|
3825
3825
|
}
|
|
3826
|
-
const isParentResizePreview = draggedTask && (mode === "resize-left" || mode === "resize-right") && isTaskParent(activeDrag.taskId, allTasks);
|
|
3827
|
-
if (isParentResizePreview && activeDrag.onCascadeProgress) {
|
|
3826
|
+
const isParentResizePreview = !activeDrag.deferCascadePreview && draggedTask && (mode === "resize-left" || mode === "resize-right") && isTaskParent(activeDrag.taskId, allTasks);
|
|
3827
|
+
if (!activeDrag.deferCascadePreview && isParentResizePreview && activeDrag.onCascadeProgress) {
|
|
3828
3828
|
const { dayWidth: dw, monthStart: mStart } = activeDrag;
|
|
3829
3829
|
const previewRange = resolveDragRangeForInteraction(activeDrag, draggedTask, mode, newLeft, newWidth);
|
|
3830
3830
|
const anchor = mode === "resize-left" ? "end" : "start";
|
|
@@ -3875,7 +3875,7 @@ function handleGlobalMouseMove(e) {
|
|
|
3875
3875
|
activeDrag.onCascadeProgress(liveOverrides, activeDrag.parentScalePreview.previewTasks);
|
|
3876
3876
|
}
|
|
3877
3877
|
}
|
|
3878
|
-
if (!activeDrag.disableConstraints && activeDrag.onCascadeProgress && !isParentResizePreview) {
|
|
3878
|
+
if (!activeDrag.deferCascadePreview && !activeDrag.disableConstraints && activeDrag.onCascadeProgress && !isParentResizePreview) {
|
|
3879
3879
|
const { dayWidth: dayWidth2, monthStart: mStart, taskId: dragId } = activeDrag;
|
|
3880
3880
|
const originalDraggedTask = draggedTask ?? allTasks.find((t) => t.id === dragId);
|
|
3881
3881
|
const previewRange = originalDraggedTask ? clampDateRangeForIncomingFS(
|
|
@@ -3999,6 +3999,7 @@ var useTaskDrag = (options) => {
|
|
|
3999
3999
|
rowIndex,
|
|
4000
4000
|
enableAutoSchedule = false,
|
|
4001
4001
|
disableConstraints = false,
|
|
4002
|
+
deferCascadePreview = false,
|
|
4002
4003
|
onCascadeProgress,
|
|
4003
4004
|
onCascade,
|
|
4004
4005
|
locked = false,
|
|
@@ -4336,13 +4337,14 @@ var useTaskDrag = (options) => {
|
|
|
4336
4337
|
onCancel: handleCancel,
|
|
4337
4338
|
allTasks,
|
|
4338
4339
|
disableConstraints,
|
|
4340
|
+
deferCascadePreview,
|
|
4339
4341
|
onCascadeProgress,
|
|
4340
4342
|
businessDays,
|
|
4341
4343
|
weekendPredicate,
|
|
4342
4344
|
cascadeContext: shouldBuildCascadeContext ? createCascadeContext(allTasks) : void 0,
|
|
4343
4345
|
scheduleIntentMode: Boolean(onScheduleIntent)
|
|
4344
4346
|
};
|
|
4345
|
-
}, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, onCascadeProgress, onCascade, effectiveLocked, viewMode]);
|
|
4347
|
+
}, [edgeZoneWidth, currentLeft, currentWidth, dayWidth, monthStart, taskId, onDragStateChange, handleProgress, handleComplete, handleCancel, allTasks, disableConstraints, deferCascadePreview, onCascadeProgress, onCascade, effectiveLocked, viewMode]);
|
|
4346
4348
|
const handleMouseDown = (0, import_react2.useCallback)((e) => {
|
|
4347
4349
|
startDrag(e);
|
|
4348
4350
|
}, [startDrag]);
|
|
@@ -4400,10 +4402,10 @@ var useTaskDrag = (options) => {
|
|
|
4400
4402
|
// src/components/TaskRow/TaskRow.tsx
|
|
4401
4403
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
4402
4404
|
var arePropsEqual = (prevProps, nextProps) => {
|
|
4403
|
-
return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames;
|
|
4405
|
+
return prevProps.task.id === nextProps.task.id && prevProps.task.name === nextProps.task.name && prevProps.task.startDate === nextProps.task.startDate && prevProps.task.endDate === nextProps.task.endDate && prevProps.task.baselineStartDate === nextProps.task.baselineStartDate && prevProps.task.baselineEndDate === nextProps.task.baselineEndDate && prevProps.task.type === nextProps.task.type && prevProps.task.color === nextProps.task.color && prevProps.task.progress === nextProps.task.progress && prevProps.task.accepted === nextProps.task.accepted && prevProps.monthStart.getTime() === nextProps.monthStart.getTime() && prevProps.dayWidth === nextProps.dayWidth && prevProps.rowHeight === nextProps.rowHeight && prevProps.overridePosition?.left === nextProps.overridePosition?.left && prevProps.overridePosition?.width === nextProps.overridePosition?.width && prevProps.previewPositionStore === nextProps.previewPositionStore && prevProps.allTasks === nextProps.allTasks && prevProps.disableConstraints === nextProps.disableConstraints && prevProps.deferCascadePreview === nextProps.deferCascadePreview && prevProps.task.locked === nextProps.task.locked && prevProps.task.synced === nextProps.task.synced && prevProps.task.divider === nextProps.task.divider && prevProps.highlightExpiredTasks === nextProps.highlightExpiredTasks && prevProps.isCritical === nextProps.isCritical && prevProps.showBaseline === nextProps.showBaseline && prevProps.isFilterMatch === nextProps.isFilterMatch && prevProps.businessDays === nextProps.businessDays && prevProps.customDays === nextProps.customDays && prevProps.isWeekend === nextProps.isWeekend && prevProps.disableTaskDrag === nextProps.disableTaskDrag && prevProps.disableDependencyEditing === nextProps.disableDependencyEditing && prevProps.isDependencyDragActive === nextProps.isDependencyDragActive && prevProps.viewMode === nextProps.viewMode && prevProps.showTaskDateLabels === nextProps.showTaskDateLabels && prevProps.showTaskNames === nextProps.showTaskNames;
|
|
4404
4406
|
};
|
|
4405
4407
|
var TaskRow = import_react3.default.memo(
|
|
4406
|
-
({ task, monthStart, dayWidth, rowHeight, onTasksChange, onScheduleIntent, onDragStateChange, rowIndex, allTasks, enableAutoSchedule, disableConstraints, overridePosition, previewPositionStore, onCascadeProgress, onCascade, divider, highlightExpiredTasks, isCritical = false, showBaseline = false, isFilterMatch = false, businessDays, customDays, isWeekend: isWeekend3, disableTaskDrag = false, disableDependencyEditing = false, onDependencyPortPointerDown, isDependencyDragActive = false, viewMode = "day", showTaskDateLabels = true, showTaskNames = true }) => {
|
|
4408
|
+
({ 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 }) => {
|
|
4407
4409
|
const defaultParentBarColor = "#782FC4";
|
|
4408
4410
|
const { divider: taskDivider } = task;
|
|
4409
4411
|
const normalizedTask = (0, import_react3.useMemo)(() => normalizeTaskDatesForType(task), [task]);
|
|
@@ -4525,6 +4527,7 @@ var TaskRow = import_react3.default.memo(
|
|
|
4525
4527
|
rowIndex,
|
|
4526
4528
|
enableAutoSchedule,
|
|
4527
4529
|
disableConstraints,
|
|
4530
|
+
deferCascadePreview,
|
|
4528
4531
|
locked: task.locked,
|
|
4529
4532
|
disableTaskDrag,
|
|
4530
4533
|
onCascadeProgress,
|
|
@@ -4948,7 +4951,8 @@ var DragGuideLines = ({
|
|
|
4948
4951
|
dragMode,
|
|
4949
4952
|
left,
|
|
4950
4953
|
width,
|
|
4951
|
-
totalHeight
|
|
4954
|
+
totalHeight,
|
|
4955
|
+
top = 0
|
|
4952
4956
|
}) => {
|
|
4953
4957
|
if (!isDragging || !dragMode) {
|
|
4954
4958
|
return null;
|
|
@@ -4962,6 +4966,7 @@ var DragGuideLines = ({
|
|
|
4962
4966
|
className: "gantt-dgl-guideLine",
|
|
4963
4967
|
style: {
|
|
4964
4968
|
left: `${left}px`,
|
|
4969
|
+
top: `${top}px`,
|
|
4965
4970
|
height: `${totalHeight}px`
|
|
4966
4971
|
}
|
|
4967
4972
|
}
|
|
@@ -4972,6 +4977,7 @@ var DragGuideLines = ({
|
|
|
4972
4977
|
className: "gantt-dgl-guideLine",
|
|
4973
4978
|
style: {
|
|
4974
4979
|
left: `${left + width}px`,
|
|
4980
|
+
top: `${top}px`,
|
|
4975
4981
|
height: `${totalHeight}px`
|
|
4976
4982
|
}
|
|
4977
4983
|
}
|
|
@@ -15637,7 +15643,8 @@ function TaskGanttChartInner(props, ref) {
|
|
|
15637
15643
|
dragMode: dragGuideLines.dragMode,
|
|
15638
15644
|
left: dragGuideLines.left,
|
|
15639
15645
|
width: dragGuideLines.width,
|
|
15640
|
-
totalHeight: totalGridHeight
|
|
15646
|
+
totalHeight: Math.min(totalGridHeight, scrollViewport.viewportHeight),
|
|
15647
|
+
top: Math.max(0, scrollViewport.scrollTop)
|
|
15641
15648
|
}
|
|
15642
15649
|
),
|
|
15643
15650
|
renderedChartTasks.map(({ task, index }) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
@@ -15660,6 +15667,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
15660
15667
|
onTasksChange: handleTaskChange,
|
|
15661
15668
|
onDragStateChange: (state) => {
|
|
15662
15669
|
if (state.isDragging) {
|
|
15670
|
+
if (normalizedTasks.length >= 1e3) return;
|
|
15663
15671
|
setDragGuideLines((current) => current && current.isDragging === state.isDragging && current.dragMode === state.dragMode && current.left === state.left && current.width === state.width ? current : state);
|
|
15664
15672
|
setDraggedTaskOverride((current) => current && current.taskId === task.id && current.left === state.left && current.width === state.width ? current : { taskId: task.id, left: state.left, width: state.width });
|
|
15665
15673
|
} else {
|
|
@@ -15674,6 +15682,7 @@ function TaskGanttChartInner(props, ref) {
|
|
|
15674
15682
|
allTasks: normalizedTasks,
|
|
15675
15683
|
enableAutoSchedule: enableAutoSchedule ?? false,
|
|
15676
15684
|
disableConstraints: disableConstraints ?? false,
|
|
15685
|
+
deferCascadePreview: normalizedTasks.length >= 1e3,
|
|
15677
15686
|
previewPositionStore,
|
|
15678
15687
|
onCascadeProgress: handleCascadeProgress,
|
|
15679
15688
|
onCascade: handleCascade,
|