gantt-task-react-powern 0.6.43 → 0.6.45

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
@@ -72,6 +72,8 @@ npm start
72
72
  | endDate | Date | Project-level end date used for calendar/critical-path bounds. |
73
73
  | projectCalendar | CalendarDefinition | Working calendar (shifts, off days, holidays) applied to scheduling. |
74
74
  | sliderTime | number | Vertical slider time marker (ms) drawn on the chart. |
75
+ | hideActualBeforeSlider | boolean | Draws actual bars transparent until `sliderTime` reaches their actual start day. |
76
+ | plannedInProgressColor | string | Planned bar fill while `sliderTime` is inside the task's `inProgressWindow`. |
75
77
  | [EventOption](#EventOption) | interface | Specifies gantt events. |
76
78
  | [DisplayOption](#DisplayOption) | interface | Specifies view type and display timeline language. |
77
79
  | [StylingOption](#StylingOption) | interface | Specifies chart and global tasks styles |
@@ -159,6 +161,7 @@ npm start
159
161
  | optionalId | string | Optional secondary id (e.g. external system id). |
160
162
  | dependencies | DependencyType[] | Parent dependencies. Each entry is `{ id: string; type: "SS" \| "SF" \| "FS" \| "FF" }`. |
161
163
  | criticalPathArrows | object[] | Arrows on the critical path: `{ taskId: string; arrowColor: string; criticalPathType: string }`. |
164
+ | inProgressWindow | object | `{ start: Date; end?: Date }`: days the planned bar takes `plannedInProgressColor` (open-ended without `end`). |
162
165
  | styles | object | Specifies the taskbar styling settings locally. Object is passed with the following attributes: |
163
166
  | | | - **backgroundColor**: String. Specifies the taskbar background fill color locally. |
164
167
  | | | - **backgroundSelectedColor**: String. Specifies the taskbar background fill color locally on select. |
@@ -28,5 +28,11 @@ export declare type TaskGanttContentProps = {
28
28
  setSelectedTask: (taskId: string) => void;
29
29
  onBarTasksUpdate?: (task: BarTask) => void;
30
30
  sliderTime?: number;
31
+ /** Draw actual bars transparent until sliderTime reaches their actual start day. */
32
+ hideActualBeforeSlider?: boolean;
33
+ /** Planned bar fill while sliderTime is inside the task's `inProgressWindow`. */
34
+ plannedInProgressColor?: string;
35
+ /** Split calendar bars around off days; false in Month/Quarter views. */
36
+ segmentBars?: boolean;
31
37
  } & EventOption;
32
38
  export declare const TaskGanttContent: React.FC<TaskGanttContentProps>;
@@ -1,7 +1,15 @@
1
- import { Task } from "../types/public-types";
1
+ import { CalendarDefinition, Task } from "../types/public-types";
2
2
  import { BarTask } from "../types/bar-task";
3
3
  import { BarMoveAction } from "../types/gantt-task-actions";
4
- export declare const convertToBarTasks: (tasks: Task[], dates: Date[], columnWidth: number, rowHeight: number, taskHeight: number, barCornerRadius: number, handleWidth: number, rtl: boolean, barProgressColor: string, barProgressSelectedColor: string, barBackgroundColor: string, barBackgroundSelectedColor: string, projectProgressColor: string, projectProgressSelectedColor: string, projectBackgroundColor: string, projectBackgroundSelectedColor: string, milestoneBackgroundColor: string, milestoneBackgroundSelectedColor: string) => BarTask[];
4
+ export declare const convertToBarTasks: (tasks: Task[], dates: Date[], columnWidth: number, rowHeight: number, taskHeight: number, barCornerRadius: number, handleWidth: number, rtl: boolean, barProgressColor: string, barProgressSelectedColor: string, barBackgroundColor: string, barBackgroundSelectedColor: string, projectProgressColor: string, projectProgressSelectedColor: string, projectBackgroundColor: string, projectBackgroundSelectedColor: string, milestoneBackgroundColor: string, milestoneBackgroundSelectedColor: string, segmentBars?: boolean) => BarTask[];
5
+ /**
6
+ * x-ranges of the working intervals from `start` through the end of `end`'s
7
+ * day, or undefined when none fall inside the chart.
8
+ */
9
+ export declare const getWorkingSegments: (start: Date, end: Date, calendar: CalendarDefinition, dates: Date[], columnWidth: number) => {
10
+ x1: number;
11
+ x2: number;
12
+ }[] | undefined;
5
13
  export declare const taskXCoordinate: (xDate: Date, dates: Date[], columnWidth: number) => number;
6
14
  export declare const progressWithByParams: (taskX1: number, taskX2: number, progress: number, rtl: boolean) => number[];
7
15
  export declare const progressByProgressWidth: (progressWidth: number, barTask: BarTask) => number;
@@ -3,7 +3,10 @@ import { CalendarDefinition } from "../types/public-types";
3
3
  export declare function parseTimeToMinutes(t: string): number;
4
4
  /** True if the date falls on a calendar holiday. */
5
5
  export declare function isHoliday(date: Date, cal: CalendarDefinition): boolean;
6
- /** True if the date's weekday is in off_days or is a holiday. */
6
+ /**
7
+ * True if the date's weekday is in off_days or is a holiday. Local weekday, to
8
+ * match the local-midnight dates and day loops used everywhere else.
9
+ */
7
10
  export declare function isOffDay(date: Date, cal: CalendarDefinition): boolean;
8
11
  /** Gets the timestamps (Milliseconds - UTC) of all off-days for a calendar between a start and end date*/
9
12
  export declare function getOffDays(calendar: CalendarDefinition, start: Date, end: Date): number[];
@@ -27,4 +27,9 @@ export declare const getLocaleMonth: (date: Date, locale: string) => string;
27
27
  export declare const getLocalDayOfWeek: (date: Date, locale: string, format?: "long" | "short" | "narrow" | undefined) => string;
28
28
  export declare const getWeekNumberISO8601: (date: Date) => string;
29
29
  export declare const getDaysInMonth: (month: number, year: number) => number;
30
+ /**
31
+ * Day-resolution views shade calendar off days and split task bars around
32
+ * them; Month and Quarter columns are too coarse, so they do neither.
33
+ */
34
+ export declare const viewShowsOffDays: (viewMode?: ViewMode | undefined) => boolean;
30
35
  export {};
package/dist/index.js CHANGED
@@ -269,6 +269,9 @@ var getMonday = function getMonday(date) {
269
269
  var diff = date.getDate() - day + (day === 0 ? -6 : 1);
270
270
  return new Date(date.setDate(diff));
271
271
  };
272
+ var viewShowsOffDays = function viewShowsOffDays(viewMode) {
273
+ return viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter;
274
+ };
272
275
 
273
276
  var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderResizeHandle":"_ddPJg","ganttTable_HeaderItem":"_WuQ0f","ganttTable_HeaderItemText":"_2X3fk"};
274
277
 
@@ -402,7 +405,7 @@ function isHoliday(date, cal) {
402
405
  }
403
406
  function isOffDay(date, cal) {
404
407
  if (cal.off_days && cal.off_days.length > 0) {
405
- return cal.off_days.includes(date.getUTCDay()) || isHoliday(date, cal);
408
+ return cal.off_days.includes(date.getDay()) || isHoliday(date, cal);
406
409
  } else {
407
410
  return false;
408
411
  }
@@ -1474,7 +1477,7 @@ var GridBody = function GridBody(_ref) {
1474
1477
  }));
1475
1478
  }
1476
1479
 
1477
- if (viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter) {
1480
+ if (viewShowsOffDays(viewMode)) {
1478
1481
  var _dates;
1479
1482
 
1480
1483
  var pEnd = (_dates = dates[i + 1]) != null ? _dates : addToDate(dates[i], 1, "day");
@@ -1541,7 +1544,7 @@ var GridBody = function GridBody(_ref) {
1541
1544
  y2: visibleStartY,
1542
1545
  className: styles$5.gridRowLine
1543
1546
  }));
1544
- var showPerRowOffDays = viewMode !== exports.ViewMode.Month && viewMode !== exports.ViewMode.Quarter;
1547
+ var showPerRowOffDays = viewShowsOffDays(viewMode);
1545
1548
 
1546
1549
  for (var _iterator = _createForOfIteratorHelperLoose(items), _step; !(_step = _iterator()).done;) {
1547
1550
  var vi = _step.value;
@@ -1677,6 +1680,7 @@ var TopPartOfCalendar = function TopPartOfCalendar(_ref) {
1677
1680
  }, value));
