@syncfusion/ej2-schedule 24.2.3 → 24.2.8

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 (78) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/ej2-schedule.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +128 -59
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +127 -58
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +2 -2
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +14 -14
  13. package/src/schedule/actions/drag.js +14 -5
  14. package/src/schedule/actions/resize.js +41 -26
  15. package/src/schedule/actions/virtual-scroll.js +4 -0
  16. package/src/schedule/base/util.d.ts +21 -0
  17. package/src/schedule/base/util.js +29 -2
  18. package/src/schedule/event-renderer/inline-edit.js +1 -1
  19. package/src/schedule/event-renderer/month.js +3 -4
  20. package/src/schedule/event-renderer/timeline-view.d.ts +1 -0
  21. package/src/schedule/event-renderer/timeline-view.js +25 -7
  22. package/src/schedule/event-renderer/vertical-view.js +1 -1
  23. package/src/schedule/event-renderer/year.js +3 -3
  24. package/src/schedule/renderer/timeline-view.d.ts +0 -1
  25. package/src/schedule/renderer/timeline-view.js +3 -6
  26. package/src/schedule/renderer/vertical-view.js +1 -1
  27. package/src/schedule/renderer/view-base.js +1 -1
  28. package/styles/bootstrap-dark.css +42 -0
  29. package/styles/bootstrap.css +42 -0
  30. package/styles/bootstrap4.css +42 -0
  31. package/styles/bootstrap5-dark.css +42 -0
  32. package/styles/bootstrap5.css +42 -0
  33. package/styles/fabric-dark.css +42 -0
  34. package/styles/fabric.css +42 -0
  35. package/styles/fluent-dark.css +42 -0
  36. package/styles/fluent.css +42 -0
  37. package/styles/highcontrast-light.css +42 -0
  38. package/styles/highcontrast.css +42 -0
  39. package/styles/material-dark.css +42 -0
  40. package/styles/material.css +42 -0
  41. package/styles/material3-dark.css +42 -0
  42. package/styles/material3.css +42 -0
  43. package/styles/schedule/_bootstrap-dark-definition.scss +1 -0
  44. package/styles/schedule/_bootstrap-definition.scss +1 -0
  45. package/styles/schedule/_bootstrap4-definition.scss +1 -0
  46. package/styles/schedule/_bootstrap5-definition.scss +1 -0
  47. package/styles/schedule/_fabric-dark-definition.scss +1 -0
  48. package/styles/schedule/_fabric-definition.scss +1 -0
  49. package/styles/schedule/_fluent-definition.scss +1 -0
  50. package/styles/schedule/_fusionnew-definition.scss +1 -0
  51. package/styles/schedule/_highcontrast-definition.scss +1 -0
  52. package/styles/schedule/_highcontrast-light-definition.scss +1 -0
  53. package/styles/schedule/_layout.scss +58 -0
  54. package/styles/schedule/_material-dark-definition.scss +1 -0
  55. package/styles/schedule/_material-definition.scss +1 -0
  56. package/styles/schedule/_material3-definition.scss +1 -0
  57. package/styles/schedule/_tailwind-definition.scss +1 -0
  58. package/styles/schedule/bootstrap-dark.css +42 -0
  59. package/styles/schedule/bootstrap.css +42 -0
  60. package/styles/schedule/bootstrap4.css +42 -0
  61. package/styles/schedule/bootstrap5-dark.css +42 -0
  62. package/styles/schedule/bootstrap5.css +42 -0
  63. package/styles/schedule/fabric-dark.css +42 -0
  64. package/styles/schedule/fabric.css +42 -0
  65. package/styles/schedule/fluent-dark.css +42 -0
  66. package/styles/schedule/fluent.css +42 -0
  67. package/styles/schedule/highcontrast-light.css +42 -0
  68. package/styles/schedule/highcontrast.css +42 -0
  69. package/styles/schedule/material-dark.css +42 -0
  70. package/styles/schedule/material.css +42 -0
  71. package/styles/schedule/material3-dark.css +42 -0
  72. package/styles/schedule/material3.css +42 -0
  73. package/styles/schedule/tailwind-dark.css +42 -0
  74. package/styles/schedule/tailwind.css +42 -0
  75. package/styles/tailwind-dark.css +42 -0
  76. package/styles/tailwind.css +42 -0
  77. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -63
  78. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -39
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 24.2.3
3
+ * version : 24.2.8
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@24.1.41",
3
+ "_id": "@syncfusion/ej2-schedule@24.2.4",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-PMFUzrOa5gFauoO79WYC7vNHSJIoHrPUZJwE/aDZPIKkc0pUdaPPcJhLrxMUrKEOLJvmhVo0bqOQkMwUXLswTA==",
5
+ "_integrity": "sha512-oBgKnAT6yCQiWtsncH5FXAnymoL6njD8ugNGu7gYoDjpxbslOUZWLq034w0dSmhfjwUfMwOEm9P//XR46ZVcsA==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,8 +23,8 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-24.1.41.tgz",
27
- "_shasum": "dfaee919781c2f41866763e373d84a7f4e8b46ad",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-24.2.4.tgz",
27
+ "_shasum": "4439adf0387fa69424cea8d1c249c87491244ef2",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/elease-automation_release_24.1.1/packages/included",
30
30
  "author": {
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~24.2.3",
39
- "@syncfusion/ej2-buttons": "~24.2.3",
40
- "@syncfusion/ej2-calendars": "~24.2.3",
38
+ "@syncfusion/ej2-base": "~24.2.7",
39
+ "@syncfusion/ej2-buttons": "~24.2.7",
40
+ "@syncfusion/ej2-calendars": "~24.2.8",
41
41
  "@syncfusion/ej2-data": "~24.2.3",
42
- "@syncfusion/ej2-dropdowns": "~24.2.3",
43
- "@syncfusion/ej2-excel-export": "~24.2.3",
44
- "@syncfusion/ej2-inputs": "~24.2.3",
45
- "@syncfusion/ej2-lists": "~24.2.3",
46
- "@syncfusion/ej2-navigations": "~24.2.3",
47
- "@syncfusion/ej2-popups": "~24.2.3"
42
+ "@syncfusion/ej2-dropdowns": "~24.2.8",
43
+ "@syncfusion/ej2-excel-export": "~24.2.4",
44
+ "@syncfusion/ej2-inputs": "~24.2.7",
45
+ "@syncfusion/ej2-lists": "~24.2.8",
46
+ "@syncfusion/ej2-navigations": "~24.2.8",
47
+ "@syncfusion/ej2-popups": "~24.2.8"
48
48
  },
