@syncfusion/ej2-schedule 20.1.52 → 20.1.57

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 (74) hide show
  1. package/CHANGELOG.md +53 -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 +167 -71
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +165 -69
  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/actions/drag.js +9 -9
  14. package/src/schedule/base/schedule.js +9 -1
  15. package/src/schedule/event-renderer/agenda-base.js +4 -1
  16. package/src/schedule/event-renderer/event-base.js +16 -11
  17. package/src/schedule/event-renderer/month.d.ts +1 -0
  18. package/src/schedule/event-renderer/month.js +38 -29
  19. package/src/schedule/event-renderer/vertical-view.js +3 -0
  20. package/src/schedule/event-renderer/year.js +3 -1
  21. package/src/schedule/exports/calendar-export.js +1 -1
  22. package/src/schedule/popups/event-window.js +4 -2
  23. package/src/schedule/popups/quick-popups.js +2 -2
  24. package/src/schedule/renderer/month.js +8 -5
  25. package/src/schedule/renderer/renderer.js +2 -1
  26. package/src/schedule/renderer/timeline-year.d.ts +2 -1
  27. package/src/schedule/renderer/timeline-year.js +49 -4
  28. package/src/schedule/renderer/vertical-view.js +2 -1
  29. package/src/schedule/renderer/year.js +4 -0
  30. package/styles/bootstrap-dark.css +83 -968
  31. package/styles/bootstrap.css +83 -967
  32. package/styles/bootstrap4.css +83 -990
  33. package/styles/bootstrap5-dark.css +83 -988
  34. package/styles/bootstrap5.css +83 -988
  35. package/styles/fabric-dark.css +83 -968
  36. package/styles/fabric.css +83 -970
  37. package/styles/fluent-dark.css +83 -968
  38. package/styles/fluent.css +83 -968
  39. package/styles/highcontrast-light.css +83 -967
  40. package/styles/highcontrast.css +83 -972
  41. package/styles/material-dark.css +83 -967
  42. package/styles/material.css +83 -967
  43. package/styles/recurrence-editor/bootstrap-dark.css +6 -94
  44. package/styles/recurrence-editor/bootstrap.css +6 -94
  45. package/styles/recurrence-editor/bootstrap4.css +6 -94
  46. package/styles/recurrence-editor/bootstrap5-dark.css +6 -94
  47. package/styles/recurrence-editor/bootstrap5.css +6 -94
  48. package/styles/recurrence-editor/fabric-dark.css +6 -94
  49. package/styles/recurrence-editor/fabric.css +6 -94
  50. package/styles/recurrence-editor/fluent-dark.css +6 -94
  51. package/styles/recurrence-editor/fluent.css +6 -94
  52. package/styles/recurrence-editor/highcontrast-light.css +6 -94
  53. package/styles/recurrence-editor/highcontrast.css +6 -94
  54. package/styles/recurrence-editor/material-dark.css +6 -94
  55. package/styles/recurrence-editor/material.css +6 -94
  56. package/styles/recurrence-editor/tailwind-dark.css +6 -94
  57. package/styles/recurrence-editor/tailwind.css +6 -94
  58. package/styles/schedule/bootstrap-dark.css +78 -875
  59. package/styles/schedule/bootstrap.css +78 -874
  60. package/styles/schedule/bootstrap4.css +78 -897
  61. package/styles/schedule/bootstrap5-dark.css +78 -895
  62. package/styles/schedule/bootstrap5.css +78 -895
  63. package/styles/schedule/fabric-dark.css +78 -875
  64. package/styles/schedule/fabric.css +78 -877
  65. package/styles/schedule/fluent-dark.css +78 -875
  66. package/styles/schedule/fluent.css +78 -875
  67. package/styles/schedule/highcontrast-light.css +78 -874
  68. package/styles/schedule/highcontrast.css +78 -879
  69. package/styles/schedule/material-dark.css +78 -874
  70. package/styles/schedule/material.css +78 -874
  71. package/styles/schedule/tailwind-dark.css +78 -895
  72. package/styles/schedule/tailwind.css +78 -895
  73. package/styles/tailwind-dark.css +83 -988
  74. 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'));
