@syncfusion/ej2-schedule 20.1.52 → 20.1.55

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 (72) hide show
  1. package/CHANGELOG.md +46 -11
  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 +133 -46
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +133 -46
  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/event-base.js +3 -0
  16. package/src/schedule/event-renderer/month.d.ts +1 -0
  17. package/src/schedule/event-renderer/month.js +38 -29
  18. package/src/schedule/event-renderer/vertical-view.js +3 -0
  19. package/src/schedule/event-renderer/year.js +3 -1
  20. package/src/schedule/exports/calendar-export.js +1 -1
  21. package/src/schedule/popups/event-window.js +4 -2
  22. package/src/schedule/renderer/month.js +8 -5
  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 +4 -0
  28. package/styles/bootstrap-dark.css +83 -968
  29. package/styles/bootstrap.css +83 -967
  30. package/styles/bootstrap4.css +83 -990
  31. package/styles/bootstrap5-dark.css +83 -988
  32. package/styles/bootstrap5.css +83 -988
  33. package/styles/fabric-dark.css +83 -968
  34. package/styles/fabric.css +83 -970
  35. package/styles/fluent-dark.css +83 -968
  36. package/styles/fluent.css +83 -968
  37. package/styles/highcontrast-light.css +83 -967
  38. package/styles/highcontrast.css +83 -972
  39. package/styles/material-dark.css +83 -967
  40. package/styles/material.css +83 -967
  41. package/styles/recurrence-editor/bootstrap-dark.css +6 -94
  42. package/styles/recurrence-editor/bootstrap.css +6 -94
  43. package/styles/recurrence-editor/bootstrap4.css +6 -94
  44. package/styles/recurrence-editor/bootstrap5-dark.css +6 -94
  45. package/styles/recurrence-editor/bootstrap5.css +6 -94
  46. package/styles/recurrence-editor/fabric-dark.css +6 -94
  47. package/styles/recurrence-editor/fabric.css +6 -94
  48. package/styles/recurrence-editor/fluent-dark.css +6 -94
  49. package/styles/recurrence-editor/fluent.css +6 -94
  50. package/styles/recurrence-editor/highcontrast-light.css +6 -94
  51. package/styles/recurrence-editor/highcontrast.css +6 -94
  52. package/styles/recurrence-editor/material-dark.css +6 -94
  53. package/styles/recurrence-editor/material.css +6 -94
  54. package/styles/recurrence-editor/tailwind-dark.css +6 -94
  55. package/styles/recurrence-editor/tailwind.css +6 -94
  56. package/styles/schedule/bootstrap-dark.css +78 -875
  57. package/styles/schedule/bootstrap.css +78 -874
  58. package/styles/schedule/bootstrap4.css +78 -897
  59. package/styles/schedule/bootstrap5-dark.css +78 -895
  60. package/styles/schedule/bootstrap5.css +78 -895
  61. package/styles/schedule/fabric-dark.css +78 -875
  62. package/styles/schedule/fabric.css +78 -877
  63. package/styles/schedule/fluent-dark.css +78 -875
  64. package/styles/schedule/fluent.css +78 -875
  65. package/styles/schedule/highcontrast-light.css +78 -874
  66. package/styles/schedule/highcontrast.css +78 -879
  67. package/styles/schedule/material-dark.css +78 -874
  68. package/styles/schedule/material.css +78 -874
  69. package/styles/schedule/tailwind-dark.css +78 -895
  70. package/styles/schedule/tailwind.css +78 -895
  71. package/styles/tailwind-dark.css +83 -988
  72. package/styles/tailwind.css +83 -988
@@ -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;
@@ -5672,6 +5682,9 @@ var EventBase = /** @__PURE__ @class */ (function () {
5672
5682
  this.parent.removeSelectedClass();
5673
5683
  }
5674
5684
  addClass(cells, APPOINTMENT_BORDER);
5685
+ if (cells.length > 0) {
5686
+ cells[cells.length - 1].focus();
5687
+ }
5675
5688
  };
5676
5689
  EventBase.prototype.getSelectedAppointments = function () {
5677
5690
  return [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_BORDER + ',.' + APPOINTMENT_CLASS + ':focus'));
@@ -6910,6 +6923,9 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6910
6923
  var currentDate = resetTime(new Date(this.dateRender[resource][dayIndex].getTime()));
6911
6924
  var schedule = getStartEndHours(currentDate, this.startHour, this.endHour);
