@syncfusion/ej2-gantt 23.2.5 → 24.1.41

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 (113) hide show
  1. package/CHANGELOG.md +3 -0
  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 +2980 -336
  6. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  7. package/dist/es6/ej2-gantt.es5.js +3034 -370
  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 +383 -1
  22. package/src/gantt/actions/edit.js +104 -41
  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 +24 -5
  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 +513 -78
  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 +37 -9
  41. package/src/gantt/base/tree-grid.js +1 -1
  42. package/src/gantt/export/export-helper.d.ts +12 -0
  43. package/src/gantt/export/export-helper.js +316 -9
  44. package/src/gantt/export/pdf-base/pdf-grid-table.js +14 -1
  45. package/src/gantt/export/pdf-base/pdf-style/gantt-theme.js +36 -0
  46. package/src/gantt/export/pdf-connector-line.js +137 -32
  47. package/src/gantt/export/pdf-event-marker.d.ts +10 -0
  48. package/src/gantt/export/pdf-event-marker.js +57 -0
  49. package/src/gantt/export/pdf-gantt.d.ts +2 -0
  50. package/src/gantt/export/pdf-gantt.js +30 -10
  51. package/src/gantt/export/pdf-taskbar.d.ts +23 -2
  52. package/src/gantt/export/pdf-taskbar.js +771 -43
  53. package/src/gantt/export/pdf-timeline.d.ts +9 -0
  54. package/src/gantt/export/pdf-timeline.js +98 -20
  55. package/src/gantt/models/column.d.ts +12 -0
  56. package/src/gantt/renderer/chart-rows.d.ts +1 -1
  57. package/src/gantt/renderer/chart-rows.js +29 -16
  58. package/src/gantt/renderer/connector-line.js +8 -5
  59. package/src/gantt/renderer/edit-tooltip.js +3 -0
  60. package/src/gantt/renderer/event-marker.js +4 -1
  61. package/src/gantt/renderer/nonworking-day.js +18 -5
  62. package/src/gantt/renderer/timeline.d.ts +9 -0
  63. package/src/gantt/renderer/timeline.js +169 -21
  64. package/styles/bootstrap-dark.css +77 -16
  65. package/styles/bootstrap.css +78 -17
  66. package/styles/bootstrap4.css +78 -17
  67. package/styles/bootstrap5-dark.css +78 -17
  68. package/styles/bootstrap5.css +78 -17
  69. package/styles/fabric-dark.css +78 -17
  70. package/styles/fabric.css +78 -17
  71. package/styles/fluent-dark.css +78 -17
  72. package/styles/fluent.css +78 -17
  73. package/styles/gantt/_bootstrap-dark-definition.scss +7 -2
  74. package/styles/gantt/_bootstrap-definition.scss +7 -2
  75. package/styles/gantt/_bootstrap4-definition.scss +7 -2
  76. package/styles/gantt/_bootstrap5-definition.scss +7 -2
  77. package/styles/gantt/_fabric-dark-definition.scss +7 -2
  78. package/styles/gantt/_fabric-definition.scss +7 -2
  79. package/styles/gantt/_fluent-definition.scss +7 -2
  80. package/styles/gantt/_fusionnew-definition.scss +6 -2
  81. package/styles/gantt/_highcontrast-definition.scss +7 -2
  82. package/styles/gantt/_highcontrast-light-definition.scss +7 -2
  83. package/styles/gantt/_layout.scss +92 -20
  84. package/styles/gantt/_material-dark-definition.scss +7 -2
  85. package/styles/gantt/_material-definition.scss +7 -2
  86. package/styles/gantt/_material3-definition.scss +7 -2
  87. package/styles/gantt/_tailwind-definition.scss +6 -1
  88. package/styles/gantt/_theme.scss +11 -0
  89. package/styles/gantt/bootstrap-dark.css +77 -16
  90. package/styles/gantt/bootstrap.css +78 -17
  91. package/styles/gantt/bootstrap4.css +78 -17
  92. package/styles/gantt/bootstrap5-dark.css +78 -17
  93. package/styles/gantt/bootstrap5.css +78 -17
  94. package/styles/gantt/fabric-dark.css +78 -17
  95. package/styles/gantt/fabric.css +78 -17
  96. package/styles/gantt/fluent-dark.css +78 -17
  97. package/styles/gantt/fluent.css +78 -17
  98. package/styles/gantt/highcontrast-light.css +78 -17
  99. package/styles/gantt/highcontrast.css +78 -17
  100. package/styles/gantt/material-dark.css +78 -17
  101. package/styles/gantt/material.css +78 -17
  102. package/styles/gantt/material3-dark.css +77 -16
  103. package/styles/gantt/material3.css +77 -16
  104. package/styles/gantt/tailwind-dark.css +78 -17
  105. package/styles/gantt/tailwind.css +78 -17
  106. package/styles/highcontrast-light.css +78 -17
  107. package/styles/highcontrast.css +78 -17
  108. package/styles/material-dark.css +78 -17
  109. package/styles/material.css +78 -17
  110. package/styles/material3-dark.css +77 -16
  111. package/styles/material3.css +77 -16
  112. package/styles/tailwind-dark.css +78 -17
  113. 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
  }