@@ -5772,7 +5785,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5772
5785
  EventBase.prototype.isAllDayAppointment = function (event) {
5773
5786
  var fieldMapping = this.parent.eventFields;
5774
5787
  var isAllDay = event[fieldMapping.isAllDay];
5775
- var isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())
5788
+ var isFullDay = ((getUniversalTime(event[fieldMapping.endTime]) - getUniversalTime(event[fieldMapping.startTime]))
5776
5789
  / MS_PER_DAY) >= 1;
5777
5790
  return (isAllDay || (this.parent.eventSettings.spannedEventPlacement !== 'TimeSlot' && isFullDay)) ? true : false;
5778
5791
  };
@@ -6355,16 +6368,18 @@ var EventBase = /** @__PURE__ @class */ (function () {
6355
6368
  }
6356
6369
  };
6357
6370
  EventBase.prototype.updateEventMinimumDuration = function (startEndHours, startTime, endTime) {
6358
- var eventDuration = (getUniversalTime(endTime) - getUniversalTime(startTime)) / MS_PER_MINUTE;
6359
- if (eventDuration < this.parent.eventSettings.minimumEventDuration) {
6360
- var tempEnd = new Date(startTime);
6361
- tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);
6362
- endTime = tempEnd;
6363
- if (endTime.getTime() > startEndHours.endHour.getTime()) {
6364
- var tempStart = new Date(startEndHours.endHour.getTime());
6365
- tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);
6366
- startTime = tempStart;
6367
- endTime = startEndHours.endHour;
6371
+ if (startTime.getTime() < endTime.getTime()) {
6372
+ var eventDuration = (getUniversalTime(endTime) - getUniversalTime(startTime)) / MS_PER_MINUTE;
6373
+ if (eventDuration < this.parent.eventSettings.minimumEventDuration) {
6374
+ var tempEnd = new Date(startTime);
6375
+ tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);
6376
+ endTime = tempEnd;
6377
+ if (endTime.getTime() > startEndHours.endHour.getTime()) {
6378
+ var tempStart = new Date(startEndHours.endHour.getTime());
6379
+ tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);
6380
+ startTime = tempStart;
6381
+ endTime = startEndHours.endHour;
6382
+ }
6368
6383
  }
6369
6384
  }
6370
6385
  return { startDate: startTime, endDate: endTime };
@@ -6910,6 +6925,9 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6910
6925
  var currentDate = resetTime(new Date(this.dateRender[resource][dayIndex].getTime()));
6911
6926
  var schedule = getStartEndHours(currentDate, this.startHour, this.endHour);
6912
6927
  var isValidEvent = this.isValidEvent(eventObj, eStart, eEnd, schedule);
