@syncfusion/ej2-schedule 19.4.55 → 20.1.50

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 (77) hide show
  1. package/CHANGELOG.md +42 -9
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +165 -53
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +165 -53
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +15 -15
  12. package/src/recurrence-editor/date-generator.js +11 -1
  13. package/src/schedule/base/schedule.js +4 -0
  14. package/src/schedule/event-renderer/agenda-base.js +1 -1
  15. package/src/schedule/event-renderer/month.d.ts +1 -0
  16. package/src/schedule/event-renderer/month.js +37 -28
  17. package/src/schedule/event-renderer/timeline-view.js +2 -1
  18. package/src/schedule/event-renderer/year.js +3 -1
  19. package/src/schedule/exports/calendar-export.js +1 -1
  20. package/src/schedule/popups/event-window.js +4 -2
  21. package/src/schedule/renderer/month.d.ts +1 -0
  22. package/src/schedule/renderer/month.js +29 -12
  23. package/src/schedule/renderer/renderer.js +2 -1
  24. package/src/schedule/renderer/timeline-year.d.ts +2 -1
  25. package/src/schedule/renderer/timeline-year.js +49 -4
  26. package/src/schedule/renderer/vertical-view.js +2 -1
  27. package/src/schedule/renderer/year.js +20 -0
  28. package/styles/bootstrap-dark.css +10 -7
  29. package/styles/bootstrap.css +10 -7
  30. package/styles/bootstrap4.css +11 -8
  31. package/styles/bootstrap5-dark.css +20 -19
  32. package/styles/bootstrap5.css +20 -19
  33. package/styles/fabric-dark.css +10 -7
  34. package/styles/fabric.css +10 -7
  35. package/styles/fluent-dark.css +5102 -0
  36. package/styles/fluent-dark.scss +2 -0
  37. package/styles/fluent.css +5103 -0
  38. package/styles/fluent.scss +2 -0
  39. package/styles/highcontrast-light.css +10 -7
  40. package/styles/highcontrast.css +11 -8
  41. package/styles/material-dark.css +10 -7
  42. package/styles/material.css +10 -7
  43. package/styles/recurrence-editor/_fluent-dark-definition.scss +1 -0
  44. package/styles/recurrence-editor/fluent-dark.css +495 -0
  45. package/styles/recurrence-editor/fluent-dark.scss +3 -0
  46. package/styles/recurrence-editor/fluent.css +495 -0
  47. package/styles/recurrence-editor/fluent.scss +3 -0
  48. package/styles/schedule/_bootstrap4-definition.scss +1 -1
  49. package/styles/schedule/_bootstrap5-definition.scss +4 -4
  50. package/styles/schedule/_fluent-dark-definition.scss +1 -0
  51. package/styles/schedule/_fluent-definition.scss +10 -8
  52. package/styles/schedule/_highcontrast-definition.scss +1 -1
  53. package/styles/schedule/_layout.scss +55 -14
  54. package/styles/schedule/_tailwind-definition.scss +1 -0
  55. package/styles/schedule/_theme.scss +6 -9
  56. package/styles/schedule/bootstrap-dark.css +10 -7
  57. package/styles/schedule/bootstrap.css +10 -7
  58. package/styles/schedule/bootstrap4.css +11 -8
  59. package/styles/schedule/bootstrap5-dark.css +20 -19
  60. package/styles/schedule/bootstrap5.css +20 -19
  61. package/styles/schedule/fabric-dark.css +10 -7
  62. package/styles/schedule/fabric.css +10 -7
  63. package/styles/schedule/fluent-dark.css +4606 -0
  64. package/styles/schedule/fluent-dark.scss +4 -0
  65. package/styles/schedule/fluent.css +4607 -0
  66. package/styles/schedule/fluent.scss +5 -0
  67. package/styles/schedule/highcontrast-light.css +10 -7
  68. package/styles/schedule/highcontrast.css +11 -8
  69. package/styles/schedule/icons/_fluent-dark.scss +1 -0
  70. package/styles/schedule/icons/_fluent.scss +51 -50
  71. package/styles/schedule/icons/_tailwind.scss +51 -50
  72. package/styles/schedule/material-dark.css +10 -7
  73. package/styles/schedule/material.css +10 -7
  74. package/styles/schedule/tailwind-dark.css +65 -60
  75. package/styles/schedule/tailwind.css +65 -60
  76. package/styles/tailwind-dark.css +65 -60
  77. package/styles/tailwind.css +65 -60
