gantt-lib 0.133.1 → 0.134.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/README.md CHANGED
@@ -159,6 +159,8 @@ Main component that renders the interactive Gantt chart.
159
159
  | `containerHeight` | `number \| string` | `undefined` | Container height in px, `%`, `vh`, or auto. |
160
160
  | `showTaskList` | `boolean` | `false` | Shows the left-side task list. |
161
161
  | `showChart` | `boolean` | `true` | Hides the chart area when set to `false`. |
162
+ | `showTaskDateLabels` | `boolean` | `true` | Shows the task date range to the left of each task bar. |
163
+ | `showTaskNames` | `boolean` | `true` | Shows the task name to the right of each task bar. |
162
164
  | `showBaseline` | `boolean` | `false` | Renders baselines for tasks with `baselineStartDate` and `baselineEndDate`. |
163
165
  | `taskListWidth` | `number` | `660` | Requested width of the task list panel. |
164
166
  | `taskListColumnWidths` | `TaskListColumnWidthMap` | `undefined` | Width overrides for built-in and custom TaskList columns. |
package/dist/index.d.mts CHANGED
@@ -618,6 +618,10 @@ interface TaskChartSharedProps<TTask extends Task = Task> {
618
618
  skeletonStartOffsetDays?: number;
619
619
  /** Add a stable per-row backward jitter to skeleton chart bars, in days. */
620
620
  skeletonStartJitterDays?: number;
621
+ /** Render date ranges to the left of task bars in Gantt mode (default: true). */
622
+ showTaskDateLabels?: boolean;
623
+ /** Render task names to the right of task bars in Gantt mode (default: true). */
624
+ showTaskNames?: boolean;
621
625
  /** Optional vertical timeline markers such as deadlines and checkpoints. */
622
626
  timelineMarkers?: TimelineMarker[];
623
627
  /** Additional custom columns to render in the TaskList after built-in columns */
@@ -822,6 +826,10 @@ interface TaskRowProps {
822
826
  isDependencyDragActive?: boolean;
823
827
  /** Active chart view mode */
824
828
  viewMode?: 'day' | 'week' | 'month';
829
+ /** Render the date range label to the left of the task bar (default: true). */
830
+ showTaskDateLabels?: boolean;
831
+ /** Render the task name to the right of the task bar (default: true). */
832
+ showTaskNames?: boolean;
825
833
  }
826
834
  /**
827
835
  * TaskRow component - renders a single task row with a task bar
package/dist/index.d.ts CHANGED
@@ -618,6 +618,10 @@ interface TaskChartSharedProps<TTask extends Task = Task> {
618
618
  skeletonStartOffsetDays?: number;
619
619
  /** Add a stable per-row backward jitter to skeleton chart bars, in days. */
620
620
  skeletonStartJitterDays?: number;
621
+ /** Render date ranges to the left of task bars in Gantt mode (default: true). */
622
+ showTaskDateLabels?: boolean;
623
+ /** Render task names to the right of task bars in Gantt mode (default: true). */
624
+ showTaskNames?: boolean;
621
625
  /** Optional vertical timeline markers such as deadlines and checkpoints. */
622
626
  timelineMarkers?: TimelineMarker[];
623
627
  /** Additional custom columns to render in the TaskList after built-in columns */
@@ -822,6 +826,10 @@ interface TaskRowProps {
822
826
  isDependencyDragActive?: boolean;
823
827
  /** Active chart view mode */
824
828
  viewMode?: 'day' | 'week' | 'month';
829
+ /** Render the date range label to the left of the task bar (default: true). */
830
+ showTaskDateLabels?: boolean;
831
+ /** Render the task name to the right of the task bar (default: true). */
832
+ showTaskNames?: boolean;
825
833
  }
826
834
  /**
827
835
  * TaskRow component - renders a single task row with a task bar
package/dist/index.js CHANGED
@@ -3988,7 +3988,13 @@ var useTaskDrag = (options) => {
3988
3988
  const rawHookTask = allTasks.find((t) => t.id === taskId);
3989
3989
  const hookTask = rawHookTask ? normalizeTaskDatesForType(rawHookTask) : void 0;
3990
3990
  const hookTaskIsMilestone = hookTask ? isMilestoneTask(hookTask) : false;
3991
+ const authoritativeStartTime = parseUTCDate(hookTask?.startDate ?? initialStartDate).getTime();
3992
+ const authoritativeEndTime = parseUTCDate(hookTask?.endDate ?? initialEndDate).getTime();
3991
3993
  const isOwnerRef = (0, import_react2.useRef)(false);
3994
+ const authoritativeRangeRef = (0, import_react2.useRef)({
3995
+ start: authoritativeStartTime,
3996
+ end: authoritativeEndTime
3997
+ });
3992
3998
  const effectiveLocked = locked || disableTaskDrag;
3993
3999
  const [isDragging, setIsDragging] = (0, import_react2.useState)(false);
3994
4000
  const [dragMode, setDragMode] = (0, import_react2.useState)(null);
@@ -4015,6 +4021,17 @@ var useTaskDrag = (options) => {
4015
4021
  const width = Math.round((duration + 1) * dayWidth);
4016
4022
  return { left, width };
4017
4023
  }, [initialStartDate, initialEndDate, monthStart, dayWidth, hookTaskIsMilestone]);
4024
+ (0, import_react2.useEffect)(() => {
4025
+ const nextRange = {
4026
+ start: authoritativeStartTime,
4027
+ end: authoritativeEndTime
4028
+ };
4029
+ const previousRange = authoritativeRangeRef.current;
4030
+ authoritativeRangeRef.current = nextRange;
4031
+ if ((previousRange.start !== nextRange.start || previousRange.end !== nextRange.end) && isOwnerRef.current && globalActiveDrag?.taskId === taskId) {
4032
+ cancelDrag();
4033
+ }
4034
+ }, [authoritativeStartTime, authoritativeEndTime, taskId]);
4018
4035
  (0, import_react2.useEffect)(() => {
4019
4036
  if (isOwnerRef.current && globalActiveDrag) return;
4020
4037
  const { left, width } = getInitialPosition();
@@ -4361,10 +4378,10 @@ var useTaskDrag = (options) => {
4361
4378
  // src/components/TaskRow/TaskRow.tsx
4362
4379
  var import_jsx_runtime2 = require("react/jsx-runtime");
4363
4380
  var arePropsEqual = (prevProps, nextProps) => {
4364
- 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;
4381
+ 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;
4365
4382
  };
4366
4383
  var TaskRow = import_react3.default.memo(
4367
- ({ 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" }) => {
4384
+ ({ 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 }) => {
4368
4385
  const defaultParentBarColor = "#782FC4";
4369
4386
  const { divider: taskDivider } = task;
4370
4387
  const normalizedTask = (0, import_react3.useMemo)(() => normalizeTaskDatesForType(task), [task]);
@@ -4640,7 +4657,7 @@ var TaskRow = import_react3.default.memo(
4640
4657
  }
4641
4658
  )
4642
4659
  ] }),
4643
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
4660
+ showTaskDateLabels && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
4644
4661
  "div",
4645
4662
  {
4646
4663
  className: `gantt-tr-leftLabels ${task.locked ? "gantt-tr-leftLabels-locked" : ""}`,
@@ -4685,7 +4702,7 @@ var TaskRow = import_react3.default.memo(
4685
4702
  progressWidth,
4686
4703
  "%"
4687
4704
  ] }),
4688
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
4705
+ showTaskNames && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
4689
4706
  "span",
4690
4707
  {
4691
4708
  className: "gantt-tr-externalTaskName",
@@ -14156,6 +14173,8 @@ function TaskGanttChartInner(props, ref) {
14156
14173
  skeletonRowCount = 0,
14157
14174
  skeletonStartOffsetDays = 0,
14158
14175
  skeletonStartJitterDays = 0,
14176
+ showTaskDateLabels = true,
14177
+ showTaskNames = true,
14159
14178
  timelineMarkers,
14160
14179
  additionalColumns,
14161
14180
  hiddenTaskListColumns,
@@ -15594,7 +15613,9 @@ function TaskGanttChartInner(props, ref) {
15594
15613
  disableDependencyEditing,
15595
15614
  onDependencyPortPointerDown: handleDependencyPortPointerDown,
15596
15615
  isDependencyDragActive: dependencyCreationDrag !== null,
15597
- viewMode
15616
+ viewMode,
15617
+ showTaskDateLabels,
15618
+ showTaskNames
15598
15619
  }
15599
15620
  )
15600
15621
  },