6928
+ if ((eStart.getTime() < this.parent.minDate.getTime()) || (eEnd.getTime() > this.parent.maxDate.getTime())) {
6929
+ return;
6930
+ }
6913
6931
  if (eStart <= eEnd && isValidEvent) {
6914
6932
  var appHeight_1 = this.getHeight(eStart, eEnd);
6915
6933
  if (eStart.getTime() > schedule.startHour.getTime()) {
@@ -7262,7 +7280,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7262
7280
  appElement = (this.parent.currentView === 'Month') ? appElement : [appElement[0]];
7263
7281
  for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {
7264
7282
  var wrap = appElement_1[_i];
7265
- if (!wrap.classList.contains('e-more-indicator') && wrap.parentElement && wrap.parentElement.parentNode) {
7283
+ if (wrap.parentElement && wrap.parentElement.parentNode) {
7266
7284
  remove(wrap.parentElement);
7267
7285
  }
7268
7286
  }
@@ -7393,12 +7411,19 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7393
7411
  var filteredDates = this.getRenderedDates(dateRender);
7394
7412
  this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
7395
7413
  this.processBlockEvents(blockList, resIndex, resData);
7414
+ var events = [];
7396
7415
  for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {
7397
7416
  var event_1 = eventsList_1[_i];
7398
7417
  if (this.parent.resourceBase && !resData) {
7399
7418
  this.cssClass = this.parent.resourceBase.getCssClass(event_1);
7400
7419
  }
7401
- var spannedEvents = this.splitEvent(event_1, filteredDates || this.dateRender);
7420
+ events = events.concat(this.splitEvent(event_1, filteredDates || this.dateRender));
7421
+ }
7422
+ for (var level = 0; level < this.slots.length; level++) {
7423
+ this.renderedEvents = [];
7424
+ var slot = this.slots[level];
7425
+ var endDate = addDays(new Date(slot[slot.length - 1]), 1);
7426
+ var spannedEvents = this.filterEvents(new Date(slot[0]), endDate, events);
7402
7427
  for (var _a = 0, spannedEvents_1 = spannedEvents; _a < spannedEvents_1.length; _a++) {
7403
7428
  var event_2 = spannedEvents_1[_a];
7404
7429
  if (this.maxHeight) {
@@ -7700,24 +7725,20 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7700
7725
  var startTime = event[this.fields.startTime];
7701
7726
  var endTime = event[this.fields.endTime];
7702
7727
  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())) {
7728
+ if ((day < 0) || (startTime.getTime() < this.parent.minDate.getTime()) || (endTime.getTime() > this.parent.maxDate.getTime())) {
7707
7729
  return;
7708
7730
  }
7709
7731
  var overlapCount = this.getIndex(startTime);
7710
7732
  event.Index = overlapCount;
7711
- var appHeight = this.eventHeight;
7712
- this.renderedEvents.push(extend({}, event, null, true));
7713
7733
  var diffInDays = event.data.count;
7714
7734
  if (startTime.getTime() <= endTime.getTime()) {
7715
7735
  var appWidth = (diffInDays * this.cellWidth) - 5;
7716
7736
  var cellTd = this.workCells[day];
7717
- var appTop = (overlapCount * (appHeight + EVENT_GAP));
7718
- var height = this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7737
+ var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));
7738
+ var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;
7719
7739
  var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;
7720
7740
  if (this.parent.rowAutoHeight || enableAppRender) {
7741
+ this.renderedEvents.push(extend({}, event, null, true));
7721
7742
  var appointmentElement = void 0;
7722
7743
  if (this.inlineValue) {
7723
7744
  appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();
@@ -7736,24 +7757,26 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7736
7757
  }
7737
7758
  else {
7738
7759
  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);
7760
+ if (this.workCells[day + i]) {
7761
+ var indicator = this.workCells[day + i].querySelector('.' + MORE_INDICATOR_CLASS);
7762
+ if (indicator) {
7763
+ var count = parseInt(indicator.getAttribute('data-count'), 10) + 1;
7764
+ indicator.setAttribute('data-count', count.toString());
7765
+ indicator.innerHTML = this.getMoreIndicatorText(count);
7766
+ }
7767
+ else {
7768
+ var startDate = new Date(this.dateRender[day + i].getTime());
7769
+ var endDate = addDays(this.dateRender[day + i], 1);
7770
+ var groupIndex = this.workCells[day + i].getAttribute('data-group-index');
7771
+ var moreIndicatorElement = this.getMoreIndicatorElement(1, startDate, endDate);
7772
+ if (!isNullOrUndefined(groupIndex)) {
7773
+ moreIndicatorElement.setAttribute('data-group-index', groupIndex);
7774
+ }
7775
+ moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';
7776
+ moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
7777
+ this.renderElement(this.workCells[day + i], moreIndicatorElement);
7778
+ EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
7752
7779
  }
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
7780
  }
7758
7781
  }
7759
7782
  }
@@ -7790,9 +7813,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7790
7813
  };
7791
7814
  MonthEvent.prototype.getOverlapEvents = function (date, appointments) {
7792
7815
  var appointmentsList = [];
7816
+ var dateTime = resetTime(date).getTime();
7793
7817
  for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {
7794
7818
  var app = appointments_1[_i];
7795
- var dateTime = resetTime(date).getTime();
7796
7819
  if ((resetTime(app[this.fields.startTime]).getTime() <= dateTime) &&
7797
7820
  (resetTime(app[this.fields.endTime]).getTime() >= dateTime)) {
7798
7821
  appointmentsList.push(app);
@@ -7876,9 +7899,10 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7876
7899
  MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {
7877
7900
  var moreIndicatorElement = createElement('div', {
7878
7901
  className: MORE_INDICATOR_CLASS,
7879
- innerHTML: '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
7902
+ innerHTML: this.getMoreIndicatorText(count),
7880
7903
  attrs: {
7881
7904
  'tabindex': '0',
7905
+ 'data-count': count.toString(),
7882
7906
  'data-start-date': startDate.getTime().toString(),
7883
7907
  'data-end-date': endDate.getTime().toString(),
7884
7908
  'role': 'list'
@@ -7886,6 +7910,9 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7886
7910
  });
7887
7911
  return moreIndicatorElement;
7888
7912
  };
7913
+ MonthEvent.prototype.getMoreIndicatorText = function (count) {
7914
+ return '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));
7915
+ };
7889
7916
  MonthEvent.prototype.removeHeightProperty = function (selector) {
7890
7917
  var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));
7891
7918
  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
@@ -9523,11 +9550,11 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9523
9550
  (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;
9524
9551
  if (eventData[fields.isAllDay]) {
9525
9552
  details = startDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';
9526
- if (((endDate.getTime() - startDate.getTime()) / MS_PER_DAY) > 1) {
9553
+ if (((getUniversalTime(endDate) - getUniversalTime(startDate)) / MS_PER_DAY) > 1) {
9527
9554
  details += '&nbsp;-&nbsp;' + endDateDetails + ' (' + this.l10n.getConstant('allDay') + ')';
9528
9555
  }
9529
9556
  }
9530
- else if ((((endDate.getTime() - startDate.getTime()) / MS_PER_DAY) >= 1) || spanLength > 0) {
9557
+ else if ((((getUniversalTime(endDate) - getUniversalTime(startDate)) / MS_PER_DAY) >= 1) || spanLength > 0) {
9531
9558
  details = startDateDetails + ' (' + startTimeDetail + ')' + '&nbsp;-&nbsp;' + endDateDetails + ' (' + endTimeDetail + ')';
9532
9559
  }
9533
9560
  else {
@@ -12008,7 +12035,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12008
12035
  return labelText;
12009
12036
  };
12010
12037
  EventWindow.prototype.onChange = function (args) {
12011
- var target = args.event.currentTarget.querySelector('input');
12038
+ var targetSelector = "." + EVENT_WINDOW_ALL_DAY_CLASS + ",." + TIME_ZONE_CLASS + ",." + EVENT_WINDOW_REPEAT_CLASS;
12039
+ var target = closest(args.event.target, targetSelector);
12012
12040
  if (target.classList.contains(EVENT_WINDOW_ALL_DAY_CLASS)) {
12013
12041
  this.onAllDayChange(args.checked);
12014
12042
  }
@@ -12174,7 +12202,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12174
12202
  };
12175
12203
  EventWindow.prototype.showDetails = function (eventData) {
12176
12204
  var eventObj = extend({}, eventData, null, true);
12177
- if (eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12205
+ if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&
12206
+ eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
12178
12207
  this.trimAllDay(eventObj);
12179
12208
  }
12180
12209
  this.eventData = eventObj;
@@ -13489,7 +13518,8 @@ var Render = /** @__PURE__ @class */ (function () {
13489
13518
  this.parent.virtualScrollModule.destroy();
13490
13519
  this.parent.virtualScrollModule = null;
13491
13520
  }
13492
- if (this.parent.currentView.indexOf('Timeline') !== -1 && this.parent.currentView.indexOf('Year') === -1
13521
+ if (this.parent.currentView.indexOf('Timeline') !== -1 && (this.parent.currentView.indexOf('Year') === -1 ||
13522
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))
13493
13523
  && this.parent.activeViewOptions.allowVirtualScrolling
13494
13524
  && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
13495
13525
  this.parent.virtualScrollModule = new VirtualScroll(this.parent);
@@ -16325,6 +16355,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16325
16355
  };
16326
16356
  _this.trigger(navigating, navArgs, function (navigationArgs) {
16327
16357
  if (!navigationArgs.cancel) {
16358
+ _this.uiStateValues.isInitial = view.indexOf('Timeline') > -1 || _this.currentView.indexOf('Timeline') > -1 ? true : _this.uiStateValues.isInitial;
16328
16359
  _this.viewIndex = navigationArgs.viewIndex;
16329
16360
  _this.setProperties({ currentView: view }, true);
16330
16361
  if (_this.headerModule) {
@@ -16949,6 +16980,9 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16949
16980
  if (document.querySelectorAll(template).length) {
16950
16981
  return compile(document.querySelector(template).innerHTML.trim());
16951
16982
  }
16983
+ else {
16984
+ return compile(template);
16985
+ }
16952
16986
  }
16953
16987
  catch (error) {
16954
16988
  return compile(template);
@@ -17128,8 +17162,12 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
17128
17162
  this.refreshEvents(false);
17129
17163
  }
17130
17164
  break;
17131
- case 'showWeekend':
17132
17165
  case 'workDays':
17166
+ if (JSON.stringify(oldProp.workDays) !== JSON.stringify(newProp.workDays)) {
17167
+ state.isLayout = true;
17168
+ }
17169
+ break;
17170
+ case 'showWeekend':
17133
17171
  case 'startHour':
17134
17172
  case 'endHour':
17135
17173
  case 'workHours':
@@ -19834,7 +19872,9 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19834
19872
  this.eventHeight = getElementHeightFromClass(eventTable, APPOINTMENT_CLASS);
19835
19873
  var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CONTAINER_CLASS));
19836
19874
  var resources = this.parent.uiStateValues.isGroupAdaptive ?
19837
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] : this.parent.resourceBase.lastResourceLevel;
19875
+ [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
19876
+ this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
19877
+ this.parent.resourceBase.lastResourceLevel;
19838
19878
  var months = this.getMonths();
19839
19879
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
19840
19880
  for (var month = 0; month < months.length; month++) {
@@ -20694,7 +20734,7 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
20694
20734
  var eventObj = extend({}, this.actionObj.event, null, true);
20695
20735
  var eventStart = eventObj[this.parent.eventFields.startTime];
20696
20736
  var eventEnd = eventObj[this.parent.eventFields.endTime];
20697
- var eventDuration = eventEnd.getTime() - eventStart.getTime();
20737
+ var eventDuration = getUniversalTime(eventEnd) - getUniversalTime(eventStart);
20698
20738
  var offsetTop = Math.floor(parseInt(this.actionObj.clone.style.top, 10) / this.actionObj.cellHeight)
20699
20739
  * this.actionObj.cellHeight;
20700
20740
  offsetTop = offsetTop < 0 ? 0 : offsetTop;
@@ -21053,8 +21093,8 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
21053
21093
  if (isNullOrUndefined(this.parent.eventDragArea)) {
21054
21094
  this.removeCloneElement();
21055
21095
  }
21056
- var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -
21057
- eventObj[this.parent.eventFields.startTime].getTime();
21096
+ var eventDuration = getUniversalTime(eventObj[this.parent.eventFields.endTime]) -
21097
+ getUniversalTime(eventObj[this.parent.eventFields.startTime]);
21058
21098
  var td = closest(this.actionObj.target, 'td');
21059
21099
  if (!isNullOrUndefined(td)) {
21060
21100
  var tr = td.parentElement;
@@ -21068,11 +21108,11 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
21068
21108
  }
21069
21109
  var timeString = new Date(currentDate.setDate(currentDate.getDate() - this.daysVariation));
21070
21110
  var dragStart$$1 = new Date(timeString.getTime());
21111
+ var startTimeDiff = getUniversalTime(eventObj[this.parent.eventFields.startTime]) -
21112
+ getUniversalTime(resetTime(new Date(+eventObj[this.parent.eventFields.startTime])));
21113
+ dragStart$$1.setMilliseconds(startTimeDiff);
21071
21114
  var dragEnd = new Date(dragStart$$1.getTime());
21072
- var startTimeDiff = eventObj[this.parent.eventFields.startTime].getTime() -
21073
- (resetTime(new Date(+eventObj[this.parent.eventFields.startTime]))).getTime();
21074
- dragStart$$1 = new Date(dragStart$$1.getTime() + startTimeDiff);
21075
- dragEnd = new Date(dragStart$$1.getTime() + eventDuration);
21115
+ dragEnd.setMilliseconds(eventDuration);
21076
21116
  this.actionObj.start = new Date(dragStart$$1.getTime());
21077
21117
  this.actionObj.end = new Date(dragEnd.getTime());
21078
21118
  }
@@ -21128,8 +21168,8 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
21128
21168
  };
21129
21169
  DragAndDrop.prototype.calculateTimelineTime = function (e) {
21130
21170
  var eventObj = extend({}, this.actionObj.event, null, true);
21131
- var eventDuration = eventObj[this.parent.eventFields.endTime].getTime() -
21132
- eventObj[this.parent.eventFields.startTime].getTime();
21171
+ var eventDuration = getUniversalTime(eventObj[this.parent.eventFields.endTime]) -
21172
+ getUniversalTime(eventObj[this.parent.eventFields.startTime]);
21133
21173
  var offsetLeft = this.parent.enableRtl ? Math.abs(this.actionObj.clone.offsetLeft) - this.actionObj.clone.offsetWidth :
21134
21174
  parseInt(this.actionObj.clone.style.left, 10);
21135
21175
  offsetLeft = Math.floor(offsetLeft / this.actionObj.cellWidth) * this.actionObj.cellWidth;
@@ -22685,8 +22725,9 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22685
22725
  var msStartHour = startHour.getTime();
22686
22726
  var msEndHour = endHour.getTime();
22687
22727
  if (msStartHour !== msEndHour) {
22728
+ var duration = this.parent.activeViewOptions.timeScale.interval / this.parent.activeViewOptions.timeScale.slotCount;
22688
22729
  length = (Math.abs(msEndHour - msStartHour) / msInterval) - ((new Date(msEndHour).getTimezoneOffset()
22689
- - new Date(msStartHour).getTimezoneOffset()) / (60 / this.parent.activeViewOptions.timeScale.slotCount));
22730
+ - new Date(msStartHour).getTimezoneOffset()) / duration);
22690
22731
  }
22691
22732
  if (!this.parent.activeViewOptions.timeScale.enable) {
22692
22733
  length = 1;
@@ -22960,16 +23001,16 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22960
23001
  }
22961
23002
  this.setColWidth(content);
22962
23003
  if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
23004
+ var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
23005
+ if (leftPanel) {
23006
+ leftPanel.scrollTop = top_1;
23007
+ }
23008
+ content.scrollTop = top_1;
22963
23009
  if (this.parent.uiStateValues.isInitial) {
22964
23010
  this.scrollToSelectedDate();
22965
23011
  this.parent.uiStateValues.isInitial = false;
22966
23012
  }
22967
23013
  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
23014
  content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
22974
23015
  args.scrollPosition.left;
22975
23016
  }
@@ -22990,6 +23031,9 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22990
23031
  else {
22991
23032
  content.scrollLeft = 0;
22992
23033
  }
23034
+ if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
23035
+ this.parent.uiStateValues.left = 0;
23036
+ }
22993
23037
  };
22994
23038
  Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
22995
23039
  content.style.height = 'auto';
@@ -23564,6 +23608,9 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23564
23608
  var viewTypeClass = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
23565
23609
  addClass([this.element], [this.viewClass, viewTypeClass, className]);
23566
23610
  this.renderPanel(className);
23611
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
23612
+ addClass([this.element], [VIRTUAL_SCROLL_CLASS]);
23613
+ }
23567
23614
  var calendarTable = this.createTableLayout(OUTER_TABLE_CLASS);
23568
23615
  this.element.appendChild(calendarTable);
23569
23616
  this.element.querySelector('table').setAttribute('role', 'presentation');
@@ -23784,6 +23831,7 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23784
23831
  Year.prototype.onContentScroll = function (e) {
23785
23832
  var target = e.target;
23786
23833
  var headerWrapper = this.getDatesHeaderElement();
23834
+ this.parent.notify(virtualScroll, e);
23787
23835
  if (headerWrapper) {
23788
23836
  headerWrapper.firstElementChild.scrollLeft = target.scrollLeft;
23789
23837
  }
@@ -23956,8 +24004,11 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
23956
24004
  moduleName: 'agenda',
23957
24005
  listClass: this.parent.activeView.viewClass,
23958
24006
  itemClass: this.parent.activeView.viewClass,
23959
- template: '<div class=' + AGENDA_NO_EVENT_CLASS + '>${subject}</div>'
24007
+ template: "<div class=\"" + AGENDA_NO_EVENT_CLASS + "\">" + this.parent.localeObj.getConstant('noEvents') + "</div>"
23960
24008
  });
24009
+ if (listElement.querySelector('.e-agenda-item').children.length === 0) {
24010
+ listElement.firstElementChild.appendChild(createElement('div', { className: AGENDA_NO_EVENT_CLASS, innerHTML: this.parent.localeObj.getConstant('noEvents') }));
24011
+ }
23961
24012
  }
23962
24013
  else {
23963
24014
  listElement = ListBase.createList(this.parent.createElement, listData, {
@@ -25608,7 +25659,7 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25608
25659
  !this.parent.uiStateValues.isGroupAdaptive) {
25609
25660
  tdCollection.push(firstTd);
25610
25661
  firstTd.appendChild(this.parent.resourceBase.createResourceColumn());
25611
- this.rowCount = this.parent.resourceBase.lastResourceLevel.length;
25662
+ this.rowCount = this.parent.resourceBase.renderedResources.length;
25612
25663
  }
25613
25664
  else {
25614
25665
  tdCollection.push(firstTd);
@@ -25625,6 +25676,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25625
25676
  content.appendChild(contentTable);
25626
25677
  var eventWrapper = createElement('div', { className: EVENT_TABLE_CLASS });
25627
25678
  content.appendChild(eventWrapper);
25679
+ if (this.parent.virtualScrollModule) {
25680
+ this.parent.virtualScrollModule.renderVirtualTrack(content);
25681
+ }
25628
25682
  var contentTBody = contentTable.querySelector('tbody');
25629
25683
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25630
25684
  if (this.parent.rowAutoHeight) {
@@ -25742,6 +25796,47 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25742
25796
  }
25743
25797
  }
25744
25798
  };
25799
+ TimelineYear.prototype.getContentRows = function () {
25800
+ var tRow = [];
25801
+ var monthCells = this.getMonths();
25802
+ for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
25803
+ var tr = createElement('tr', { attrs: { 'role': 'row' } });
25804
+ tRow.push(tr);
25805
+ var resData = void 0;
25806
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25807
+ resData = this.parent.resourceBase.renderedResources[row];
25808
+ }
25809
+ var monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[row], 1);
25810
+ var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25811
+ for (var month = 0; month < this.columnCount; month++) {
25812
+ var classList$$1 = [];
25813
+ var groupIndex = resData.groupIndex;
25814
+ classList$$1 = classList$$1.concat(resData.className);
25815
+ if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25816
+ classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
25817
+ }
25818
+ else {
25819
+ classList$$1.push(WORKDAY_CLASS);
25820
+ }
25821
+ monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[month], 1);
25822
+ date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
25823
+ var tdELe = createElement('td', {
25824
+ className: WORK_CELLS_CLASS,
25825
+ attrs: {
25826
+ 'role': 'gridcell', 'aria-selected': 'false',
25827
+ 'data-date': date.getTime().toString()
25828
+ }
25829
+ });
25830
+ addClass([tdELe], classList$$1);
25831
+ tdELe.setAttribute('data-group-index', groupIndex.toString());
25832
+ this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
25833
+ this.wireEvents(tdELe, 'cell');
25834
+ this.parent.trigger(renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
25835
+ tr.appendChild(tdELe);
25836
+ }
25837
+ }
25838
+ return tRow;
25839
+ };
25745
25840
  TimelineYear.prototype.renderResourceContent = function (wrapper, monthBody, contentBody) {
25746
25841
  var months = this.getMonths();
25747
25842
  for (var row = 0; row < this.rowCount; row++) {
@@ -25749,8 +25844,8 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25749
25844
  var tr = createElement('tr', { attrs: { 'role': 'row' } });
25750
25845
  contentBody.appendChild(tr);
25751
25846
  var resData = void 0;
25752
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25753
- resData = this.parent.resourceBase.lastResourceLevel[row];
25847
+ if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
25848
+ resData = this.parent.resourceBase.renderedResources[row];
25754
25849
  }
25755
25850
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[row], 1);
25756
25851
  var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
