@syncfusion/ej2-gantt 19.4.55 → 20.1.48

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 (82) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/dist/ej2-gantt.umd.min.js +2 -2
  3. package/dist/ej2-gantt.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-gantt.es2015.js +242 -138
  5. package/dist/es6/ej2-gantt.es2015.js.map +1 -1
  6. package/dist/es6/ej2-gantt.es5.js +264 -146
  7. package/dist/es6/ej2-gantt.es5.js.map +1 -1
  8. package/dist/global/ej2-gantt.min.js +2 -2
  9. package/dist/global/ej2-gantt.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +18 -18
  12. package/src/gantt/actions/cell-edit.js +2 -1
  13. package/src/gantt/actions/dialog-edit.js +2 -1
  14. package/src/gantt/actions/edit.js +36 -9
  15. package/src/gantt/actions/filter.js +4 -2
  16. package/src/gantt/actions/rowdragdrop.js +41 -17
  17. package/src/gantt/actions/selection.js +3 -2
  18. package/src/gantt/base/date-processor.js +0 -1
  19. package/src/gantt/base/gantt-chart.js +36 -5
  20. package/src/gantt/base/gantt.js +15 -56
  21. package/src/gantt/base/splitter.js +1 -0
  22. package/src/gantt/base/tree-grid.js +3 -1
  23. package/src/gantt/renderer/chart-rows.js +36 -24
  24. package/src/gantt/renderer/connector-line.js +22 -18
  25. package/src/gantt/renderer/event-marker.js +1 -0
  26. package/src/gantt/renderer/nonworking-day.js +13 -6
  27. package/src/gantt/renderer/timeline.d.ts +1 -0
  28. package/src/gantt/renderer/timeline.js +40 -1
  29. package/src/gantt/renderer/tooltip.js +10 -3
  30. package/styles/bootstrap-dark.css +37 -10
  31. package/styles/bootstrap.css +37 -10
  32. package/styles/bootstrap4.css +37 -10
  33. package/styles/bootstrap5-dark.css +53 -19
  34. package/styles/bootstrap5.css +53 -19
  35. package/styles/fabric-dark.css +34 -7
  36. package/styles/fabric.css +37 -10
  37. package/styles/fluent-dark.css +1942 -0
  38. package/styles/fluent-dark.scss +1 -0
  39. package/styles/fluent.css +1942 -0
  40. package/styles/fluent.scss +1 -0
  41. package/styles/gantt/_bootstrap-dark-definition.scss +10 -2
  42. package/styles/gantt/_bootstrap-definition.scss +11 -3
  43. package/styles/gantt/_bootstrap4-definition.scss +10 -2
  44. package/styles/gantt/_bootstrap5-definition.scss +17 -9
  45. package/styles/gantt/_fabric-dark-definition.scss +8 -0
  46. package/styles/gantt/_fabric-definition.scss +10 -2
  47. package/styles/gantt/_fluent-dark-definition.scss +1 -0
  48. package/styles/gantt/_fluent-definition.scss +21 -13
  49. package/styles/gantt/_highcontrast-definition.scss +9 -1
  50. package/styles/gantt/_highcontrast-light-definition.scss +9 -1
  51. package/styles/gantt/_layout.scss +53 -2
  52. package/styles/gantt/_material-dark-definition.scss +9 -1
  53. package/styles/gantt/_material-definition.scss +10 -2
  54. package/styles/gantt/_tailwind-definition.scss +13 -5
  55. package/styles/gantt/_theme.scss +2 -5
  56. package/styles/gantt/bootstrap-dark.css +37 -10
  57. package/styles/gantt/bootstrap.css +37 -10
  58. package/styles/gantt/bootstrap4.css +37 -10
  59. package/styles/gantt/bootstrap5-dark.css +53 -19
  60. package/styles/gantt/bootstrap5.css +53 -19
  61. package/styles/gantt/fabric-dark.css +34 -7
  62. package/styles/gantt/fabric.css +37 -10
  63. package/styles/gantt/fluent-dark.css +1942 -0
  64. package/styles/gantt/fluent-dark.scss +22 -0
  65. package/styles/gantt/fluent.css +1942 -0
  66. package/styles/gantt/fluent.scss +22 -0
  67. package/styles/gantt/highcontrast-light.css +34 -7
  68. package/styles/gantt/highcontrast.css +34 -7
  69. package/styles/gantt/icons/_fluent-dark.scss +1 -0
  70. package/styles/gantt/icons/_fluent.scss +1 -1
  71. package/styles/gantt/icons/_tailwind-dark.scss +28 -29
  72. package/styles/gantt/icons/_tailwind.scss +26 -27
  73. package/styles/gantt/material-dark.css +37 -10
  74. package/styles/gantt/material.css +37 -10
  75. package/styles/gantt/tailwind-dark.css +70 -99
  76. package/styles/gantt/tailwind.css +70 -99
  77. package/styles/highcontrast-light.css +34 -7
  78. package/styles/highcontrast.css +34 -7
  79. package/styles/material-dark.css +37 -10
  80. package/styles/material.css +37 -10
  81. package/styles/tailwind-dark.css +70 -99
  82. package/styles/tailwind.css +70 -99
@@ -483,7 +483,6 @@ class DateProcessor {
483
483
  tDuration = this.parent.editModule.taskbarEditModule.sumOfDuration(ganttProperties.segments);
484
484
  }