1678
1681
  };
1679
1682
 
1683
+ var MONTH_LABEL_HALF_WIDTH = 32;
1680
1684
  var Calendar = function Calendar(_ref) {
1681
1685
  var dateSetup = _ref.dateSetup,
1682
1686
  locale = _ref.locale,
@@ -1938,6 +1942,8 @@ var Calendar = function Calendar(_ref) {
1938
1942
  var topDefaultHeight = headerHeight * 0.5;
1939
1943
  var dates = dateSetup.dates;
1940
1944
  var weekStartDay = (_projectCalendar$week = projectCalendar === null || projectCalendar === void 0 ? void 0 : projectCalendar.week_start) != null ? _projectCalendar$week : 1;
1945
+ var chartWidth = columnWidth * dates.length;
1946
+ var monthStartIndex = 0;
1941
1947
 
1942
1948
  for (var i = 0; i < dates.length; i++) {
1943
1949
  var date = dates[i];
@@ -1969,32 +1975,23 @@ var Calendar = function Calendar(_ref) {
1969
1975
  x: columnWidth * i + columnWidth * 0.5,
1970
1976
  className: styles$6.calendarTopText + " " + styles$6.textAnchorMiddle
1971
1977
  }, bottomValue));
1978
+ var isMonthEnd = i + 1 === dates.length || date.getMonth() !== dates[i + 1].getMonth();
1972
1979
 
1973
- if (i + 1 !== dates.length && date.getMonth() !== dates[i + 1].getMonth()) {
1980
+ if (isMonthEnd) {
1974
1981
  var topValue = shortMonth(date) + " " + date.getFullYear();
1982
+ var segmentStart = columnWidth * monthStartIndex;
1983
+ var segmentEnd = columnWidth * (i + 1);
1984
+ var xText = Math.min(Math.max((segmentStart + segmentEnd) / 2, MONTH_LABEL_HALF_WIDTH), chartWidth - MONTH_LABEL_HALF_WIDTH);
1975
1985
  topValues.push(React__default.createElement(TopPartOfCalendar, {
1976
1986
  key: topValue + i,
1977
1987
  value: topValue,
1978
- x1Line: columnWidth * (i + 1),
1988
+ x1Line: segmentEnd,
1979
1989
  y1Line: 0,
1980
1990
  y2Line: topDefaultHeight,
1981
- xText: topValues.length === 0 ? columnWidth * (i + 1) * 0.5 : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5,
1982
- yText: topDefaultHeight * 0.9
1983
- }));
1984
- }
1985
-
1986
- if (i + 1 === dates.length) {
1987
- var _topValue = shortMonth(date) + " " + date.getFullYear();
1988
-
1989
- topValues.push(React__default.createElement(TopPartOfCalendar, {
1990
- key: _topValue + "last",
1991
- value: _topValue,
1992
- x1Line: columnWidth * (i + 1),
1993
- y1Line: 0,
1994
- y2Line: topDefaultHeight,
1995
- xText: columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5,
1991
+ xText: xText,
1996
1992
  yText: topDefaultHeight * 0.9
1997
1993
  }));
1994
+ monthStartIndex = i + 1;
1998
1995
  }
1999
1996
  }
2000
1997
 
@@ -2295,9 +2292,13 @@ var drawPathAndTriangle = function drawPathAndTriangle(taskFrom, taskTo, rowHeig
2295
2292
  return [path, trianglePoints];
2296
2293
  };
2297
2294
 
2298
- var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2295
+ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars) {
2296
+ if (segmentBars === void 0) {
2297
+ segmentBars = true;
2298
+ }
2299
+
2299
2300
  var barTasks = tasks.map(function (t, i) {
2300
- return convertToBarTask(t, i, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor);
2301
+ return convertToBarTask(t, i, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars);
2301
2302
  });
2302
2303
  var indexById = new Map();
2303
2304
 
@@ -2325,7 +2326,7 @@ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, ro
2325
2326
  return barTasks;
2326
2327
  };
