gantt-task-react-powern 0.4.69 → 0.4.71

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.
@@ -2,11 +2,13 @@ import React from "react";
2
2
  import { Task } from "../../types/public-types";
3
3
  export declare type GridBodyProps = {
4
4
  tasks: Task[];
5
+ scheduleType: string;
5
6
  dates: Date[];
6
7
  svgWidth: number;
7
8
  rowHeight: number;
8
9
  columnWidth: number;
9
10
  todayColor: string;
11
+ weekendColor: string;
10
12
  rtl: boolean;
11
13
  };
12
14
  export declare const GridBody: React.FC<GridBodyProps>;
@@ -4,4 +4,7 @@ export declare const TaskListHeaderDefault: React.FC<{
4
4
  rowWidth: string;
5
5
  fontFamily: string;
6
6
  fontSize: string;
7
+ scheduleType: string;
8
+ allSelected?: boolean;
9
+ onSelectAll?: (selected: boolean) => void;
7
10
  }>;
@@ -7,9 +7,12 @@ export declare const TaskListTableDefault: React.FC<{
7
7
  fontSize: string;
8
8
  locale: string;
9
9
  tasks: Task[];
10
+ scheduleType: string;
10
11
  leafTasks: Task[];
11
12
  selectedTaskId: string;
12
13
  setSelectedTask: (taskId: string) => void;
13
14
  onExpanderClick: (task: Task) => void;
15
+ selectedTasks?: string[];
16
+ onTaskSelect?: (taskId: string, selected: boolean) => void;
14
17
  taskLabelRenderer?: (Task: Task) => React.ReactNode;
15
18
  }>;
@@ -12,6 +12,7 @@ export declare type TaskListProps = {
12
12
  scrollY: number;
13
13
  locale: string;
14
14
  tasks: Task[];
15
+ scheduleType: string;
15
16
  leafTasks: Task[];
16
17
  taskListRef: React.RefObject<HTMLDivElement>;
17
18
  horizontalContainerClass?: string;
@@ -24,6 +25,9 @@ export declare type TaskListProps = {
24
25
  rowWidth: string;
25
26
  fontFamily: string;
26
27
  fontSize: string;
28
+ scheduleType: string;
29
+ allSelected?: boolean;
30
+ onSelectAll?: (selected: boolean) => void;
27
31
  }>;
28
32
  TaskListTable: React.FC<{
29
33
  rowHeight: number;
@@ -32,10 +36,13 @@ export declare type TaskListProps = {
32
36
  fontSize: string;
33
37
  locale: string;
34
38
  tasks: Task[];
39
+ scheduleType: string;
35
40
  leafTasks: Task[];
36
41
  selectedTaskId: string;
37
42
  setSelectedTask: (taskId: string) => void;
38
43
  onExpanderClick: (task: Task) => void;
44
+ selectedTasks?: string[];
45
+ onTaskSelect?: (taskId: string, selected: boolean) => void;
39
46
  taskLabelRenderer?: (Task: Task) => React.ReactNode;
40
47
  }>;
41
48
  } & EventOption;
package/dist/index.css CHANGED
@@ -37,6 +37,23 @@
37
37
  text-overflow: ellipsis;
38
38
  white-space: nowrap;
39
39
  overflow: hidden;
40
+ background-color: #fff;
41
+ }
42
+
43
+ ._GzvG4 {
44
+ display: table-row;
45
+ text-overflow: ellipsis;
46
+ white-space: nowrap;
47
+ overflow: hidden;
48
+ background-color: #fff;
49
+ }
50
+
51
+ ._3Ykml {
52
+ display: table-row;
53
+ text-overflow: ellipsis;
54
+ white-space: nowrap;
55
+ overflow: hidden;
56
+ background-color: #e6e4e4;
40
57
  }
41
58
 
42
59
  ._34SS0:nth-of-type(even) {
@@ -49,6 +66,7 @@
49
66
  white-space: nowrap;
50
67
  overflow: hidden;
51
68
  text-overflow: ellipsis;
69
+ border-bottom: #ebeff2 1px solid;
52
70
  }
53
71
  ._nI1Xw {
54
72
  display: flex;
@@ -152,6 +170,14 @@
152
170
  fill: #f5f5f5;
153
171
  }