485
485
  else {
486
- // eslint-disable-next-line
487
486
  if (!isNullOrUndefined(ganttProperties.startDate) && !isNullOrUndefined(ganttProperties.endDate) &&
488
487
  (ganttProperties.startDate).getTime() === (ganttProperties.endDate).getTime() && !isNullOrUndefined(ganttData.taskData[this.parent.taskFields.milestone])) {
489
488
  tDuration = 1;
@@ -4082,6 +4081,7 @@ class GanttChart {
4082
4081
  this.chartTimelineContainer = null;
4083
4082
  this.rangeViewContainer =
4084
4083
  createElement('div', { className: rangeContainer });
4084
+ this.rangeViewContainer.setAttribute("role", "RangeContainer");
4085
4085
  this.virtualRender = new VirtualContentRenderer(this.parent);
4086
4086
  this.addEventListener();
4087
4087
  }
@@ -4240,6 +4240,7 @@ class GanttChart {
4240
4240
  renderTimelineContainer() {
4241
4241
  this.chartTimelineContainer =
4242
4242
  createElement('div', { className: timelineHeaderContainer });
4243
+ this.chartTimelineContainer.setAttribute("role", "TimelineHeader");
4243
4244
  this.chartElement.appendChild(this.chartTimelineContainer);
4244
4245
  }
4245
4246
  /**
@@ -4279,8 +4280,19 @@ class GanttChart {
4279
4280
  //empty row height
4280
4281
  const emptydivHeight = 36;
4281
4282
  const emptyHeight = this.parent.contentHeight === 0 ? this.parent.flatData.length > 1 ? emptydivHeight : 0 : this.parent.contentHeight;
4282
- this.chartBodyContent.style.height = formatUnit(emptyHeight);
4283
- //let element: HTMLElement = this.chartTimelineContainer.querySelector('.' + cls.timelineHeaderTableContainer);
4283
+ let contentElement = this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0];
4284
+ if (emptyHeight >= contentElement['offsetHeight'] || this.parent.height === 'auto') {
4285
+ this.chartBodyContent.style.height = formatUnit(emptyHeight);
4286
+ }
4287
+ else {
4288
+ let scrollHeight = this.parent.element.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];
4289
+ if (contentElement['offsetHeight'] >= scrollHeight) {
4290
+ this.chartBodyContent.style.height = contentElement['offsetHeight'] - 17 + 'px';
4291
+ }
4292
+ else {
4293
+ this.chartBodyContent.style.height = contentElement['offsetHeight'] + 'px';
4294
+ }
4295
+ } //let element: HTMLElement = this.chartTimelineContainer.querySelector('.' + cls.timelineHeaderTableContainer);
4284
4296
  this.chartBodyContent.style.width = formatUnit(this.parent.timelineModule.totalTimelineWidth);
4285
4297
  this.setVirtualHeight();
4286
4298
  this.parent.notify('updateHeight', {});
@@ -4312,7 +4324,21 @@ class GanttChart {
4312
4324
  if (this.chartBodyContent.clientHeight < this.chartBodyContainer.clientHeight) {
4313
4325
  if (lastRow) {
4314
4326
  addClass(lastRow.querySelectorAll('td'), 'e-lastrow');
4315
- this.chartBodyContent.style.height = formatUnit(this.parent.contentHeight + 1);
4327
+ const emptydivHeight = 36;
4328
+ const emptyHeight = this.parent.contentHeight === 0 ? this.parent.flatData.length > 1 ? emptydivHeight : 0 : this.parent.contentHeight;
4329
+ let contentElement = this.parent.element.getElementsByClassName('e-chart-scroll-container e-content')[0];
4330
+ if (emptyHeight >= contentElement['offsetHeight']) {
4331
+ this.chartBodyContent.style.height = formatUnit(emptyHeight);
4332
+ }
4333
+ else {
4334
+ let scrollHeight = this.parent.element.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];
4335
+ if (contentElement['offsetHeight'] >= scrollHeight) {
4336
+ this.chartBodyContent.style.height = contentElement['offsetHeight'] - 17 + 'px';
4337
+ }
4338
+ else {
4339
+ this.chartBodyContent.style.height = contentElement['offsetHeight'] + 'px';
4340
+ }
4341
+ }
4316
4342
  }
4317
4343
  }
4318
4344
  }
@@ -4444,7 +4470,7 @@ class GanttChart {
4444
4470
  const target = e.target;
4445
4471
  const isOnTaskbarElement = e.target.classList.contains(taskBarMainContainer)
4446
4472
  || closest(e.target, '.' + taskBarMainContainer);
4447
- if (closest(target, '.e-gantt-parent-taskbar')) {
4473
+ if (closest(target, '.e-gantt-parent-taskbar') && !this.parent.editSettings.allowEditing) {
4448
4474
  this.chartExpandCollapseRequest(e);
4449
4475
  }
4450
4476
  else if (!isOnTaskbarElement && this.parent.autoFocusTasks) {
@@ -4966,6 +4992,10 @@ class GanttChart {
4966
4992
  $target.classList.contains('e-headercell') || $target.closest('.e-segmented-taskbar')) {
4967
4993
  e.preventDefault();
4968
4994
  }
4995
+ if (isTab && $target.classList.contains('e-rowdragdrop')) {
4996
+ this.parent.treeGrid.grid.notify('key-pressed', e);
4997
+ return;
4998
+ }
4969
4999
  if ($target.classList.contains('e-rowcell') && (nextElement && nextElement.classList.contains('e-rowcell')) ||
4970
5000
  $target.classList.contains('e-headercell')) { // eslint-disable-line
4971
5001
  if (isTab) {
@@ -5008,7 +5038,7 @@ class GanttChart {
5008
5038
  else {
5009
5039
  this.manageFocus($target, 'remove', true);
5010
5040
  }
5011
- if (nextElement.classList.contains('e-rowcell')) {
5041
+ if (nextElement.classList.contains('e-rowcell') && $target.nextElementSibling) {
5012
5042
  if (!$target.classList.contains('e-rowcell')) {
5013
5043
  this.parent.treeGrid.grid.notify('key-pressed', e);
5014
5044
  const fmodule = getValue('focusModule', this.parent.treeGrid.grid);
@@ -5356,7 +5386,7 @@ class Timeline {
5356
5386
  const currentZoomingLevel = this.checkCurrentZoomingLevel();
5357
5387
  this.isZoomIn = isZoomIn;
5358
5388
  this.isZooming = true;
5359
- const currentLevel = isZoomIn ? currentZoomingLevel + 1 : currentZoomingLevel - 1;
5389
+ let currentLevel = isZoomIn ? currentZoomingLevel + 1 : currentZoomingLevel - 1;
5360
5390
  if (this.parent.toolbarModule) {
5361
5391
  if (isZoomIn) {
5362
5392
  if (currentLevel === this.parent.zoomingLevels[this.parent.zoomingLevels.length - 1].level) {
@@ -5375,6 +5405,9 @@ class Timeline {
5375
5405
  }
5376
5406
  }
5377
5407
  }
5408
+ currentLevel = this.parent.zoomingLevels.findIndex((tempLevel) => {
5409
+ return tempLevel.level === currentLevel;
5410
+ });
5378
5411
  let newTimeline = this.parent.zoomingLevels[currentLevel];
5379
5412
  const args = {
5380
5413
  requestType: isZoomIn ? 'beforeZoomIn' : 'beforeZoomOut',
@@ -6084,6 +6117,40 @@ class Timeline {
6084
6117
  } while ((startDate < endDate));
6085
6118
  return parentTh;
6086
6119
  }
6120
+ updateTimelineAfterZooming(endDate, resized) {
6121
+ let timeDiff;
6122
+ let perDayWidth;
6123
+ let totWidth;
6124
+ let contentElement = document.getElementsByClassName('e-chart-scroll-container e-content')[0];
6125
+ if (!isNullOrUndefined(contentElement)) {
6126
+ let contentWidth = contentElement['offsetWidth'];
6127
+ let contentHeight = contentElement['offsetHeight'];
6128
+ let scrollHeight = document.getElementsByClassName('e-chart-rows-container')[0]['offsetHeight'];
6129
+ timeDiff = Math.abs(this.timelineStartDate.getTime() - endDate.getTime());
6130
+ timeDiff = timeDiff / (1000 * 3600 * 24);
6131
+ if (this.bottomTier === 'None') {
6132
+ perDayWidth = this.getPerDayWidth(this.customTimelineSettings.timelineUnitSize, this.customTimelineSettings.topTier.count, this.topTier);
6133
+ }
6134
+ else {
6135
+ perDayWidth = this.getPerDayWidth(this.customTimelineSettings.timelineUnitSize, this.customTimelineSettings.bottomTier.count, this.bottomTier);
6136
+ }
6137
+ if (contentHeight < scrollHeight) {
6138
+ totWidth = (perDayWidth * timeDiff) + 17;
6139
+ }
6140
+ else {
6141
+ totWidth = (perDayWidth * timeDiff);
6142
+ }
6143
+ if (contentWidth >= totWidth) {
6144
+ let widthDiff = contentWidth - totWidth;
6145
+ widthDiff = Math.round(widthDiff / perDayWidth);
6146
+ endDate.setDate(endDate.getDate() + widthDiff);
6147
+ this.parent.timelineModule.timelineEndDate = endDate;
6148
+ if (resized) {
6149
+ this.parent.updateProjectDates(this.timelineStartDate, this.timelineEndDate, this.parent.isTimelineRoundOff);
6150
+ }
6151
+ }
6152
+ }
6153
+ }
6087
6154
  getTimelineRoundOffEndDate(date) {
6088
6155
  const tierMode = this.topTier === 'None' ? this.bottomTier : this.topTier;
6089
6156
  const endDate = new Date(date.toString());
@@ -6098,6 +6165,9 @@ class Timeline {
6098
6165
  endDate.setHours(24, 0, 0, 0);
6099
6166
  }
6100
6167
  }
6168
+ if (this.isZooming || this.parent.isLoad) {
6169
+ this.updateTimelineAfterZooming(endDate, false);
6170
+ }
6101
6171
  return endDate;
6102
6172
  }
6103
6173
  /**
@@ -6167,7 +6237,6 @@ class Timeline {
6167
6237
  }
6168
6238
  return increment;
6169
6239
  }
6170
- ;
6171
6240
  /**
6172
6241
  * Method to find header cell was weekend or not
6173
6242
  *
@@ -6746,6 +6815,8 @@ class GanttTreeGrid {
6746
6815
  renderTreeGrid() {
6747
6816
  this.composeProperties();
6748
6817
  this.bindEvents();
6818
+ const root = 'root';
6819
+ this.parent.treeGrid[root] = this.parent[root] ? this.parent[root] : this.parent;
6749
6820
  this.parent.treeGrid.appendTo(this.treeGridElement);
6750
6821
  this.wireEvents();
6751
6822
  }
@@ -6809,7 +6880,7 @@ class GanttTreeGrid {
6809
6880
  const scrollWidth = this.getScrollbarWidth();
6810
6881
  const isMobile = /Android|Mac|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
6811
6882
  if (scrollWidth !== 0) {
6812
- content.style.cssText += 'width: calc(100% + ' + scrollWidth + 'px);';
6883
+ content.style.cssText += 'width: calc(100% + ' + (scrollWidth + 1) + 'px);';
6813
6884
  }
6814
6885
  else {
6815
6886
  content.classList.add('e-gantt-scroll-padding');
@@ -7835,7 +7906,7 @@ class ChartRows extends DateProcessor {
7835
7906
  this.milestoneHeight = 0;
7836
7907
  this.milesStoneRadius = 0;
7837
7908
  this.baselineTop = 0;
7838
- this.baselineHeight = 3;
7909
+ this.baselineHeight = 8;
7839
7910
  this.touchLeftConnectorpoint = '';
7840
7911
  this.touchRightConnectorpoint = '';
7841
7912
  this.dropSplit = false;
@@ -7917,7 +7988,7 @@ class ChartRows extends DateProcessor {
7917
7988
  * @private
7918
7989
  */
7919
7990
  getIndicatorNode(indicator) {
7920
- const templateString = '<label class="' + label + ' ' + taskIndicatorDiv + '" style="line-height:'
7991
+ const templateString = '<label class="' + label + ' ' + taskIndicatorDiv + '" role="LabelIndicator" style="line-height:'
7921
7992
  + (this.parent.rowHeight) + 'px;' +
7922
7993
  'left:' + this.getIndicatorleft(indicator.date) + 'px;"><i class="' + indicator.iconClass + '"></i> </label>';
7923
7994
  return this.createDivElement(templateString);
@@ -7990,9 +8061,9 @@ class ChartRows extends DateProcessor {
7990
8061
  }
7991
8062
  else {
7992
8063
  taskLabel$$1 = '<span class="' + taskLabel + '" style="line-height:' +
7993
- (this.taskBarHeight - 1) + 'px; text-align:' + (this.parent.viewType === 'ResourceView' ? 'left;' : ';') +
7994
- 'display:' + (this.parent.viewType === 'ResourceView' ? 'inline-flex;' : ';') +
7995
- 'width:' + (this.parent.viewType === 'ResourceView' ? (data.ganttProperties.width - 10) : '') + 'px; height:' +
8064
+ (this.taskBarHeight - 1) + 'px;' + (this.parent.viewType === 'ResourceView' ? 'text-align: left;' : '') +
8065
+ +(this.parent.viewType === 'ResourceView' ? 'display:inline-flex;' : '') +
8066
+ +(this.parent.viewType === 'ResourceView' ? (data.ganttProperties.width - 10) : '') + 'px; height:' +
7996
8067
  this.taskBarHeight + 'px;">' + labelString + '</span>';
7997
8068
  }
7998
8069
  }
@@ -8409,7 +8480,7 @@ class ChartRows extends DateProcessor {
8409
8480
  */
8410
8481
  getTaskBaselineNode() {
8411
8482
  const data = this.templateData;
8412
- const template = '<div class="' + baselineBar + ' ' + '" style="margin-top:' + this.baselineTop +
8483
+ const template = '<div class="' + baselineBar + ' ' + '" role="BaselineBar" style="margin-top:' + this.baselineTop +
8413
8484
  'px;left:' + data.ganttProperties.baselineLeft + 'px;' +
8414
8485
  'width:' + data.ganttProperties.baselineWidth + 'px;height:' +
8415
8486
  this.baselineHeight + 'px;' + (this.baselineColor ? 'background-color: ' + this.baselineColor + ';' : '') + '"></div>';
@@ -8423,9 +8494,10 @@ class ChartRows extends DateProcessor {
8423
8494
  */
8424
8495
  getMilestoneBaselineNode() {
8425
8496
  const data = this.templateData;
8497
+ let baselineMilestoneHeight = this.parent.renderBaseline ? 5 : 2;
8426
8498
  const template = '<div class="' + baselineMilestoneContainer + ' ' + '" style="' +
8427
8499
  'left:' + (data.ganttProperties.baselineLeft - this.milesStoneRadius) + 'px;' +
8428
- 'margin-top:' + (-Math.floor(this.parent.rowHeight - this.milestoneMarginTop) + 2) +
8500
+ 'margin-top:' + (-Math.floor(this.parent.rowHeight - this.milestoneMarginTop) + baselineMilestoneHeight) +
8429
8501
  'px">' + '<div class="' + baselineMilestoneDiv + '">' + '<div class="' + baselineMilestoneDiv +
8430
8502
  ' ' + baselineMilestoneTop + '" ' +
8431
8503
  'style="top:' + (-this.milestoneHeight) + 'px;border-right:' + this.milesStoneRadius +
@@ -8453,7 +8525,9 @@ class ChartRows extends DateProcessor {
8453
8525
  */
8454
8526
  getLeftLabelNode(i) {
8455
8527
  const leftLabelNode = this.leftLabelContainer();
8456
- leftLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('left'));
8528
+ if (this.generateTaskLabelAriaLabel('left') !== "") {
8529
+ leftLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('left'));
8530
+ }
8457
8531
  let leftLabelTemplateNode = null;
8458
8532
  if (this.leftTaskLabelTemplateFunction) {
8459
8533
  leftLabelTemplateNode = this.leftTaskLabelTemplateFunction(extend({ index: i }, this.templateData), this.parent, 'LeftLabelTemplate', this.getTemplateID('LeftLabelTemplate'), false, undefined, leftLabelNode[0], this.parent.treeGrid['root']);
@@ -8475,9 +8549,10 @@ class ChartRows extends DateProcessor {
8475
8549
  return leftLabelNode;
8476
8550
  }
8477
8551
  getLableText(labelString, labelDiv) {
8552
+ let leftLabelHeight = this.parent.renderBaseline ? ((this.parent.rowHeight - this.taskBarHeight) / 2) : this.taskBarMarginTop;
8478
8553
  const templateString = createElement('div', {
8479
8554
  className: labelDiv, styles: 'height:' + (this.taskBarHeight) + 'px;' +
8480
- 'margin-top:' + this.taskBarMarginTop + 'px;'
8555
+ 'margin-top:' + leftLabelHeight + 'px;'
8481
8556
  });
8482
8557
  const spanElem = createElement('span', { className: label });
8483
8558
  const property = this.parent.disableHtmlEncode ? 'textContent' : 'innerHTML';
@@ -8496,7 +8571,9 @@ class ChartRows extends DateProcessor {
8496
8571
  */
8497
8572
  getRightLabelNode(i) {
8498
8573
  const rightLabelNode = this.rightLabelContainer();
8499
- rightLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('right'));
8574
+ if (this.generateTaskLabelAriaLabel('right') !== "") {
8575
+ rightLabelNode[0].setAttribute('aria-label', this.generateTaskLabelAriaLabel('right'));
8576
+ }
8500
8577
  let rightLabelTemplateNode = null;
8501
8578
  if (this.rightTaskLabelTemplateFunction) {
8502
8579
  rightLabelTemplateNode = this.rightTaskLabelTemplateFunction(extend({ index: i }, this.templateData), this.parent, 'RightLabelTemplate', this.getTemplateID('RightLabelTemplate'), false, undefined, rightLabelNode[0], this.parent.treeGrid['root']);
@@ -8609,8 +8686,10 @@ class ChartRows extends DateProcessor {
8609
8686
  else {
8610
8687
  labelDiv = this.createDivElement('<span class="' +
8611
8688
  taskLabel + '" style="line-height:' +
8612
- (this.taskBarHeight - 1) + 'px; display:' + (this.parent.viewType === 'ResourceView' ? 'inline-flex;' : ';') + 'width:' +
8613
- (this.parent.viewType === 'ResourceView' ? (data.ganttProperties.width - 10) : ';') + 'px; height:' +
8689
+ (this.taskBarHeight - 1) + 'px;' + (this.parent.viewType === 'ResourceView' ? 'display:inline-flex;' : '') +
8690
+ (this.parent.viewType === 'ResourceView' ? 'width:' + (data.ganttProperties.width - 10) : '') + 'px; height:' +
8691
+ (this.taskBarHeight - 1) + 'px;' + (this.parent.viewType === 'ResourceView' ? 'display: inline-flex;' : '') +
8692
+ (this.parent.viewType === 'ResourceView' ? 'width:' + (data.ganttProperties.width - 10) : '') + 'px; height:' +
8614
8693
  this.taskBarHeight + 'px;">' + labelString + '</span>');
8615
8694
  }
8616
8695
  progressBarInnerDiv[0].appendChild([].slice.call(labelDiv)[0]);
@@ -8639,10 +8718,10 @@ class ChartRows extends DateProcessor {
8639
8718
  const className = (this.parent.gridLines === 'Horizontal' || this.parent.gridLines === 'Both') ?
8640
8719
  'e-chart-row-border' : '';
8641
8720
  table.innerHTML = '<tr class="' + this.getRowClassName(this.templateData) + ' ' + chartRow + '"' +
8642
- 'style="display:' + this.getExpandDisplayProp(this.templateData) + ';height:' +
8721
+ 'role="ChartRow" style="display:' + this.getExpandDisplayProp(this.templateData) + ';height:' +
8643
8722
  this.parent.rowHeight + 'px;">' +
8644
8723
  '<td class="' + chartRowCell + ' ' + className
8645
- + '" style="width:' + this.parent.timelineModule.totalTimelineWidth + 'px;"></td></tr>';
8724
+ + '" role="ChartCell" style="width:' + this.parent.timelineModule.totalTimelineWidth + 'px;"></td></tr>';
8646
8725
  return table.childNodes;
8647
8726
  }
8648
8727
  /**
@@ -8707,7 +8786,7 @@ class ChartRows extends DateProcessor {
8707
8786
  }
8708
8787
  leftLabelContainer() {
8709
8788
  const template = '<div class="' + ((this.leftTaskLabelTemplateFunction) ? leftLabelTempContainer :
8710
- leftLabelContainer) + ' ' + '" tabindex="-1" style="height:' +
8789
+ leftLabelContainer) + ' ' + '" tabindex="-1" role="LeftLabel" style="height:' +
8711
8790
  (this.parent.rowHeight - 2) + 'px;width:' + this.taskNameWidth(this.templateData) + '"></div>';
8712
8791
  return this.createDivElement(template);
8713
8792
  }
@@ -8719,7 +8798,7 @@ class ChartRows extends DateProcessor {
8719
8798
  const template = '<div class="' + taskBarMainContainer + ' ' +
8720
8799
  this.parent.getUnscheduledTaskClass(data.ganttProperties) + ' ' +
8721
8800
  ((data.ganttProperties.cssClass) ? data.ganttProperties.cssClass : '') + '" ' +
8722
- ' tabindex="-1" style="' + ((data.ganttProperties.isMilestone && !manualParent) ?
8801
+ ' tabindex="-1" role="TaskBar" style="' + ((data.ganttProperties.isMilestone && !manualParent) ?
8723
8802
  ('width:' + this.milestoneHeight + 'px;height:' +
8724
8803
  this.milestoneHeight + 'px;margin-top:' + this.milestoneMarginTop + 'px;left:' + (data.ganttProperties.left -
8725
8804
  (this.milestoneHeight / 2)) + 'px;') : ('width:' + data.ganttProperties.width +
@@ -8730,26 +8809,26 @@ class ChartRows extends DateProcessor {
8730
8809
  }
8731
8810
  rightLabelContainer() {
8732
8811
  const template = '<div class="' + ((this.rightTaskLabelTemplateFunction) ? rightLabelTempContainer :
8733
- rightLabelContainer) + '" ' + ' tabindex="-1" style="left:' + this.getRightLabelLeft(this.templateData) + 'px;height:'
8812
+ rightLabelContainer) + '" ' + ' tabindex="-1" role="RightLabel" style="left:' + this.getRightLabelLeft(this.templateData) + 'px; height:'
8734
8813
  + (this.parent.rowHeight - 2) + 'px;"></div>';
8735
8814
  return this.createDivElement(template);
8736
8815
  }
8737
8816
  childTaskbarLeftResizer() {
8738
8817
  const lResizerLeft = -(this.parent.isAdaptive ? 12 : 2);
8739
8818
  const template = '<div class="' + taskBarLeftResizer + ' ' + icon + '"' +
8740
- ' style="left:' + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
8819
+ ' role="LeftResizer" style="left:' + lResizerLeft + 'px;height:' + (this.taskBarHeight) + 'px;"></div>';
8741
8820
  return this.createDivElement(template);
8742
8821
  }
8743
8822
  childTaskbarRightResizer() {
8744
8823
  const rResizerLeft = this.parent.isAdaptive ? -2 : -10;
8745
8824
  const template = '<div class="' + taskBarRightResizer + ' ' + icon + '"' +
8746
- ' style="left:' + (this.templateData.ganttProperties.width + rResizerLeft) + 'px;' +
8825
+ ' role="RightResizer" style="left:' + (this.templateData.ganttProperties.width + rResizerLeft) + 'px;' +
8747
8826
  'height:' + (this.taskBarHeight) + 'px;"></div>';
8748
8827
  return this.createDivElement(template);
8749
8828
  }
8750
8829
  childTaskbarProgressResizer() {
8751
8830
  const template = '<div class="' + childProgressResizer + '"' +
8752
- ' style="left:' + (this.templateData.ganttProperties.progressWidth - 6) + 'px;margin-top:' +
8831
+ ' role="ProgressResizer" style="left:' + (this.templateData.ganttProperties.progressWidth - 6) + 'px;margin-top:' +
8753
8832
  (this.taskBarHeight - 4) + 'px;"><div class="' + progressBarHandler + '"' +
8754
8833
  '><div class="' + progressHandlerElement + '"></div>' +
8755
8834
  '<div class="' + progressBarHandlerAfter + '"></div></div>';
@@ -8947,10 +9026,13 @@ class ChartRows extends DateProcessor {
8947
9026
  * @private
8948
9027
  */
8949
9028
  initChartHelperPrivateVariable() {
9029
+ let taskbarHeightValue = this.parent.renderBaseline ? 0.45 : 0.62;
9030
+ let taskBarMarginTopValue = this.parent.renderBaseline ? 4 : 2;
9031
+ let milestoneHeightValue = this.parent.renderBaseline ? 1.13 : 0.82;
8950
9032
  this.baselineColor = !isNullOrUndefined(this.parent.baselineColor) &&
8951
9033
  this.parent.baselineColor !== '' ? this.parent.baselineColor : null;
8952
9034
  this.taskBarHeight = isNullOrUndefined(this.parent.taskbarHeight) || this.parent.taskbarHeight >= this.parent.rowHeight ?
8953
- Math.floor(this.parent.rowHeight * 0.62) : this.parent.taskbarHeight; // 0.62 -- Standard Ratio.
9035
+ Math.floor(this.parent.rowHeight * taskbarHeightValue) : this.parent.taskbarHeight; // 0.62 -- Standard Ratio.
8954
9036
  if (this.parent.renderBaseline) {
8955
9037
  let height;
8956
9038
  if ((this.taskBarHeight + this.baselineHeight) <= this.parent.rowHeight) {
@@ -8961,11 +9043,11 @@ class ChartRows extends DateProcessor {
8961
9043
  }
8962
9044
  this.taskBarHeight = height;
8963
9045
  }
8964
- this.milestoneHeight = Math.floor(this.taskBarHeight * 0.82); // 0.82 -- Standard Ratio.
8965
- this.taskBarMarginTop = Math.floor((this.parent.rowHeight - this.taskBarHeight) / 2);
9046
+ this.milestoneHeight = Math.floor(this.taskBarHeight * milestoneHeightValue); // 0.82 -- Standard Ratio.
9047
+ this.taskBarMarginTop = Math.floor((this.parent.rowHeight - this.taskBarHeight) / taskBarMarginTopValue);
8966
9048
  this.milestoneMarginTop = Math.floor((this.parent.rowHeight - this.milestoneHeight) / 2);
8967
9049
  this.milesStoneRadius = Math.floor((this.milestoneHeight) / 2);
8968
- this.baselineTop = -(Math.floor((this.parent.rowHeight - (this.taskBarHeight + this.taskBarMarginTop))) - 1);
9050
+ this.baselineTop = -(Math.floor((this.parent.rowHeight - (this.taskBarHeight + this.taskBarMarginTop))) - 4);
8969
9051
  this.connectorPointWidth = this.parent.isAdaptive ? Math.round(this.taskBarHeight / 2) : 8;
8970
9052
  this.connectorPointMargin = Math.floor((this.taskBarHeight / 2) - (this.connectorPointWidth / 2));
8971
9053
  }
@@ -9159,6 +9241,7 @@ class ChartRows extends DateProcessor {
9159
9241
  const indicators = this.templateData.ganttProperties.indicators;
9160
9242
  for (let indicatorIndex = 0; indicatorIndex < indicators.length; indicatorIndex++) {
9161
9243
  taskIndicatorNode = this.getIndicatorNode(indicators[indicatorIndex]);
9244
+ taskIndicatorNode[0].setAttribute('aria-label', indicators[indicatorIndex].name);
9162
9245
  if (indicators[indicatorIndex].name.indexOf('$') > -1 || indicators[indicatorIndex].name.indexOf('#') > -1) {
9163
9246
  taskIndicatorTextFunction = this.templateCompiler(indicators[indicatorIndex].name);
9164
9247
  taskIndicatorTextNode = taskIndicatorTextFunction(extend({ index: i }, this.templateData), this.parent, 'indicatorLabelText');
@@ -10377,7 +10460,7 @@ class ConnectorLine {
10377
10460
  for (let i = 0; i < childNodes.length; i++) {
10378
10461
  const innerChild = childNodes[i].childNodes;
10379
10462
  for (let j = 0; j < innerChild.length; j++) {
10380
- const ariaString = this.parent.connectorLineModule.generateAriaLabel(ariaConnector[i]);
10463
+ const ariaString = 'Connector Line ' + this.parent.connectorLineModule.generateAriaLabel(ariaConnector[i]);
10381
10464
  innerChild[j].setAttribute('aria-label', ariaString);
10382
10465
  }
10383
10466
  }
@@ -10634,7 +10717,11 @@ class ConnectorLine {
10634
10717
  let connectorContainer = '';
10635
10718
  const isVirtual = this.parent.virtualScrollModule && this.parent.enableVirtualization;
10636
10719
  const connectorLine$$1 = this.getPosition(data, this.getParentPosition(data), height);
10637
- const heightValue = isVirtual ? connectorLine$$1.height : height;
10720
+ let isMilestoneValue = 0;
10721
+ if (this.parent.renderBaseline) {
10722
+ isMilestoneValue = (data.milestoneParent && data.milestoneChild) ? 0 : data.milestoneParent ? -5 : data.milestoneChild ? 5 : 0;
10723
+ }
10724
+ const heightValue = isVirtual ? connectorLine$$1.height : (height + isMilestoneValue);
10638
10725
  if (this.getParentPosition(data)) {
10639
10726
  connectorContainer = '<div id="ConnectorLine' + data.connectorLineId + '" style="background-color:black">';
10640
10727
  let div = '<div class="' + connectorLineContainer +
@@ -10662,7 +10749,7 @@ class ConnectorLine {
10662
10749
  this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
10663
10750
  if (this.getParentPosition(data) === 'FSType1') {
10664
10751
  div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10665
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10752
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10666
10753
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType1">';
10667
10754
  div = div + eLine;
10668
10755
  div = div + 'left:' + (isMilestoneParent ? -1 : 0) + 'px;width:' + (isMilestoneParent ?
@@ -10683,7 +10770,7 @@ class ConnectorLine {
10683
10770
  }
10684
10771
  if (this.getParentPosition(data) === 'FSType2') {
10685
10772
  div = div + 'left:' + data.parentLeft + 'px;top:' + (isVirtual ? connectorLine$$1.top : ((data.parentIndex * data.rowHeight) +
10686
- this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10773
+ this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10687
10774
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType2">';
10688
10775
  div = div + eLine;
10689
10776
  div = div + 'left:' + (isMilestoneParent ? data.parentWidth - 1 : data.parentWidth) + 'px;width:' +
@@ -10714,7 +10801,7 @@ class ConnectorLine {
10714
10801
  }
10715
10802
  if (this.getParentPosition(data) === 'FSType3') {
10716
10803
  div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10717
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
10804
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10718
10805
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType3">';
10719
10806
  div = div + rightArrow;
10720
10807
  div = div + 'left:10px;' + this.getBorderStyles('left', 10) +
@@ -10744,7 +10831,7 @@ class ConnectorLine {
10744
10831
  }
10745
10832
  if (this.getParentPosition(data) === 'FSType4') {
10746
10833
  div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10747
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10834
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10748
10835
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FSType4">';
10749
10836
  div = div + rightArrow;
10750
10837
  div = div + 'left:' + (data.childLeft - (data.parentLeft + data.parentWidth + 10)) + 'px;' +
@@ -10770,7 +10857,7 @@ class ConnectorLine {
10770
10857
  }
10771
10858
  if (this.getParentPosition(data) === 'SSType4') {
10772
10859
  div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10773
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10860
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10774
10861
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType4">';
10775
10862
  div = div + rightArrow;
10776
10863
  div = div + 'left:' + (data.childLeft - data.parentLeft) + 'px;' + duplicateStingTwo;
@@ -10783,7 +10870,7 @@ class ConnectorLine {
10783
10870
  }
10784
10871
  if (this.getParentPosition(data) === 'SSType3') {
10785
10872
  div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10786
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10873
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10787
10874
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType3">';
10788
10875
  div = div + rightArrow;
10789
10876
  div = div + 'left:10px;' + duplicateStingTwo;
@@ -10796,7 +10883,7 @@ class ConnectorLine {
10796
10883
  }
10797
10884
  if (this.getParentPosition(data) === 'SSType2') {
10798
10885
  div = div + 'left:' + setInnerElementLeftSSType2 + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10799
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
10886
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10800
10887
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType2">';
10801
10888
  div = div + eLine;
10802
10889
  div = div + 'width:' + (setInnerChildWidthSSType2 + 1) + 'px;' +
@@ -10817,7 +10904,7 @@ class ConnectorLine {
10817
10904
  if (this.getParentPosition(data) === 'SSType1') {
10818
10905
  div = div + 'left:' + (data.childLeft - 20) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10819
10906
  ((data.parentIndex * data.rowHeight) +
10820
- this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
10907
+ this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10821
10908
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SSType1">';
10822
10909
  div = div + eLine;
10823
10910
  div = div + 'width:' + (data.parentLeft - data.childLeft + 21) + 'px;' +
@@ -10834,7 +10921,7 @@ class ConnectorLine {
10834
10921
  }
10835
10922
  if (this.getParentPosition(data) === 'FFType1') {
10836
10923
  div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10837
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
10924
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10838
10925
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType1">';
10839
10926
  div = div + eLine;
10840
10927
  div = div + 'left:' + (isMilestoneParent ? (((data.parentLeft + data.parentWidth) -
@@ -10858,7 +10945,7 @@ class ConnectorLine {
10858
10945
  }
10859
10946
  if (this.getParentPosition(data) === 'FFType2') {
10860
10947
  div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10861
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
10948
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10862
10949
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType2">';
10863
10950
  div = div + eLine;
10864
10951
  div = div + (isMilestoneParent ? 'left:-1px;' : '') + 'width:' +
@@ -10884,7 +10971,7 @@ class ConnectorLine {
10884
10971
  }
10885
10972
  if (this.getParentPosition(data) === 'FFType3') {
10886
10973
  div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10887
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10974
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10888
10975
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType3">';
10889
10976
  div = div + duplicateStingOne;
10890
10977
  div = div + eLine;
@@ -10907,7 +10994,7 @@ class ConnectorLine {
10907
10994
  }
10908
10995
  if (this.getParentPosition(data) === 'FFType4') {
10909
10996
  div = div + 'left:' + (data.parentLeft + data.parentWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10910
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
10997
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10911
10998
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="FFType4">';
10912
10999
  div = div + leftArrow;
10913
11000
  div = div + ('left:' + ((data.childLeft + data.childWidth) -
@@ -10936,7 +11023,7 @@ class ConnectorLine {
10936
11023
  }
10937
11024
  if (this.getParentPosition(data) === 'SFType4') {
10938
11025
  div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10939
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;width:1px;' +
11026
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;width:1px;' +
10940
11027
  'height:' + heightValue + 'px;position:absolute" data-connectortype="SFType4">';
10941
11028
  div = div + duplicateStingFour + 'top:' + (-5 - this.lineStroke + (this.lineStroke - 1)) + 'px;' +
10942
11029
  'border-bottom-width:' + (5 + this.lineStroke) +
@@ -10964,7 +11051,7 @@ class ConnectorLine {
10964
11051
  }
10965
11052
  if (this.getParentPosition(data) === 'SFType3') {
10966
11053
  div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10967
- ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
11054
+ ((data.childIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10968
11055
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType3">';
10969
11056
  div = div + duplicateStingOne;
10970
11057
  div = div + eLine;
@@ -10982,7 +11069,7 @@ class ConnectorLine {
10982
11069
  }
10983
11070
  if (this.getParentPosition(data) === 'SFType1') {
10984
11071
  div = div + 'left:' + (data.parentLeft - 10) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
10985
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1))) + 'px;' +
11072
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestone) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
10986
11073
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType1">';
10987
11074
  div = div + eLine;
10988
11075
  div = div + 'width:11px;' + this.getBorderStyles('top', this.lineStroke) + 'position:relative;"></div>';
@@ -11007,7 +11094,7 @@ class ConnectorLine {
11007
11094
  }
11008
11095
  if (this.getParentPosition(data) === 'SFType2') {
11009
11096
  div = div + 'left:' + (data.childLeft + data.childWidth) + 'px;top:' + (isVirtual ? connectorLine$$1.top :
11010
- ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1))) + 'px;' +
11097
+ ((data.parentIndex * data.rowHeight) + this.getTaskbarMidpoint(isMilestoneParent) - (this.lineStroke - 1) - isMilestoneValue)) + 'px;' +
11011
11098
  'width:1px;height:' + heightValue + 'px;position:absolute" data-connectortype="SFType2">';
11012
11099
  div = div + eLine;
11013
11100
  div = div + 'left:' + (((data.parentLeft) - (data.childLeft + data.childWidth)) - 10) +
@@ -11249,6 +11336,7 @@ class Splitter$1 {
11249
11336
  this.splitterObject.paneSettings[1].size = null;
11250
11337
  this.splitterObject.paneSettings[1].size = this.getSpliterPositionInPercentage(this.splitterPreviousPositionChart);
11251
11338
  }
11339
+ this.parent.timelineModule.updateTimelineAfterZooming(this.parent.timelineModule.timelineEndDate, true);
11252
11340
  callBackPromise.resolve(splitterResizedArgs);
11253
11341
  });
11254
11342
  return callBackPromise;
@@ -11530,6 +11618,7 @@ class Tooltip$1 {
11530
11618
  * @returns {void} .
11531
11619
  */
11532
11620
  updateTooltipPosition(args) {
11621
+ args.element.style.visibility = 'visible';
11533
11622
  if (isNullOrUndefined(this.tooltipMouseEvent) || args.target.classList.contains('e-notes-info')) {
11534
11623
  return;
11535
11624
  }
@@ -11559,7 +11648,6 @@ class Tooltip$1 {
11559
11648
  tooltipPositionY = tooltipPositionY + 10;
11560
11649
  }
11561
11650
  args.element.style.top = tooltipPositionY + 'px';
11562
- args.element.style.visibility = 'visible';
11563
11651
  }
11564
11652
  /**
11565
11653
  * Method to get mouse pointor position
@@ -11601,9 +11689,16 @@ class Tooltip$1 {
11601
11689
  switch (elementType) {
11602
11690
  case 'milestone':
11603
11691
  {
11604
- const sDate = !isNullOrUndefined(data.startDate) ? '<tr><td class = "e-gantt-tooltip-label"> Date</td><td>:</td>' +
11692
+ let milestoneStartDate;
11693
+ if (args.target.className.includes('e-baseline-gantt-milestone') && !isNullOrUndefined(data.baselineStartDate)) {
11694
+ milestoneStartDate = data.baselineStartDate;
11695
+ }
11696
+ else if (!isNullOrUndefined(data.startDate)) {
11697
+ milestoneStartDate = data.startDate;
11698
+ }
11699
+ const sDate = !isNullOrUndefined(milestoneStartDate) ? '<tr><td class = "e-gantt-tooltip-label"> Date</td><td>:</td>' +
11605
11700
  '<td class = "e-gantt-tooltip-value">' +
11606
- this.parent.getFormatedDate(data.startDate, this.parent.getDateFormat()) + '</td></tr>' : '';
11701
+ this.parent.getFormatedDate(milestoneStartDate, this.parent.getDateFormat()) + '</td></tr>' : '';
11607
11702
  content$$1 = '<table class = "e-gantt-tooltiptable"><tbody>' +
11608
11703
  taskName + sDate + '</tbody></table>';
11609
11704
  break;
@@ -12328,25 +12423,7 @@ let Gantt = class Gantt extends Component {
12328
12423
  * @returns {void} .
12329
12424
  */
12330
12425
  calculateDimensions() {
12331
- let settingsHeight;
12332
- if (typeof (this.height) !== 'number' && this.height.indexOf('%') !== -1 && (this.element.parentElement &&
12333
- !this.element.parentElement.style.height || this.element.parentElement.style.height.indexOf('%') !== -1)) {
12334
- let ganttHeight;
12335
- if (this.element.parentElement.style.height.indexOf('%') == -1) {
12336
- ganttHeight = Number(this.height.split("%")[0]);
12337
- }
12338
- else {
12339
- ganttHeight = Number(this.element.parentElement.style.height.split("%")[0]);
12340
- }
12341
- ganttHeight = (ganttHeight * window.innerHeight) / 100;
12342
- if (this.height === '100%') {
12343
- ganttHeight = ganttHeight - 16;
12344
- }
12345
- settingsHeight = this.validateDimentionValue(ganttHeight);
12346
- }
12347
- else {
12348
- settingsHeight = this.validateDimentionValue(this.height);
12349
- }
12426
+ let settingsHeight = this.validateDimentionValue(this.height);
12350
12427
  let settingsWidth = this.validateDimentionValue(this.width);
12351
12428
  if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {
12352
12429
  settingsWidth = this.width;
@@ -12489,40 +12566,6 @@ let Gantt = class Gantt extends Component {
12489
12566
  */
12490
12567
  windowResize() {
12491
12568
  if (!isNullOrUndefined(this.element)) {
12492
- let settingsHeight;
12493
- if (this.height.indexOf('%') !== -1) {
12494
- let ganttHeight = Number(this.height.split("%")[0]);
12495
- if (this.element.parentElement && (this.element.parentElement.style.height)) {
12496
- let containerHeight;
12497
- if (this.element.parentElement.style.height.indexOf('%') == -1) {
12498
- containerHeight = Number(this.element.parentElement.style.height.split("px")[0]);
12499
- ganttHeight = (ganttHeight * containerHeight) / 100;
12500
- }
12501
- else {
12502
- containerHeight = Number(this.element.parentElement.style.height.split("%")[0]);
12503
- ganttHeight = (window.innerHeight * containerHeight) / 100;
12504
- }
12505
- }
12506
- else {
12507
- ganttHeight = Number(this.height.split("%")[0]);
12508
- ganttHeight = (ganttHeight * window.innerHeight) / 100;
12509
- }
12510
- if (this.height === '100%') {
12511
- ganttHeight = ganttHeight - 16;
12512
- }
12513
- let toolbarHeight = 0;
12514
- if (!isNullOrUndefined(this.toolbarModule) && !isNullOrUndefined(this.toolbarModule.element)) {
12515
- toolbarHeight = this.toolbarModule.element.offsetHeight;
12516
- }
12517
- let contentHeight = ganttHeight - this.ganttChartModule.chartTimelineContainer.offsetHeight - toolbarHeight;
12518
- settingsHeight = this.validateDimentionValue(ganttHeight);
12519
- this.element.style.height = settingsHeight;
12520
- this.element.querySelectorAll('.e-content')[0]['style'].height = contentHeight + 'px';
12521
- this.element.querySelectorAll('.e-content')[2]['style'].height = contentHeight + 'px';
12522
- }
12523
- else {
12524
- settingsHeight = this.validateDimentionValue(this.height);
12525
- }
12526
12569
  this.updateContentHeight();
12527
12570
  this.ganttChartModule.updateWidthAndHeight(); // Updating chart scroll conatiner height for row mismatch
12528
12571
  this.treeGridModule.ensureScrollBar();
@@ -12867,6 +12910,18 @@ let Gantt = class Gantt extends Component {
12867
12910
  * @private
12868
12911
  */
12869
12912
  treeDataBound(args) {
12913
+ this.element.getElementsByClassName('e-chart-root-container')[0]['style'].height = '100%';
12914
+ let gridHeight = this.element.getElementsByClassName('e-gridcontent')[0]['style'].height;
12915
+ let timelineContainer = this.element.getElementsByClassName('e-timeline-header-container')[0]['offsetHeight'];
12916
+ gridHeight = 'calc(100% - ' + timelineContainer + 'px)';
12917
+ // eslint-disable-next-line
12918
+ this.element.getElementsByClassName('e-chart-scroll-container e-content')[0]['style'].height = 'calc(100% - ' + timelineContainer + 'px)';
12919
+ if (!isNullOrUndefined(this.toolbarModule) && !isNullOrUndefined(this.toolbarModule.element)) {
12920
+ this.splitterElement.style.height = 'calc(100% - ' + this.toolbarModule.element.offsetHeight + 'px)';
12921
+ }
12922
+ else {
12923
+ this.splitterElement.style.height = '100%';
12924
+ }
12870
12925
  if (this.isLoad) {
12871
12926
  this.updateCurrentViewData();
12872
12927
  if (!this.enableVirtualization) {
@@ -12886,8 +12941,7 @@ let Gantt = class Gantt extends Component {
12886
12941
  removeClass(this.treeGrid.element.querySelectorAll('.e-headercell'), timelineSingleHeaderOuterDiv);
12887
12942
  removeClass(this.treeGrid.element.querySelectorAll('.e-columnheader'), timelineSingleHeaderOuterDiv);
12888
12943
  }
12889
- this.treeGrid.height = this.ganttHeight - toolbarHeight -
12890
- this.treeGrid.grid.getHeaderContent().offsetHeight;
12944
+ this.treeGrid.height = '100%';
12891
12945
  this.notify('tree-grid-created', {});
12892
12946
  this.createGanttPopUpElement();
12893
12947
  this.hideSpinner();
@@ -13397,7 +13451,7 @@ let Gantt = class Gantt extends Component {
13397
13451
  */
13398
13452
  updateGridLineContainerHeight() {
13399
13453
  if (this.chartVerticalLineContainer) {
13400
- this.chartVerticalLineContainer.style.height = formatUnit(this.getContentHeight());
13454
+ this.chartVerticalLineContainer.style.height = formatUnit(this.contentHeight);
13401
13455
  }
13402
13456
  }
13403
13457
  /**
@@ -15305,7 +15359,8 @@ class CellEdit {
15305
15359
  args.cancel = true;
15306
15360
  return;
15307
15361
  }
15308
- if (data.hasChildRecords && (field === taskSettings.endDate || field === taskSettings.duration
15362
+ if (data.hasChildRecords && ((field === taskSettings.endDate && ((!isNullOrUndefined(data['isManual']) &&
15363
+ data['isManual'] == false) || this.parent.taskMode == 'Auto')) || field === taskSettings.duration
15309
15364
  || field === taskSettings.dependency || field === taskSettings.progress
15310
15365
  || field === taskSettings.work || field === 'taskType')) {
15311
15366
  args.cancel = true;
@@ -19401,7 +19456,8 @@ class DialogEdit {
19401
19456
  disabled = true;
19402
19457
  }
19403
19458
  if (this.editedRecord.hasChildRecords) {
19404
- if (column.field === this.parent.taskFields.endDate || column.field === this.parent.taskFields.duration ||
19459
+ if ((column.field === this.parent.taskFields.endDate && ((!isNullOrUndefined(this.editedRecord['isManual']) &&
19460
+ this.editedRecord['isManual'] == false) || this.parent.taskMode == 'Auto')) || column.field === this.parent.taskFields.duration ||
19405
19461
  column.field === this.parent.taskFields.progress || column.field === this.parent.taskFields.work ||
19406
19462
  column.field === 'taskType') {
19407
19463
  disabled = true;
@@ -23195,7 +23251,15 @@ class Edit$2 {
23195
23251
  }
23196
23252
  /* data Source update */
23197
23253
  if (!isNullOrUndefined(parentItem)) {
23198
- childIndex = parentItem.childRecords.indexOf(this.addRowSelectedItem);
23254
+ if (rowPosition == 'Above') {
23255
+ childIndex = parentItem.childRecords.indexOf(this.addRowSelectedItem);
23256
+ }
23257
+ else if (rowPosition == 'Below') {
23258
+ childIndex = parentItem.childRecords.indexOf(this.addRowSelectedItem) + 1;
23259
+ }
23260
+ else {
23261
+ childIndex = parentItem.childRecords.length;
23262
+ }
23199
23263
  /*Child collection update*/
23200
23264
  parentItem.childRecords.splice(childIndex, 0, record);
23201
23265
  if ((this.parent.dataSource instanceof DataManager &&
@@ -23203,12 +23267,9 @@ class Edit$2 {
23203
23267
  !isNullOrUndefined(this.parent.dataSource)) {
23204
23268
  const child = this.parent.taskFields.child;
23205
23269
  if (parentItem.taskData[child] && parentItem.taskData[child].length > 0) {
23206
- if (rowPosition === 'Above') {
23270
+ if (rowPosition === 'Above' || rowPosition === 'Below') {
23207
23271
  parentItem.taskData[child].splice(childIndex, 0, record.taskData);
23208
23272
  }
23209
- else if (rowPosition === 'Below') {
23210
- parentItem.taskData[child].splice(childIndex + 1, 0, record.taskData);
23211
- }
23212
23273
  else {
23213
23274
  parentItem.taskData[child].push(record.taskData);
23214
23275
  }
@@ -23276,9 +23337,21 @@ class Edit$2 {
23276
23337
  refreshRecordInImmutableMode() {
23277
23338
  for (let i = 0; i < this.parent.modifiedRecords.length; i++) {
23278
23339
  const originalData = this.parent.modifiedRecords[i];
23279
- const dataId = this.parent.viewType === 'ProjectView' ?
23280
- originalData.ganttProperties.taskId : originalData.ganttProperties.rowUniqueID;
23281
- this.parent.treeGrid.grid.setRowData(dataId, originalData);
23340
+ let treeIndex = this.parent.allowRowDragAndDrop ? 1 : 0;
23341
+ let uniqueTaskID = this.parent.taskFields.id;
23342
+ var originalIndex = this.parent.currentViewData.findIndex((data) => {
23343
+ return (data[uniqueTaskID] == originalData[uniqueTaskID]);
23344
+ });
23345
+ if (this.parent.treeGrid.getRows()[originalIndex]) {
23346
+ this.parent.treeGrid.renderModule.cellRender({
23347
+ data: originalData, cell: this.parent.treeGrid.getRows()[originalIndex].cells[this.parent.treeColumnIndex + treeIndex],
23348
+ column: this.parent.treeGrid.grid.getColumns()[this.parent.treeColumnIndex],
23349
+ requestType: 'rowDragAndDrop'
23350
+ });
23351
+ this.parent.treeGrid.renderModule.RowModifier({
23352
+ data: originalData, row: this.parent.treeGrid.getRows()[originalIndex], rowHeight: this.parent.rowHeight
23353
+ });
23354
+ }
23282
23355
  }
23283
23356
  }
23284
23357
  /**
@@ -23655,6 +23728,9 @@ class Edit$2 {
23655
23728
  }
23656
23729
  this.addSuccess(args);
23657
23730
  args = this.constructTaskAddedEventArgs(cAddedRecord, args.modifiedRecords, 'add');
23731
+ if (this.dialogModule.isAddNewResource && !this.parent.isEdit && this.parent.taskFields.work) {
23732
+ this.parent.dataOperation.updateWorkWithDuration(cAddedRecord[0]);
23733
+ }
23658
23734
  this.parent.trigger('actionComplete', args);
23659
23735
  if (this.dialogModule.dialog && !this.dialogModule.dialogObj.isDestroyed) {
23660
23736
  this.dialogModule.dialogObj.hide();
@@ -24029,15 +24105,18 @@ class Edit$2 {
24029
24105
  if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {
24030
24106
  draggedRec[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.parentID];
24031
24107
  draggedRec.taskData[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.parentID];
24108
+ draggedRec.ganttProperties['parentId'] = droppedRec[this.parent.taskFields.parentID];
24032
24109
  }
24033
24110
  else {
24034
24111
  draggedRec[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.id];
24035
24112
  draggedRec.taskData[this.parent.taskFields.parentID] = droppedRec[this.parent.taskFields.id];
24113
+ draggedRec.ganttProperties['parentId'] = droppedRec[this.parent.taskFields.id];
24036
24114
  }
24037
24115
  }
24038
24116
  else {
24039
24117
  draggedRec[this.parent.taskFields.parentID] = null;
24040
24118
  draggedRec.taskData[this.parent.taskFields.parentID] = null;
24119
+ draggedRec.ganttProperties['parentId'] = null;
24041
24120
  }
24042
24121
  }
24043
24122
  }
@@ -24568,11 +24647,13 @@ class Filter$1 {
24568
24647
  // ...
24569
24648
  }
24570
24649
  closeFilterOnContextClick(element) {
24650
+ let datePickerElement = document.querySelector('body > div.e-datepicker');
24651
+ let dateTimePickerElement = document.querySelector('body > div.e-datetimepicker');
24571
24652
  if (this.filterMenuElement && document.body.contains(this.filterMenuElement)) {
24572
24653
  const ganttElement = closest(element, '#' + this.parent.element.id)
24573
24654
  || element.querySelector('#' + this.parent.element.id);
24574
- if ((!(this.filterMenuElement.contains(element)) && !isNullOrUndefined(ganttElement)) || element.nodeName === 'HTML'
24575
- || ((element.nodeName === 'DIV') && (!element.classList.contains('e-day')))) {
24655
+ if ((!(this.filterMenuElement.contains(element)) && !isNullOrUndefined(ganttElement)) || (!(this.filterMenuElement.contains(element)) && (isNullOrUndefined(datePickerElement))
24656
+ && (isNullOrUndefined(dateTimePickerElement)) && ((element.nodeName === 'DIV') || (element.nodeName === 'HTML')))) {
24576
24657
  remove(this.filterMenuElement);
24577
24658
  this.parent.treeGrid.grid.notify('filter-menu-close', { isOpen: false });
24578
24659
  this.filterMenuElement = null;
@@ -24889,8 +24970,9 @@ class Selection$1 {
24889
24970
  }
24890
24971
  this.addRemoveClass(index);
24891
24972
  this.selectedRowIndexes = extend([], this.getSelectedRowIndexes(), [], true);
24892
- if (this.selectedRowIndexes.length == 0) {
24893
- this.parent.setProperties({ selectedRowIndex: -1 }, true);
24973
+ this.parent.setProperties({ selectedRowIndex: -1 }, true);
24974
+ if (this.selectedRowIndexes.length === 1) {
24975
+ this.parent.setProperties({ selectedRowIndex: this.selectedRowIndexes[0] }, true);
24894
24976
  }
24895
24977
  if (!isNullOrUndefined(this.parent.toolbarModule)) {
24896
24978
  this.parent.toolbarModule.refreshToolbarItems();
@@ -25760,6 +25842,7 @@ class NonWorkingDay {
25760
25842
  this.nonworkingContainer = createElement('div', {
25761
25843
  className: nonworkingContainer
25762
25844
  });
25845
+ this.nonworkingContainer.setAttribute("role", "NonWorkingDays");
25763
25846
  this.parent.ganttChartModule.chartBodyContent.appendChild(this.nonworkingContainer);
25764
25847
  }
25765
25848
  }
@@ -25797,8 +25880,11 @@ class NonWorkingDay {
25797
25880
  let toDate;
25798
25881
  const container = createElement('div');
25799
25882
  const height = this.parent.contentHeight;
25800
- const scrollElement = this.parent.ganttChartModule.scrollElement;
25801
- const viewportHeight = parseInt(scrollElement.style.height, 10);
25883
+ let toolbarHeight = 0;
25884
+ if (!isNullOrUndefined(this.parent.toolbarModule)) {
25885
+ toolbarHeight = this.parent.toolbarModule.element.offsetHeight;
25886
+ }
25887
+ const viewportHeight = this.parent.ganttHeight - toolbarHeight - this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;
25802
25888
  for (let i = 0; i < this.parent.holidays.length; i++) {
25803
25889
  if (this.parent.holidays[i].from && this.parent.holidays[i].to) {
25804
25890
  fromDate = this.parent.dateValidationModule.getDateFromFormat(this.parent.holidays[i].from);
@@ -25891,9 +25977,12 @@ class NonWorkingDay {
25891
25977
  return container;
25892
25978
  }
25893
25979
  updateHolidayLabelHeight() {
25894
- const height = this.parent.contentHeight;
25895
- const scrollElement = this.parent.ganttChartModule.scrollElement;
25896
- const viewportHeight = parseInt(scrollElement.style.height, 10);
25980
+ const height = this.parent.getContentHeight();
25981
+ let toolbarHeight = 0;
25982
+ if (!isNullOrUndefined(this.parent.toolbarModule) && !isNullOrUndefined(this.parent.toolbarModule.element)) {
25983
+ toolbarHeight = this.parent.toolbarModule.element.offsetHeight;
25984
+ }
25985
+ const viewportHeight = this.parent.ganttHeight - toolbarHeight - this.parent.ganttChartModule.chartTimelineContainer.offsetHeight;
25897
25986
  const top = (viewportHeight < height) ? viewportHeight / 2 : height / 2;
25898
25987
  const labels = this.holidayContainer.querySelectorAll('.' + holidayLabel);
25899
25988
  for (let i = 0; i < labels.length; i++) {
@@ -25949,6 +26038,7 @@ class EventMarker$1 {
25949
26038
  this.eventMarkersContainer = createElement('div', {
25950
26039
  className: eventMarkersContainer
25951
26040
  });
26041
+ this.eventMarkersContainer.setAttribute("role", "EventMarker");
25952
26042
  this.parent.ganttChartModule.chartBodyContent.appendChild(this.eventMarkersContainer);
25953
26043
  }
25954
26044
  this.eventMarkersContainer.innerHTML = '';
@@ -27019,10 +27109,12 @@ class RowDD$1 {
27019
27109
  }
27020
27110
  }
27021
27111
  if (!args.cancel) {
27022
- args.cancel = true;
27023
27112
  args.requestType = 'beforeDrop';
27024
27113
  this.parent.trigger('actionBegin', args);
27025
- this.dropRows(args, true); // method to update the data collections based on drop action
27114
+ if (!args.cancel) {
27115
+ this.dropRows(args, true); // method to update the data collections based on drop action
27116
+ args.cancel = true;
27117
+ }
27026
27118
  }
27027
27119
  }
27028
27120
  dropRows(args, isByMethod) {
@@ -27119,19 +27211,31 @@ class RowDD$1 {
27119
27211
  let data = gObj.flatData;
27120
27212
  let startIndex;
27121
27213
  let endIndex;
27214
+ let ganttData = this.parent.dataSource;
27215
+ let uniqueTaskID = this.parent.taskFields.id;
27122
27216
  if (draggedRecord.index < droppedRecord.index) {
27123
27217
  startIndex = draggedRecord.index;
27124
- endIndex = droppedRecord.index;
27218
+ for (let i = 0; i < ganttData.length; i++) {
27219
+ let currentData = this.parent.currentViewData.filter(function (e) {
27220
+ return e[uniqueTaskID] === ganttData[i][uniqueTaskID];
27221
+ })[0];
27222
+ if (currentData.index > droppedRecord.index) {
27223
+ endIndex = currentData.index;
27224
+ break;
27225
+ }
27226
+ }
27125
27227
  }
27126
27228
  else {
27127
27229
  startIndex = droppedRecord.index;
27128
- let rootChildRecord = draggedRecord;
27129
- if (rootChildRecord.childRecords.length > 0) {
27130
- do {
27131
- rootChildRecord = rootChildRecord.childRecords[rootChildRecord.childRecords.length - 1];
27132
- } while (rootChildRecord.childRecords.length > 0);
27230
+ for (let i = 0; i < ganttData.length; i++) {
27231
+ let currentData = this.parent.currentViewData.filter(function (e) {
27232
+ return e[uniqueTaskID] === ganttData[i][uniqueTaskID];
27233
+ })[0];
27234
+ if (currentData.index > draggedRecord.index) {
27235
+ endIndex = currentData.index;
27236
+ break;
27237
+ }
27133
27238
  }
27134
- endIndex = rootChildRecord.index;
27135
27239
  }
27136
27240
  for (let i = startIndex; i <= endIndex; i++) {
27137
27241
  if (!isNullOrUndefined(data[i])) {