49
49
  "deprecated": false,
50
50
  "description": "Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.",
@@ -73,6 +73,6 @@
73
73
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
74
74
  },
75
75
  "typings": "index.d.ts",
76
- "version": "24.2.3",
76
+ "version": "24.2.8",
77
77
  "sideEffects": false
78
78
  }
@@ -436,7 +436,7 @@ var DragAndDrop = /** @class */ (function (_super) {
436
436
  this.timelineEventModule.cellWidth = this.actionObj.cellWidth;
437
437
  this.timelineEventModule.getSlotDates();
438
438
  this.actionObj.cellWidth = this.isHeaderRows ? this.timelineEventModule.cellWidth :
439
- this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect().width;
439
+ util.getElementWidth(this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS));
440
440
  this.calculateTimelineTime(e);
441
441
  }
442
442
  else {
@@ -1057,13 +1057,20 @@ var DragAndDrop = /** @class */ (function (_super) {
1057
1057
  if (this.isStepDragging) {
1058
1058
  var widthDiff = this.getWidthDiff(tr, index);
1059
1059
  if (widthDiff !== 0) {
1060
- var timeDiff = Math.round(widthDiff / this.widthPerMinute);
1060
+ var timeDiff = Math.ceil(widthDiff / this.widthPerMinute);
1061
1061
  eventStart.setMinutes(eventStart.getMinutes() + (timeDiff * this.actionObj.interval));
1062
1062
  if (this.isCursorAhead || cursorDrag) {
1063
1063
  eventStart.setMilliseconds(-(eventDuration));
1064
1064
  }
1065
1065
  else {
1066
1066
  eventStart.setMinutes(eventStart.getMinutes() - this.minDiff);
1067
+ var intervalInMS = this.actionObj.interval * util.MS_PER_MINUTE;
1068
+ timeDiff = Math.abs(eventStart.getTime() - this.actionObj.start.getTime()) / intervalInMS;
1069
+ var roundTimeDiff = Math.trunc(timeDiff);
1070
+ if (roundTimeDiff !== timeDiff) {
1071
+ timeDiff = (roundTimeDiff * intervalInMS) * (eventStart > this.actionObj.start ? 1 : -1);
1072
+ eventStart = new Date(this.actionObj.start.getTime() + timeDiff);
1073
+ }
1067
1074
  }
1068
1075
  }
1069
1076
  else {
@@ -1084,7 +1091,9 @@ var DragAndDrop = /** @class */ (function (_super) {
1084
1091
  (this.cursorPointIndex * (this.isTimelineDayProcess ? MINUTES_PER_DAY : this.actionObj.slotInterval)));
1085
1092
  }
1086
1093
  }
1087
- eventStart = this.calculateIntervalTime(eventStart);
1094
+ if (!this.isStepDragging) {
1095
+ eventStart = this.calculateIntervalTime(eventStart);
1096
+ }
1088
1097
  if (this.isTimelineDayProcess) {
1089
1098
  var eventSrt = eventObj[this.parent.eventFields.startTime];
1090
1099
  eventStart.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds());
@@ -1246,7 +1255,7 @@ var DragAndDrop = /** @class */ (function (_super) {
1246
1255
  ~~(dragArea.querySelector('table').offsetHeight / trCollection.length) : this.actionObj.cellHeight;
1247
1256
  var rowIndex = Math.floor(Math.floor((this.actionObj.Y +
1248
1257
  (dragArea.scrollTop - translateY - (window.scrollY || window.pageYOffset))) -
1249
- dragArea.getBoundingClientRect().top) / rowHeight);
1258
+ util.getElementTop(dragArea)) / rowHeight);
1250
1259
  rowIndex = (rowIndex < 0) ? 0 : (rowIndex > trCollection.length - 1) ? trCollection.length - 1 : rowIndex;
1251
1260
  this.actionObj.index = rowIndex;
1252
1261
  var eventContainer = this.parent.element.querySelectorAll('.e-appointment-container:not(.e-hidden)').item(rowIndex);
@@ -1262,7 +1271,7 @@ var DragAndDrop = /** @class */ (function (_super) {
1262
1271
  if (!isNullOrUndefined(this.parent.eventDragArea)) {
1263
1272
  return;
1264
1273
  }
1265
- var top = trCollection[parseInt(rowIndex.toString(), 10)].getBoundingClientRect().height * rowIndex;
1274
+ var top = util.getElementHeight(trCollection[parseInt(rowIndex.toString(), 10)]) * rowIndex;
1266
1275
  if (this.parent.rowAutoHeight) {
1267
1276
  var cursorElement = this.getCursorElement(e);
1268
1277
  if (cursorElement) {
@@ -81,9 +81,9 @@ var Resize = /** @class */ (function (_super) {
81
81
  bottom: resizeTarget.classList.contains(cls.BOTTOM_RESIZE_HANDLER)
82
82
  };
83
83
  _this.actionObj.groupIndex = _this.parent.uiStateValues.isGroupAdaptive ? _this.parent.uiStateValues.groupIndex : 0;
84
- var workCell = _this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect();
85
- _this.actionObj.cellWidth = workCell.width;
86
- _this.actionObj.cellHeight = workCell.height;
84
+ var workCell = _this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);
85
+ _this.actionObj.cellWidth = util.getElementWidth(workCell);
86
+ _this.actionObj.cellHeight = util.getElementHeight(workCell);
87
87
  var hRows = _this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });
88
88
  if (_this.parent.activeView.isTimelineView() && hRows.length > 0 && ['Date', 'Hour'].indexOf(hRows.slice(-1)[0]) < 0) {
89
89
  var tr = _this.parent.getContentTable().querySelector('tr');
@@ -385,9 +385,9 @@ var Resize = /** @class */ (function (_super) {
385
385
  parseInt(this.actionObj.clone.style.left, 10);
386
386
  offsetValue = Math.round(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth;
387
387
  if (!isLeft) {
388
- offsetValue += (this.actionObj.clone.getBoundingClientRect().width - this.actionObj.cellWidth);
388
+ offsetValue += (util.getElementWidth(this.actionObj.clone) - this.actionObj.cellWidth);
389
389
  }
390
- cellIndex = Math.floor(offsetValue / Math.floor(tr.getBoundingClientRect().width / noOfDays));
390
+ cellIndex = Math.floor(offsetValue / Math.floor(util.getElementWidth(tr) / noOfDays));
391
391
  isDateHeader = isTimeViews && headerName === 'Date';
392
392
  cellIndex = isLeft ? cellIndex : isTimelineMonth ? cellIndex + 1 : cellIndex;
393
393
  isLastCell = cellIndex === tdCollections.length;
@@ -396,7 +396,7 @@ var Resize = /** @class */ (function (_super) {
396
396
  else {
397
397
  var cellWidth = this.actionObj.cellWidth;
398
398
  cellIndex = isLeft ? Math.floor(offset / this.actionObj.cellWidth) :
399
- Math.ceil((offset + (this.actionObj.clone.getBoundingClientRect().width - cellWidth)) / this.actionObj.cellWidth);
399
+ Math.ceil((offset + (util.getElementWidth(this.actionObj.clone) - cellWidth)) / this.actionObj.cellWidth);
400
400
  if (this.parent.enableRtl) {
401
401
  var cellOffsetWidth = 0;
402
402
  if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&
@@ -404,7 +404,7 @@ var Resize = /** @class */ (function (_super) {
404
404
  cellOffsetWidth = this.actionObj.cellWidth;
405
405
  }
406
406
  var offsetWidth = (Math.floor(offset / this.actionObj.cellWidth) *
407
- this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.getBoundingClientRect().width - cellOffsetWidth);
407
+ this.actionObj.cellWidth) + (isLeft ? 0 : util.getElementWidth(this.actionObj.clone) - cellOffsetWidth);
408
408
  cellIndex = Math.floor(offsetWidth / this.actionObj.cellWidth);
409
409
  }
410
410
  isLastCell = cellIndex === tdCollections.length;
@@ -423,7 +423,7 @@ var Resize = /** @class */ (function (_super) {
423
423
  }
424
424
  else {
425
425
  if (!isLeft) {
426
- offset += this.actionObj.clone.getBoundingClientRect().width;
426
+ offset += util.getElementWidth(this.actionObj.clone);
427
427
  }
428
428
  var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *
429
429
  (offset - Math.floor(offset / this.actionObj.cellWidth) * this.actionObj.cellWidth));
@@ -435,9 +435,9 @@ var Resize = /** @class */ (function (_super) {
435
435
  }
436
436
  else {
437
437
  var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;
438
- var originalWidth = Math.ceil((isLeft ? this.actionObj.element.getBoundingClientRect().width : 0) /
438
+ var originalWidth = Math.ceil((isLeft ? util.getElementWidth(this.actionObj.element) : 0) /
439
439
  this.actionObj.cellWidth) * this.actionObj.cellWidth;
440
- var noOfDays = Math.ceil((this.actionObj.clone.getBoundingClientRect().width - originalWidth) /
440
+ var noOfDays = Math.ceil((util.getElementWidth(this.actionObj.clone) - originalWidth) /
441
441
  this.actionObj.cellWidth);
442
442
  var tr = closest(this.actionObj.clone, 'tr');
443
443
  var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;
@@ -500,30 +500,38 @@ var Resize = /** @class */ (function (_super) {
500
500
  var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;
501
501
  var pageWidth = isLeft ? (this.actionObj.X - this.actionObj.pageX) : (this.actionObj.pageX - this.actionObj.X);
502
502
  var targetWidth = isTimelineView ?
503
- (this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth :
504
- this.parent.currentView === 'Month' ? this.actionObj.element.getBoundingClientRect().width :
505
- Math.ceil(this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth;
503
+ (util.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth :
504
+ this.parent.currentView === 'Month' ? util.getElementWidth(this.actionObj.element) :
505
+ Math.ceil(util.getElementWidth(this.actionObj.element) / this.actionObj.cellWidth) * this.actionObj.cellWidth;
506
506
  var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);
507
507
  var left = (this.parent.enableRtl) ? parseInt(this.actionObj.element.style.right, 10) : this.actionObj.clone.offsetLeft;
508
508
  if (isTimeViews) {
509
509
  offsetWidth = targetWidth + (Math.ceil(pageWidth / slotInterval) * slotInterval);
510
- offsetWidth = (Math.round((left + offsetWidth) / slotInterval) * slotInterval) - left;
510
+ if (!isLeft) {
511
+ var roundedLeft = (+parseFloat(this.actionObj.element.style[this.parent.enableRtl ? 'right' : 'left'])).toFixed(1);
512
+ var roundedWidth = Math.round(targetWidth / slotInterval) * slotInterval;
513
+ if (roundedLeft !== left.toFixed(1) || roundedWidth !== targetWidth) {
514
+ offsetWidth = (Math.round((left + offsetWidth) / slotInterval) * slotInterval) - left;
515
+ }
516
+ }
511
517
  this.actionObj.event[this.parent.eventFields.isAllDay] = false;
512
518
  }
513
519
  var width = !isLeft && ((offsetWidth + this.actionObj.clone.offsetLeft > this.scrollArgs.width)) ?
514
- this.actionObj.clone.getBoundingClientRect().width : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
520
+ util.getElementWidth(this.actionObj.clone) : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
515
521
  if (this.parent.enableRtl) {
516
522
  var rightValue = isTimelineView ? parseInt(this.actionObj.element.style.right, 10) :
517
523
  -(offsetWidth - this.actionObj.cellWidth);
518
524
  rightValue = isTimelineView ? rightValue : isLeft ? 0 : rightValue > 0 ? 0 : rightValue;
519
525
  if (isTimelineView && !isLeft) {
520
- rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.getBoundingClientRect().width +
521
- (this.actionObj.pageX - this.actionObj.X))) / slotInterval) * slotInterval;
522
- rightValue = rightValue < 0 ? Math.abs(rightValue) : -rightValue;
526
+ rightValue = rightValue - (Math.ceil((this.actionObj.pageX - this.actionObj.X) / slotInterval) * slotInterval);
527
+ if (rightValue < 0) {
528
+ rightValue = parseInt(this.actionObj.clone.style.right, 10);
529
+ width = parseInt(this.actionObj.clone.style.width, 10);
530
+ }
523
531
  }
524
532
  rightValue = rightValue >= this.scrollArgs.width ? this.scrollArgs.width - this.actionObj.cellWidth : rightValue;
525
533
  styles.right = formatUnit(rightValue);
526
- width = width + rightValue > this.scrollArgs.width ? this.actionObj.clone.getBoundingClientRect().width : width;
534
+ width = width + rightValue > this.scrollArgs.width ? util.getElementWidth(this.actionObj.clone) : width;
527
535
  }
528
536
  else {
529
537
  var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - this.actionObj.pageX) :
@@ -531,24 +539,31 @@ var Resize = /** @class */ (function (_super) {
531
539
  if (isTimelineView) {
532
540
  offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);
533
541
  if (this.parent.enableRtl) {
534
- offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.actionObj.clone.getBoundingClientRect().width)
542
+ offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - util.getElementWidth(this.actionObj.clone))
535
543
  ? parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;
536
544
  }
537
545
  else {
538
- offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.actionObj.clone.getBoundingClientRect().width &&
539
- this.actionObj.clone.getBoundingClientRect().width === this.actionObj.cellWidth) ?
546
+ offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + util.getElementWidth(this.actionObj.clone) &&
547
+ util.getElementWidth(this.actionObj.clone) === this.actionObj.cellWidth) ?
540
548
  parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;
541
549
  }
542
550
  }
543
551
  var leftValue = offsetLeft;
544
- offsetLeft = isTimelineView ? isTimeViews ? isLeft ? Math.floor(offsetLeft / slotInterval) * slotInterval : offsetLeft :
552
+ offsetLeft = isTimelineView ? isTimeViews ? isLeft ? this.actionObj.element.offsetLeft -
553
+ (Math.ceil((this.actionObj.element.offsetLeft - offsetLeft) / slotInterval) * slotInterval) : offsetLeft :
545
554
  Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth :
546
555
  Math.ceil(Math.abs(offsetLeft) / this.actionObj.cellWidth) * this.actionObj.cellWidth;
547
556
  if (offsetLeft < 0) {
548
- offsetLeft = 0;
549
- width = this.actionObj.clone.getBoundingClientRect().width;
557
+ if (isTimelineView && isLeft && (offsetLeft % slotInterval)) {
558
+ offsetLeft = parseInt(this.actionObj.clone.style.left, 10);
559
+ width = parseInt(this.actionObj.clone.style.width, 10);
560
+ }
561
+ else {
562
+ offsetLeft = 0;
563
+ width = util.getElementWidth(this.actionObj.clone);
564
+ }
550
565
  }
551
- var cloneWidth = Math.ceil(this.actionObj.clone.getBoundingClientRect().width / this.actionObj.cellWidth) *
566
+ var cloneWidth = Math.ceil(util.getElementWidth(this.actionObj.clone) / this.actionObj.cellWidth) *
552
567
  this.actionObj.cellWidth;
553
568
  if (isLeft) {
554
569
  styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :
@@ -55,6 +55,10 @@ var VirtualScroll = /** @class */ (function () {
55
55
  this.renderedLength = conTable.querySelector('tbody').children.length;
56
56
  virtual.style.height = (conTable.offsetHeight + (this.parent.resourceBase.expandedResources.length - (this.renderedLength)) *
57
57
  conTable.offsetHeight / this.renderedLength) + 'px';
58
+ var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
59
+ if ((conWrap.scrollHeight - conWrap.scrollTop) < conWrap.offsetHeight * this.bufferCount) {
60
+ virtual.style.height = parseInt(virtual.style.height) + (conWrap.offsetHeight * this.bufferCount) + 'px';
61
+ }
58
62
  }
59
63
  else {
60
64
  virtual.style.height = '';
@@ -238,3 +238,24 @@ export declare function isIPadDevice(): boolean;
238
238
  * @returns {string} Returns the output string
239
239
  */
240
240
  export declare function capitalizeFirstWord(inputString: string, type: string): string;
241
+ /**
242
+ * Method to get element cell width
243
+ *
244
+ * @param {HTMLElement} element Accepts the DOM element
245
+ * @returns {number} Returns the width of the given element
246
+ */
247
+ export declare function getElementWidth(element: HTMLElement): number;
248
+ /**
249
+ * Method to get element cell Height
250
+ *
251
+ * @param {HTMLElement} element Accepts the DOM element
252
+ * @returns {number} Returns the Height of the given element
253
+ */
254
+ export declare function getElementHeight(element: HTMLElement): number;
255
+ /**
256
+ * Method to get element cell Top
257
+ *
258
+ * @param {HTMLElement} element Accepts the DOM element
259
+ * @returns {number} Returns the top value of the given element
260
+ */
261
+ export declare function getElementTop(element: HTMLElement): number;
@@ -20,7 +20,7 @@ export function getElementHeightFromClass(container, elementClass) {
20
20
  el.style.visibility = 'hidden';
21
21
  el.style.position = 'absolute';
22
22
  container.appendChild(el);
23
- height = el.getBoundingClientRect().height;
23
+ height = getElementHeight(el);
24
24
  remove(el);
25
25
  return height;
26
26
  }
@@ -37,7 +37,7 @@ export function getElementWidthFromClass(container, elementClass) {
37
37
  el.style.visibility = 'hidden';
38
38
  el.style.position = 'absolute';
39
39
  container.appendChild(el);
40
- width = el.getBoundingClientRect().width;
40
+ width = getElementWidth(el);
41
41
  remove(el);
42
42
  return width;
43
43
  }
@@ -425,3 +425,30 @@ export function capitalizeFirstWord(inputString, type) {
425
425
  }
426
426
  return inputString;
427
427
  }
428
+ /**
429
+ * Method to get element cell width
430
+ *
431
+ * @param {HTMLElement} element Accepts the DOM element
432
+ * @returns {number} Returns the width of the given element
433
+ */
434
+ export function getElementWidth(element) {
435
+ return document.body.style.transform.includes('scale') ? element.offsetWidth : element.getBoundingClientRect().width;
436
+ }
437
+ /**
438
+ * Method to get element cell Height
439
+ *
440
+ * @param {HTMLElement} element Accepts the DOM element
441
+ * @returns {number} Returns the Height of the given element
442
+ */
443
+ export function getElementHeight(element) {
444
+ return document.body.style.transform.includes('scale') ? element.offsetHeight : element.getBoundingClientRect().height;
445
+ }
446
+ /**
447
+ * Method to get element cell Top
448
+ *
449
+ * @param {HTMLElement} element Accepts the DOM element
450
+ * @returns {number} Returns the top value of the given element
451
+ */
452
+ export function getElementTop(element) {
453
+ return document.body.style.transform.includes('scale') ? element.offsetTop : element.getBoundingClientRect().top;
454
+ }
@@ -108,7 +108,7 @@ var InlineEdit = /** @class */ (function () {
108
108
  var allDayElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.ALLDAY_APPOINTMENT_CLASS));
109
109
  var allDayLevel = 0;
110
110
  if (allDayElements.length > 0) {
111
- allDayLevel = Math.floor(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).getBoundingClientRect().height /
111
+ allDayLevel = Math.floor(util.getElementHeight(this.parent.element.querySelector('.' + cls.ALLDAY_ROW_CLASS)) /
112
112
  allDayElements[0].offsetHeight) - 1;
113
113
  }
114
114
  verticalEvent.allDayLevel = allDayLevel;
@@ -174,10 +174,9 @@ var MonthEvent = /** @class */ (function (_super) {
174
174
  setStyleAttribute(cell, { 'height': height_1 + 'px' });
175
175
  });
176
176
  }
177
- var cellDetail = this.workCells[this.parent.activeView.isTimelineView() ?
178
- 0 : this.workCells.length - 1].getBoundingClientRect();
179
- this.cellWidth = cellDetail.width;
180
- this.cellHeight = cellDetail.height;
177
+ var cellDetail = this.workCells[this.parent.activeView.isTimelineView() ? 0 : this.workCells.length - 1];
178
+ this.cellWidth = util.getElementWidth(cellDetail);
179
+ this.cellHeight = util.getElementHeight(cellDetail);
181
180
  this.dateRender = dateRender;
182
181
  var filteredDates = this.getRenderedDates(dateRender);
183
182
  this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
@@ -23,6 +23,7 @@ export declare class TimelineEvent extends MonthEvent {
23
23
  getOverlapSortComparerEvents(startDate: Date, endDate: Date, appointmentsCollection: Record<string, any>[]): Record<string, any>[];
24
24
  renderResourceEvents(): void;
25
25
  renderEvents(event: Record<string, any>, resIndex: number, appointmentsList?: Record<string, any>[]): void;
26
+ private adjustToNearestTimeSlot;
26
27
  private renderTimelineMoreIndicator;
27
28
  updateCellHeight(cell: HTMLElement, height: number): void;
28
29
  private adjustAppointments;
@@ -38,7 +38,7 @@ var TimelineEvent = /** @class */ (function (_super) {
38
38
  _this.eventContainers = [].slice.call(_this.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
39
39
  var tr = [].slice.call(_this.element.querySelectorAll('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr'));
40
40
  _this.dayLength = tr.length === 0 ? 0 : tr[0].children.length;
41
- _this.content = _this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
41
+ _this.content = _this.parent.element.querySelector('.' + cls.SCHEDULE_TABLE_CLASS + '.' + cls.CONTENT_TABLE_CLASS);
42
42
  return _this;
43
43
  }
44
44
  TimelineEvent.prototype.getSlotDates = function () {
@@ -48,7 +48,7 @@ var TimelineEvent = /** @class */ (function (_super) {
48
48
  this.parent.activeViewOptions.headerRows.slice(-1)[0].option !== 'Hour') {
49
49
  this.renderType = 'day';
50
50
  var workCell = this.content.querySelector('.' + cls.WORK_CELLS_CLASS);
51
- this.cellWidth = workCell.getBoundingClientRect().width / +(workCell.getAttribute('colspan') || 1);
51
+ this.cellWidth = util.getElementWidth(workCell) / +(workCell.getAttribute('colspan') || 1);
52
52
  this.slotsPerDay = 1;
53
53
  }
54
54
  else {
@@ -204,14 +204,14 @@ var TimelineEvent = /** @class */ (function (_super) {
204
204
  this.wireAppointmentEvents(appointmentElement, event);
205
205
  if (this.parent.rowAutoHeight) {
206
206
  var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
207
- var conWidth = conWrap.getBoundingClientRect().width;
207
+ var conWidth = util.getElementWidth(conWrap);
208
208
  var isWithoutScroll = conWrap.offsetHeight === conWrap.clientHeight &&
209
209
  conWrap.offsetWidth === conWrap.clientWidth;
210
210
  this.renderEventElement(event, appointmentElement, cellTd);
211
211
  var firstChild = this.getFirstChild(resIndex);
212
212
  this.updateCellHeight(firstChild, height);
213
213
  if (isWithoutScroll &&
214
- (conWrap.offsetWidth > conWrap.clientWidth || conWidth !== conWrap.getBoundingClientRect().width)) {
214
+ (conWrap.offsetWidth > conWrap.clientWidth || conWidth !== util.getElementWidth(conWrap))) {
215
215
  this.adjustAppointments(conWidth);
216
216
  }
217
217
  }
@@ -237,8 +237,11 @@ var TimelineEvent = /** @class */ (function (_super) {
237
237
  this.slotCount / this.interval;
238
238
  for (var k = 0; k < slotCount; k++) {
239
239
  startDate = (k === 0) ? new Date(startDate.getTime()) : new Date(startDate.getTime() + (60000 * interval));
240
+ if (slotCount < 1) {
241
+ startDate = this.adjustToNearestTimeSlot(startDate, interval);
242
+ }
240
243
  endDate = new Date(startDate.getTime() + (60000 * interval));
241
- if (endDate.getTime() > endTime.getTime()) {
244
+ if (slotCount >= 1 && endDate.getTime() > endTime.getTime()) {
242
245
  break;
243
246
  }
244
247
  var position_2 = this.getPosition(startDate, endDate, false, (this.day + i));
@@ -254,6 +257,20 @@ var TimelineEvent = /** @class */ (function (_super) {
254
257
  }
255
258
  this.parent.renderTemplates();
256
259
  };
260
+ TimelineEvent.prototype.adjustToNearestTimeSlot = function (inputTime, interval) {
261
+ // Parse the input time
262
+ var parsedTime = new Date(inputTime);
263
+ // Get the minutes of the input time in milliseconds
264
+ var minutesInMilliseconds = parsedTime.getHours() * 60 * 60 * 1000 + parsedTime.getMinutes() * 60 * 1000;
265
+ // Calculate the adjusted time in milliseconds (nearest time slot)
266
+ var adjustedMinutesInMilliseconds = Math.floor(minutesInMilliseconds / (interval * 60 * 1000)) * (interval * 60 * 1000);
267
+ // Create a new Date object with the adjusted time
268
+ var adjustedTime = new Date(parsedTime.getTime());
269
+ adjustedTime.setHours(adjustedMinutesInMilliseconds / (60 * 60 * 1000) % 24);
270
+ adjustedTime.setMinutes((adjustedMinutesInMilliseconds % (60 * 60 * 1000)) / (60 * 1000));
271
+ // Return the adjusted time in string format
272
+ return adjustedTime;
273
+ };
257
274
  TimelineEvent.prototype.renderTimelineMoreIndicator = function (startTime, startDate, endDate, appHeight, interval, resIndex, appointmentsList, top, appLeft, appRight, cellTd, moreIndicator, appPos, position) {
258
275
  appLeft = (this.parent.enableRtl) ? appRight = position : position;
259
276
  appPos = (this.parent.enableRtl) ? appRight : appLeft;
@@ -313,8 +330,9 @@ var TimelineEvent = /** @class */ (function (_super) {
313
330
  TimelineEvent.prototype.adjustAppointments = function (conWidth) {
314
331
  var _this = this;
315
332
  var tr = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody tr');
316
- this.cellWidth = this.workCells[0].getBoundingClientRect().width;
317
- var currentPercentage = (this.cellWidth * tr.children.length) / (conWidth / 100);
333
+ var actualCellWidth = util.getElementWidth(this.workCells[0]);
334
+ this.cellWidth = actualCellWidth / +(this.workCells[0].getAttribute('colspan') || 1);
335
+ var currentPercentage = (actualCellWidth * tr.children.length) / (conWidth / 100);
318
336
  var apps = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));
319
337
  apps.forEach(function (app) {
320
338
  if (_this.parent.enableRtl && app.style.right !== '0px') {
@@ -113,7 +113,7 @@ var VerticalEvent = /** @class */ (function (_super) {
113
113
  this.resources = this.parent.resourceBase.renderedResources;
114
114
  }
115
115
  this.cellHeight =
116
- parseFloat(this.parent.element.querySelector('.e-content-wrap tbody tr').getBoundingClientRect().height.toFixed(2));
116
+ parseFloat(util.getElementHeight(this.parent.element.querySelector('.e-content-wrap tbody tr')).toFixed(2));
117
117
  this.dateRender[0] = this.parent.activeView.renderDates;
118
118
  if (this.parent.activeViewOptions.group.resources.length > 0) {
119
119
  for (var i = 0, len = this.resources.length; i < len; i++) {
@@ -89,7 +89,7 @@ var YearEvent = /** @class */ (function (_super) {
89
89
  YearEvent.prototype.timelineYearViewEvents = function () {
90
90
  var _this = this;
91
91
  var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')');
92
- this.cellWidth = workCell.getBoundingClientRect().width;
92
+ this.cellWidth = util.getElementWidth(workCell);
93
93
  this.cellHeader = util.getOuterHeight(workCell.querySelector('.' + cls.DATE_HEADER_CLASS));
94
94
  var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
95
95
  this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
@@ -247,7 +247,7 @@ var YearEvent = /** @class */ (function (_super) {
247
247
  var contentTable = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
248
248
  var isVerticalScrollbarAvail = contentTable.offsetWidth > contentTable.clientWidth;
249
249
  var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);
250
- this.cellWidth = workCell.getBoundingClientRect().width;
250
+ this.cellWidth = util.getElementWidth(workCell);
251
251
  this.cellHeader = 0;
252
252
  var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
253
253
  this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
@@ -292,7 +292,7 @@ var YearEvent = /** @class */ (function (_super) {
292
292
  appWrapper.forEach(function (appWrap, cellIndex) {
293
293
  var td = row.querySelector("td:nth-child(" + (cellIndex + 1) + ")");
294
294
  var app = [].slice.call(appWrap.children);
295
- var width = td.getBoundingClientRect().width;
295
+ var width = util.getElementWidth(td);
296
296
  var left = td.offsetLeft;
297
297
  if (_this.parent.enableRtl) {
298
298
  var right_1 = conTable_1.offsetWidth - left - td.offsetWidth;
@@ -16,7 +16,6 @@ export declare class TimelineViews extends VerticalView {
16
16
  private generateTimeSlots;
17
17
  changeCurrentTimePosition(): void;
18
18
  private getLeftFromDateTime;
19
- private getWorkCellWidth;
20
19
  renderHeader(): void;
21
20
  createAllDayRow(table: Element, tdData: TdData[]): void;
22
21
  getCurrentTimeIndicatorIndex(): number[];
@@ -72,7 +72,7 @@ var TimelineViews = /** @class */ (function (_super) {
72
72
  }
73
73
  var scrollLeft;
74
74
  if (isNullOrUndefined(hour) || !this.parent.activeViewOptions.timeScale.enable) {
75
- scrollLeft = index * this.getWorkCellWidth();
75
+ scrollLeft = index * util.getElementWidth(this.element.querySelector('.e-work-cells'));
76
76
  }
77
77
  else {
78
78
  scrollLeft = isNullOrUndefined(scrollDate) ? this.getLeftFromDateTime(null, date) :
@@ -159,7 +159,7 @@ var TimelineViews = /** @class */ (function (_super) {
159
159
  if (this.parent.activeView.colLevels[parseInt(index.toString(), 10)] &&
160
160
  this.parent.activeView.colLevels[parseInt(index.toString(), 10)][0].colSpan) {
161
161
  diffInDates = currentDateIndex[0] * this.parent.activeView.colLevels[parseInt(index.toString(), 10)][0].colSpan *
162
- this.getWorkCellWidth();
162
+ util.getElementWidth(this.element.querySelector('.e-work-cells'));
163
163
  }
164
164
  else {
165
165
  var endHour = this.getEndHour();
@@ -169,12 +169,9 @@ var TimelineViews = /** @class */ (function (_super) {
169
169
  }
170
170
  }
171
171
  }
172
- return diffInDates + ((diffInMinutes * this.getWorkCellWidth() * this.parent.activeViewOptions.timeScale.slotCount) /
172
+ return diffInDates + ((diffInMinutes * util.getElementWidth(this.element.querySelector('.e-work-cells')) * this.parent.activeViewOptions.timeScale.slotCount) /
173
173
  this.parent.activeViewOptions.timeScale.interval);
174
174
  };
175
- TimelineViews.prototype.getWorkCellWidth = function () {
176
- return this.element.querySelector('.e-work-cells').getBoundingClientRect().width;
177
- };
178
175
  TimelineViews.prototype.renderHeader = function () {
179
176
  var tr = createElement('tr');
180
177
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
@@ -371,7 +371,7 @@ var VerticalView = /** @class */ (function (_super) {
371
371
  this.parent.activeViewOptions.timeScale.interval;
372
372
  };
373
373
  VerticalView.prototype.getWorkCellHeight = function () {
374
- return parseFloat(this.element.querySelector('.' + cls.WORK_CELLS_CLASS).getBoundingClientRect().height.toFixed(2));
374
+ return parseFloat(util.getElementHeight(this.element.querySelector('.' + cls.WORK_CELLS_CLASS)).toFixed(2));
375
375
  };
376
376
  VerticalView.prototype.getTdContent = function (date, type, groupIndex) {
377
377
  var cntEle;
@@ -449,7 +449,7 @@ var ViewBase = /** @class */ (function () {
449
449
  if (this.isTimelineView()) {
450
450
  var colElements = this.getColElements();
451
451
  var contentBody = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS + ' tbody');
452
- var colWidth_1 = (contentBody.getBoundingClientRect().width / (colElements.length / 2));
452
+ var colWidth_1 = (util.getElementWidth(contentBody) / (colElements.length / 2));
453
453
  if (content.offsetHeight !== content.clientHeight) {
454
454
  var resourceColumn = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
455
455
  if (!isNullOrUndefined(resourceColumn)) {