@@ -3660,6 +3660,10 @@ function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, vi
3660
3660
  }
3661
3661
  maxOccurrence = maximumCount;
3662
3662
  setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);
3663
+ if (ruleObject.until) {
3664
+ var end = resetTime(ruleObject.until);
3665
+ ruleObject.until = new Date(end.getFullYear(), end.getMonth(), end.getDate(), 23, 59, 59);
3666
+ }
3663
3667
  switch (ruleObject.freq) {
3664
3668
  case 'DAILY':
3665
3669
  dailyType(modifiedDate, ruleObject.until, data, ruleObject);
@@ -3756,6 +3760,9 @@ function dailyType(startDate, endDate, data, ruleObject) {
3756
3760
  }
3757
3761
  }
3758
3762
  tempDate.setDate(tempDate.getDate() + interval);
3763
+ if (tempDate.getHours() !== startDate.getHours()) {
3764
+ tempDate.setHours(startDate.getHours());
3765
+ }
3759
3766
  }
3760
3767
  }
3761
3768
  /**
@@ -3800,6 +3807,9 @@ function weeklyType(startDate, endDate, data, ruleObject) {
3800
3807
  break;
3801
3808
  }
3802
3809
  tempDate.setDate(tempDate.getDate() + 1);
3810
+ if (tempDate.getHours() !== startDate.getHours()) {
3811
+ tempDate.setHours(startDate.getHours());
3812
+ }
3803
3813
  compareTempDate = new Date(tempDate.getTime());
3804
3814
  compareTempDate = resetTime(compareTempDate);
3805
3815
  }
@@ -4682,7 +4692,7 @@ function insertDateCollection(state, startDate, endDate, data, ruleObject, dayDa
4682
4692
  function weekCount(year, startDayOfWeek, monthCollection, week, ruleObject) {
4683
4693
  var firstDayOfWeek = startDayOfWeek || 0;
4684
4694
  var firstOfMonth = new Date(year, ruleObject.month[0] - 1, 1);
4685
- var lastOfMonth = new Date(year, ruleObject.month[0] - 1, 0);
4695
+ var lastOfMonth = new Date(year, ruleObject.month[0], 0);
4686
4696
  var numberOfDaysInMonth = lastOfMonth.getDate();
4687
4697
  var firstWeekDay = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;
4688
4698
  var used = firstWeekDay + numberOfDaysInMonth;
@@ -7262,7 +7272,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7262
7272
  appElement = (this.parent.currentView === 'Month') ? appElement : [appElement[0]];
7263
7273
  for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {
7264
7274
  var wrap = appElement_1[_i];
7265
- if (!wrap.classList.contains('e-more-indicator') && wrap.parentElement && wrap.parentElement.parentNode) {
7275
+ if (wrap.parentElement && wrap.parentElement.parentNode) {
7266
7276
  remove(wrap.parentElement);
7267
7277
  }
7268
7278
  }
@@ -7393,12 +7403,19 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7393
7403
  var filteredDates = this.getRenderedDates(dateRender);
7394
7404
  this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
7395
7405
  this.processBlockEvents(blockList, resIndex, resData);
7406
+ var events = [];
7396
7407
  for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {
7397
7408
  var event_1 = eventsList_1[_i];
7398
7409
  if (this.parent.resourceBase && !resData) {
7399
7410
  this.cssClass = this.parent.resourceBase.getCssClass(event_1);
7400
7411
  }
7401
- var spannedEvents = this.splitEvent(event_1, filteredDates || this.dateRender);
7412
+ events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));
7413
+ }
7414
+ for (var level = 0; level < this.slots.length; level++) {
7415
+ this.renderedEvents = [];
7416
+ var slot = this.slots[level];
7417
+ var endDate = addDays(new Date(slot[slot.length - 1]), 1);
7418
+ var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);
7402
7419
  for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {
7403
7420
  var event_2 = spannedEvents_1[_a];
7404
7421
  if (this.maxHeight) {
@@ -7703,21 +7720,17 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7703
7720
  if (day < 0) {
7704
7721
  return;
7705
7722
  }
7706
- if ((startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
7707
- return;
7708
- }
7709
7723
  var overlapCount = this.getIndex(startTime);
7710
7724
  event.Index = overlapCount;
7711
- var appHeight = this.eventHeight;
7712
- this.renderedEvents.push(extend({}, event, null, true));
7713
7725
  var diffInDays = event.data.count;
7714
7726
  if (startTime.getTime() <= endTime.getTime()) {
7715
7727
  var appWidth = (diffInDays * this.cellWidth) - 5;
7716
7728
  var cellTd = this.workCells[day];
7717
- var appTop = (overlapCount * (appHeight + EVENT_GAP));
7718
- var height = this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7729
+ var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));
7730
+ var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7719
7731
  var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;
7720
7732
  if (this.parent.rowAutoHeight || enableAppRender) {
7733
+ this.renderedEvents.push(extend({}, event, null, true));
7721
7734
  var appointmentElement = void 0;
7722
7735
  if (this.inlineValue) {
7723
7736
  appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();
@@ -7736,24 +7749,26 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7736
7749
  }
7737
7750
  else {
7738
7751
  for (var i = 0; i < diffInDays; i++) {
7739
- var cellTd_1 = this.workCells[day + i];
7740
- if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + MORE_INDICATOR_CLASS))) {
7741
- var startDate = new Date(this.dateRender[day + i].getTime());
7742
- var endDate = addDays(this.dateRender[day + i], 1);
7743
- var groupIndex = cellTd_1.getAttribute('data-group-index');
7744
- var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);
7745
- var appArea = this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight;
7746
- appHeight = this.withIndicator ? appArea : appHeight;
7747
- var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));
7748
- var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);
7749
- var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);
7750
- if (!isNullOrUndefined(groupIndex)) {
7751
- moreIndicatorElement.setAttribute('data-group-index', groupIndex);
7752
+ if (this.workCells[day + i]) {
7753
+ var indicator = this.workCells[day + i].querySelector('.' + MORE_INDICATOR_CLASS);
7754
+ if (indicator) {
7755
+ var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;
7756
+ indicator.setAttribute('data-count', count.toString());
7757
+ indicator.innerHTML = this.getMoreIndicatorText(count);
7758
+ }
7759
+ else {
7760
+ var startDate = new Date(this.dateRender[day + i].getTime());
7761
+ var endDate = addDays(this.dateRender[day + i], 1);
7762
+ var groupIndex = this.workCells[day + i].getAttribute('data-group-index');
7763
+ var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);
7764
+ if (!isNullOrUndefined(groupIndex)) {
7765
+ moreIndicatorElement.setAttribute('data-group-index', groupIndex);
7766
+ }
7767
+ moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';
7768
+ moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
7769
+ this.renderElement(this.workCells[day + i], moreIndicatorElement);
7770
+ EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
7752
7771
  }
7753
- moreIndicatorElement.style.top = appArea + 'px';
7754
- moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
7755
- this.renderElement(cellTd_1, moreIndicatorElement);
7756
- EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
7757
7772
  }
7758
7773
  }
7759
7774
  }
@@ -7790,9 +7805,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7790
7805
  };
7791
7806
  MonthEvent.prototype.getOverlapEvents = function (date, appointments) {
7792
7807
  var appointmentsList = [];
7808
+ var dateTime = resetTime(date).getTime();
7793
7809
  for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {
7794
7810
  var app = appointments_1[_i];
7795
- var dateTime = resetTime(date).getTime();
7796
7811
  if ((resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&
7797
7812
  (resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {
7798
7813
  appointmentsList.push(app);
@@ -7876,9 +7891,10 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7876
7891
  MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {
7877
7892
  var moreIndicatorElement = createElement('div', {
7878
7893
  className: MORE_INDICATOR_CLASS,
7879
- innerHTML: '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
7894
+ innerHTML: this.getMoreIndicatorText(count),
7880
7895
  attrs: {
7881
7896
  'tabindex': '0',
7897
+ 'data-count': count.toString(),
7882
7898
  'data-start-date': startDate.getTime().toString(),
7883
7899
  'data-end-date': endDate.getTime().toString(),
7884
7900
  'role': 'list'
@@ -7886,6 +7902,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7886
7902
  });
7887
7903
  return moreIndicatorElement;
7888
7904
  };
7905
+ MonthEvent.prototype.getMoreIndicatorText = function (count) {
7906
+ return '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));
7907
+ };
7889
7908
  MonthEvent.prototype.removeHeightProperty = function (selector) {
7890
7909
  var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));
7891
7910
  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
@@ -8185,7 +8204,8 @@ var TimelineEvent = /** @__PURE__ @class */ (function (_super) {
8185
8204
  }
8186
8205
  };