2327
2328
 
2328
- var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2329
+ var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, segmentBars) {
2329
2330
  var barTask;
2330
2331
 
2331
2332
  switch (task.type) {
@@ -2334,18 +2335,18 @@ var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth
2334
2335
  break;
2335
2336
 
2336
2337
  case "project":
2337
- barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor);
2338
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, segmentBars);
2338
2339
  break;
2339
2340
 
2340
2341
  default:
2341
- barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor);
2342
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, segmentBars);
2342
2343
  break;
2343
2344
  }
2344
2345
 
2345
2346
  return barTask;
2346
2347
  };
2347
2348
 
2348
- var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor) {
2349
+ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, segmentBars) {
2349
2350
  var x1;
2350
2351
  var x2;
2351
2352
  var actualx1;
@@ -2378,35 +2379,12 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2378
2379
  var plannedSegments;
2379
2380
  var actualSegments;
2380
2381
 
2381
- if (task.calendar && task.start && task.end && task.start.getTime() > 0) {
2382
- var planEnd = addToDate(startOfDate(task.end, "day"), 1, "day");
2383
- var intervals = getWorkingIntervals(task.start, planEnd, task.calendar);
2384
- var segs = intervals.map(function (iv) {
2385
- return {
2386
- x1: taskXCoordinate(iv.start, dates, columnWidth),
2387
- x2: taskXCoordinate(iv.end, dates, columnWidth)
2388
- };
2389
- }).filter(function (s) {
2390
- return s.x2 > s.x1;
2391
- });
2392
- if (segs.length > 0) plannedSegments = segs;
2382
+ if (segmentBars && task.calendar && task.start && task.end && task.start.getTime() > 0) {
2383
+ plannedSegments = getWorkingSegments(task.start, task.end, task.calendar, dates, columnWidth);
2393
2384
  }
2394
2385
 
2395
- if (task.calendar && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2396
- var actEnd = addToDate(startOfDate(task.actualEnd, "day"), 1, "day");
2397
-
2398
- var _intervals = getWorkingIntervals(task.actualStart, actEnd, task.calendar);
2399
-
2400
- var _segs = _intervals.map(function (iv) {
2401
- return {
2402
- x1: taskXCoordinate(iv.start, dates, columnWidth),
2403
- x2: taskXCoordinate(iv.end, dates, columnWidth)
2404
- };
2405
- }).filter(function (s) {
2406
- return s.x2 > s.x1;
2407
- });
2408
-
2409
- if (_segs.length > 0) actualSegments = _segs;
2386
+ if (segmentBars && task.calendar && task.actualStart && task.actualEnd && task.actualStart.getTime() > 0) {
2387
+ actualSegments = getWorkingSegments(task.actualStart, task.actualEnd, task.calendar, dates, columnWidth);
2410
2388
  }
2411
2389
 
2412
2390
  var styles = _extends({
@@ -2439,6 +2417,18 @@ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHei
2439
2417
  });
2440
2418
  };
2441
2419
 
2420
+ var getWorkingSegments = function getWorkingSegments(start, end, calendar, dates, columnWidth) {
2421
+ var segs = getWorkingIntervals(start, addToDate(startOfDate(end, "day"), 1, "day"), calendar).map(function (iv) {
2422
+ return {
2423
+ x1: taskXCoordinate(iv.start, dates, columnWidth),
2424
+ x2: taskXCoordinate(iv.end, dates, columnWidth)
2425
+ };
2426
+ }).filter(function (s) {
2427
+ return s.x2 > s.x1;
2428
+ });
2429
+ return segs.length > 0 ? segs : undefined;
2430
+ };
2431
+
2442
2432
  var convertToMilestone = function convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
2443
2433
  var x = task.start && task.end ? taskXCoordinate(task.end, dates, columnWidth) : 0;
2444
2434
  var y = taskYCoordinate(index, rowHeight, taskHeight);
@@ -3332,6 +3322,7 @@ var TaskItem = function TaskItem(props) {
3332
3322
  }, taskItem[1]));
