@syncfusion/ej2-gantt 23.2.7 → 24.1.43

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.
Files changed (112) hide show
  1. package/CHANGELOG.md +2 -5
  2. package/dist/ej2-gantt.min.js +2 -2
  3. package/dist/ej2-gantt.umd.min.js +2 -2
  4. package/dist/ej2-gantt.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-gantt.es2015.js +2993 -332
  6. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  7. package/dist/es6/ej2-gantt.es5.js +3047 -366
  8. package/dist/es6/ej2-gantt.es5.js.map +1 -1
  9. package/dist/global/ej2-gantt.min.js +2 -2
  10. package/dist/global/ej2-gantt.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +21 -21
  13. package/src/gantt/actions/cell-edit.js +7 -3
  14. package/src/gantt/actions/chart-scroll.d.ts +9 -1
  15. package/src/gantt/actions/chart-scroll.js +111 -3
  16. package/src/gantt/actions/connector-line-edit.js +8 -1
  17. package/src/gantt/actions/context-menu.js +2 -2
  18. package/src/gantt/actions/day-markers.d.ts +2 -1
  19. package/src/gantt/actions/dependency.js +2 -2
  20. package/src/gantt/actions/dialog-edit.d.ts +24 -0
  21. package/src/gantt/actions/dialog-edit.js +393 -2
  22. package/src/gantt/actions/edit.js +68 -21
  23. package/src/gantt/actions/keyboard.js +5 -1
  24. package/src/gantt/actions/pdf-export.js +12 -4
  25. package/src/gantt/actions/rowdragdrop.js +20 -9
  26. package/src/gantt/actions/selection.js +6 -3
  27. package/src/gantt/actions/taskbar-edit.d.ts +14 -0
  28. package/src/gantt/actions/taskbar-edit.js +517 -82
  29. package/src/gantt/actions/toolbar.js +4 -1
  30. package/src/gantt/base/css-constants.d.ts +2 -0
  31. package/src/gantt/base/css-constants.js +2 -0
  32. package/src/gantt/base/enum.d.ts +22 -0
  33. package/src/gantt/base/gantt-chart.js +63 -21
  34. package/src/gantt/base/gantt-model.d.ts +9 -1
  35. package/src/gantt/base/gantt.d.ts +11 -1
  36. package/src/gantt/base/gantt.js +46 -18
  37. package/src/gantt/base/interface.d.ts +135 -3
  38. package/src/gantt/base/splitter.js +6 -0
  39. package/src/gantt/base/task-processor.d.ts +1 -1
  40. package/src/gantt/base/task-processor.js +38 -10
  41. package/src/gantt/export/export-helper.d.ts +12 -0
  42. package/src/gantt/export/export-helper.js +316 -9
  43. package/src/gantt/export/pdf-base/pdf-grid-table.js +14 -1
  44. package/src/gantt/export/pdf-base/pdf-style/gantt-theme.js +36 -0
  45. package/src/gantt/export/pdf-connector-line.js +137 -32
  46. package/src/gantt/export/pdf-event-marker.d.ts +10 -0
  47. package/src/gantt/export/pdf-event-marker.js +57 -0
  48. package/src/gantt/export/pdf-gantt.d.ts +2 -0
  49. package/src/gantt/export/pdf-gantt.js +30 -10
  50. package/src/gantt/export/pdf-taskbar.d.ts +23 -2
  51. package/src/gantt/export/pdf-taskbar.js +771 -43
  52. package/src/gantt/export/pdf-timeline.d.ts +9 -0
  53. package/src/gantt/export/pdf-timeline.js +98 -20
  54. package/src/gantt/models/column.d.ts +12 -0
  55. package/src/gantt/renderer/chart-rows.d.ts +1 -1
  56. package/src/gantt/renderer/chart-rows.js +29 -16
  57. package/src/gantt/renderer/connector-line.js +8 -5
  58. package/src/gantt/renderer/edit-tooltip.js +3 -0
  59. package/src/gantt/renderer/event-marker.js +4 -1
  60. package/src/gantt/renderer/nonworking-day.js +18 -5
  61. package/src/gantt/renderer/timeline.d.ts +9 -0
  62. package/src/gantt/renderer/timeline.js +207 -27
  63. package/styles/bootstrap-dark.css +77 -16
  64. package/styles/bootstrap.css +78 -17
  65. package/styles/bootstrap4.css +78 -17
  66. package/styles/bootstrap5-dark.css +78 -17
  67. package/styles/bootstrap5.css +78 -17
  68. package/styles/fabric-dark.css +78 -17
  69. package/styles/fabric.css +78 -17
  70. package/styles/fluent-dark.css +78 -17
  71. package/styles/fluent.css +78 -17
  72. package/styles/gantt/_bootstrap-dark-definition.scss +7 -2
  73. package/styles/gantt/_bootstrap-definition.scss +7 -2
  74. package/styles/gantt/_bootstrap4-definition.scss +7 -2
  75. package/styles/gantt/_bootstrap5-definition.scss +7 -2
  76. package/styles/gantt/_fabric-dark-definition.scss +7 -2
  77. package/styles/gantt/_fabric-definition.scss +7 -2
  78. package/styles/gantt/_fluent-definition.scss +7 -2
  79. package/styles/gantt/_fusionnew-definition.scss +6 -2
  80. package/styles/gantt/_highcontrast-definition.scss +7 -2
  81. package/styles/gantt/_highcontrast-light-definition.scss +7 -2
  82. package/styles/gantt/_layout.scss +92 -20
  83. package/styles/gantt/_material-dark-definition.scss +7 -2
  84. package/styles/gantt/_material-definition.scss +7 -2
  85. package/styles/gantt/_material3-definition.scss +7 -2
  86. package/styles/gantt/_tailwind-definition.scss +6 -1
  87. package/styles/gantt/_theme.scss +11 -0
  88. package/styles/gantt/bootstrap-dark.css +77 -16
  89. package/styles/gantt/bootstrap.css +78 -17
  90. package/styles/gantt/bootstrap4.css +78 -17
  91. package/styles/gantt/bootstrap5-dark.css +78 -17
  92. package/styles/gantt/bootstrap5.css +78 -17
  93. package/styles/gantt/fabric-dark.css +78 -17
  94. package/styles/gantt/fabric.css +78 -17
  95. package/styles/gantt/fluent-dark.css +78 -17
  96. package/styles/gantt/fluent.css +78 -17
  97. package/styles/gantt/highcontrast-light.css +78 -17
  98. package/styles/gantt/highcontrast.css +78 -17
  99. package/styles/gantt/material-dark.css +78 -17
  100. package/styles/gantt/material.css +78 -17
  101. package/styles/gantt/material3-dark.css +77 -16
  102. package/styles/gantt/material3.css +77 -16
  103. package/styles/gantt/tailwind-dark.css +78 -17
  104. package/styles/gantt/tailwind.css +78 -17
  105. package/styles/highcontrast-light.css +78 -17
  106. package/styles/highcontrast.css +78 -17
  107. package/styles/material-dark.css +78 -17
  108. package/styles/material.css +78 -17
  109. package/styles/material3-dark.css +77 -16
  110. package/styles/material3.css +77 -16
  111. package/styles/tailwind-dark.css +78 -17
  112. package/styles/tailwind.css +78 -17