@@ -65,6 +70,10 @@ var Timeline = /** @class */ (function () {
65
70
  if (!this.parent.isFromOnPropertyChange) {
66
71
  this.parent.updateProjectDates(this.parent.cloneProjectStartDate, this.parent.cloneProjectEndDate, this.parent.isTimelineRoundOff);
67
72
  }
73
+ var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
74
+ this.parent.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
75
+ // eslint-disable-next-line
76
+ this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
68
77
  };
69
78
  /**
70
79
  * Function used to refresh Gantt rows.
@@ -98,6 +107,7 @@ var Timeline = /** @class */ (function () {
98
107
  */
99
108
  Timeline.prototype.processZooming = function (isZoomIn) {
100
109
  this.isZoomToFit = false;
110
+ this.isZoomedToFit = false;
101
111
  if (!this.parent['isProjectDateUpdated']) {
102
112
  this.parent.dateValidationModule.calculateProjectDates();
103
113
  }
@@ -205,6 +215,13 @@ var Timeline = /** @class */ (function () {
205
215
  this.parent.hideSpinner();
206
216
  }
207
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
+ }
208
225
  };
209
226
  /**
210
227
  * To perform the zoom to fit operation in Gantt.
@@ -215,6 +232,7 @@ var Timeline = /** @class */ (function () {
215
232
  Timeline.prototype.processZoomToFit = function () {
216
233
  this.isZoomToFit = true;
217
234
  this.isZooming = false;
235
+ this.isZoomedToFit = true;
218
236
  if (!this.parent.zoomingProjectStartDate) {
219
237
  this.parent.zoomingProjectStartDate = this.parent.cloneProjectStartDate;
220
238
  this.parent.zoomingProjectEndDate = this.parent.cloneProjectEndDate;
@@ -279,6 +297,7 @@ var Timeline = /** @class */ (function () {
279
297
  }
280
298
  this.changeTimelineSettings(newTimeline);
281
299
  this.parent.isTimelineRoundOff = isNullOrUndefined(this.parent.projectStartDate) ? true : false;
300
+ this.isZoomToFit = false;
282
301
  };
283
302
  Timeline.prototype.bottomTierCellWidthCalc = function (mode, zoomLevel, date) {
284
303
  var convertedMilliSeconds;
@@ -622,6 +641,28 @@ var Timeline = /** @class */ (function () {
622
641
  this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;
623
642
  }
624
643
  };
644
+ Timeline.prototype.dateByLeftValue = function (left, isMilestone, property) {
645
+ var pStartDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
646
+ var milliSecondsPerPixel = (24 * 60 * 60 * 1000) / this.parent.perDayWidth;
647
+ pStartDate.setTime(pStartDate.getTime() + (left * milliSecondsPerPixel));
648
+ /* To render the milestone in proper date while editing */
649
+ if (isMilestone && !isNullOrUndefined(property.predecessorsName) && property.predecessorsName !== '') {
650
+ pStartDate.setDate(pStartDate.getDate() - 1);
651
+ this.parent.dateValidationModule.setTime(this.parent.defaultEndTime, pStartDate);
652
+ pStartDate = this.parent.dateValidationModule.checkStartDate(pStartDate, property, true);
653
+ }
654
+ var tierMode = this.parent.timelineModule.bottomTier !== 'None' ? this.parent.timelineModule.topTier :
655
+ this.parent.timelineModule.bottomTier;
656
+ if (tierMode !== 'Hour' && tierMode !== 'Minutes') {
657
+ if (this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && !this.parent.isInDst(pStartDate)) {
658
+ pStartDate.setTime(pStartDate.getTime() + (60 * 60 * 1000));
659
+ }
660
+ else if (!this.parent.isInDst(new Date(this.parent.timelineModule.timelineStartDate.toString())) && this.parent.isInDst(pStartDate)) {
661
+ pStartDate.setTime(pStartDate.getTime() - (60 * 60 * 1000));
662
+ }
663
+ }
664
+ return pStartDate;
665
+ };
625
666
  /**
626
667
  * To create timeline header template.
627
668
  *
@@ -634,32 +675,109 @@ var Timeline = /** @class */ (function () {
634
675
  var div;
635
676
  var table;
636
677
  var thead;
678
+ var virtualTableDiv;
679
+ var virtualTrackDiv;
637
680
  var loopCount = this.isSingleTier ? 1 : 2;
638
681
  var tier = this.topTier === 'None' ? 'bottomTier' : 'topTier';
639
- this.updateTimelineHeaderHeight();
640
682
  this.topTierCollection = [];
641
683
  this.bottomTierCollection = [];
642
- for (var count = 0; count < loopCount; count++) {
643
- table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
644
- thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
645
- tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
646
- 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)) {
647
- td = createElement('th');
684
+ if (this.restrictRender == true) {
685
+ this.updateTimelineHeaderHeight();
686
+ this.wholeTimelineWidth = this.calculateWidthBetweenTwoDate(tier, this.parent.timelineModule.timelineStartDate, this.parent.timelineModule.timelineEndDate);
687
+ }
688
+ if (this.parent.enableTimelineVirtualization && (this.wholeTimelineWidth > this.parent.element.offsetWidth * 3)) {
689
+ for (var count = 0; count < loopCount; count++) {
690
+ table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
691
+ table.setAttribute('role', 'presentation');
692
+ thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
693
+ tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
694
+ td = createElement('td');
695
+ div = createElement('div', { styles: 'width: 20px' });
696
+ virtualTableDiv = createElement('div', { className: cls.virtualTable });
697
+ virtualTrackDiv = createElement('div', { className: cls.virtualTrack });
698
+ td.appendChild(div);
699
+ tr.appendChild(td);
700
+ virtualTableDiv.appendChild(tr);
701
+ thead.appendChild(virtualTableDiv);
702
+ thead.appendChild(virtualTrackDiv);
703
+ table.appendChild(thead);
704
+ this.parent.ganttChartModule.chartTimelineContainer.appendChild(table);
705
+ tier = 'bottomTier';
706
+ tr = null;
707
+ this.restrictRender = false;
708
+ }
709
+ if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
710
+ var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
711
+ this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
712
+ if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
713
+ this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
714
+ }
715
+ }
716
+ this.timelineVirtualizationStyles();
717
+ }
718
+ else {
719
+ for (var count = 0; count < loopCount; count++) {
720
+ table = createElement('table', { className: cls.timelineHeaderTableContainer, styles: 'display: block;' });
721
+ table.setAttribute('role', 'presentation');
722
+ thead = createElement('thead', { className: cls.timelineHeaderTableBody, styles: 'display:block; border-collapse:collapse' });
723
+ tr = createElement('tr', { innerHTML: this.createTimelineTemplate(tier) });
724
+ td = createElement('td');
648
725
  div = createElement('div', { styles: 'width: 20px' });
649
726
  td.appendChild(div);
650
727
  tr.appendChild(td);
651
728
  thead.appendChild(tr);
652
729
  table.appendChild(thead);
653
730
  this.parent.ganttChartModule.chartTimelineContainer.appendChild(table);
731
+ tier = 'bottomTier';
732
+ tr = null;
733
+ }
734
+ if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
735
+ var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
736
+ this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
737
+ if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
738
+ this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
739
+ }
654
740
  }
655
- tier = 'bottomTier';
656
- tr = null;
657
741
  }
658
- if (this.parent.height === "Auto" || this.parent.timelineModule.isSingleTier) {
659
- var timelineContainer = this.parent.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
660
- this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
661
- if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-gridcontent')[0])) {
662
- this.parent.treeGrid.element.getElementsByClassName('e-gridcontent')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
742
+ };
743
+ Timeline.prototype.timelineVirtualizationStyles = function () {
744
+ var translateXValue = 0;
745
+ var translateYValue = 0;
746
+ var trackWidth = this.wholeTimelineWidth;
747
+ if (this.parent.enableTimelineVirtualization) {
748
+ //e-content styles updating
749
+ translateXValue = (this.parent.enableTimelineVirtualization && !isNullOrUndefined(this.parent.ganttChartModule.scrollObject.element.scrollLeft)
750
+ && this.parent.ganttChartModule.scrollObject.element.scrollLeft != 0) ? this.parent.ganttChartModule.scrollObject.getTimelineLeft() : 0;
751
+ if (this.parent.enableRtl) {
752
+ translateXValue = -(translateXValue);
753
+ }
754
+ var contentVirtualTable = this.parent.element.querySelectorAll(".e-chart-scroll-container")[0].querySelector(".e-virtualtable");
755
+ contentVirtualTable.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
756
+ var contentVirtualTrack = this.parent.element.querySelectorAll(".e-chart-scroll-container")[0].querySelector(".e-virtualtrack");
757
+ contentVirtualTrack.style.position = "relative";
758
+ contentVirtualTrack.style.width = trackWidth + 'px';
759
+ //timeline styles updating
760
+ if (this.parent.ganttChartModule.scrollObject['isSetScrollLeft']) {
761
+ var virtualTableStylesT = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[0].querySelector(".e-virtualtable");
762
+ var virtualTableStylesB = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[1].querySelector(".e-virtualtable");
763
+ virtualTableStylesT.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
764
+ virtualTableStylesB.style.transform = "translate(" + translateXValue + "px, " + translateYValue + "px)";
765
+ }
766
+ var virtualTrackStylesT = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[0].querySelector(".e-virtualtrack");
767
+ var virtualTrackStylesB = this.parent.element.querySelectorAll(".e-timeline-header-table-container")[1].querySelector(".e-virtualtrack");
768
+ virtualTrackStylesT.style.position = "relative";
769
+ virtualTrackStylesB.style.position = "relative";
770
+ virtualTrackStylesT.style.width = trackWidth + 'px';
771
+ virtualTrackStylesB.style.width = trackWidth + 'px';
772
+ //dependency viewer styles updating
773
+ var dependencyViewer = this.parent.connectorLineModule.svgObject;
774
+ dependencyViewer['style'].width = trackWidth + 'px';
775
+ // timeline header container width updating
776
+ var timelineHeader = this.parent.element.querySelector('.' + cls.timelineHeaderContainer);
777
+ timelineHeader['style'].width = 'calc(100% - ' + 17 + 'px)';
778
+ if (this.parent.timelineModule.isZooming || this.parent.timelineModule.isZoomToFit) {
779
+ this.parent.ganttChartModule.scrollElement.scrollLeft = 0;
780
+ this.parent.ganttChartModule.scrollObject.updateChartElementStyles();
663
781
  }
664
782
  }
665
783
  };
@@ -869,7 +987,12 @@ var Timeline = /** @class */ (function () {
869
987
  dateString = dateString.slice(1);
870
988
  }
871
989
  else {
872
- dateString = dateString.slice(0, 1);
990
+ if (this.parent.locale === 'ar') {
991
+ dateString = dateString;
992
+ }
993
+ else {
994
+ dateString = dateString.slice(0, 1);
995
+ }
873
996
  }
874
997
  }
875
998
  else {
@@ -910,9 +1033,14 @@ var Timeline = /** @class */ (function () {
910
1033
  parent.timelineModule.customTimelineSettings.bottomTier.count;
911
1034
  var increment;
912
1035
  var newTime;
913
- var startDate = new Date(this.parent.timelineModule.timelineStartDate.toString());
1036
+ var leftValueForStartDate = (this.parent.enableTimelineVirtualization && this.parent.ganttChartModule.scrollObject.element.scrollLeft != 0)
1037
+ ? this.parent.ganttChartModule.scrollObject.getTimelineLeft() : null;
1038
+ var startDate = (this.parent.enableTimelineVirtualization && !isNullOrUndefined(leftValueForStartDate))
1039
+ ? new Date((this.dateByLeftValue(leftValueForStartDate)).toString()) : new Date(this.parent.timelineModule.timelineStartDate.toString());
914
1040
  var endDate = new Date(this.timelineRoundOffEndDate.toString());
915
1041
  var scheduleDateCollection = [];
1042
+ var width = 0;
1043
+ var WidthForVirtualTable = this.parent.element.offsetWidth * 3;
916
1044
  do {
917
1045
  // PDf export collection
918
1046
  var timelineCell = {};
@@ -942,8 +1070,20 @@ var Timeline = /** @class */ (function () {
942
1070
  parentTh = parentTh + parentTr;
943
1071
  var tierCollection = tier === 'topTier' ? this.topTierCollection : this.bottomTierCollection;
944
1072
  timelineCell.endDate = new Date(startDate.getTime());
945
- tierCollection.push(timelineCell);
946
- } while ((startDate < endDate));
1073
+ if (this.parent.pdfExportModule && this.parent.pdfExportModule.isPdfExport && this.parent.enableTimelineVirtualization) {
1074
+ if (tier == 'topTier') {
1075
+ this.pdfExportTopTierCollection.push(timelineCell);
1076
+ }
1077
+ else {
1078
+ this.pdfExportBottomTierCollection.push(timelineCell);
1079
+ }
1080
+ }
1081
+ else {
1082
+ tierCollection.push(timelineCell);
1083
+ }
1084
+ width += timelineCell.width;
1085
+ this.weekendEndDate = timelineCell.endDate >= endDate ? endDate : timelineCell.endDate;
1086
+ } while ((this.parent.enableTimelineVirtualization && (!this.parent.pdfExportModule || this.parent.pdfExportModule && !this.parent.pdfExportModule.isPdfExport)) ? (width < WidthForVirtualTable) && (startDate < endDate) : (startDate < endDate));
947
1087
  return parentTh;
948
1088
  };
949
1089
  Timeline.prototype.updateTimelineAfterZooming = function (endDate, resized) {
@@ -1429,9 +1569,10 @@ var Timeline = /** @class */ (function () {
1429
1569
  var validEndLeft = this.parent.dataOperation.getTaskLeft(validEndDate, false);
1430
1570
  var isChanged = void 0;
1431
1571
  var taskbarModule = this.parent.editModule.taskbarEditModule;
1432
- if (!isNullOrUndefined(maxStartLeft) && ((!isNullOrUndefined(taskbarModule)) && (!isNullOrUndefined(taskbarModule.taskBarEditAction)
1572
+ if (!isNullOrUndefined(maxStartLeft) && (((!isNullOrUndefined(taskbarModule)) && (!isNullOrUndefined(taskbarModule.taskBarEditAction)
1433
1573
  && taskbarModule.taskBarEditAction !== 'ProgressResizing' &&
1434
- taskbarModule.taskBarEditAction !== 'RightResizing' && taskbarModule.taskBarEditAction !== 'LeftResizing')) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
1574
+ taskbarModule.taskBarEditAction !== 'RightResizing' && taskbarModule.taskBarEditAction !== 'LeftResizing')) || ((taskbarModule)
1575
+ && isNullOrUndefined(taskbarModule.taskBarEditAction))) && (maxStartLeft < this.bottomTierCellWidth || maxStartLeft <= validStartLeft)) {
1435
1576
  isChanged = 'prevTimeSpan';
1436
1577
  minStartDate = minStartDate > this.timelineStartDate ? this.timelineStartDate : minStartDate;
1437
1578
  }
@@ -1481,13 +1622,16 @@ var Timeline = /** @class */ (function () {
1481
1622
  }
1482
1623
  var args = this.timeSpanActionEvent('actionBegin', type, isFrom);
1483
1624
  if (!args.cancel) {
1625
+ this.restrictRender = true;
1626
+ this.performedTimeSpanAction = true;
1627
+ var previousScrollLeft = this.parent.ganttChartModule.scrollElement.scrollLeft;
1484
1628
  this.parent.updateProjectDates(args.projectStartDate, args.ProjectEndDate, args.isTimelineRoundOff, isFrom);
1485
1629
  if (type === 'prevTimeSpan' && isFrom === 'publicMethod') {
1486
1630
  this.parent.ganttChartModule.updateScrollLeft(0);
1487
1631
  this.parent.timelineModule.isZoomToFit = false;
1488
1632
  }
1489
1633
  else if (type === 'nextTimeSpan' && isFrom === 'publicMethod') {
1490
- this.parent.ganttChartModule.updateScrollLeft(this.parent.timelineModule.totalTimelineWidth);
1634
+ this.parent.ganttChartModule.updateScrollLeft(this.parent.enableTimelineVirtualization ? this.wholeTimelineWidth : this.totalTimelineWidth);
1491
1635
  this.parent.timelineModule.isZoomToFit = false;
1492
1636
  }
1493
1637
  else if (type === 'nextTimeSpan' && isFrom === 'TaskbarEditing') {
@@ -1495,6 +1639,10 @@ var Timeline = /** @class */ (function () {
1495
1639
  this.parent.element.querySelector('.e-timeline-header-container').scrollLeft = currentScrollLeft;
1496
1640
  this.parent.timelineModule.isZoomToFit = false;
1497
1641
  }
1642
+ if (isFrom === 'TaskbarEditing' && this.parent.enableTimelineVirtualization && this.wholeTimelineWidth > this.parent.element.offsetWidth * 3) {
1643
+ this.parent.ganttChartModule.scrollObject.setScrollLeft(previousScrollLeft);
1644
+ this.parent.ganttChartModule.scrollObject.updateContent();
1645
+ }
1498
1646
  this.parent.timelineModule.timeSpanActionEvent('actionComplete', type, isFrom);
1499
1647
  }
1500
1648
  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;