3333
3323
  };
3334
3324
 
3325
+ var HIDDEN_ACTUAL_COLOR = "rgba(0, 0, 0, 0)";
3335
3326
  var TaskGanttContent = function TaskGanttContent(_ref) {
3336
3327
  var _svg$current;
3337
3328
 
@@ -3363,7 +3354,12 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3363
3354
  projectCalendar = _ref.projectCalendar,
3364
3355
  visibleStartY = _ref.visibleStartY,
3365
3356
  visibleEndY = _ref.visibleEndY,
3366
- sliderTime = _ref.sliderTime;
3357
+ sliderTime = _ref.sliderTime,
3358
+ _ref$hideActualBefore = _ref.hideActualBeforeSlider,
3359
+ hideActualBeforeSlider = _ref$hideActualBefore === void 0 ? false : _ref$hideActualBefore,
3360
+ plannedInProgressColor = _ref.plannedInProgressColor,
3361
+ _ref$segmentBars = _ref.segmentBars,
3362
+ segmentBars = _ref$segmentBars === void 0 ? true : _ref$segmentBars;
3367
3363
  var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
3368
3364
 
3369
3365
  var _useState = React.useState(0),
@@ -3430,17 +3426,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3430
3426
  finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);
3431
3427
  }
3432
3428
 