6912
6925
  var isValidEvent = this.isValidEvent(eventObj, eStart, eEnd, schedule);
6926
+ if ((eStart.getTime() < this.parent.minDate.getTime()) || (eEnd.getTime() > this.parent.maxDate.getTime())) {
6927
+ return;
6928
+ }
6913
6929
  if (eStart <= eEnd && isValidEvent) {
6914
6930
  var appHeight_1 = this.getHeight(eStart, eEnd);
6915
6931
  if (eStart.getTime() > schedule.startHour.getTime()) {
@@ -7262,7 +7278,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7262
7278
  appElement = (this.parent.currentView === 'Month') ? appElement : [appElement[0]];
7263
7279
  for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {
7264
7280
  var wrap = appElement_1[_i];
7265
- if (!wrap.classList.contains('e-more-indicator') && wrap.parentElement && wrap.parentElement.parentNode) {
7281
+ if (wrap.parentElement && wrap.parentElement.parentNode) {
7266
7282
  remove(wrap.parentElement);
7267
7283
  }
7268
7284
  }
@@ -7393,12 +7409,19 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7393
7409
  var filteredDates = this.getRenderedDates(dateRender);
7394
7410
  this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
7395
7411
  this.processBlockEvents(blockList, resIndex, resData);
7412
+ var events = [];
7396
7413
  for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {
7397
7414
  var event_1 = eventsList_1[_i];
7398
7415
  if (this.parent.resourceBase && !resData) {
7399
7416
  this.cssClass = this.parent.resourceBase.getCssClass(event_1);
7400
7417
  }
7401
- var spannedEvents = this.splitEvent(event_1, filteredDates || this.dateRender);
7418
+ events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));
7419
+ }
7420
+ for (var level = 0; level < this.slots.length; level++) {
7421
+ this.renderedEvents = [];
7422
+ var slot = this.slots[level];
7423
+ var endDate = addDays(new Date(slot[slot.length - 1]), 1);
7424
+ var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);
7402
7425
  for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {
7403
7426
  var event_2 = spannedEvents_1[_a];
7404
7427
  if (this.maxHeight) {
@@ -7700,24 +7723,20 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7700
7723
  var startTime = event[this.fields.startTime];
7701
7724
  var endTime = event[this.fields.endTime];
7702
7725
  var day = this.parent.getIndexOfDate(this.dateRender, resetTime(startTime));
7703
- if (day < 0) {
7704
- return;
7705
- }
7706
- if ((startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
7726
+ if ((day < 0) || (startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
7707
7727
  return;
7708
7728
  }
7709
7729
  var overlapCount = this.getIndex(startTime);
7710
7730
  event.Index = overlapCount;
7711
- var appHeight = this.eventHeight;
7712
- this.renderedEvents.push(extend({}, event, null, true));
7713
7731
  var diffInDays = event.data.count;
7714
7732
  if (startTime.getTime() <= endTime.getTime()) {
7715
7733
  var appWidth = (diffInDays * this.cellWidth) - 5;
7716
7734
  var cellTd = this.workCells[day];
7717
- var appTop = (overlapCount * (appHeight + EVENT_GAP));
7718
- var height = this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7735
+ var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));
7736
+ var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7719
7737
  var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;
7720
7738
  if (this.parent.rowAutoHeight || enableAppRender) {
7739
+ this.renderedEvents.push(extend({}, event, null, true));
7721
7740
  var appointmentElement = void 0;
7722
7741
  if (this.inlineValue) {
7723
7742
  appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();
@@ -7736,24 +7755,26 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7736
7755
  }
7737
7756
  else {
7738
7757
  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);
7758
+ if (this.workCells[day + i]) {
7759
+ var indicator = this.workCells[day + i].querySelector('.' + MORE_INDICATOR_CLASS);
7760
+ if (indicator) {
7761
+ var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;
7762
+ indicator.setAttribute('data-count', count.toString());
7763
+ indicator.innerHTML = this.getMoreIndicatorText(count);
7764
+ }
7765
+ else {
7766
+ var startDate = new Date(this.dateRender[day + i].getTime());
7767
+ var endDate = addDays(this.dateRender[day + i], 1);
7768
+ var groupIndex = this.workCells[day + i].getAttribute('data-group-index');
7769
+ var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);
7770
+ if (!isNullOrUndefined(groupIndex)) {
7771
+ moreIndicatorElement.setAttribute('data-group-index', groupIndex);
7772
+ }
7773
+ moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';
7774
+ moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
7775
+ this.renderElement(this.workCells[day + i], moreIndicatorElement);
7776
+ EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
7752
7777
  }
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
7778
  }
7758
7779
  }
7759
7780
  }
@@ -7790,9 +7811,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7790
7811
  };
7791
7812
  MonthEvent.prototype.getOverlapEvents = function (date, appointments) {
7792
7813
  var appointmentsList = [];
7814
+ var dateTime = resetTime(date).getTime();
7793
7815
  for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {
7794
7816
  var app = appointments_1[_i];
7795
- var dateTime = resetTime(date).getTime();
7796
7817
  if ((resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&
7797
7818
  (resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {
7798
7819
  appointmentsList.push(app);
@@ -7876,9 +7897,10 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7876
7897
  MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {
7877
7898
  var moreIndicatorElement = createElement('div', {
7878
7899
  className: MORE_INDICATOR_CLASS,
7879
- innerHTML: '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
7900
+ innerHTML: this.getMoreIndicatorText(count),
7880
7901
  attrs: {
7881
7902
  'tabindex': '0',
7903
+ 'data-count': count.toString(),
7882
7904
  'data-start-date': startDate.getTime().toString(),
7883
7905
  'data-end-date': endDate.getTime().toString(),
7884
7906
  'role': 'list'
@@ -7886,6 +7908,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7886
7908
  });
7887
7909
  return moreIndicatorElement;
7888
7910
  };
7911
+ MonthEvent.prototype.getMoreIndicatorText = function (count) {
7912
+ return '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));
7913
+ };
7889
7914
  MonthEvent.prototype.removeHeightProperty = function (selector) {
7890
7915
  var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));
7891
7916
  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
@@ -12008,7 +12033,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12008
12033
  return labelText;
12009
12034
  };
12010
12035
  EventWindow.prototype.onChange = function (args) {
12011
- var target = args.event.currentTarget.querySelector('input');
12036
+ var targetSelector = "." + EVENT_WINDOW_ALL_DAY_CLASS + ",." + TIME_ZONE_CLASS + ",." + EVENT_WINDOW_REPEAT_CLASS;
12037
+ var target = closest(args.event.target, targetSelector);
12012
12038
  if (target.classList.contains(EVENT_WINDOW_ALL_DAY_CLASS)) {
12013
12039
  this.onAllDayChange(args.checked);
12014
12040
  }
@@ -12174,7 +12200,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12174
12200
  };
12175
12201
  EventWindow.prototype.showDetails = function (eventData) {
12176
12202
  var eventObj = extend({}, eventData, null, true);
12177
- if (eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12203
+ if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&
12204
+ eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12178
12205
  this.trimAllDay(eventObj);
12179
12206
  }
12180
12207
  this.eventData = eventObj;
@@ -13489,7 +13516,8 @@ var Render = /** @__PURE__ @class */ (function () {
13489
13516
  this.parent.virtualScrollModule.destroy();
13490
13517
  this.parent.virtualScrollModule = null;
13491
13518
  }
13492
- if (this.parent.currentView.indexOf('Timeline') !== -1 && this.parent.currentView.indexOf('Year') === -1
13519
+ if (this.parent.currentView.indexOf('Timeline') !== -1 && (this.parent.currentView.indexOf('Year') === -1 ||
13520
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))
13493
13521
  && this.parent.activeViewOptions.allowVirtualScrolling
13494
13522
  && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
13495
13523
  this.parent.virtualScrollModule = new VirtualScroll(this.parent);
@@ -16325,6 +16353,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16325
16353
  };
16326
16354
  _this.trigger(navigating, navArgs, function (navigationArgs) {
16327
16355
  if (!navigationArgs.cancel) {
16356
+ _this.uiStateValues.isInitial = view.indexOf('Timeline') > -1 || _this.currentView.indexOf('Timeline') > -1 ? true : _this.uiStateValues.isInitial;
16328
16357
  _this.viewIndex = navigationArgs.viewIndex;
16329
16358
  _this.setProperties({ currentView: view }, true);
16330
16359
  if (_this.headerModule) {
@@ -16949,6 +16978,9 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16949
16978
  if (document.querySelectorAll(template).length) {
16950
16979
  return compile(document.querySelector(template).innerHTML.trim());
16951
16980
  }
16981
+ else {
16982
+ return compile(template);
16983
+ }
16952
16984
  }
16953
16985
  catch (error) {
16954
16986
  return compile(template);
@@ -19834,7 +19866,9 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19834
19866
  this.eventHeight = getElementHeightFromClass(eventTable, APPOINTMENT_CLASS);
19835
19867
  var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CONTAINER_CLASS));
19836
19868
  var resources = this.parent.uiStateValues.isGroupAdaptive ?
19837
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] : this.parent.resourceBase.lastResourceLevel;
19869
+ [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
19870
+ this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
19871
+ this.parent.resourceBase.lastResourceLevel;
19838
19872
  var months = this.getMonths();
19839
19873
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
19840
19874
  for (var month = 0; month < months.length; month++) {
@@ -22685,8 +22719,9 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22685
22719
  var msStartHour = startHour.getTime();
22686
22720
  var msEndHour = endHour.getTime();
22687
22721
  if (msStartHour !== msEndHour) {
22722
+ var duration = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;
22688
22723
  length = (Math.abs(msEndHour - msStartHour) / msInterval) - ((new Date(msEndHour).getTimezoneOffset()
22689
- - new Date(msStartHour).getTimezoneOffset()) / (60 / this.parent.activeViewOptions.timeScale.slotCount));
22724
+ - new Date(msStartHour).getTimezoneOffset()) / duration);
22690
22725
  }
22691
22726
  if (!this.parent.activeViewOptions.timeScale.enable) {
22692
22727
  length = 1;
@@ -22960,16 +22995,16 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22960
22995
  }
22961
22996
  this.setColWidth(content);
22962
22997
  if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
22998
+ var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
22999
+ if (leftPanel) {
23000
+ leftPanel.scrollTop = top_1;
23001
+ }
23002
+ content.scrollTop = top_1;
22963
23003
  if (this.parent.uiStateValues.isInitial) {
22964
23004
  this.scrollToSelectedDate();
22965
23005
  this.parent.uiStateValues.isInitial = false;
22966
23006
  }
22967
23007
  else {
22968
- var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
22969
- if (leftPanel) {
22970
- leftPanel.scrollTop = top_1;
22971
- }
22972
- content.scrollTop = top_1;
22973
23008
  content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
22974
23009
  args.scrollPosition.left;
22975
23010
  }
@@ -22990,6 +23025,9 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22990
23025
  else {
22991
23026
  content.scrollLeft = 0;
22992
23027
  }
23028
+ if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
23029
+ this.parent.uiStateValues.left = 0;
23030
+ }
22993
23031
  };
22994
23032
  Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
22995
23033
  content.style.height = 'auto';
@@ -23564,6 +23602,9 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23564
23602
  var viewTypeClass = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
23565
23603
  addClass([this.element], [this.viewClass, viewTypeClass, className]);
23566
23604
  this.renderPanel(className);
23605
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
23606
+ addClass([this.element], [VIRTUAL_SCROLL_CLASS]);
23607
+ }
23567
23608
  var calendarTable = this.createTableLayout(OUTER_TABLE_CLASS);
23568
23609
  this.element.appendChild(calendarTable);
23569
23610
  this.element.querySelector('table').setAttribute('role', 'presentation');
@@ -23784,6 +23825,7 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23784
23825
  Year.prototype.onContentScroll = function (e) {
23785
23826
  var target = e.target;
23786
23827
  var headerWrapper = this.getDatesHeaderElement();
23828
+ this.parent.notify(virtualScroll, e);
23787
23829
  if (headerWrapper) {
23788
23830
  headerWrapper.firstElementChild.scrollLeft = target.scrollLeft;
23789
23831
  }
@@ -23956,7 +23998,7 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
23956
23998
  moduleName: 'agenda',
23957
23999
  listClass: this.parent.activeView.viewClass,
23958
24000
  itemClass: this.parent.activeView.viewClass,
23959
- template: '<div class=' + AGENDA_NO_EVENT_CLASS + '>${subject}</div>'
24001
+ template: "<div class=\"" + AGENDA_NO_EVENT_CLASS + "\">" + this.parent.localeObj.getConstant('noEvents') + "</div>"
23960
24002
  });
23961
24003
  }
23962
24004
  else {
@@ -25608,7 +25650,7 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25608
25650
  !this.parent.uiStateValues.isGroupAdaptive) {
25609
25651
  tdCollection.push(firstTd);
25610
25652
  firstTd.appendChild(this.parent.resourceBase.createResourceColumn());
25611
- this.rowCount = this.parent.resourceBase.lastResourceLevel.length;
25653
+ this.rowCount = this.parent.resourceBase.renderedResources.length;
25612
25654
  }
25613
25655
  else {
25614
25656
  tdCollection.push(firstTd);
@@ -25625,6 +25667,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25625
25667
  content.appendChild(contentTable);
25626
25668
  var eventWrapper = createElement('div', { className: EVENT_TABLE_CLASS });
25627
25669
  content.appendChild(eventWrapper);
25670
+ if (this.parent.virtualScrollModule) {
25671
+ this.parent.virtualScrollModule.renderVirtualTrack(content);
25672
+ }
25628
25673
  var contentTBody = contentTable.querySelector('tbody');
25629
25674
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25630
25675
  if (this.parent.rowAutoHeight) {
@@ -25742,6 +25787,47 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25742
25787
  }
25743
25788
  }
25744
25789
  };
25790
+ TimelineYear.prototype.getContentRows = function () {
25791
+ var tRow = [];
25792
+ var monthCells = this.getMonths();
25793
+ for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
25794
+ var tr = createElement('tr', { attrs: { 'role': 'row' } });
25795
+ tRow.push(tr);
25796
+ var resData = void 0;
25797
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25798
+ resData = this.parent.resourceBase.renderedResources[row];
25799
+ }
25800
+ var monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[row], 1);
25801
+ var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25802
+ for (var month = 0; month < this.columnCount; month++) {
25803
+ var classList$$1 = [];
25804
+ var groupIndex = resData.groupIndex;
25805
+ classList$$1 = classList$$1.concat(resData.className);
25806
+ if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25807
+ classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
25808
+ }
25809
+ else {
25810
+ classList$$1.push(WORKDAY_CLASS);
25811
+ }
25812
+ monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[month], 1);
25813
+ date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25814
+ var tdELe = createElement('td', {
25815
+ className: WORK_CELLS_CLASS,
25816
+ attrs: {
25817
+ 'role': 'gridcell', 'aria-selected': 'false',
25818
+ 'data-date': date.getTime().toString()
25819
+ }
25820
+ });
25821
+ addClass([tdELe], classList$$1);
25822
+ tdELe.setAttribute('data-group-index', groupIndex.toString());
25823
+ this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
25824
+ this.wireEvents(tdELe, 'cell');
25825
+ this.parent.trigger(renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
25826
+ tr.appendChild(tdELe);
25827
+ }
25828
+ }
25829
+ return tRow;
25830
+ };
25745
25831
  TimelineYear.prototype.renderResourceContent = function (wrapper, monthBody, contentBody) {
25746
25832
  var months = this.getMonths();
25747
25833
  for (var row = 0; row < this.rowCount; row++) {
@@ -25749,8 +25835,8 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25749
25835
  var tr = createElement('tr', { attrs: { 'role': 'row' } });
25750
25836
  contentBody.appendChild(tr);
25751
25837
  var resData = void 0;
25752
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25753
- resData = this.parent.resourceBase.lastResourceLevel[row];
25838
+ if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25839
+ resData = this.parent.resourceBase.renderedResources[row];
25754
25840
  }
25755
25841
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[row], 1);
25756
25842
  var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
@@ -25771,8 +25857,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25771
25857
  }
25772
25858
  for (var month = 0; month < this.columnCount; month++) {
25773
25859
  var classList$$1 = [];
25774
- var groupIndex = row;
25860
+ var groupIndex = void 0;
25775
25861
  if (this.parent.activeViewOptions.orientation === 'Vertical') {
25862
+ groupIndex = resData.groupIndex;
25776
25863
  classList$$1 = classList$$1.concat(resData.className);
25777
25864
  if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25778
25865
  classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
@@ -25876,7 +25963,7 @@ var ICalendarExport = /** @__PURE__ @class */ (function () {
25876
25963
  var editedExDate = [];
25877
25964
  if (eventObj[fields.recurrenceID]) {
25878
25965
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
25879
- uId = filter[0].UID;
25966
+ uId = filter.length > 0 ? filter[0].UID : uId;
25880
25967
  }
25881
25968
  if (!eventObj[fields.recurrenceID] && eventObj[fields.recurrenceRule] && eventObj[fields.recurrenceException]) {
25882
25969
  var exDate = (eventObj[fields.recurrenceException]).split(',');