154
172
 
173
+ ._2RRca {
174
+ fill: #fff;
175
+ }
176
+
177
+ ._2RRca:nth-child(even) {
178
+ fill: #fff;
179
+ }
180
+
155
181
  ._3rUKi {
156
182
  stroke: #ebeff2;
157
183
  }
@@ -160,7 +186,7 @@
160
186
  stroke: #e6e4e4;
161
187
  }
162
188
  ._2M-tt {
163
- fill: #e6e4e4 !important;
189
+ fill: #e6e4e4 !important;
164
190
  }
165
191
 
166
192
  ._9w8d5 {
package/dist/index.js CHANGED
@@ -275,9 +275,6 @@ var getWeekNumberISO8601 = function getWeekNumberISO8601(date) {
275
275
  return weekNumber;
276
276
  }
277
277
  };
278
- var getDaysInMonth = function getDaysInMonth(month, year) {
279
- return new Date(year, month + 1, 0).getDate();
280
- };
281
278
 
282
279
  var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderItem":"_WuQ0f"};
283
280
 
@@ -285,7 +282,10 @@ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
285
282
  var headerHeight = _ref.headerHeight,
286
283
  fontFamily = _ref.fontFamily,
287
284
  fontSize = _ref.fontSize,
288
- rowWidth = _ref.rowWidth;
285
+ rowWidth = _ref.rowWidth,
286
+ scheduleType = _ref.scheduleType,
287
+ allSelected = _ref.allSelected,
288
+ onSelectAll = _ref.onSelectAll;
289
289
  return React__default.createElement("div", {
290
290
  className: styles.ganttTable,
291
291
  style: {
@@ -297,7 +297,19 @@ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
297
297
  style: {
298
298
  height: headerHeight - 2
299
299
  }
300
- }, React__default.createElement("div", {
300
+ }, onSelectAll && React__default.createElement("div", null, React__default.createElement("div", {
301
+ className: styles.ganttTable_HeaderItem,
302
+ style: {
303
+ minWidth: parseInt(rowWidth) * 0.3,
304
+ maxWidth: parseInt(rowWidth) * 0.3
305
+ }
306
+ }, React__default.createElement("input", {
307
+ type: "checkbox",
308
+ checked: allSelected,
309
+ onChange: function onChange(e) {
310
+ return onSelectAll(e.target.checked);
311
+ }
312
+ }))), React__default.createElement("div", {
301
313
  className: styles.ganttTable_HeaderItem,
302
314
  style: {
303
315
  minWidth: parseInt(rowWidth) * 0.8,
@@ -336,7 +348,7 @@ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
336
348
  }), React__default.createElement("div", {
337
349
  className: styles.ganttTable_HeaderItem,
338
350
  style: {
339
- minWidth: parseInt(rowWidth) * 0.7
351
+ minWidth: parseInt(rowWidth) * 0.6
340
352
  },
341
353
  title: "Planned Start"
342
354
  }, "Planned Start"), React__default.createElement("div", {
@@ -348,13 +360,31 @@ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
348
360
  }), React__default.createElement("div", {
349
361
  className: styles.ganttTable_HeaderItem,
350
362
  style: {
351
- minWidth: parseInt(rowWidth) * 0.7
363
+ minWidth: parseInt(rowWidth) * 0.6
364
+ },
365
+ title: "Planned End"
366
+ }, "Planned End"), scheduleType === "lookAhead" && React__default.createElement("div", {
367
+ className: styles.ganttTable_HeaderItem,
368
+ style: {
369
+ minWidth: parseInt(rowWidth) * 0.6
370
+ },
371
+ title: "Planned Start"
372
+ }, "Actual Start"), scheduleType === "lookAhead" && React__default.createElement("div", {
373
+ className: styles.ganttTable_HeaderSeparator,
374
+ style: {
375
+ height: headerHeight * 0.5,
376
+ marginTop: headerHeight * 0.25
377
+ }
378
+ }), scheduleType === "lookAhead" && React__default.createElement("div", {
379
+ className: styles.ganttTable_HeaderItem,
380
+ style: {
381
+ minWidth: parseInt(rowWidth) * 0.6
352
382
  },
353
383
  title: "Planned End"
354
- }, "Planned End")));
384
+ }, "Actual End")));
355
385
  };