3433
- var actEnd = addToDate(startOfDate(finalTask.actualEnd, "day"), 1, "day");
3434
- var actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);
3435
- var actSegs = actIntervals.map(function (iv) {
3436
- return {
3437
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3438
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3439
- };
3440
- }).filter(function (s) {
3441
- return s.x2 > s.x1;
3442
- });
3443
- finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
3429
+ finalTask.actualSegments = segmentBars ? getWorkingSegments(finalTask.actualStart, finalTask.actualEnd, cal, dates, columnWidth) : undefined;
3444
3430
  var offTimeDays = finalTask.calendar ? getOffDays(finalTask.calendar, finalTask.actualStart, finalTask.actualEnd) : [];
3445
3431
  var actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)) - offTimeDays.length);
3446
3432
  finalTask.actualDuration = actDays;
@@ -3466,17 +3452,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3466
3452
  finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
3467
3453
  }
3468
3454
 
3469
- var planEnd = addToDate(startOfDate(finalTask.end, "day"), 1, "day");
3470
- var planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);
3471
- var planSegs = planIntervals.map(function (iv) {
3472
- return {
3473
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3474
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3475
- };
3476
- }).filter(function (s) {
3477
- return s.x2 > s.x1;
3478
- });
3479
- finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
3455
+ finalTask.plannedSegments = segmentBars ? getWorkingSegments(finalTask.start, finalTask.end, cal, dates, columnWidth) : undefined;
3480
3456
 