8187
8206
  TimelineEvent.prototype.updateCellHeight = function (cell, height) {
8188
- if ((height > this.cellHeight)) {
8207
+ var cellHeight = cell.style.height === '' ? this.cellHeight : parseInt(cell.style.height, 10);
8208
+ if (height > cellHeight) {
8189
8209
  setStyleAttribute(cell, { 'height': height + 'px' });
8190
8210
  if (this.parent.activeViewOptions.group.resources.length > 0) {
8191
8211
  var resourceCell = this.parent.element.querySelector('.' + RESOURCE_COLUMN_TABLE_CLASS + ' ' + 'tbody td[data-group-index="' +
@@ -12007,7 +12027,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12007
12027
  return labelText;
12008
12028
  };
12009
12029
  EventWindow.prototype.onChange = function (args) {
12010
- var target = args.event.currentTarget.querySelector('input');
12030
+ var targetSelector = "." + EVENT_WINDOW_ALL_DAY_CLASS + ",." + TIME_ZONE_CLASS + ",." + EVENT_WINDOW_REPEAT_CLASS;
12031
+ var target = closest(args.event.target, targetSelector);
12011
12032
  if (target.classList.contains(EVENT_WINDOW_ALL_DAY_CLASS)) {
12012
12033
  this.onAllDayChange(args.checked);
12013
12034
  }
@@ -12173,7 +12194,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12173
12194
  };
12174
12195
  EventWindow.prototype.showDetails = function (eventData) {
12175
12196
  var eventObj = extend({}, eventData, null, true);
12176
- if (eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12197
+ if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&
12198
+ eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12177
12199
  this.trimAllDay(eventObj);
12178
12200
  }
12179
12201
  this.eventData = eventObj;
@@ -13488,7 +13510,8 @@ var Render = /** @__PURE__ @class */ (function () {
13488
13510
  this.parent.virtualScrollModule.destroy();
13489
13511
  this.parent.virtualScrollModule = null;
13490
13512
  }
13491
- if (this.parent.currentView.indexOf('Timeline') !== -1 && this.parent.currentView.indexOf('Year') === -1
13513
+ if (this.parent.currentView.indexOf('Timeline') !== -1 && (this.parent.currentView.indexOf('Year') === -1 ||
13514
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))
13492
13515
  && this.parent.activeViewOptions.allowVirtualScrolling
13493
13516
  && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
13494
13517
  this.parent.virtualScrollModule = new VirtualScroll(this.parent);
@@ -16324,6 +16347,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16324
16347
  };
16325
16348
  _this.trigger(navigating, navArgs, function (navigationArgs) {
16326
16349
  if (!navigationArgs.cancel) {
16350
+ _this.uiStateValues.isInitial = ['TimelineMonth', 'TimelineYear', 'Year'].indexOf(view) > -1 ? true : _this.uiStateValues.isInitial;
16327
16351
  _this.viewIndex = navigationArgs.viewIndex;
16328
16352
  _this.setProperties({ currentView: view }, true);
16329
16353
  if (_this.headerModule) {
@@ -16948,6 +16972,9 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16948
16972
  if (document.querySelectorAll(template).length) {
16949
16973
  return compile(document.querySelector(template).innerHTML.trim());
16950
16974
  }
16975
+ else {
16976
+ return compile(template);
16977
+ }
16951
16978
  }
16952
16979
  catch (error) {
16953
16980
  return compile(template);
@@ -19833,7 +19860,9 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19833
19860
  this.eventHeight = getElementHeightFromClass(eventTable, APPOINTMENT_CLASS);
19834
19861
  var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CONTAINER_CLASS));
19835
19862
  var resources = this.parent.uiStateValues.isGroupAdaptive ?
19836
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] : this.parent.resourceBase.lastResourceLevel;
19863
+ [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
19864
+ this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
19865
+ this.parent.resourceBase.lastResourceLevel;
19837
19866
  var months = this.getMonths();
19838
19867
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
19839
19868
  for (var month = 0; month < months.length; month++) {
@@ -22684,8 +22713,9 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22684
22713
  var msStartHour = startHour.getTime();
22685
22714
  var msEndHour = endHour.getTime();
22686
22715
  if (msStartHour !== msEndHour) {
22716
+ var duration = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;
22687
22717
  length = (Math.abs(msEndHour - msStartHour) / msInterval) - ((new Date(msEndHour).getTimezoneOffset()
22688
- - new Date(msStartHour).getTimezoneOffset()) / (60 / this.parent.activeViewOptions.timeScale.slotCount));
22718
+ - new Date(msStartHour).getTimezoneOffset()) / duration);
22689
22719
  }
22690
22720
  if (!this.parent.activeViewOptions.timeScale.enable) {
22691
22721
  length = 1;
@@ -22924,6 +22954,8 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22924
22954
  this.parent.notify(virtualScroll, e);
22925
22955
  this.scrollTopPanel(e.target);
22926
22956
  this.scrollLeftPanel(e.target);
22957
+ this.parent.uiStateValues.top = e.target.scrollTop;
22958
+ this.parent.uiStateValues.left = e.target.scrollLeft;
22927
22959
  this.setPersistence();
22928
22960
  };
22929
22961
  Month.prototype.scrollLeftPanel = function (target) {
@@ -22956,26 +22988,41 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22956
22988
  header.style[args.cssProperties.padding] = '';
22957
22989
  }
22958
22990
  this.setColWidth(content);
22959
- if (args.scrollPosition) {
22991
+ if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
22992
+ var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
22960
22993
  if (leftPanel) {
22961
- leftPanel.scrollTop = args.scrollPosition.top;
22994
+ leftPanel.scrollTop = top_1;
22962
22995
  }
22963
- content.scrollTop = args.scrollPosition.top;
22964
- content.scrollLeft = args.scrollPosition.left;
22965
- }
22966
- else {
22967
- var headerCell = this.element.querySelector('.' + HEADER_CELLS_CLASS + '[data-date="'
22968
- + this.parent.selectedDate.getTime().toString() + '"]');
22969
- if (!isNullOrUndefined(headerCell)) {
22970
- content.scrollLeft = !this.parent.enableRtl ?
22971
- headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
22996
+ content.scrollTop = top_1;
22997
+ if (this.parent.uiStateValues.isInitial) {
22998
+ this.scrollToSelectedDate();
22999
+ this.parent.uiStateValues.isInitial = false;
22972
23000
  }
22973
23001
  else {
22974
- content.scrollLeft = 0;
23002
+ content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
23003
+ args.scrollPosition.left;
22975
23004
  }
22976
23005
  }
23006
+ else {
23007
+ this.scrollToSelectedDate();
23008
+ }
22977
23009
  this.retainScrollPosition();
22978
23010
  };
23011
+ Month.prototype.scrollToSelectedDate = function () {
23012
+ var headerCell = this.element.querySelector('.' + HEADER_CELLS_CLASS + '[data-date="'
23013
+ + this.parent.selectedDate.getTime().toString() + '"]');
23014
+ var content = this.getContentAreaElement();
23015
+ if (!isNullOrUndefined(headerCell)) {
23016
+ content.scrollLeft = !this.parent.enableRtl ?
23017
+ headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
23018
+ }
23019
+ else {
23020
+ content.scrollLeft = 0;
23021
+ }
23022
+ if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
23023
+ this.parent.uiStateValues.left = 0;
23024
+ }
23025
+ };
22979
23026
  Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
22980
23027
  content.style.height = 'auto';
22981
23028
  if (this.parent.currentView === 'Month') {
@@ -23549,6 +23596,9 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23549
23596
  var viewTypeClass = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
23550
23597
  addClass([this.element], [this.viewClass, viewTypeClass, className]);
23551
23598
  this.renderPanel(className);
23599
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
23600
+ addClass([this.element], [VIRTUAL_SCROLL_CLASS]);
23601
+ }
23552
23602
  var calendarTable = this.createTableLayout(OUTER_TABLE_CLASS);
23553
23603
  this.element.appendChild(calendarTable);
23554
23604
  this.element.querySelector('table').setAttribute('role', 'presentation');
@@ -23769,6 +23819,7 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23769
23819
  Year.prototype.onContentScroll = function (e) {
23770
23820
  var target = e.target;
23771
23821
  var headerWrapper = this.getDatesHeaderElement();
23822
+ this.parent.notify(virtualScroll, e);
23772
23823
  if (headerWrapper) {
23773
23824
  headerWrapper.firstElementChild.scrollLeft = target.scrollLeft;
23774
23825
  }
@@ -23777,6 +23828,10 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23777
23828
  if (scrollTopElement) {
23778
23829
  scrollTopElement.scrollTop = target.scrollTop;
23779
23830
  }
23831
+ if (!this.parent.isAdaptive) {
23832
+ this.parent.uiStateValues.top = e.target.scrollTop;
23833
+ }
23834
+ this.parent.uiStateValues.left = e.target.scrollLeft;
23780
23835
  this.setPersistence();
23781
23836
  };
23782
23837
  Year.prototype.onScrollUiUpdate = function (args) {
@@ -23807,6 +23862,18 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23807
23862
  var isYScroll = contentWrapper.scrollWidth > contentWrapper.clientWidth;
23808
23863
  leftPanelElement.style.height = formatUnit(height - (isYScroll ? 17 : 0));
23809
23864
  }
23865
+ if (!args.isPreventScrollUpdate) {
23866
+ if (this.parent.uiStateValues.isInitial) {
23867
+ this.parent.uiStateValues.isInitial = false;
23868
+ }
23869
+ else {
23870
+ if (leftPanelElement) {
23871
+ leftPanelElement.scrollTop = this.parent.uiStateValues.top;
23872
+ }
23873
+ contentWrapper.scrollTop = this.parent.uiStateValues.top;
23874
+ contentWrapper.scrollLeft = this.parent.uiStateValues.left;
23875
+ }
23876
+ }
23810
23877
  this.retainScrollPosition();
23811
23878
  };
23812
23879
  Year.prototype.getStartDate = function () {
@@ -23925,7 +23992,7 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
23925
23992
  moduleName: 'agenda',
23926
23993
  listClass: this.parent.activeView.viewClass,
23927
23994
  itemClass: this.parent.activeView.viewClass,
23928
- template: '<div class=' + AGENDA_NO_EVENT_CLASS + '>${subject}</div>'
23995
+ template: "<div class=\"" + AGENDA_NO_EVENT_CLASS + "\">" + this.parent.localeObj.getConstant('noEvents') + "</div>"
23929
23996
  });
23930
23997
  }
23931
23998
  else {
@@ -25577,7 +25644,7 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25577
25644
  !this.parent.uiStateValues.isGroupAdaptive) {
25578
25645
  tdCollection.push(firstTd);
25579
25646
  firstTd.appendChild(this.parent.resourceBase.createResourceColumn());
25580
- this.rowCount = this.parent.resourceBase.lastResourceLevel.length;
25647
+ this.rowCount = this.parent.resourceBase.renderedResources.length;
25581
25648
  }
25582
25649
  else {
25583
25650
  tdCollection.push(firstTd);
@@ -25594,6 +25661,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25594
25661
  content.appendChild(contentTable);
25595
25662
  var eventWrapper = createElement('div', { className: EVENT_TABLE_CLASS });
25596
25663
  content.appendChild(eventWrapper);
25664
+ if (this.parent.virtualScrollModule) {
25665
+ this.parent.virtualScrollModule.renderVirtualTrack(content);
25666
+ }
25597
25667
  var contentTBody = contentTable.querySelector('tbody');
25598
25668
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25599
25669
  if (this.parent.rowAutoHeight) {
@@ -25711,6 +25781,47 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25711
25781
  }
25712
25782
  }
25713
25783
  };
25784
+ TimelineYear.prototype.getContentRows = function () {
25785
+ var tRow = [];
25786
+ var monthCells = this.getMonths();
25787
+ for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
25788
+ var tr = createElement('tr', { attrs: { 'role': 'row' } });
25789
+ tRow.push(tr);
25790
+ var resData = void 0;
25791
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25792
+ resData = this.parent.resourceBase.renderedResources[row];
25793
+ }
25794
+ var monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[row], 1);
25795
+ var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25796
+ for (var month = 0; month < this.columnCount; month++) {
25797
+ var classList$$1 = [];
25798
+ var groupIndex = resData.groupIndex;
25799
+ classList$$1 = classList$$1.concat(resData.className);
25800
+ if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25801
+ classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
25802
+ }
25803
+ else {
25804
+ classList$$1.push(WORKDAY_CLASS);
25805
+ }
25806
+ monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[month], 1);
25807
+ date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25808
+ var tdELe = createElement('td', {
25809
+ className: WORK_CELLS_CLASS,
25810
+ attrs: {
25811
+ 'role': 'gridcell', 'aria-selected': 'false',
25812
+ 'data-date': date.getTime().toString()
25813
+ }
25814
+ });
25815
+ addClass([tdELe], classList$$1);
25816
+ tdELe.setAttribute('data-group-index', groupIndex.toString());
25817
+ this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
25818
+ this.wireEvents(tdELe, 'cell');
25819
+ this.parent.trigger(renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
25820
+ tr.appendChild(tdELe);
25821
+ }
25822
+ }
25823
+ return tRow;
25824
+ };
25714
25825
  TimelineYear.prototype.renderResourceContent = function (wrapper, monthBody, contentBody) {
25715
25826
  var months = this.getMonths();
25716
25827
  for (var row = 0; row < this.rowCount; row++) {
@@ -25718,8 +25829,8 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25718
25829
  var tr = createElement('tr', { attrs: { 'role': 'row' } });
25719
25830
  contentBody.appendChild(tr);
25720
25831
  var resData = void 0;
25721
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25722
- resData = this.parent.resourceBase.lastResourceLevel[row];
25832
+ if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25833
+ resData = this.parent.resourceBase.renderedResources[row];
25723
25834
  }
25724
25835
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[row], 1);
25725
25836
  var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
@@ -25740,8 +25851,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25740
25851
  }
25741
25852
  for (var month = 0; month < this.columnCount; month++) {
25742
25853
  var classList$$1 = [];
25743
- var groupIndex = row;
25854
+ var groupIndex = void 0;
25744
25855
  if (this.parent.activeViewOptions.orientation === 'Vertical') {
25856
+ groupIndex = resData.groupIndex;
25745
25857
  classList$$1 = classList$$1.concat(resData.className);
25746
25858
  if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25747
25859
  classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
@@ -25845,7 +25957,7 @@ var ICalendarExport = /** @__PURE__ @class */ (function () {
25845
25957
  var editedExDate = [];
25846
25958
  if (eventObj[fields.recurrenceID]) {
25847
25959
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
25848
- uId = filter[0].UID;
25960
+ uId = filter.length > 0 ? filter[0].UID : uId;
25849
25961
  }
25850
25962
  if (!eventObj[fields.recurrenceID] && eventObj[fields.recurrenceRule] && eventObj[fields.recurrenceException]) {
25851
25963
  var exDate = (eventObj[fields.recurrenceException]).split(',');