356
386
 
357
- var styles$1 = {"taskListWrapper":"_3ZbQT","taskListTableRow":"_34SS0","taskListCell":"_3lLk3","taskListNameWrapper":"_nI1Xw","taskListExpander":"_2QjE6","taskListExpanderPlaceholder":"_1fnLB","taskListEmptyExpander":"_2TfEi","taskListText":"_2ZvXU"};
387
+ var styles$1 = {"taskListWrapper":"_3ZbQT","taskListTableRow":"_34SS0","taskListLookAheadRow":"_GzvG4","taskListMilestoneRow":"_3Ykml","taskListCell":"_3lLk3","taskListNameWrapper":"_nI1Xw","taskListExpander":"_2QjE6","taskListExpanderPlaceholder":"_1fnLB","taskListEmptyExpander":"_2TfEi","taskListText":"_2ZvXU"};
358
388
 
359
389
  var localeDateStringCache = {};
360
390
 
@@ -382,11 +412,15 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
382
412
  var rowHeight = _ref.rowHeight,
383
413
  rowWidth = _ref.rowWidth,
384
414
  tasks = _ref.tasks,
415
+ scheduleType = _ref.scheduleType,
385
416
  leafTasks = _ref.leafTasks,
386
417
  fontFamily = _ref.fontFamily,
387
418
  fontSize = _ref.fontSize,
388
419
  locale = _ref.locale,
389
420
  onExpanderClick = _ref.onExpanderClick,
421
+ _ref$selectedTasks = _ref.selectedTasks,
422
+ selectedTasks = _ref$selectedTasks === void 0 ? [] : _ref$selectedTasks,
423
+ onTaskSelect = _ref.onTaskSelect,
390
424
  _ref$taskLabelRendere = _ref.taskLabelRenderer,
391
425
  taskLabelRenderer = _ref$taskLabelRendere === void 0 ? function (t) {
392
426
  return " " + t.name;
@@ -416,13 +450,36 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
416
450
  }
417
451
  }
418
452
 
453
+ var isSelected = selectedTasks.includes(t.id);
419
454
  return React__default.createElement("div", {
420
- className: styles$1.taskListTableRow,
455
+ className: t.type === "milestone" ? styles$1.taskListMilestoneRow : scheduleType === "lookAhead" ? styles$1.taskListLookAheadRow : styles$1.taskListTableRow,
421
456
  style: {
422
457
  height: rowHeight
423
458
  },
424
459
  key: t.id + "row"
460
+ }, onTaskSelect && React__default.createElement("div", {
461
+ className: styles$1.taskListCell,
462
+ style: {
463
+ minWidth: parseInt(rowWidth) * 0.3,
464
+ maxWidth: parseInt(rowWidth) * 0.3
465
+ }
425
466
  }, React__default.createElement("div", {
467
+ className: styles$1.taskListText,
468
+ style: {
469
+ display: "flex",
470
+ justifyContent: "center",
471
+ alignItems: "center",
472
+ height: "100%",
473
+ paddingLeft: "0",
474
+ paddingRight: "0"
475
+ }
476
+ }, React__default.createElement("input", {
477
+ type: "checkbox",
478
+ checked: isSelected,
479
+ onChange: function onChange(e) {
480
+ return onTaskSelect(t.id, e.target.checked);
481
+ }
482
+ }))), React__default.createElement("div", {
426
483
  className: styles$1.taskListCell,
427
484
  style: {
428
485
  minWidth: parseInt(rowWidth) * 0.8,
@@ -481,7 +538,23 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
481
538
  }
482
539
  }, React__default.createElement("div", {
483
540
  className: styles$1.taskListText
484
- }, "\xA0", toLocaleDateString(t.end, dateTimeOptions))));
541
+ }, "\xA0", toLocaleDateString(t.end, dateTimeOptions))), scheduleType === "lookAhead" && React__default.createElement("div", {
542
+ className: styles$1.taskListCell,
543
+ style: {
544
+ minWidth: parseInt(rowWidth) * 0.6,
545
+ maxWidth: parseInt(rowWidth) * 0.6
546
+ }
547
+ }, React__default.createElement("div", {
548
+ className: styles$1.taskListText
549
+ }, "\xA0", toLocaleDateString(t.actualStart, dateTimeOptions))), scheduleType === "lookAhead" && React__default.createElement("div", {
550
+ className: styles$1.taskListCell,
551
+ style: {
552
+ minWidth: parseInt(rowWidth) * 0.6,
553
+ maxWidth: parseInt(rowWidth) * 0.6
554
+ }
555
+ }, React__default.createElement("div", {
556
+ className: styles$1.taskListText
557
+ }, "\xA0", toLocaleDateString(t.actualEnd, dateTimeOptions))));
485
558
  }));