@@ -25771,8 +25866,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25771
25866
  }
25772
25867
  for (var month = 0; month < this.columnCount; month++) {
25773
25868
  var classList$$1 = [];
25774
- var groupIndex = row;
25869
+ var groupIndex = void 0;
25775
25870
  if (this.parent.activeViewOptions.orientation === 'Vertical') {
25871
+ groupIndex = resData.groupIndex;
25776
25872
  classList$$1 = classList$$1.concat(resData.className);
25777
25873
  if (classList$$1.indexOf(RESOURCE_PARENT_CLASS) > -1) {
25778
25874
  classList$$1.push(RESOURCE_GROUP_CELLS_CLASS);
@@ -25876,7 +25972,7 @@ var ICalendarExport = /** @__PURE__ @class */ (function () {
25876
25972
  var editedExDate = [];
25877
25973
  if (eventObj[fields.recurrenceID]) {
25878
25974
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
25879
- uId = filter[0].UID;
25975
+ uId = filter.length > 0 ? filter[0].UID : uId;
25880
25976
  }
25881
25977
  if (!eventObj[fields.recurrenceID] && eventObj[fields.recurrenceRule] && eventObj[fields.recurrenceException]) {
25882
25978
  var exDate = (eventObj[fields.recurrenceException]).split(',');