3481
3457
  var _offTimeDays = finalTask.calendar ? getOffDays(finalTask.calendar, finalTask.start, finalTask.end) : [];
3482
3458
 
@@ -3568,17 +3544,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3568
3544
  newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);
3569
3545
  }
3570
3546
 
3571
- var actEnd = addToDate(startOfDate(newChangedTask.actualEnd, "day"), 1, "day");
3572
- var actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);
3573
- var actSegs = actIntervals.map(function (iv) {
3574
- return {
3575
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3576
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3577
- };
3578
- }).filter(function (s) {
3579
- return s.x2 > s.x1;
3580
- });
3581
- newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
3547
+ newChangedTask.actualSegments = segmentBars ? getWorkingSegments(newChangedTask.actualStart, newChangedTask.actualEnd, cal, dates, columnWidth) : undefined;
3582
3548
  var offTimeDays = newChangedTask.calendar ? getOffDays(newChangedTask.calendar, newChangedTask.actualStart, newChangedTask.actualEnd) : [];
3583
3549
  var actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)) - offTimeDays.length);
3584
3550
  newChangedTask.actualDuration = actDays;
@@ -3616,17 +3582,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3616
3582
  newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);
3617
3583
  }
3618
3584
 
3619
- var planEnd = addToDate(startOfDate(newChangedTask.end, "day"), 1, "day");
3620
- var planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);
3621
- var planSegs = planIntervals.map(function (iv) {
3622
- return {
3623
- x1: taskXCoordinate(iv.start, dates, columnWidth),
3624
- x2: taskXCoordinate(iv.end, dates, columnWidth)
3625
- };
3626
- }).filter(function (s) {
3627
- return s.x2 > s.x1;
3628
- });
3629
- newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
3585
+ newChangedTask.plannedSegments = segmentBars ? getWorkingSegments(newChangedTask.start, newChangedTask.end, cal, dates, columnWidth) : undefined;
3630
3586
 
3631
3587
  var _offTimeDays2 = newChangedTask.calendar ? getOffDays(newChangedTask.calendar, newChangedTask.start, newChangedTask.end) : [];
3632
3588
 
@@ -3703,7 +3659,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3703
3659
  svg.current.addEventListener("mouseup", handleMouseUp);
3704
3660
  setIsMoving(true);
3705
3661
  }
3706
- }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
3662
+ }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, segmentBars, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
3707
3663
 
3708
3664
  var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