486
559
  };
487
560
 
@@ -648,6 +721,7 @@ var TaskList = function TaskList(_ref) {
648
721
  rowHeight = _ref.rowHeight,
649
722
  scrollY = _ref.scrollY,
650
723
  tasks = _ref.tasks,
724
+ scheduleType = _ref.scheduleType,
651
725
  leafTasks = _ref.leafTasks,
652
726
  selectedTask = _ref.selectedTask,
653
727
  setSelectedTask = _ref.setSelectedTask,
@@ -658,18 +732,62 @@ var TaskList = function TaskList(_ref) {
658
732
  horizontalContainerClass = _ref.horizontalContainerClass,
659
733
  TaskListHeader = _ref.TaskListHeader,
660
734
  TaskListTable = _ref.TaskListTable,
661
- taskLabelRenderer = _ref.taskLabelRenderer;
735
+ taskLabelRenderer = _ref.taskLabelRenderer,
736
+ onMultiSelect = _ref.onMultiSelect;
662
737
  var horizontalContainerRef = React.useRef(null);
738
+
739
+ var _useState = React.useState([]),
740
+ selectedTasks = _useState[0],
741
+ setSelectedTasks = _useState[1];
742
+
743
+ var prevSelectedTasksRef = React.useRef([]);
663
744
  React.useEffect(function () {
664
745
  if (horizontalContainerRef.current) {
665
746
  horizontalContainerRef.current.scrollTop = scrollY;
666
747
  }
667
748
  }, [scrollY]);
749
+ React.useEffect(function () {
750
+ if (onMultiSelect && JSON.stringify(prevSelectedTasksRef.current) !== JSON.stringify(selectedTasks)) {
751
+ var selectedTaskObjects = tasks.filter(function (task) {
752
+ return selectedTasks.includes(task.id);
753
+ });
754
+ prevSelectedTasksRef.current = [].concat(selectedTasks);
755
+ onMultiSelect(selectedTaskObjects);
756
+ }
757
+ }, [selectedTasks, tasks, onMultiSelect]);
758
+
759
+ var handleTaskSelect = function handleTaskSelect(taskId, selected) {
760
+ if (selected) {
761
+ setSelectedTasks(function (prev) {
762
+ return [].concat(prev, [taskId]);
763
+ });
764
+ } else {
765
+ setSelectedTasks(function (prev) {
766
+ return prev.filter(function (id) {
767
+ return id !== taskId;
768
+ });
769
+ });
770
+ }
771
+ };
772
+
773
+ var handleSelectAll = function handleSelectAll(selected) {
774
+ if (selected) {
775
+ setSelectedTasks(tasks.map(function (task) {
776
+ return task.id;
777
+ }));
778
+ } else {
779
+ setSelectedTasks([]);
780
+ }
781
+ };
782
+
668
783
  var headerProps = {
669
784
  headerHeight: headerHeight,
670
785
  fontFamily: fontFamily,
671
786
  fontSize: fontSize,
672
- rowWidth: rowWidth
787
+ rowWidth: rowWidth,
788
+ scheduleType: scheduleType,
789
+ allSelected: tasks.length > 0 && selectedTasks.length === tasks.length,
790
+ onSelectAll: onMultiSelect ? handleSelectAll : undefined
673
791
  };
674
792
  var selectedTaskId = selectedTask ? selectedTask.id : "";
675
793
  var tableProps = {
@@ -679,10 +797,13 @@ var TaskList = function TaskList(_ref) {
679
797
  fontSize: fontSize,
680
798
  tasks: tasks,
681
799
  leafTasks: leafTasks,
800
+ scheduleType: scheduleType,
682
801
  locale: locale,
683
802
  selectedTaskId: selectedTaskId,
684
803
  setSelectedTask: setSelectedTask,
685
804
  onExpanderClick: onExpanderClick,
805
+ selectedTasks: onMultiSelect ? selectedTasks : undefined,
806
+ onTaskSelect: onMultiSelect ? handleTaskSelect : undefined,
686
807
  taskLabelRenderer: taskLabelRenderer
687
808
  };
688
809
  return React__default.createElement("div", {
@@ -696,15 +817,17 @@ var TaskList = function TaskList(_ref) {
696
817
  }, React__default.createElement(TaskListTable, Object.assign({}, tableProps))));
697
818
  };
698
819
 
699
- var styles$4 = {"gridRow":"_2dZTy","gridRowLine":"_3rUKi","gridTick":"_RuwuK","darkerGridRow":"_2M-tt"};
820
+ var styles$4 = {"gridRow":"_2dZTy","gridRowLookAhead":"_2RRca","gridRowLine":"_3rUKi","gridTick":"_RuwuK","darkerGridRow":"_2M-tt"};
700
821
 
701
822
  var GridBody = function GridBody(_ref) {
702
823
  var tasks = _ref.tasks,
824
+ scheduleType = _ref.scheduleType,
703
825
  dates = _ref.dates,
704
826
  rowHeight = _ref.rowHeight,
705
827
  svgWidth = _ref.svgWidth,
706
828
  columnWidth = _ref.columnWidth,
707
829
  todayColor = _ref.todayColor,
830
+ weekendColor = _ref.weekendColor,
708
831
  rtl = _ref.rtl;
709
832
  var y = 0;
710
833
  var gridRows = [];
@@ -726,7 +849,7 @@ var GridBody = function GridBody(_ref) {
726
849
  y: y,
727
850
  width: svgWidth,
728
851
  height: rowHeight,
729
- className: isDarkerRow ? styles$4.darkerGridRow : styles$4.gridRow
852
+ className: isDarkerRow ? styles$4.darkerGridRow : scheduleType === "lookAhead" ? styles$4.gridRowLookAhead : styles$4.gridRow
730
853
  }));
731
854
  rowLines.push(React__default.createElement("line", {
732
855
  key: "RowLine" + task.id,
@@ -743,6 +866,7 @@ var GridBody = function GridBody(_ref) {
743
866
  var tickX = 0;
744
867
  var ticks = [];
745
868
  var today = React__default.createElement("rect", null);
869
+ var weekend = [];
746
870
 
747
871
  for (var i = 0; i < dates.length; i++) {
748
872
  var date = dates[i];
@@ -765,6 +889,16 @@ var GridBody = function GridBody(_ref) {
765
889
  });
766
890
  }
767
891
 
892
+ if (date.getDay() === 6 || date.getDay() === 0) {
893
+ weekend.push(React__default.createElement("rect", {
894
+ x: tickX,
895
+ y: 0,
896
+ width: columnWidth,
897
+ height: y,
898
+ fill: weekendColor
899
+ }));
900
+ }
901
+
768
902
  if (rtl && i + 1 !== dates.length && date.getTime() >= now.getTime() && dates[i + 1].getTime() < now.getTime()) {
769
903
  today = React__default.createElement("rect", {
770
904
  x: tickX + columnWidth,
@@ -786,7 +920,9 @@ var GridBody = function GridBody(_ref) {
786
920
  className: "rowLines"
787
921
  }, rowLines), React__default.createElement("g", {
788
922
  className: "ticks"
789
- }, ticks), React__default.createElement("g", {
923
+ }, ticks), scheduleType === "lookAhead" && React__default.createElement("g", {
924
+ className: "weekend"
925
+ }, weekend), React__default.createElement("g", {
790
926
  className: "today"
791
927
  }, today));
792
928
  };
@@ -1031,7 +1167,21 @@ var Calendar = function Calendar(_ref) {
1031
1167
  x1Line: columnWidth * (i + 1),
1032
1168
  y1Line: 0,
1033
1169
  y2Line: topDefaultHeight,
1034
- xText: columnWidth * (i + 1) - getDaysInMonth(date.getMonth(), date.getFullYear()) * columnWidth * 0.5,
1170
+ xText: topValues.length === 0 ? columnWidth * (i + 1) * 0.5 : columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5,
1171
+ yText: topDefaultHeight * 0.9
1172
+ }));
1173
+ }
1174
+
1175
+ if (i + 1 === dates.length) {
1176
+ var _topValue = getLocaleMonth(date, locale) + " " + date.getFullYear();
1177
+
1178
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
1179
+ key: _topValue + date.getFullYear(),
1180
+ value: _topValue,
1181
+ x1Line: columnWidth * (i + 1),
1182
+ y1Line: 0,
1183
+ y2Line: topDefaultHeight,
1184
+ xText: columnWidth * (i + 1) - date.getDate() * columnWidth * 0.5,
1035
1185
  yText: topDefaultHeight * 0.9
1036
1186
  }));