@@ -22,6 +22,11 @@ var Timeline = /** @class */ (function () {
22
22
  this.isZoomToFit = false;
23
23
  this.topTierCollection = [];
24
24
  this.bottomTierCollection = [];
25
+ this.pdfExportTopTierCollection = [];
26
+ this.pdfExportBottomTierCollection = [];
27
+ this.restrictRender = true;
28
+ this.performedTimeSpanAction = false;
29
+ this.isZoomedToFit = false;
25
30
  this.parent = ganttObj;
26
31
  this.initProperties();
27
32
  }
@@ -102,6 +107,7 @@ var Timeline = /** @class */ (function () {
102
107
  */
103
108
  Timeline.prototype.processZooming = function (isZoomIn) {
104
109
  this.isZoomToFit = false;
110
+ this.isZoomedToFit = false;
105
111
  if (!this.parent['isProjectDateUpdated']) {
106
112
  this.parent.dateValidationModule.calculateProjectDates();
107
113
  }
@@ -209,6 +215,13 @@ var Timeline = /** @class */ (function () {
209
215
  this.parent.hideSpinner();
210
216
  }
211
217
  }
218
+ var tier = this.topTier === 'None' ? 'bottomTier' : 'topTier';
219
+ if (this.parent.enableTimelineVirtualization && (!this.parent.pdfExportModule || this.parent.pdfExportModule && !this.parent.pdfExportModule.isPdfExport)) {
220
+ this.wholeTimelineWidth = this.calculateWidthBetweenTwoDate(tier, this.parent.timelineModule.timelineStartDate, this.parent.timelineModule.timelineEndDate);
221
+ this.parent.element.querySelectorAll(".e-chart-scroll-container")[0].querySelector(".e-virtualtrack")['style'].width = this.wholeTimelineWidth + 'px';
222
+ this.parent.element.querySelectorAll(".e-timeline-header-container")[0].querySelector(".e-virtualtrack")['style'].width = this.wholeTimelineWidth + 'px';
223
+ this.parent.ganttChartModule.updateWidthAndHeight();
224
+ }
212
225
  };
213
226
  /**
214
227
  * To perform the zoom to fit operation in Gantt.
@@ -219,6 +232,7 @@ var Timeline = /** @class */ (function () {
219
232
  Timeline.prototype.processZoomToFit = function () {
220
233
  this.isZoomToFit = true;
221
234
  this.isZooming = false;
235
+ this.isZoomedToFit = true;
222
236
  if (!this.parent.zoomingProjectStartDate) {
223
237
  this.parent.zoomingProjectStartDate = this.parent.cloneProjectStartDate;
224
238
  this.parent.zoomingProjectEndDate = this.parent.cloneProjectEndDate;
@@ -321,8 +335,10 @@ var Timeline = /** @class */ (function () {
321
335
  }
322
336
  };
323
337
  Timeline.prototype.calculateNumberOfTimelineCells = function (newTimeline) {
324
- var numberOfDays = Math.abs((this.parent.cloneProjectEndDate.getTime() -
325
- this.parent.cloneProjectStartDate.getTime()) / (24 * 60 * 60 * 1000));
338
+ var sDate = new Date(this.parent.cloneProjectStartDate.getTime());
339
+ var eDate = new Date(this.parent.cloneProjectEndDate.getTime());
340
+ this.parent.dateValidationModule['updateDateWithTimeZone'](sDate, eDate);
341
+ var numberOfDays = Math.abs((eDate.getTime() - sDate.getTime()) / (24 * 60 * 60 * 1000));
326
342
  var count = newTimeline.bottomTier.count;
327
343
  var unit = newTimeline.bottomTier.unit;
328
344
  if (unit === 'Day') {
@@ -627,6 +643,28 @@ var Timeline = /** @class */ (function () {
627
643
  this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;
628
644
  }
629
645
  };
646
+ Timeline.prototype.dateByLeftValue = function (left, isMilestone, property) {
647
+ var pStartDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
648
+ var milliSecondsPerPixel = (24 * 60 * 60 * 1000) / this.parent.perDayWidth;
649
+ pStartDate.setTime(pStartDate.getTime() + (left * milliSecondsPerPixel));
650
+ /* To render the milestone in proper date while editing */
651
+ if (isMilestone && !isNullOrUndefined(property.predecessorsName) && property.predecessorsName !== '') {
652
+ pStartDate.setDate(pStartDate.getDate() - 1);
653
+ this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, pStartDate);
654
+ pStartDate = this.parent.dateValidationModule.checkStartDate(pStartDate, property, true);
655
+ }
656
+ var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.topTier :
657
+ this.parent.timelineModule.bottomTier;
658
+ if (tierMode !== 'Hour' && tierMode !== 'Minutes') {
659
+ if (this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && !this.parent.isInDst(pStartDate)) {
660
+ pStartDate.setTime(pStartDate.getTime() + (60 * 60 * 1000));
661
+ }
662
+ else if (!this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && this.parent.isInDst(pStartDate)) {
663
+ pStartDate.setTime(pStartDate.getTime() - (60 * 60 * 1000));
664
+ }
665
+ }
666
+ return pStartDate;
667
+ };
630
668
  /**
631
669
  * To create timeline header template.
632
670
  *
@@ -639,32 +677,109 @@ var Timeline = /** @class */ (function () {
639
677
  var div;
640
678
  var table;
641
679
  var thead;
680
+ var virtualTableDiv;
681
+ var virtualTrackDiv;
642
682
  var loopCount = this.isSingleTier ? 1 : 2;
643
683
  var tier = this.topTier === 'None' ? 'bottomTier' : 'topTier';
644
- this.updateTimelineHeaderHeight();
645
684
  this.topTierCollection = [];
646
685
  this.bottomTierCollection = [];
647
- for (var count = 0; count < loopCount; count++) {
648
- table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
649
- thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
650
- tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
651
- if (!this.parent.pdfExportModule || (this.parent.pdfExportModule && !this.parent.pdfExportModule.isPdfExport) || (this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport && this.parent.pdfExportModule.helper.exportProps && !this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth)) {
652
- td = createElement('th');
686
+ if (this.restrictRender == true) {
687
+ this.updateTimelineHeaderHeight();
688
+ this.wholeTimelineWidth = this.calculateWidthBetweenTwoDate(tier, this.parent.timelineModule.timelineStartDate, this.parent.timelineModule.timelineEndDate);
689
+ }
690
+ if (this.parent.enableTimelineVirtualization && (this.wholeTimelineWidth > this.parent.element.offsetWidth * 3)) {
691
+ for (var count = 0; count < loopCount; count++) {
692
+ table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
693
+ table.setAttribute('role', 'presentation');
694
+ thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
695
+ tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
696
+ td = createElement('td');
697
+ div = createElement('div', { styles: 'width: 20px' });
698
+ virtualTableDiv = createElement('div', { className: cls.virtualTable });
699
+ virtualTrackDiv = createElement('div', { className: cls.virtualTrack });
700
+ td.appendChild(div);
701
+ tr.appendChild(td);
702
+ virtualTableDiv.appendChild(tr);
703
+ thead.appendChild(virtualTableDiv);
704
+ thead.appendChild(virtualTrackDiv);
705
+ table.appendChild(thead);
706
+ this.parent.ganttChartModule.chartTimelineContainer.appendChild(table);
707
+ tier = 'bottomTier';
708
+ tr = null;
709
+ this.restrictRender = false;
710
+ }
711
+ if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
712
+ var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
713
+ this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
714
+ if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
715
+ this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
716
+ }
717
+ }
718
+ this.timelineVirtualizationStyles();
719
+ }
720
+ else {
721
+ for (var count = 0; count < loopCount; count++) {
722
+ table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
723
+ table.setAttribute('role', 'presentation');
724
+ thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
725
+ tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
726
+ td = createElement('td');
653
727
  div = createElement('div', { styles: 'width: 20px' });
654
728
  td.appendChild(div);
655
729
  tr.appendChild(td);
656
730
  thead.appendChild(tr);
657
731
  table.appendChild(thead);
658
732
  this.parent.ganttChartModule.chartTimelineContainer.appendChild(table);
733
+ tier = 'bottomTier';
734
+ tr = null;
735
+ }
736
+ if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
737
+ var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
738
+ this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
739
+ if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
740
+ this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
741
+ }
659
742
  }
660
- tier = 'bottomTier';
661
- tr = null;
662
743
  }
663
- if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
664
- var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
665
- this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
666
- if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
667
- this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
744
+ };
745
+ Timeline.prototype.timelineVirtualizationStyles = function () {
746
+ var translateXValue = 0;
747
+ var translateYValue = 0;
748
+ var trackWidth = this.wholeTimelineWidth;
749
+ if (this.parent.enableTimelineVirtualization) {
750
+ //e-content styles updating
751
+ translateXValue = (this.parent.enableTimelineVirtualization && !isNullOrUndefined(this.parent.ganttChartModule.scrollObject.element.scrollLeft)
752
+ && this.parent.ganttChartModule.scrollObject.element.scrollLeft != 0) ? this.parent.ganttChartModule.scrollObject.getTimelineLeft() : 0;
753
+ if (this.parent.enableRtl) {
754
+ translateXValue = -(translateXValue);
755
+ }
756
+ var contentVirtualTable = this.parent.element.querySelectorAll(".e-chart-scroll-container")[0].querySelector(".e-virtualtable");
757
+ contentVirtualTable.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
758
+ var contentVirtualTrack = this.parent.element.querySelectorAll(".e-chart-scroll-container")[0].querySelector(".e-virtualtrack");
759
+ contentVirtualTrack.style.position = "relative";
760
+ contentVirtualTrack.style.width = trackWidth + 'px';
761
+ //timeline styles updating
762
+ if (this.parent.ganttChartModule.scrollObject['isSetScrollLeft']) {
763
+ var virtualTableStylesT = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[0].querySelector(".e-virtualtable");
764
+ var virtualTableStylesB = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[1].querySelector(".e-virtualtable");
765
+ virtualTableStylesT.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
766
+ virtualTableStylesB.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
767
+ }
768
+ var virtualTrackStylesT = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[0].querySelector(".e-virtualtrack");
769
+ var virtualTrackStylesB = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[1].querySelector(".e-virtualtrack");
770
+ virtualTrackStylesT.style.position = "relative";
771
+ virtualTrackStylesB.style.position = "relative";
772
+ virtualTrackStylesT.style.width = trackWidth + 'px';
773
+ virtualTrackStylesB.style.width = trackWidth + 'px';
774
+ //dependency viewer styles updating
775
+ var dependencyViewer = this.parent.connectorLineModule.svgObject;
776
+ dependencyViewer['style'].width = trackWidth + 'px';
777
+ // timeline header container width updating
778
+ var timelineHeader = this.parent.element.querySelector('.' + cls.timelineHeaderContainer);
779
+ timelineHeader['style'].width = 'calc(100% - ' + 17 + 'px)';
780
+ if (this.parent.timelineModule.isZooming || this.parent.timelineModule.isZoomToFit) {
781
+ this.parent.ganttChartModule.scrollElement.scrollLeft = 0;
782
+ this.parent.ganttChartModule.scrollObject.updateChartElementStyles();
668
783
  }
669
784
  }
670
785
  };
@@ -874,7 +989,12 @@ var Timeline = /** @class */ (function () {
874
989
  dateString = dateString.slice(1);
875
990
  }
876
991
  else {
877
- dateString = dateString.slice(0, 1);
992
+ if (this.parent.locale === 'ar') {
993
+ dateString = dateString;
994
+ }
995
+ else {
996
+ dateString = dateString.slice(0, 1);
997
+ }
878
998
  }
879
999
  }
880
1000
  else {
@@ -915,9 +1035,14 @@ var Timeline = /** @class */ (function () {
915
1035
  parent.timelineModule.customTimelineSettings.bottomTier.count;
916
1036
  var increment;
917
1037
  var newTime;
918
- var startDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
1038
+ var leftValueForStartDate = (this.parent.enableTimelineVirtualization && this.parent.ganttChartModule.scrollObject.element.scrollLeft != 0)
1039
+ ? this.parent.ganttChartModule.scrollObject.getTimelineLeft() : null;
1040
+ var startDate = (this.parent.enableTimelineVirtualization && !isNullOrUndefined(leftValueForStartDate))
1041
+ ? new Date((this.dateByLeftValue(leftValueForStartDate)).toString()) : new Date(this.parent.timelineModule.timelineStartDate.toString());
919
1042
  var endDate = new Date(this.timelineRoundOffEndDate.toString());
920
1043
  var scheduleDateCollection = [];
1044
+ var width = 0;
1045
+ var WidthForVirtualTable = this.parent.element.offsetWidth * 3;
921
1046
  do {
922
1047
  // PDf export collection
923
1048
  var timelineCell = {};
@@ -947,8 +1072,20 @@ var Timeline = /** @class */ (function () {
947
1072
  parentTh = parentTh + parentTr;
948
1073
  var tierCollection = tier === 'topTier' ? this.topTierCollection : this.bottomTierCollection;
949
1074
  timelineCell.endDate = new Date(startDate.getTime());
950
- tierCollection.push(timelineCell);
951
- } while ((startDate < endDate));
1075
+ if (this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport && this.parent.enableTimelineVirtualization) {
1076
+ if (tier == 'topTier') {
1077
+ this.pdfExportTopTierCollection.push(timelineCell);
1078
+ }
1079
+ else {
1080
+ this.pdfExportBottomTierCollection.push(timelineCell);
1081
+ }
1082
+ }
1083
+ else {
1084
+ tierCollection.push(timelineCell);
1085
+ }
1086
+ width += timelineCell.width;
1087
+ this.weekendEndDate = timelineCell.endDate >= endDate ? endDate : timelineCell.endDate;
1088
+ } while ((this.parent.enableTimelineVirtualization && (!this.parent.pdfExportModule || this.parent.pdfExportModule && !this.parent.pdfExportModule.isPdfExport)) ? (width < WidthForVirtualTable) && (startDate < endDate) : (startDate < endDate));
952
1089
  return parentTh;
953
1090
  };
954
1091
  Timeline.prototype.updateTimelineAfterZooming = function (endDate, resized) {
@@ -1043,24 +1180,35 @@ var Timeline = /** @class */ (function () {
1043
1180
  case 'Day':
1044
1181
  lastDay.setHours(24, 0, 0, 0);
1045
1182
  increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * 60 * 24 * (count - 1));
1183
+ increment = this.checkDate(firstDay, lastDay, increment, count, mode);
1046
1184
  break;
1047
1185
  case 'Hour':
1048
1186
  lastDay.setMinutes(60);
1049
1187
  lastDay.setSeconds(0);
1050
1188
  increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * 60 * (count - 1));
1051
- increment = this.checkDate(firstDay, lastDay, increment, count);
1189
+ increment = this.checkDate(firstDay, lastDay, increment, count, mode);
1052
1190
  break;
1053
1191
  case 'Minutes':
1054
1192
  lastDay.setSeconds(60);
1055
1193
  increment = (lastDay.getTime() - firstDay.getTime()) + (1000 * 60 * (count - 1));
1194
+ increment = this.checkDate(firstDay, lastDay, increment, count, mode);
1056
1195
  break;
1057
1196
  }
1058
1197
  return increment;
1059
1198
  };
1060
- Timeline.prototype.checkDate = function (firstDay, lastDay, increment, count) {
1199
+ Timeline.prototype.checkDate = function (firstDay, lastDay, increment, count, mode) {
1061
1200
  var date = new Date(firstDay.getTime());
1062
1201
  date.setTime(date.getTime() + increment);
1063
- if (count !== 1 && ((date.getTime() - lastDay.getTime()) / (1000 * 60 * 60)) != count && (firstDay.getTimezoneOffset() !== date.getTimezoneOffset())) {
1202
+ if (mode === "Day" && count !== 1 && ((date.getTime() - lastDay.getTime()) / (1000 * 60 * 60 * 24)) != count && (firstDay.getTimezoneOffset() !== date.getTimezoneOffset())) {
1203
+ var diffCount = count - (date.getTime() - lastDay.getTime()) / (1000 * 60 * 60 * 24);
1204
+ if (!this.parent.isInDst(date)) {
1205
+ increment += (1000 * 60 * 60 * diffCount);
1206
+ }
1207
+ else if (this.parent.isInDst(date) && count !== 2) {
1208
+ increment -= (1000 * 60 * 60 * diffCount);
1209
+ }
1210
+ }
1211
+ else if (mode === "Hour" && count !== 1 && ((date.getTime() - lastDay.getTime()) / (1000 * 60 * 60)) != count && (firstDay.getTimezoneOffset() !== date.getTimezoneOffset())) {
1064
1212
  var diffCount = count - (date.getTime() - lastDay.getTime()) / (1000 * 60 * 60);
1065
1213
  if (!this.parent.isInDst(date)) {
1066
1214
  increment += (1000 * 60 * 60 * diffCount);
@@ -1069,6 +1217,15 @@ var Timeline = /** @class */ (function () {
1069
1217
  increment -= (1000 * 60 * 60 * diffCount);
1070
1218
  }
1071
1219
  }
1220
+ else if (mode === "Minutes" && count !== 1 && ((date.getTime() - lastDay.getTime()) / (1000 * 60)) != count && (firstDay.getTimezoneOffset() !== date.getTimezoneOffset())) {
1221
+ var diffCount = count - (date.getTime() - lastDay.getTime()) / (1000 * 60);
1222
+ if (!this.parent.isInDst(date)) {
1223
+ increment += (1000 * 60 * 60 * diffCount);
1224
+ }
1225
+ else if (this.parent.isInDst(date) && count !== 2) {
1226
+ increment -= (1000 * 60 * 60 * diffCount);
1227
+ }
1228
+ }
1072
1229
  return increment;
1073
1230
  };
1074
1231
  /**
@@ -1136,6 +1293,18 @@ var Timeline = /** @class */ (function () {
1136
1293
  this.parent.globalize.formatDate(scheduleWeeks, { format: this.parent.getDateFormat() }) :
1137
1294
  this.customFormat(scheduleWeeks, format, tier, mode, formatter);
1138
1295
  thWidth = (this.getIncrement(scheduleWeeks, count, mode) / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth;
1296
+ var newDate = new Date(scheduleWeeks.getTime() + this.getIncrement(scheduleWeeks, count, mode));
1297
+ if ((!this.parent.isInDst(newDate) && this.parent.isInDst(scheduleWeeks)) ||
1298
+ (this.parent.isInDst(newDate) && !this.parent.isInDst(scheduleWeeks))) {
1299
+ var temp = void 0;
1300
+ if ((!this.parent.isInDst(newDate) && this.parent.isInDst(scheduleWeeks))) {
1301
+ temp = this.getIncrement(scheduleWeeks, count, mode) - (1000 * 60 * 60);
1302
+ }
1303
+ else {
1304
+ temp = this.getIncrement(scheduleWeeks, count, mode) + (1000 * 60 * 60);
1305
+ }
1306
+ thWidth = (temp / (1000 * 60 * 60 * 24)) * this.parent.perDayWidth;
1307
+ }
1139
1308
  var cellWidth = thWidth;
1140
1309
  thWidth = isLast || isFirstCell ? isLast ? this.calculateWidthBetweenTwoDate(mode, scheduleWeeks, this.timelineRoundOffEndDate) : this.calculateWidthBetweenTwoDate(mode, scheduleWeeks, this.calculateQuarterEndDate(scheduleWeeks, count))
1141
1310
  : thWidth;
@@ -1177,7 +1346,10 @@ var Timeline = /** @class */ (function () {
1177
1346
  * @private
1178
1347
  */
1179
1348
  Timeline.prototype.calculateWidthBetweenTwoDate = function (mode, scheduleWeeks, endDate) {
1180
- var timeDifference = (endDate.getTime() - scheduleWeeks.getTime());
1349
+ var sDate = new Date(scheduleWeeks.getTime());
1350
+ var eDate = new Date(endDate.getTime());
1351
+ this.parent.dateValidationModule['updateDateWithTimeZone'](sDate, eDate);
1352
+ var timeDifference = (eDate.getTime() - sDate.getTime());
1181
1353
  var balanceDay = (timeDifference / (1000 * 60 * 60 * 24));
1182
1354
  return balanceDay * this.parent.perDayWidth;
1183
1355
  };
@@ -1434,9 +1606,10 @@ var Timeline = /** @class */ (function () {
1434
1606
  var validEndLeft = this.parent.dataOperation.getTaskLeft(validEndDate, false);
1435
1607
  var isChanged = void 0;
1436
1608
  var taskbarModule = this.parent.editModule.taskbarEditModule;
1437
- if (!isNullOrUndefined(maxStartLeft) && ((!isNullOrUndefined(taskbarModule)) && (!isNullOrUndefined(taskbarModule.taskBarEditAction)
1609
+ if (!isNullOrUndefined(maxStartLeft) && (((!isNullOrUndefined(taskbarModule)) && (!isNullOrUndefined(taskbarModule.taskBarEditAction)
1438
1610
  && taskbarModule.taskBarEditAction !== 'ProgressResizing' &&
1439
- taskbarModule.taskBarEditAction !== 'RightResizing' && taskbarModule.taskBarEditAction !== 'LeftResizing')) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
1611
+ taskbarModule.taskBarEditAction !== 'RightResizing' && taskbarModule.taskBarEditAction !== 'LeftResizing')) || ((taskbarModule)
1612
+ && isNullOrUndefined(taskbarModule.taskBarEditAction))) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
1440
1613
  isChanged = 'prevTimeSpan';
1441
1614
  minStartDate = minStartDate > this.timelineStartDate ? this.timelineStartDate : minStartDate;
1442
1615
  }
@@ -1486,13 +1659,16 @@ var Timeline = /** @class */ (function () {
1486
1659
  }
1487
1660
  var args = this.timeSpanActionEvent('actionBegin', type, isFrom);
1488
1661
  if (!args.cancel) {
1662
+ this.restrictRender = true;
1663
+ this.performedTimeSpanAction = true;
1664
+ var previousScrollLeft = this.parent.ganttChartModule.scrollElement.scrollLeft;
1489
1665
  this.parent.updateProjectDates(args.projectStartDate, args.ProjectEndDate, args.isTimelineRoundOff, isFrom);
1490
1666
  if (type === 'prevTimeSpan' && isFrom === 'publicMethod') {
1491
1667
  this.parent.ganttChartModule.updateScrollLeft(0);
1492
1668
  this.parent.timelineModule.isZoomToFit = false;
1493
1669
  }
1494
1670
  else if (type === 'nextTimeSpan' && isFrom === 'publicMethod') {
1495
- this.parent.ganttChartModule.updateScrollLeft(this.parent.timelineModule.totalTimelineWidth);
1671
+ this.parent.ganttChartModule.updateScrollLeft(this.parent.enableTimelineVirtualization ? this.wholeTimelineWidth : this.totalTimelineWidth);
1496
1672
  this.parent.timelineModule.isZoomToFit = false;
1497
1673
  }
1498
1674
  else if (type === 'nextTimeSpan' && isFrom === 'TaskbarEditing') {
@@ -1500,6 +1676,10 @@ var Timeline = /** @class */ (function () {
1500
1676
  this.parent.element.querySelector('.e-timeline-header-container').scrollLeft = currentScrollLeft;
1501
1677
  this.parent.timelineModule.isZoomToFit = false;
1502
1678
  }
1679
+ if (isFrom === 'TaskbarEditing' && this.parent.enableTimelineVirtualization && this.wholeTimelineWidth > this.parent.element.offsetWidth * 3) {
1680
+ this.parent.ganttChartModule.scrollObject.setScrollLeft(previousScrollLeft);
1681
+ this.parent.ganttChartModule.scrollObject.updateContent();
1682
+ }
1503
1683
  this.parent.timelineModule.timeSpanActionEvent('actionComplete', type, isFrom);
1504
1684
  }
1505
1685
  else {
@@ -264,6 +264,22 @@
264
264
  content: "\e85f";
265
265
  }
266
266
 
267
+ .e-bigger .e-gantt .e-gantt-chart .e-taskbar-left-resizer,
268
+ .e-bigger .e-gantt .e-gantt-chart .e-taskbar-right-resizer {
269
+ display: inline-block;
270
+ position: absolute;
271
+ top: 0;
272
+ width: 25px;
273
+ z-index: 4;
274
+ }
275
+ .e-bigger .e-gantt .e-gantt-chart .e-left-resize-gripper,
276
+ .e-bigger .e-gantt .e-gantt-chart .e-right-resize-gripper {
277
+ -ms-flex-align: center;
278
+ align-items: center;
279
+ cursor: ew-resize;
280
+ display: -ms-inline-flexbox;
281
+ display: inline-flex;
282
+ }
267
283
  .e-bigger .e-gantt .e-gantt-chart .e-timeline-header-container {
268
284
  height: 64px;
269
285
  }
@@ -343,7 +359,8 @@
343
359
  padding: 16px 4px 16px 16px !important; /* stylelint-disable-line declaration-no-important */
344
360
  }
345
361
  .e-bigger .e-gantt .e-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn {
346
- left: 0 !important;
362
+ left: -11px;
363
+ top: 3px;
347
364
  }
348
365
  .e-bigger .e-gantt .e-dialog .e-btn .e-btn-icon.e-icon-dlg-close {
349
366
  font-size: 12px !important;
@@ -355,8 +372,8 @@
355
372
  .e-bigger .e-gantt .e-dialog .e-footer-content .e-btn {
356
373
  margin-left: 12px;
357
374
  }
358
- .e-bigger .e-gantt .e-dialog .e-dlg-header {
359
- line-height: 28px;
375
+ .e-bigger .e-gantt .e-dialog .e-dlg-header:not(.e-gantt-adaptive-dialog .e-dialog .e-dlg-header) {
376
+ line-height: 37px;
360
377
  }
361
378
  .e-bigger .e-gantt .e-grid .e-flmenu-valuediv {
362
379
  padding: 16px 0 0 !important;
@@ -370,6 +387,7 @@
370
387
  }
371
388
  .e-bigger .e-gantt-dialog .e-dialog {
372
389
  border-radius: 6px;
390
+ width: 556px !important;
373
391
  }
374
392
  .e-bigger .e-gantt-dialog .e-tab .e-tab-header .e-toolbar-item .e-tab-wrap {
375
393
  padding: 0 16px !important; /* stylelint-disable-line declaration-no-important */
@@ -450,6 +468,16 @@
450
468
  .e-bigger .e-gantt-dialog .e-input-group-icon.e-date-icon {
451
469
  min-width: 36px !important; /* stylelint-disable-line declaration-no-important */
452
470
  }
471
+ .e-bigger .e-gantt-dialog .e-gantt-adaptive-dialog .e-dialog {
472
+ position: absolute !important; /* stylelint-disable-line declaration-no-important */
473
+ left: 0 !important; /* stylelint-disable-line declaration-no-important */
474
+ }
475
+ .e-bigger .e-gantt-dialog .e-gantt-adaptive-dialog .e-dialog .e-dlg-header-content {
476
+ padding: 16px !important; /* stylelint-disable-line declaration-no-important */
477
+ }
478
+ .e-bigger .e-gantt-dialog .e-gantt-adaptive-dialog .e-dialog td {
479
+ width: 100% !important; /* stylelint-disable-line declaration-no-important */
480
+ }
453
481
  .e-bigger .e-predecessor-tooltip .e-arrow-tip-outer.e-tip-bottom {
454
482
  border-top: 8px solid #000;
455
483
  }
@@ -675,9 +703,6 @@
675
703
  .e-gantt .e-gantt-tree-grid-pane .e-gridcontent .e-content {
676
704
  overflow-x: scroll !important; /* stylelint-disable-line declaration-no-important */
677
705
  }
678
- .e-gantt .e-gantt-tree-grid-pane .e-gridcontent .e-gantt-frozen {
679
- overflow-x: hidden !important; /* stylelint-disable-line declaration-no-important */
680
- }
681
706
  .e-gantt .e-gantt-tree-grid-pane .e-gridcontent .e-content.e-gantt-scroll-padding {
682
707
  width: calc(100% + 17px);
683
708
  }
@@ -800,7 +825,7 @@
800
825
  box-sizing: border-box;
801
826
  }
802
827
  .e-gantt .e-gantt-chart .e-zero-spacing {
803
- border-spacing: 0;
828
+ border-spacing: 0.25px;
804
829
  }
805
830
  .e-gantt .e-gantt-chart .e-chart-row:first-child .e-chart-row-border {
806
831
  border-top: 0;
@@ -830,9 +855,6 @@
830
855
  vertical-align: middle;
831
856
  z-index: 3;
832
857
  }
833
- .e-gantt .e-gantt-chart .e-taskbar-main-container:hover {
834
- z-index: 4;
835
- }
836
858
  .e-gantt .e-gantt-chart .e-taskbar-main-container.e-gantt-multi-taskbar:hover {
837
859
  z-index: 4;
838
860
  }
@@ -1309,7 +1331,7 @@
1309
1331
  border-spacing: 0;
1310
1332
  }
1311
1333
  .e-gantt-dialog .e-item {
1312
- height: 241px;
1334
+ height: 100%;
1313
1335
  }
1314
1336
  .e-gantt-dialog .e-dependent-div {
1315
1337
  border-bottom-width: 0px;
@@ -1368,6 +1390,9 @@
1368
1390
  .e-gantt-dialog > .e-dlg-content {
1369
1391
  padding: 0 !important; /* stylelint-disable-line declaration-no-important */
1370
1392
  }
1393
+ .e-gantt-dialog .e-dlg-header {
1394
+ line-height: 30px;
1395
+ }
1371
1396
  .e-gantt-dialog .e-dlg-header-content {
1372
1397
  border-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */
1373
1398
  }
@@ -1375,6 +1400,10 @@
1375
1400
  border-radius: 6px 6px 0px 0px;
1376
1401
  padding-bottom: 20px;
1377
1402
  }
1403
+ .e-gantt-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn {
1404
+ left: -11px;
1405
+ top: 2px !important;
1406
+ }
1378
1407
  .e-gantt-dialog .e-dlg-header-content .e-btn.e-dlg-closeicon-btn {
1379
1408
  border-radius: 50%;
1380
1409
  height: auto !important; /* stylelint-disable-line declaration-no-important */
@@ -1440,13 +1469,14 @@
1440
1469
  font-size: 14px;
1441
1470
  }
1442
1471
 
1443
- .e-bigger .e-gantt .e-gantt-chart .e-timeline-single-header-outer-div {
1444
- height: 64px !important; /* stylelint-disable-line declaration-no-important */
1472
+ .e-bigger .e-filter-popup .e-control .e-dialog .e-lib .e-popup .e-popup-open .e-excelfilter .e-gantt,
1473
+ .e-bigger .e-gantt .e-excelfilter .e-dialog .e-dlg-content {
1474
+ padding: 0 18px 0 0 !important; /* stylelint-disable-line declaration-no-important */
1445
1475
  }
1446
1476
 
1447
- .e-bigger .e-timeline-single-header-cell {
1448
- height: 64px !important; /* stylelint-disable-line declaration-no-important */
1449
- line-height: 64px !important; /* stylelint-disable-line declaration-no-important */
1477
+ .e-bigger .e-filter-popup .e-control .e-dialog .e-lib .e-popup .e-popup-open .e-excelfilter .e-gantt,
1478
+ .e-bigger .e-gantt .e-contextmenu-wrapper ul {
1479
+ padding: 0 !important; /* stylelint-disable-line declaration-no-important */
1450
1480
  }
1451
1481
 
1452
1482
  .e-gantt-tooltip-label {
@@ -1561,6 +1591,29 @@
1561
1591
  z-index: 1;
1562
1592
  }
1563
1593
 
1594
+ .e-gantt .e-gantt-chart .e-chart-root-container .e-content td.e-chart-row-cell.e-droptop {
1595
+ border-top: 1px solid #0070f0;
1596
+ border-width: 1px 0 0;
1597
+ }
1598
+
1599
+ .e-gantt .e-gantt-chart .e-chart-root-container .e-content td.e-chart-row-cell.e-dropbottom {
1600
+ border-bottom: 1px solid #0070f0;
1601
+ box-shadow: #0070f0;
1602
+ }
1603
+
1604
+ .e-gantt .e-gantt-chart .e-chart-root-container .e-content td.e-chart-row-cell.e-childborder {
1605
+ border-bottom: 1px solid #0070f0;
1606
+ border-top: 1px solid #0070f0;
1607
+ box-shadow: #0070f0;
1608
+ }
1609
+
1610
+ @media (max-width: 767px) {
1611
+ .e-bigger .e-gantt .e-dialog .e-edit-form-column:nth-child(odd), .e-bigger .e-gantt .e-dialog .e-edit-form-column:nth-child(even) {
1612
+ float: none;
1613
+ padding: 16px 12px 0 16px;
1614
+ width: 100%;
1615
+ }
1616
+ }
1564
1617
  /*! Gantt theme */
1565
1618
  .e-gantt .e-gantt-splitter {
1566
1619
  border-color: #484848;
@@ -1613,6 +1666,13 @@
1613
1666
  background: #484848;
1614
1667
  opacity: 1;
1615
1668
  }
1669
+ .e-gantt .e-gantt-tree-grid-pane .e-grid td.e-active.e-leftfreeze,
1670
+ .e-gantt .e-gantt-tree-grid-pane .e-grid td.e-active.e-unfreeze,
1671
+ .e-gantt .e-gantt-tree-grid-pane .e-grid td.e-active.e-rightfreeze,
1672
+ .e-gantt .e-gantt-tree-grid-pane .e-grid td.e-active.e-fixedfreeze {
1673
+ background: #484848;
1674
+ opacity: 1;
1675
+ }
1616
1676
  .e-gantt .e-taskbar-resize-div {
1617
1677
  border-color: #0070f0;
1618
1678
  }
@@ -1929,6 +1989,7 @@
1929
1989
  }
1930
1990
  .e-gantt-dialog .e-dlg-header {
1931
1991
  color: #fff;
1992
+ position: relative;
1932
1993
  }
1933
1994
  .e-gantt-dialog .e-dlg-header-content {
1934
1995
  background: #0070f0;