@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
@@ -21,6 +21,15 @@ export declare class PdfTimeline {
21
21
  private bottomTierIndex;
22
22
  private prevTopTierIndex;
23
23
  private prevBottomTierIndex;
24
+ holidayLabel: string;
25
+ holidayCompleted: boolean;
26
+ holidayNumberOfDays: number;
27
+ holidayWidth: number;
28
+ detailsTimeline: TimelineDetails;
29
+ fitHolidayCompleted: boolean;
30
+ fromDataHoliday: string | Date;
31
+ timelineWidth: number;
32
+ lastWidth: number;
24
33
  constructor(gantt?: PdfGantt);
25
34
  /**
26
35
  * @private
@@ -1,10 +1,14 @@
1
- import { PointF, PdfColor, PdfPen, PdfSolidBrush, PdfStandardFont, PdfStringFormat, PdfVerticalAlignment, PdfTextAlignment, PdfWordWrapType } from '@syncfusion/ej2-pdf-export';
1
+ import { PointF, PdfColor, PdfPen, PdfSolidBrush, PdfStandardFont, PdfStringFormat, PdfVerticalAlignment, PdfTextAlignment, PdfWordWrapType, PdfFontFamily, PdfBrushes } from '@syncfusion/ej2-pdf-export';
2
2
  import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';
3
3
  import { pixelToPoint, pointToPixel } from '../base/utils';
4
4
  /**
5
5
  */
6
6
  var PdfTimeline = /** @class */ (function () {
7
7
  function PdfTimeline(gantt) {
8
+ this.holidayCompleted = false;
9
+ this.fitHolidayCompleted = false;
10
+ this.timelineWidth = 0;
11
+ this.lastWidth = 0;
8
12
  this.width = 0;
9
13
  this.gantt = gantt;
10
14
  this.parent = gantt.parent;
@@ -23,8 +27,8 @@ var PdfTimeline = /** @class */ (function () {
23
27
  * @returns {void}
24
28
  */
25
29
  PdfTimeline.prototype.drawTimeline = function (page, startPoint, detail) {
26
- var remainWidth = (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
27
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? pointToPixel(Math.floor(detail.totalWidth)) : Math.floor(detail.totalWidth);
30
+ this.detailsTimeline = detail;
31
+ var remainWidth = (this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) ? pointToPixel(Math.floor(detail.totalWidth)) : Math.floor(detail.totalWidth);
28
32
  var renderWidth = 0;
29
33
  this.topTierPoint.x = startPoint.x;
30
34
  this.topTierPoint.y = startPoint.y;
@@ -51,9 +55,8 @@ var PdfTimeline = /** @class */ (function () {
51
55
  }
52
56
  //Primary header Event Arguments
53
57
  /* eslint-disable-next-line */
54
- this.triggerQueryTimelinecell(page, this.topTierPoint.x, this.topTierPoint.y, this.topTierHeight, renderWidth, pHeader.value, true);
55
- this.topTierPoint.x += (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
56
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? renderWidth : pixelToPoint(renderWidth);
58
+ this.triggerQueryTimelinecell(page, this.topTierPoint.x, this.topTierPoint.y, this.topTierHeight, renderWidth, pHeader.value, true, this.parent.timelineModule.isSingleTier && this.parent.timelineSettings.topTier.unit === "Day" ? pHeader.startDate : null);
59
+ this.topTierPoint.x += (this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) ? renderWidth : pixelToPoint(renderWidth);
57
60
  remainWidth -= renderWidth;
58
61
  if (isCompleted) {
59
62
  this.topTierIndex++;
@@ -78,9 +81,14 @@ var PdfTimeline = /** @class */ (function () {
78
81
  }
79
82
  //Secondary header Event Arguments
80
83
  /* eslint-disable-next-line */
81
- this.triggerQueryTimelinecell(page, this.bottomTierPoint.x, this.bottomTierPoint.y, this.bottomTierHeight, width, secondHeader.value, false);
82
- this.bottomTierPoint.x = (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
83
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? this.bottomTierPoint.x + width : this.bottomTierPoint.x + pixelToPoint(width);
84
+ if (!this.parent.pdfExportModule.gantt.taskbar.isAutoFit() && this.parent.timelineModule.bottomTier !== "Day") {
85
+ var unit = this.parent.perDayWidth;
86
+ if (width < unit || (width > unit)) {
87
+ width = unit;
88
+ }
89
+ }
90
+ this.triggerQueryTimelinecell(page, this.bottomTierPoint.x, this.bottomTierPoint.y, this.bottomTierHeight, width, secondHeader.value, false, secondHeader.startDate);
91
+ this.bottomTierPoint.x = (this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) ? this.bottomTierPoint.x + width : this.bottomTierPoint.x + pixelToPoint(width);
84
92
  remainWidth -= width;
85
93
  secondHeader.completedWidth = width;
86
94
  if (isCompleted) {
@@ -91,6 +99,7 @@ var PdfTimeline = /** @class */ (function () {
91
99
  remainWidth = 0;
92
100
  }
93
101
  }
102
+ this.timelineWidth = this.lastWidth;
94
103
  };
95
104
  /**
96
105
  *
@@ -110,9 +119,8 @@ var PdfTimeline = /** @class */ (function () {
110
119
  if (pHeader.completedWidth > 0) {
111
120
  //Primary header Event Arguments
112
121
  /* eslint-disable-next-line */
113
- this.triggerQueryTimelinecell(page, this.topTierPoint.x, this.topTierPoint.y, this.topTierHeight, pHeader.completedWidth, pHeader.value, true);
114
- this.topTierPoint.x += (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
115
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? pHeader.completedWidth : pixelToPoint(pHeader.completedWidth);
122
+ this.triggerQueryTimelinecell(page, this.topTierPoint.x, this.topTierPoint.y, this.topTierHeight, pHeader.completedWidth, pHeader.value, true, this.parent.timelineModule.isSingleTier && this.parent.timelineSettings.topTier.unit === "Day" ? pHeader.startDate : null);
123
+ this.topTierPoint.x += (this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) ? pHeader.completedWidth : pixelToPoint(pHeader.completedWidth);
116
124
  }
117
125
  }
118
126
  }
@@ -124,9 +132,8 @@ var PdfTimeline = /** @class */ (function () {
124
132
  if (secondHeader.completedWidth > 0) {
125
133
  //Secondary header Event Arguments
126
134
  /* eslint-disable-next-line */
127
- this.triggerQueryTimelinecell(page, this.bottomTierPoint.x, this.bottomTierPoint.y, this.bottomTierHeight, secondHeader.width, secondHeader.value, false);
128
- this.bottomTierPoint.x = (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
129
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? this.bottomTierPoint.x + secondHeader.width : this.bottomTierPoint.x + pixelToPoint(secondHeader.width);
135
+ this.triggerQueryTimelinecell(page, this.bottomTierPoint.x, this.bottomTierPoint.y, this.bottomTierHeight, secondHeader.width, secondHeader.value, false, secondHeader.startDate);
136
+ this.bottomTierPoint.x = (this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) ? this.bottomTierPoint.x + secondHeader.width : this.bottomTierPoint.x + pixelToPoint(secondHeader.width);
130
137
  }
131
138
  }
132
139
  }
@@ -135,7 +142,9 @@ var PdfTimeline = /** @class */ (function () {
135
142
  * Method to trigger pdf query timelinecell event
136
143
  */
137
144
  /* eslint-disable-next-line */
138
- PdfTimeline.prototype.triggerQueryTimelinecell = function (page, x, y, height, width, value, isTopTier) {
145
+ PdfTimeline.prototype.triggerQueryTimelinecell = function (page, x, y, height, width, value, isTopTier, currentDate) {
146
+ var _this = this;
147
+ var days = new Date(currentDate).getDay();
139
148
  var graphics = page.graphics;
140
149
  var timelineStyle = {};
141
150
  var ganttStyle = this.gantt.ganttStyle;
@@ -171,12 +180,81 @@ var PdfTimeline = /** @class */ (function () {
171
180
  this.parent.trigger('pdfQueryTimelineCellInfo', eventArgs);
172
181
  }
173
182
  var e = eventArgs.timelineCell;
174
- var rectPen = new PdfPen(eventArgs.timelineCell.borderColor);
183
+ var rectPen;
175
184
  var rectBrush = new PdfSolidBrush(eventArgs.timelineCell.backgroundColor);
176
- graphics.drawRectangle(rectPen, rectBrush, x, y, (this.parent.pdfExportModule && this.parent.pdfExportModule.helper.exportProps && this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings &&
177
- this.parent.pdfExportModule.helper.exportProps.fitToWidthSettings.isFitToWidth) ? width : pixelToPoint(width), pixelToPoint(height));
185
+ var nonWorkingDays = this.parent.nonWorkingDayIndex;
186
+ if (this.parent.highlightWeekends && nonWorkingDays.indexOf(days) !== -1 && (this.parent.timelineModule.bottomTier === "Day" || this.parent.timelineModule.bottomTier === "None" && this.parent.timelineModule.topTier === "Day")) {
187
+ rectBrush = new PdfSolidBrush(new PdfColor(238, 238, 238));
188
+ }
189
+ this.parent.holidays.map(function (item) {
190
+ var fromDate = new Date(item.from);
191
+ var toDate = new Date(item.to);
192
+ var timelinedate = new Date(currentDate);
193
+ if (fromDate <= timelinedate && toDate >= timelinedate && (_this.parent.timelineModule.bottomTier === "Day" || (_this.parent.timelineModule.bottomTier === "None" && _this.parent.timelineModule.topTier === "Day"))) {
194
+ rectBrush = new PdfSolidBrush(new PdfColor(238, 238, 238));
195
+ if (fromDate.getTime() === timelinedate.getTime()) {
196
+ _this.holidayWidth = x;
197
+ }
198
+ if (toDate.getTime() === timelinedate.getTime()) {
199
+ _this.holidayLabel = item.label;
200
+ var changeDate = new Date(item.to);
201
+ changeDate.setDate(changeDate.getDate() + 1);
202
+ var day = _this.parent.dataOperation.getTaskWidth(fromDate, changeDate);
203
+ _this.holidayNumberOfDays = day / width;
204
+ _this.holidayCompleted = true;
205
+ }
206
+ }
207
+ else if (_this.parent.timelineModule.bottomTier !== "Day") {
208
+ if (_this.detailsTimeline.startDate <= fromDate && _this.detailsTimeline.endDate >= fromDate) {
209
+ _this.parent.timelineModule.bottomTierCollection.map(function (items, index) {
210
+ if (items.startDate <= fromDate && items.endDate >= fromDate) {
211
+ if (items.startDate === currentDate) {
212
+ _this.fitHolidayCompleted = true;
213
+ _this.fromDataHoliday = item.from;
214
+ _this.holidayLabel = item.label;
215
+ }
216
+ }
217
+ });
218
+ }
219
+ }
220
+ });
221
+ var rectPen1 = new PdfPen(eventArgs.timelineCell.borderColor);
222
+ if (!this.parent.pdfExportModule.gantt.taskbar.isAutoFit()) {
223
+ this.lastWidth = x + width;
224
+ }
225
+ graphics.drawRectangle(rectPen1, rectBrush, x, y, width, pixelToPoint(height));
178
226
  if (!isTopTier && (this.parent.gridLines == "Both" || this.parent.gridLines == "Vertical")) {
179
- graphics.drawRectangle(rectPen, rectBrush, x, y + pixelToPoint(height), width, page.getClientSize().height);
227
+ rectPen = new PdfPen(eventArgs.timelineCell.borderColor);
228
+ }
229
+ else {
230
+ rectPen = null;
231
+ }
232
+ graphics.drawRectangle(rectPen, rectBrush, x, y + pixelToPoint(height), width, page.getClientSize().height);
233
+ if (this.holidayCompleted) {
234
+ var state = graphics.save();
235
+ var font1 = new PdfStandardFont(PdfFontFamily.Helvetica, 10);
236
+ var fontHieght = font1.height;
237
+ var fontSize = font1.size;
238
+ graphics.translateTransform(this.holidayWidth + width - ((fontSize / 2) * this.holidayNumberOfDays) - fontHieght + fontHieght / 2 + (width * this.holidayNumberOfDays) / 2, 40);
239
+ graphics.rotateTransform(-90);
240
+ graphics.translateTransform(-(page.getClientSize().height / 2), -40);
241
+ graphics.drawString(this.holidayLabel, font1, null, PdfBrushes.Black, 10, 10, null);
242
+ graphics.restore(state);
243
+ this.holidayCompleted = false;
244
+ }
245
+ if (this.fitHolidayCompleted) {
246
+ var holidayBrush = new PdfSolidBrush(new PdfColor(238, 238, 238));
247
+ var font1 = new PdfStandardFont(PdfFontFamily.Helvetica, 10);
248
+ var fontHieght = font1.height;
249
+ var fontSize = font1.size;
250
+ graphics.drawRectangle(null, holidayBrush, x + width / 2 - fontSize, y + pixelToPoint(height), fontSize, page.getClientSize().height);
251
+ var state = graphics.save();
252
+ graphics.translateTransform(x + width + width / 2 - fontSize, 40);
253
+ graphics.rotateTransform(-90);
254
+ graphics.translateTransform(-(page.getClientSize().height / 2), -40);
255
+ graphics.drawString(this.holidayLabel, font1, null, PdfBrushes.Black, 10, 10, null);
256
+ graphics.restore(state);
257
+ this.fitHolidayCompleted = false;
180
258
  }
181
259
  var font = new PdfStandardFont(ganttStyle.fontFamily, e.fontSize, e.fontStyle);
182
260
  if (ganttStyle.font) {
@@ -89,6 +89,12 @@ export declare class Column {
89
89
  * @default 'stringedit'
90
90
  */
91
91
  editType: string;
92
+ /**
93
+ * Defines rules to validate data before creating and updating.
94
+ *
95
+ * @default null
96
+ */
97
+ validationRules: Object;
92
98
  /**
93
99
  * Defines the custom sort comparer function.
94
100
  */
@@ -246,6 +252,12 @@ export interface ColumnModel {
246
252
  * @default true
247
253
  */
248
254
  allowFiltering?: boolean;
255
+ /**
256
+ * Defines rules to validate data before creating and updating.
257
+ *
258
+ * @default null
259
+ */
260
+ validationRules?: Object;
249
261
  /**
250
262
  * It is used to customize the default filter options for a specific columns.
251
263
  * * ui - to render custom component for specific column it has following functions.
@@ -228,7 +228,7 @@ export declare class ChartRows extends DateProcessor {
228
228
  */
229
229
  getGanttChartRow(i: number, tempTemplateData: IGanttData): Node;
230
230
  /**
231
- * To set aria-rowindex for chart rows
231
+ * To set data-rowindex for chart rows
232
232
  *
233
233
  * @returns {void} .
234
234
  * @private
@@ -55,7 +55,7 @@ var ChartRows = /** @class */ (function (_super) {
55
55
  this.parent.on('destroy', this.destroy, this);
56
56
  };
57
57
  ChartRows.prototype.refreshChartByTimeline = function () {
58
- this.taskTable.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);
58
+ this.taskTable.style.width = formatUnit(this.parent.enableTimelineVirtualization ? this.parent.timelineModule.wholeTimelineWidth : this.parent.timelineModule.totalTimelineWidth);
59
59
  var prevDate = getValue('prevProjectStartDate', this.parent.dataOperation);
60
60
  var isUpdated = false;
61
61
  if (prevDate) {
@@ -75,7 +75,7 @@ var ChartRows = /** @class */ (function (_super) {
75
75
  ChartRows.prototype.createChartTable = function () {
76
76
  this.taskTable = createElement('table', {
77
77
  className: cls.taskTable + ' ' + cls.zeroSpacing, id: 'GanttTaskTable' + this.parent.element.id,
78
- styles: 'position: absolute;width:' + this.parent.timelineModule.totalTimelineWidth + 'px;',
78
+ styles: 'position: absolute;width:' + (this.parent.enableTimelineVirtualization ? this.parent.timelineModule.wholeTimelineWidth : this.parent.timelineModule.totalTimelineWidth) + 'px;',
79
79
  attrs: { cellspacing: '0.25px' }
80
80
  });
81
81
  var colgroup = createElement('colgroup');
@@ -89,7 +89,7 @@ var ChartRows = /** @class */ (function (_super) {
89
89
  this.parent.ganttChartModule.chartBodyContent.appendChild(this.taskTable);
90
90
  };
91
91
  ChartRows.prototype.initiateTemplates = function () {
92
- this.taskTable.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);
92
+ this.taskTable.style.width = formatUnit(this.parent.enableTimelineVirtualization ? this.parent.timelineModule.wholeTimelineWidth : this.parent.timelineModule.totalTimelineWidth);
93
93
  this.initChartHelperPrivateVariable();
94
94
  this.initializeChartTemplate();
95
95
  };
@@ -546,7 +546,14 @@ var ChartRows = /** @class */ (function (_super) {
546
546
  };
547
547
  ChartRows.prototype.splitSegmentedTaskbar = function (startDate, endDate, splitDate, segmentIndex, segments, ganttData, segmentDuration) {
548
548
  var ganttProp = ganttData.ganttProperties;
549
- var checkClickState = this.parent.nonWorkingDayIndex.indexOf(splitDate.getDay());
549
+ var checkClickState;
550
+ var endDateState;
551
+ if (this.parent.includeWeekend) {
552
+ checkClickState = -1;
553
+ }
554
+ else {
555
+ checkClickState = this.parent.nonWorkingDayIndex.indexOf(splitDate.getDay());
556
+ }
550
557
  var increment = checkClickState === -1 ? 0 : checkClickState === 0 ? 1 : 2;
551
558
  startDate = this.parent.dataOperation.checkStartDate(startDate, ganttProp, false);
552
559
  var segmentEndDate = new Date(splitDate.getTime());
@@ -558,7 +565,12 @@ var ChartRows = /** @class */ (function (_super) {
558
565
  duration: this.parent.dataOperation.getDuration(startDate, segmentEndDate, ganttProp.durationUnit, ganttProp.isAutoSchedule, ganttProp.isMilestone),
559
566
  offsetDuration: 1
560
567
  };
561
- var endDateState = this.parent.nonWorkingDayIndex.indexOf(segmentEndDate.getDay());
568
+ if (this.parent.includeWeekend) {
569
+ endDateState = -1;
570
+ }
571
+ else {
572
+ endDateState = this.parent.nonWorkingDayIndex.indexOf(segmentEndDate.getDay());
573
+ }
562
574
  if (segmentIndex !== -1) {
563
575
  segments.splice(segmentIndex, 1);
564
576
  segmentIndex = -1;
@@ -771,7 +783,7 @@ var ChartRows = /** @class */ (function (_super) {
771
783
  ChartRows.prototype.getManualTaskbar = function () {
772
784
  var data = this.templateData;
773
785
  var taskbarHeight = (this.taskBarHeight / 2 - 1);
774
- var innerDiv = (data.ganttProperties.startDate && data.ganttProperties.endDate && data.ganttProperties.duration) ?
786
+ var innerDiv = (data.ganttProperties.startDate && data.ganttProperties.endDate && (data.ganttProperties.duration || data.hasChildRecords)) ?
775
787
  ('<div class="' + cls.manualParentTaskBar + '" style="width:' + data.ganttProperties.width + 'px;' + 'height:' +
776
788
  taskbarHeight / 5 + 'px;border-left-width:' + taskbarHeight / 5 +
777
789
  'px; border-bottom:' + taskbarHeight / 5 + 'px solid transparent;"></div>') :
@@ -787,8 +799,8 @@ var ChartRows = /** @class */ (function (_super) {
787
799
  var template = '<div class="' + cls.manualParentMainContainer + '"' +
788
800
  'style=' + (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.left - data.ganttProperties.autoLeft) + 'px;' +
789
801
  'width:' + data.ganttProperties.width + 'px;' +
790
- 'height:' + taskbarHeight + 'px;>' + innerDiv + ((data.ganttProperties.startDate && data.ganttProperties.endDate &&
791
- data.ganttProperties.duration) || data.ganttProperties.duration ? '<div class="e-gantt-manualparenttaskbar-left" style=' +
802
+ 'height:' + taskbarHeight + 'px;cursor:' + (this.parent.editSettings.allowTaskbarEditing ? 'move;' : 'default;') + '</div>' + innerDiv + ((data.ganttProperties.startDate && data.ganttProperties.endDate &&
803
+ (data.ganttProperties.duration || data.hasChildRecords)) || data.ganttProperties.duration ? '<div class="e-gantt-manualparenttaskbar-left" style=' +
792
804
  (this.parent.enableRtl ? 'margin-right:0px;' : '') + '"height:' + ((taskbarHeight / 5) + 8) + 'px;border-left-width:' + taskbarHeight / 5 +
793
805
  'px; border-bottom:' + taskbarHeight / 5 + 'px solid transparent;"></div>' +
794
806
  '<div class="e-gantt-manualparenttaskbar-right" style=' + (this.parent.enableRtl ? 'margin-right:-8px;' : '') +
@@ -797,7 +809,7 @@ var ChartRows = /** @class */ (function (_super) {
797
809
  taskbarHeight / 5 + 'px solid transparent;>' + '</div></div>' : '');
798
810
  var milestoneTemplate = '<div class="' + cls.manualParentMilestone + '" style="width:' + ((this.parent.renderBaseline ? this.taskBarHeight - 3 : this.taskBarHeight - 7)) + 'px;height:' +
799
811
  ((this.parent.renderBaseline ? this.taskBarHeight - 3 : this.taskBarHeight - 7)) + 'px;position:absolute;transform: rotate(45deg);top:' + (this.parent.rowHeight > 40 ? 0 : 2) + 'px;left:' + (this.parent.renderBaseline ? 2 : 1) + 'px;"> </div>';
800
- return this.createDivElement(data.ganttProperties.duration !== 0 ? template : milestoneTemplate);
812
+ return this.createDivElement((data.ganttProperties.duration !== 0 || data.hasChildRecords) ? template : milestoneTemplate);
801
813
  };
802
814
  /**
803
815
  * To get parent taskbar node.
@@ -1004,10 +1016,10 @@ var ChartRows = /** @class */ (function (_super) {
1004
1016
  ' tabindex="-1" role="term" style="' + ((data.ganttProperties.isMilestone && !manualParent && !(data.hasChildRecords && !data.ganttProperties.isAutoSchedule)) ?
1005
1017
  ('width:' + this.milestoneHeight + 'px;height:' +
1006
1018
  this.milestoneHeight + 'px;margin-top:' + this.milestoneMarginTop + 'px;' + (this.parent.enableRtl ? 'right:' : 'left:') + (data.ganttProperties.left -
1007
- (this.milestoneHeight / 2)) + 'px;') : ('width:' + data.ganttProperties.width +
1019
+ (this.milestoneHeight / 2)) + 'px;cursor:' + (this.parent.editSettings.allowTaskbarEditing ? 'move;' : 'default;')) : ('width:' + data.ganttProperties.width +
1008
1020
  'px;margin-top:' + this.taskBarMarginTop + 'px;' + (this.parent.enableRtl ? 'right:' : 'left:') + (!data.hasChildRecords || data.ganttProperties.isAutoSchedule ?
1009
1021
  data.ganttProperties.left : data.ganttProperties.autoLeft) + 'px;height:' +
1010
- this.taskBarHeight + 'px;cursor:' + (data.ganttProperties.isAutoSchedule ? 'move;' : 'auto;'))) + '"></div>';
1022
+ this.taskBarHeight + 'px;cursor:' + (this.parent.editSettings.allowTaskbarEditing ? 'move;' : 'default;'))) + '"></div>';
1011
1023
  return this.createDivElement(template);
1012
1024
  };
1013
1025
  ChartRows.prototype.rightLabelContainer = function () {
@@ -1326,7 +1338,7 @@ var ChartRows = /** @class */ (function (_super) {
1326
1338
  else {
1327
1339
  this.ganttChartTableBody.appendChild(oldRowElements[oldIndex]);
1328
1340
  }
1329
- this.ganttChartTableBody.querySelectorAll('tr')[index].setAttribute('aria-rowindex', index.toString());
1341
+ this.ganttChartTableBody.querySelectorAll('tr')[index].setAttribute('data-rowindex', index.toString());
1330
1342
  }
1331
1343
  }
1332
1344
  else {
@@ -1352,7 +1364,7 @@ var ChartRows = /** @class */ (function (_super) {
1352
1364
  }
1353
1365
  // To maintain selection when virtualization is enabled
1354
1366
  if (this.parent.selectionModule && this.parent.allowSelection) {
1355
- this.parent.selectionModule.maintainSelectedRecords(parseInt(tRow.getAttribute('aria-rowindex'), 10));
1367
+ this.parent.selectionModule.maintainSelectedRecords(parseInt(tRow.getAttribute('data-rowindex'), 10));
1356
1368
  }
1357
1369
  }
1358
1370
  (_a = this.ganttChartTableBody).replaceChildren.apply(_a, dupChartBody.childNodes);
@@ -1549,7 +1561,7 @@ var ChartRows = /** @class */ (function (_super) {
1549
1561
  return tRow;
1550
1562
  };
1551
1563
  /**
1552
- * To set aria-rowindex for chart rows
1564
+ * To set data-rowindex for chart rows
1553
1565
  *
1554
1566
  * @returns {void} .
1555
1567
  * @private
@@ -1567,11 +1579,12 @@ var ChartRows = /** @class */ (function (_super) {
1567
1579
  return x;
1568
1580
  }
1569
1581
  })[0];
1570
- tRow.setAttribute('aria-rowindex', data['index'].toString());
1582
+ tRow.setAttribute('data-rowindex', data['index'].toString());
1571
1583
  }
1572
1584
  else {
1573
1585
  index = visualData.indexOf(tempTemplateData);
1574
- tRow.setAttribute('aria-rowindex', index.toString());
1586
+ tRow.setAttribute('aria-rowindex', (index + 1).toString());
1587
+ tRow.setAttribute('data-rowindex', index.toString());
1575
1588
  }
1576
1589
  };
1577
1590
  /**
@@ -29,7 +29,9 @@ var ConnectorLine = /** @class */ (function () {
29
29
  id: this.parent.element.id + '_svg'
30
30
  });
31
31
  this.svgObject.setAttribute('height', '100%');
32
- this.svgObject.setAttribute('width', '100%');
32
+ if (!this.parent.enableTimelineVirtualization) {
33
+ this.svgObject.setAttribute('width', '100%');
34
+ }
33
35
  }
34
36
  /**
35
37
  * To get connector line gap.
@@ -169,6 +171,7 @@ var ConnectorLine = /** @class */ (function () {
169
171
  for (var j = 0; j < innerChild.length; j++) {
170
172
  var ariaString = 'Connector Line ' + this.parent.connectorLineModule.generateAriaLabel(ariaConnector[i]);
171
173
  innerChild[j].setAttribute('aria-label', ariaString);
174
+ innerChild[j].setAttribute('role', 'img');
172
175
  }
173
176
  }
174
177
  this.parent.ganttChartModule.chartBodyContent.insertBefore(this.dependencyViewContainer, this.parent.ganttChartModule.chartBodyContent.lastChild);
@@ -538,7 +541,7 @@ var ConnectorLine = /** @class */ (function () {
538
541
  }
539
542
  if (this.getParentPosition(data)) {
540
543
  // Create the group element
541
- this.transform = this.parent.enableRtl ? "translate(" + this.parent.timelineModule.totalTimelineWidth + ", 0) scale(-1, 1)" : '';
544
+ this.transform = this.parent.enableRtl ? "translate(" + (this.parent.enableTimelineVirtualization ? this.parent.timelineModule.wholeTimelineWidth : this.parent.timelineModule.totalTimelineWidth) + ", 0) scale(-1, 1)" : '';
542
545
  this.connectorId = "ConnectorLine" + data.connectorLineId;
543
546
  this.groupObject = this.renderer.createGroup({
544
547
  id: this.connectorId,
@@ -855,10 +858,10 @@ var ConnectorLine = /** @class */ (function () {
855
858
  * @private
856
859
  */
857
860
  ConnectorLine.prototype.getConnectorLineTooltipInnerTd = function (fromTaskName, fromPredecessorText, toTaskName, toPredecessorText) {
858
- var innerTd = '<tr id="fromPredecessor"><td style="padding: 4px;width: 30px;">' + this.parent.localeObj.getConstant('from') + '</td><td> ';
861
+ var innerTd = '<tr id="fromPredecessor"><td style="padding: 2px;">' + this.parent.localeObj.getConstant('from') + '</td><td> ';
859
862
  innerTd = innerTd + fromTaskName + ' </td><td style="padding: 2px;"> ' + this.parent.localeObj.getConstant(fromPredecessorText) + ' </td> </tr>';
860
- innerTd = innerTd + '<tr id="toPredecessor"><td style="padding: 4px;">' + this.parent.localeObj.getConstant('to') + '</td><td> ' + toTaskName;
861
- innerTd = innerTd + ' </td><td style="padding: 2px;width: 30px;"> ' + this.parent.localeObj.getConstant(toPredecessorText) + ' </td></tr></tbody><table>';
863
+ innerTd = innerTd + '<tr id="toPredecessor"><td style="padding: 2px;">' + this.parent.localeObj.getConstant('to') + '</td><td> ' + toTaskName;
864
+ innerTd = innerTd + ' </td><td style="padding: 2px;"> ' + this.parent.localeObj.getConstant(toPredecessorText) + ' </td></tr></tbody><table>';
862
865
  return innerTd;
863
866
  };
864
867
  /**
@@ -114,6 +114,9 @@ var EditTooltip = /** @class */ (function () {
114
114
  else {
115
115
  this.toolTipObj.content = this.getTooltipText(segmentIndex);
116
116
  this.toolTipObj.refresh(this.taskbarEdit.taskBarEditElement);
117
+ if (this.parent.enableRtl && this.toolTipObj['tooltipEle']) {
118
+ this.toolTipObj['tooltipEle'].style.left = this.parent.editModule.taskbarEditModule['tooltipValue'] + 10 + 'px';
119
+ }
117
120
  if (this.taskbarEdit.taskBarEditAction === 'LeftResizing') {
118
121
  if (this.parent.enableRtl) {
119
122
  this.toolTipObj.offsetX = 0;
@@ -46,8 +46,10 @@ var EventMarker = /** @class */ (function () {
46
46
  var eventMarkerElement;
47
47
  var spanElement;
48
48
  var rightArrow;
49
+ var eventMarkerCollection = [];
49
50
  for (var i = 0; i < this.parent.eventMarkers.length; i++) {
50
- left = this.parent.dataOperation.getTaskLeft(this.parent.dateValidationModule.getDateFromFormat(this.parent.eventMarkers[i].day, true), false);
51
+ left = this.parent.dataOperation.getTaskLeft(this.parent.dateValidationModule.getDateFromFormat(this.parent.eventMarkers[i].day, true), false, true);
52
+ eventMarkerCollection.push({ id: i, left: left, label: this.parent.eventMarkers[i].label, date: this.parent.dateValidationModule.getDateFromFormat(this.parent.eventMarkers[i].day, true) });
51
53
  var align = void 0;
52
54
  if (this.parent.enableRtl) {
53
55
  align = "right:" + left + "px;";
@@ -92,6 +94,7 @@ var EventMarker = /** @class */ (function () {
92
94
  }
93
95
  container.appendChild(eventMarkerElement);
94
96
  }
97
+ this.parent.eventMarkerColloction = eventMarkerCollection;
95
98
  };
96
99
  /**
97
100
  * @returns {void} .
@@ -19,6 +19,7 @@ var NonWorkingDay = /** @class */ (function () {
19
19
  this.nonworkingContainer = createElement('div', {
20
20
  className: cls.nonworkingContainer
21
21
  });
22
+ this.parent.enableTimelineVirtualization ? this.nonworkingContainer.style.height = "100%" : {};
22
23
  this.parent.ganttChartModule.chartBodyContent.insertBefore(this.nonworkingContainer, this.parent.ganttChartModule.chartBodyContent.lastChild);
23
24
  }
24
25
  };
@@ -35,6 +36,10 @@ var NonWorkingDay = /** @class */ (function () {
35
36
  this.holidayContainer = createElement('div', {
36
37
  className: cls.holidayContainer
37
38
  });
39
+ if (this.parent.enableTimelineVirtualization) {
40
+ this.holidayContainer.style.height = "100%";
41
+ this.holidayContainer.style.zIndex = "-1";
42
+ }
38
43
  this.nonworkingContainer.appendChild(this.holidayContainer);
39
44
  }
40
45
  this.holidayContainer.innerHTML = this.getHolidaysElement().innerHTML;
@@ -80,7 +85,7 @@ var NonWorkingDay = /** @class */ (function () {
80
85
  }
81
86
  var width = (this.parent.holidays[i].from && this.parent.holidays[i].to) ?
82
87
  this.parent.dataOperation.getTaskWidth(fromDate, toDate) : this.parent.perDayWidth;
83
- var left = this.parent.dataOperation.getTaskLeft(fromDate, false);
88
+ var left = this.parent.dataOperation.getTaskLeft(fromDate, false, true);
84
89
  var align = this.parent.enableRtl ? "right:" + left + "px;" : "left:" + left + "px;";
85
90
  var holidayDiv = createElement('div', {
86
91
  className: cls.holidayElement, styles: align + " width:" + width + "px; height:100%;"
@@ -113,6 +118,10 @@ var NonWorkingDay = /** @class */ (function () {
113
118
  this.weekendContainer = createElement('div', {
114
119
  className: cls.weekendContainer
115
120
  });
121
+ if (this.parent.enableTimelineVirtualization) {
122
+ this.weekendContainer.style.height = "100%";
123
+ this.weekendContainer.style.zIndex = "-1";
124
+ }
116
125
  this.nonworkingContainer.appendChild(this.weekendContainer);
117
126
  }
118
127
  this.weekendContainer.innerHTML = this.getWeekendElements().innerHTML;
@@ -131,13 +140,17 @@ var NonWorkingDay = /** @class */ (function () {
131
140
  */
132
141
  NonWorkingDay.prototype.getWeekendElements = function () {
133
142
  var container = createElement('div');
134
- var startDate = new Date(this.parent.timelineModule.timelineStartDate.getTime());
135
- var endDate = new Date(this.parent.timelineModule.timelineEndDate.getTime());
143
+ var leftValueForStartDate = (this.parent.enableTimelineVirtualization && this.parent.ganttChartModule.scrollObject.element.scrollLeft != 0)
144
+ ? this.parent.ganttChartModule.scrollObject.getTimelineLeft() : null;
145
+ var startDate = (this.parent.enableTimelineVirtualization && !isNullOrUndefined(leftValueForStartDate))
146
+ ? new Date((this.parent.timelineModule['dateByLeftValue'](leftValueForStartDate)).getTime()) : new Date(this.parent.timelineModule.timelineStartDate.getTime());
147
+ var endDate = this.parent.enableTimelineVirtualization ? new Date((this.parent.timelineModule.weekendEndDate).getTime()) :
148
+ new Date(this.parent.timelineModule.timelineEndDate.getTime());
136
149
  var nonWorkingIndex = this.parent.nonWorkingDayIndex;
137
150
  var isFirstCell = true;
138
151
  do {
139
152
  if (nonWorkingIndex.indexOf(startDate.getDay()) !== -1) {
140
- var left = this.parent.dataOperation.getTaskLeft(startDate, false);
153
+ var left = this.parent.dataOperation.getTaskLeft(startDate, false, true);
141
154
  var width = this.parent.perDayWidth;
142
155
  if (isFirstCell) {
143
156
  var start = new Date(startDate.getTime());
@@ -168,7 +181,7 @@ var NonWorkingDay = /** @class */ (function () {
168
181
  };
169
182
  NonWorkingDay.prototype.updateHolidayLabelHeight = function () {
170
183
  var height = this.parent.getContentHeight();
171
- var gantttable = document.getElementById("ganttContainer");
184
+ var gantttable = document.getElementById(this.parent.element.id);
172
185
  // eslint-disable-next-line
173
186
  var toolbarHeight = 0;
174
187
  if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {
@@ -24,6 +24,13 @@ export declare class Timeline {
24
24
  isZoomToFit: boolean;
25
25
  topTierCollection: TimelineFormat[];
26
26
  bottomTierCollection: TimelineFormat[];
27
+ pdfExportTopTierCollection: TimelineFormat[];
28
+ pdfExportBottomTierCollection: TimelineFormat[];
29
+ wholeTimelineWidth: number;
30
+ restrictRender: boolean;
31
+ weekendEndDate: Date;
32
+ private performedTimeSpanAction;
33
+ isZoomedToFit: boolean;
27
34
  constructor(ganttObj?: Gantt);
28
35
  /**
29
36
  * To initialize the public property.
@@ -139,6 +146,7 @@ export declare class Timeline {
139
146
  * @private
140
147
  */
141
148
  updateTimelineHeaderHeight(): void;
149
+ private dateByLeftValue;
142
150
  /**
143
151
  * To create timeline header template.
144
152
  *
@@ -146,6 +154,7 @@ export declare class Timeline {
146
154
  * @private
147
155
  */
148
156
  createTimelineSeries(): void;
157
+ timelineVirtualizationStyles(): void;
149
158
  /**
150
159
  * To validate timeline tier count.
151
160
  *