1037
1187
  }
@@ -1817,7 +1967,7 @@ var Bar = function Bar(_ref) {
1817
1967
  var handleHeight = task.height / 2 - 1;
1818
1968
 
1819
1969
  if (type == "planned") {
1820
- if (task.x1 && task.x2) return React__default.createElement("g", {
1970
+ if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) >= 0) return React__default.createElement("g", {
1821
1971
  className: styles$6.barWrapper,
1822
1972
  tabIndex: 0
1823
1973
  }, React__default.createElement(BarDisplay, {
@@ -1865,7 +2015,7 @@ var Bar = function Bar(_ref) {
1865
2015
  className: styles$6.barWrapper,
1866
2016
  tabIndex: 0
1867
2017
  });
1868
- } else if (task.actualx1 && task.actualx2) {
2018
+ } else if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) >= 0) {
1869
2019
  return React__default.createElement("g", {
1870
2020
  className: styles$6.barWrapper,
1871
2021
  tabIndex: 0
@@ -2052,11 +2202,11 @@ var TaskItem = function TaskItem(props) {
2052
2202
  React.useEffect(function () {
2053
2203
  switch (task.typeInternal) {
2054
2204
  case "milestone":
2055
- setTaskItem([React__default.createElement(Milestone, Object.assign({}, props))]);
2205
+ if (task.x1 >= 0 && task.actualx1 >= 0) setTaskItem([React__default.createElement(Milestone, Object.assign({}, props))]);else setTaskItem([]);
2056
2206
  break;
2057
2207
 
2058
2208
  case "project":
2059
- setTaskItem([React__default.createElement(Project, Object.assign({}, props))]);
2209
+ if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) >= 0 && task.x2 > task.x1 && (task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) >= 0 && task.actualx2 > task.actualx1) setTaskItem([React__default.createElement(Project, Object.assign({}, props))]);else setTaskItem([]);
2060
2210
  break;
2061
2211
 
2062
2212
  case "smalltask":
@@ -2067,13 +2217,13 @@ var TaskItem = function TaskItem(props) {
2067
2217
  {
2068
2218
  var _taskItem = [];
2069
2219
 
2070
- if (task.x1 && task.x2) {
2220
+ if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) >= 0) {
2071
2221
  _taskItem.push(React__default.createElement(Bar, Object.assign({}, props, {
2072
2222
  type: "planned"
2073
2223
  })));
2074
2224
  }
2075
2225
 
2076
- if (task.actualx1 && task.actualx2) {
2226
+ if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) >= 0) {
2077
2227
  _taskItem.push(React__default.createElement(Bar, Object.assign({}, props, {
2078
2228
  type: "actual"
2079
2229
  })));
@@ -2384,7 +2534,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2384
2534
  return task.barChildren.map(function (child) {
2385
2535
  var _task$criticalPathArr, _task$criticalPathArr2;
2386
2536
 
2387
- return React__default.createElement(Arrow, {
2537
+ if (task.x2 > task.x1 || task.actualx2 > task.actualx1) return React__default.createElement(Arrow, {
2388
2538
  key: "Arrow from " + task.id + " to " + tasks[child.index].id,
2389
2539
  taskFrom: task,
2390
2540
  taskTo: tasks[child.index],
@@ -2395,6 +2545,11 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
2395
2545
  arrowColor: ((_task$criticalPathArr = task.criticalPathArrows) === null || _task$criticalPathArr === void 0 ? void 0 : (_task$criticalPathArr2 = _task$criticalPathArr.find(function (arrow) {
2396
2546
  return arrow.taskId == tasks[child.index].id;
2397
2547
  })) === null || _task$criticalPathArr2 === void 0 ? void 0 : _task$criticalPathArr2.arrowColor) || "#808080"
2548
+ });else return React__default.createElement("g", {
2549
+ key: _task.id,
2550
+ style: {
2551
+ height: taskHeight
2552
+ }
2398
2553
  });
2399
2554
  });
2400
2555
  })), React__default.createElement("g", {
@@ -2516,6 +2671,12 @@ var Gantt = function Gantt(_ref) {
2516
2671
  var tasks = _ref.tasks,
2517
2672
  _ref$leafTasks = _ref.leafTasks,
2518
2673
  leafTasks = _ref$leafTasks === void 0 ? [] : _ref$leafTasks,
2674
+ _ref$scheduleType = _ref.scheduleType,
2675
+ scheduleType = _ref$scheduleType === void 0 ? "main" : _ref$scheduleType,
2676
+ _ref$startDate = _ref.startDate,
2677
+ startDate = _ref$startDate === void 0 ? new Date() : _ref$startDate,
2678
+ _ref$endDate = _ref.endDate,
2679
+ endDate = _ref$endDate === void 0 ? new Date() : _ref$endDate,
2519
2680
  _ref$headerHeight = _ref.headerHeight,
2520
2681
  headerHeight = _ref$headerHeight === void 0 ? 50 : _ref$headerHeight,
2521
2682
  _ref$columnWidth = _ref.columnWidth,
@@ -2572,6 +2733,8 @@ var Gantt = function Gantt(_ref) {
2572
2733
  arrowIndent = _ref$arrowIndent === void 0 ? 20 : _ref$arrowIndent,
2573
2734
  _ref$todayColor = _ref.todayColor,
2574
2735
  todayColor = _ref$todayColor === void 0 ? "rgba(252, 248, 227, 0.5)" : _ref$todayColor,
2736
+ _ref$weekendColor = _ref.weekendColor,
2737
+ weekendColor = _ref$weekendColor === void 0 ? "#f5f5f5" : _ref$weekendColor,
2575
2738
  viewDate = _ref.viewDate,
2576
2739
  _ref$TooltipContent = _ref.TooltipContent,
2577
2740
  TooltipContent = _ref$TooltipContent === void 0 ? StandardTooltipContent : _ref$TooltipContent,
@@ -2586,18 +2749,26 @@ var Gantt = function Gantt(_ref) {
2586
2749
  onDelete = _ref.onDelete,
2587
2750
  onSelect = _ref.onSelect,
2588
2751
  onExpanderClick = _ref.onExpanderClick,
2752
+ onMultiSelect = _ref.onMultiSelect,
2589
2753
  taskLabelRenderer = _ref.taskLabelRenderer;
2590
2754
  var wrapperRef = React.useRef(null);
2591
2755
  var taskListRef = React.useRef(null);
2592
2756
 
2593
2757
  var _useState = React.useState(function () {
2594
2758
  var _ganttDateRange = ganttDateRange(tasks, viewMode, preStepsCount),
2595
- startDate = _ganttDateRange[0],
2596
- endDate = _ganttDateRange[1];
2759
+ startDateRange = _ganttDateRange[0],
2760
+ endDateRange = _ganttDateRange[1];
2761
+
2762
+ if (scheduleType === "lookAhead") {
2763
+ return {
2764
+ viewMode: viewMode,
2765
+ dates: seedDates(startDate, endDate, viewMode)
2766
+ };
2767
+ }
2597
2768
 
2598
2769
  return {
2599
2770
  viewMode: viewMode,
2600
- dates: seedDates(startDate, endDate, viewMode)
2771
+ dates: seedDates(startDateRange, endDateRange, viewMode)
2601
2772
  };
2602
2773
  }),
2603
2774
  dateSetup = _useState[0],
@@ -2656,6 +2827,14 @@ var Gantt = function Gantt(_ref) {
2656
2827
  ignoreScrollEvent = _useState12[0],
2657
2828
  setIgnoreScrollEvent = _useState12[1];
2658
2829
 
2830
+ React.useEffect(function () {
2831
+ if (scheduleType === "lookAhead" && startDate && endDate) {
2832
+ setDateSetup({
2833
+ viewMode: viewMode,
2834
+ dates: seedDates(startDate, endDate, viewMode)
2835
+ });
2836
+ }
2837
+ }, [startDate, endDate]);
2659
2838
  React.useEffect(function () {
2660
2839
  var filteredTasks;
2661
2840
 
@@ -2668,10 +2847,14 @@ var Gantt = function Gantt(_ref) {
2668
2847
  filteredTasks = filteredTasks.sort(sortTasks);
2669
2848
 
2670
2849
  var _ganttDateRange2 = ganttDateRange(filteredTasks, viewMode, preStepsCount),
2671
- startDate = _ganttDateRange2[0],
2672
- endDate = _ganttDateRange2[1];
2850
+ startDateRange = _ganttDateRange2[0],
2851
+ endDateRange = _ganttDateRange2[1];
2673
2852
 
2674
- var newDates = seedDates(startDate, endDate, viewMode);
2853
+ var newDates = seedDates(startDateRange, endDateRange, viewMode);
2854
+
2855
+ if (scheduleType === "lookAhead") {
2856
+ newDates = seedDates(startDate, endDate, viewMode);
2857
+ }
2675
2858
 
2676
2859
  if (rtl) {
2677
2860
  newDates = newDates.reverse();
@@ -2681,18 +2864,24 @@ var Gantt = function Gantt(_ref) {
2681
2864
  }
2682
2865
  }
2683
2866
 
2684
- setDateSetup({
2685
- dates: newDates,
2686
- viewMode: viewMode
2687
- });
2867
+ if (scheduleType !== "lookAhead") {
2868
+ setDateSetup({
2869
+ dates: seedDates(startDateRange, endDateRange, viewMode),
2870
+ viewMode: viewMode
2871
+ });
2872
+ }
2688
2873
 
2689
2874
  var _getCriticalPaths = getCriticalPaths(leafTasks),
2690
2875
  primaryPath = _getCriticalPaths[0],
2691
2876
  secondaryPath = _getCriticalPaths[1];
2692
2877
 
2693
2878
  uncolorAll(tasks);
2694
- colorPath(secondaryPath, "#00ff00", tasks);
2695
- colorPath(primaryPath, "#ff0000", tasks);
2879
+
2880
+ if (scheduleType !== "lookAhead") {
2881
+ colorPath(secondaryPath, "#00ff00", tasks);
2882
+ colorPath(primaryPath, "#ff0000", tasks);
2883
+ }
2884
+
2696
2885
  setBarTasks(convertToBarTasks(filteredTasks, newDates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor));
2697
2886
  }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, scrollX, onExpanderClick]);
2698
2887
  React.useEffect(function () {
@@ -2911,9 +3100,11 @@ var Gantt = function Gantt(_ref) {
2911
3100
  columnWidth: columnWidth,
2912
3101
  svgWidth: svgWidth,
2913
3102
  tasks: tasks,
3103
+ scheduleType: scheduleType,
2914
3104
  rowHeight: rowHeight,
2915
3105
  dates: dateSetup.dates,
2916
3106
  todayColor: todayColor,
3107
+ weekendColor: weekendColor,
2917
3108
  rtl: rtl
2918
3109
  };
2919
3110
  var calendarProps = {
@@ -2957,6 +3148,7 @@ var Gantt = function Gantt(_ref) {
2957
3148
  fontSize: fontSize,
2958
3149
  tasks: barTasks,
2959
3150
  leafTasks: leafTasks,
3151
+ scheduleType: scheduleType,
2960
3152
  locale: locale,
2961
3153
  headerHeight: headerHeight,
2962
3154
  scrollY: scrollY,
@@ -2969,7 +3161,8 @@ var Gantt = function Gantt(_ref) {
2969
3161
  onDoubleClick: onDoubleClick,
2970
3162
  TaskListHeader: TaskListHeader,
2971
3163
  TaskListTable: TaskListTable,
2972
- taskLabelRenderer: taskLabelRenderer
3164
+ taskLabelRenderer: taskLabelRenderer,
3165
+ onMultiSelect: onMultiSelect
2973
3166
  };
2974
3167
  return React__default.createElement("div", null, React__default.createElement("div", {
2975
3168
  className: styles$9.wrapper,