3709
3665
  try {
@@ -3858,6 +3814,17 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3858
3814
 
3859
3815
  var lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;
3860
3816
  var totalHeight = tasks.length * rowHeight;
3817
+ var sliderDate = sliderTime != null ? new Date(sliderTime) : null;
3818
+
3819
+ var isActualBeforeSlider = function isActualBeforeSlider(task) {
3820
+ return hideActualBeforeSlider && !!sliderDate && !!task.actualStart && startOfDate(task.actualStart, "day") > sliderDate;
3821
+ };
3822
+
3823
+ var isInProgressAtSlider = function isInProgressAtSlider(_ref2) {
3824
+ var w = _ref2.inProgressWindow;
3825
+ return !!plannedInProgressColor && !!sliderDate && !!w && startOfDate(w.start, "day") <= sliderDate && (!w.end || addToDate(startOfDate(w.end, "day"), 1, "day") > sliderDate);
3826
+ };
3827
+
3861
3828
  return React__default.createElement("g", {
3862
3829
  className: "content"
3863
3830
  }, lineX !== null && lineX > 0 && React__default.createElement("line", {
@@ -3883,6 +3850,19 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
3883
3850
  y: 0
3884
3851
  });
3885
3852
 
3853
+ if (isActualBeforeSlider(task)) {
3854
+ task.styles = _extends({}, task.styles, {
3855
+ taskProgressColor: HIDDEN_ACTUAL_COLOR
3856
+ });
3857
+ }
3858
+
3859
+ if (isInProgressAtSlider(task)) {
3860
+ task.styles = _extends({}, task.styles, {
3861
+ backgroundColor: plannedInProgressColor,
3862
+ backgroundSelectedColor: plannedInProgressColor
3863
+ });
3864
+ }
3865
+
3886
3866
  if (!task && _task.typeInternal === "milestone") {
3887
3867
  return React__default.createElement("g", {
3888
3868
  key: _task.id,
@@ -4035,6 +4015,8 @@ var HorizontalScroll = function HorizontalScroll(_ref) {
4035
4015
  };
4036
4016
 
4037
4017
  var GANTT_MIN_WIDTH_RATIO = 0.4;
4018
+ var PRIMARY_PATH_COLOR = "#AA00FF";
4019
+ var SECONDARY_PATH_COLOR = "#ff82e4";
4038
4020
  var TABLE_GANTT_DIVIDER_WIDTH = 20;
4039
4021
  var Gantt = function Gantt(_ref) {
4040
4022
  var _ref3;
@@ -4129,7 +4111,10 @@ var Gantt = function Gantt(_ref) {
4129
4111
  shouldNotShowLoadingOverlay = _ref$shouldNotShowLoa === void 0 ? true : _ref$shouldNotShowLoa,
4130
4112
  projectCalendar = _ref.projectCalendar,
4131
4113
  onCalendarError = _ref.onCalendarError,
4132
- sliderTime = _ref.sliderTime;
4114
+ sliderTime = _ref.sliderTime,
4115
+ _ref$hideActualBefore = _ref.hideActualBeforeSlider,
4116
+ hideActualBeforeSlider = _ref$hideActualBefore === void 0 ? false : _ref$hideActualBefore,
4117
+ plannedInProgressColor = _ref.plannedInProgressColor;
4133
4118
  var wrapperRef = React.useRef(null);
4134
4119
  var taskListRef = React.useRef(null);
4135
4120
  var isDraggingTable = React.useRef(false);
@@ -4405,11 +4390,11 @@ var Gantt = function Gantt(_ref) {
4405
4390
  uncolorAll(tasks);
4406
4391
 
4407
4392
  if (scheduleType !== "lookAhead") {
4408
- colorPath(secondaryPath, "#00ff00", tasks, "secondary");
4409
- colorPath(primaryPath, "#ff0000", tasks, "primary");
4393
+ colorPath(secondaryPath, SECONDARY_PATH_COLOR, tasks, "secondary");
4394
+ colorPath(primaryPath, PRIMARY_PATH_COLOR, tasks, "primary");
4410
4395
  }
4411
4396
 
4412
- setBarTasks(convertToBarTasks(filteredTasks, newDates, effectiveColumnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
4397
+ setBarTasks(convertToBarTasks(filteredTasks, newDates, effectiveColumnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, viewShowsOffDays(viewMode)));
4413
4398
  setIsProcessing(false);
4414
4399
  }, delayToRender);
4415
4400
  }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, shouldNotShowLoadingOverlay, effectiveColumnWidth, projectCalendar]);
@@ -4764,7 +4749,10 @@ var Gantt = function Gantt(_ref) {
4764
4749
  projectCalendar: projectCalendar,
4765
4750
  visibleStartY: visibleStartY,
4766
4751
  visibleEndY: visibleEndY,
4767
- sliderTime: sliderTime
4752
+ sliderTime: sliderTime,
4753
+ hideActualBeforeSlider: hideActualBeforeSlider,
4754
+ plannedInProgressColor: plannedInProgressColor,
4755
+ segmentBars: viewShowsOffDays(viewMode)
4768
4756
  };
4769
4757
  var tableTasks = React.useMemo(function () {
4770
4758
  return ganttEvent.changedTask ? barTasks.map(function (t) {