gantt-lib 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1111,8 +1111,8 @@ var TaskRow = React2.memo(
1111
1111
  }
1112
1112
  const msPerDay = 1e3 * 60 * 60 * 24;
1113
1113
  const duration = taskEnd.getTime() - taskStart.getTime() + msPerDay;
1114
- const elapsedCutoff = taskEnd.getTime() < today.getTime() ? taskEnd.getTime() : today.getTime();
1115
- const elapsed = elapsedCutoff - taskStart.getTime();
1114
+ const elapsedFromToday = today.getTime() - taskStart.getTime();
1115
+ const elapsed = Math.min(Math.max(0, elapsedFromToday), duration);
1116
1116
  const expected = elapsed / duration * 100;
1117
1117
  return actualProgress < expected;
1118
1118
  }, [task.startDate, task.endDate, task.progress, highlightExpiredTasks]);
@@ -1322,7 +1322,7 @@ var TodayIndicator_default = TodayIndicator;
1322
1322
  import React4, { useMemo as useMemo4 } from "react";
1323
1323
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1324
1324
  var arePropsEqual2 = (prevProps, nextProps) => {
1325
- return prevProps.dayWidth === nextProps.dayWidth && prevProps.dateRange.length === nextProps.dateRange.length && prevProps.totalHeight !== nextProps.totalHeight;
1325
+ return prevProps.dayWidth === nextProps.dayWidth && prevProps.dateRange.length === nextProps.dateRange.length && prevProps.totalHeight === nextProps.totalHeight;
1326
1326
  };
1327
1327
  var GridBackground = React4.memo(
1328
1328
  ({ dateRange, dayWidth, totalHeight }) => {
@@ -2551,7 +2551,7 @@ var GanttChart = forwardRef(({
2551
2551
  const todayOffset = todayIndex * dayWidth;
2552
2552
  const containerWidth = container.clientWidth;
2553
2553
  const scrollLeft = Math.round(todayOffset - containerWidth / 2 + dayWidth / 2);
2554
- container.scrollLeft = Math.max(0, scrollLeft);
2554
+ container.scrollTo({ left: Math.max(0, scrollLeft), behavior: "smooth" });
2555
2555
  }, [dateRange, dayWidth]);
2556
2556
  const scrollToTask = useCallback6((taskId) => {
2557
2557
  const container = scrollContainerRef.current;
@@ -2568,7 +2568,7 @@ var GanttChart = forwardRef(({
2568
2568
  if (taskIndex === -1) return;
2569
2569
  const taskOffset = taskIndex * dayWidth;
2570
2570
  const scrollLeft = Math.round(taskOffset - dayWidth * 2);
2571
- container.scrollLeft = Math.max(0, scrollLeft);
2571
+ container.scrollTo({ left: Math.max(0, scrollLeft), behavior: "smooth" });
2572
2572
  }, [tasks, dateRange, dayWidth]);
2573
2573
  useImperativeHandle(
2574
2574
  ref,
@@ -2596,39 +2596,26 @@ var GanttChart = forwardRef(({
2596
2596
  const newStart = new Date(updatedTask.startDate);
2597
2597
  const newEnd = new Date(updatedTask.endDate);
2598
2598
  const datesChanged = origStart.getTime() !== newStart.getTime() || origEnd.getTime() !== newEnd.getTime();
2599
- if (!datesChanged || disableConstraints) {
2599
+ if (!datesChanged) {
2600
2600
  onChange?.((currentTasks) => currentTasks.map((t) => t.id === updatedTask.id ? updatedTask : t));
2601
2601
  return;
2602
2602
  }
2603
- const cascadedTask = updatedTask;
2604
- const cascadedChain = cascadeByLinks(updatedTask.id, newStart, newEnd, tasks);
2605
- const allCascaded = [cascadedTask, ...cascadedChain];
2606
- const now = /* @__PURE__ */ new Date();
2607
- const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
2608
- const msPerDay = 1e3 * 60 * 60 * 24;
2609
- console.log("[GanttChart handleTaskChange] IsExpired calculation:");
2610
- for (const t of allCascaded) {
2611
- const taskStart = new Date(t.startDate);
2612
- const taskEnd = new Date(t.endDate);
2613
- const actualProgress = t.progress ?? 0;
2614
- if (actualProgress >= 100) {
2615
- console.log(` [${t.id}] START=${t.startDate} END=${t.endDate} TODAY=${today.toISOString().split("T")[0]} PROGRESS=${actualProgress}% EXPECTED=N/A (completed) EXPIRED=NO`);
2616
- continue;
2617
- }
2618
- const duration = taskEnd.getTime() - taskStart.getTime() + msPerDay;
2619
- const elapsedCutoff = taskEnd.getTime() < today.getTime() ? taskEnd.getTime() : today.getTime();
2620
- const elapsed = elapsedCutoff - taskStart.getTime();
2621
- const expectedProgress = Math.min(100, Math.max(0, elapsed / duration * 100));
2622
- const isExpired = actualProgress < expectedProgress;
2623
- const durationDays = Math.round(duration / msPerDay);
2624
- const elapsedDays = Math.round(elapsed / msPerDay);
2625
- console.log(` [${t.id}] START=${t.startDate} END=${t.endDate} TODAY=${today.toISOString().split("T")[0]} PROGRESS=${actualProgress}% DURATION=${durationDays}d ELAPSED=${elapsedDays}d EXPECTED=${expectedProgress.toFixed(1)}% EXPIRED=${isExpired ? "YES" : "NO"}`);
2603
+ let cascadedTasksForCallback;
2604
+ if (disableConstraints) {
2605
+ cascadedTasksForCallback = [updatedTask];
2606
+ } else {
2607
+ const cascadedChain = cascadeByLinks(updatedTask.id, newStart, newEnd, tasks);
2608
+ cascadedTasksForCallback = [updatedTask, ...cascadedChain];
2609
+ }
2610
+ if (disableConstraints) {
2611
+ onChange?.((currentTasks) => currentTasks.map((t) => t.id === updatedTask.id ? updatedTask : t));
2612
+ } else {
2613
+ onChange?.((currentTasks) => {
2614
+ const m = new Map(cascadedTasksForCallback.map((t) => [t.id, t]));
2615
+ return currentTasks.map((t) => m.get(t.id) ?? t);
2616
+ });
2617
+ onCascade?.(cascadedTasksForCallback);
2626
2618
  }
2627
- onChange?.((currentTasks) => {
2628
- const m = new Map(allCascaded.map((t) => [t.id, t]));
2629
- return currentTasks.map((t) => m.get(t.id) ?? t);
2630
- });
2631
- onCascade?.(allCascaded);
2632
2619
  }, [tasks, onChange, disableConstraints, onCascade]);
2633
2620
  const dependencyOverrides = useMemo9(() => {
2634
2621
  const map = new Map(cascadeOverrides);