@syncfusion/ej2-schedule 20.1.57 → 20.2.36

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 (79) hide show
  1. package/CHANGELOG.md +25 -0
  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 +199 -48
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +204 -48
  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/helpers/e2e/index.js +9 -7
  12. package/helpers/e2e/recurrence-editor.js +41 -25
  13. package/helpers/e2e/schedule.js +44 -28
  14. package/package.json +15 -15
  15. package/src/recurrence-editor/recurrence-editor.js +4 -1
  16. package/src/schedule/actions/action-base.d.ts +1 -0
  17. package/src/schedule/actions/action-base.js +3 -2
  18. package/src/schedule/actions/crud.js +9 -7
  19. package/src/schedule/actions/drag.js +1 -1
  20. package/src/schedule/base/interface.d.ts +6 -0
  21. package/src/schedule/base/schedule.d.ts +8 -0
  22. package/src/schedule/base/schedule.js +66 -0
  23. package/src/schedule/event-renderer/agenda-base.js +6 -6
  24. package/src/schedule/event-renderer/event-base.js +7 -4
  25. package/src/schedule/event-renderer/month.js +3 -6
  26. package/src/schedule/event-renderer/vertical-view.js +3 -3
  27. package/src/schedule/event-renderer/year.js +2 -2
  28. package/src/schedule/exports/excel-export.js +8 -4
  29. package/src/schedule/popups/event-window.js +2 -1
  30. package/src/schedule/popups/quick-popups.js +5 -4
  31. package/src/schedule/renderer/agenda.js +2 -2
  32. package/src/schedule/renderer/timeline-month.d.ts +1 -0
  33. package/src/schedule/renderer/timeline-month.js +9 -0
  34. package/src/schedule/renderer/timeline-view.d.ts +1 -0
  35. package/src/schedule/renderer/timeline-view.js +14 -0
  36. package/src/schedule/renderer/timeline-year.js +3 -0
  37. package/src/schedule/renderer/vertical-view.d.ts +2 -0
  38. package/src/schedule/renderer/vertical-view.js +37 -5
  39. package/src/schedule/renderer/view-base.d.ts +1 -0
  40. package/src/schedule/renderer/view-base.js +19 -0
  41. package/src/schedule/renderer/year.js +2 -1
  42. package/styles/bootstrap-dark.css +6 -5
  43. package/styles/bootstrap.css +6 -5
  44. package/styles/bootstrap4.css +6 -5
  45. package/styles/bootstrap5-dark.css +5 -3
  46. package/styles/bootstrap5.css +6 -5
  47. package/styles/fabric-dark.css +6 -5
  48. package/styles/fabric.css +6 -5
  49. package/styles/fluent-dark.css +7 -5
  50. package/styles/fluent.css +8 -7
  51. package/styles/highcontrast-light.css +6 -5
  52. package/styles/highcontrast.css +6 -5
  53. package/styles/material-dark.css +6 -5
  54. package/styles/material.css +6 -5
  55. package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
  56. package/styles/recurrence-editor/_material3-definition.scss +15 -0
  57. package/styles/schedule/_fluent-definition.scss +1 -1
  58. package/styles/schedule/_fusionnew-definition.scss +224 -0
  59. package/styles/schedule/_layout.scss +6 -2
  60. package/styles/schedule/_material3-definition.scss +224 -0
  61. package/styles/schedule/bootstrap-dark.css +6 -5
  62. package/styles/schedule/bootstrap.css +6 -5
  63. package/styles/schedule/bootstrap4.css +6 -5
  64. package/styles/schedule/bootstrap5-dark.css +5 -3
  65. package/styles/schedule/bootstrap5.css +6 -5
  66. package/styles/schedule/fabric-dark.css +6 -5
  67. package/styles/schedule/fabric.css +6 -5
  68. package/styles/schedule/fluent-dark.css +7 -5
  69. package/styles/schedule/fluent.css +8 -7
  70. package/styles/schedule/highcontrast-light.css +6 -5
  71. package/styles/schedule/highcontrast.css +6 -5
  72. package/styles/schedule/icons/_fusionnew.scss +232 -0
  73. package/styles/schedule/icons/_material3.scss +232 -0
  74. package/styles/schedule/material-dark.css +6 -5
  75. package/styles/schedule/material.css +6 -5
  76. package/styles/schedule/tailwind-dark.css +5 -3
  77. package/styles/schedule/tailwind.css +6 -5
  78. package/styles/tailwind-dark.css +5 -3
  79. package/styles/tailwind.css +6 -5
@@ -5666,7 +5666,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5666
5666
  var selectedAppointments = this.getSelectedAppointments();
5667
5667
  for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {
5668
5668
  var appointment = selectedAppointments_1[_i];
5669
- appointment.setAttribute('aria-selected', 'false');
5669
+ appointment.setAttribute('aria-pressed', 'false');
5670
5670
  }
5671
5671
  removeClass(selectedAppointments, APPOINTMENT_BORDER);
5672
5672
  if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {
@@ -5676,7 +5676,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5676
5676
  EventBase.prototype.addSelectedAppointments = function (cells) {
5677
5677
  for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {
5678
5678
  var cell = cells_1[_i];
5679
- cell.setAttribute('aria-selected', 'true');
5679
+ cell.setAttribute('aria-pressed', 'true');
5680
5680
  }
5681
5681
  if (this.parent.currentView !== 'MonthAgenda') {
5682
5682
  this.parent.removeSelectedClass();
@@ -5804,6 +5804,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5804
5804
  }
5805
5805
  else if (!closest(element, '.' + POPUP_OPEN)) {
5806
5806
  this.removeSelectedAppointmentClass();
5807
+ this.parent.selectedElements = [];
5807
5808
  }
5808
5809
  };
5809
5810
  EventBase.prototype.wireAppointmentEvents = function (element, event, isPreventCrud) {
@@ -5909,6 +5910,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5909
5910
  this.parent.trigger(eventClick, args, function (eventClickArgs) {
5910
5911
  if (eventClickArgs.cancel) {
5911
5912
  _this.removeSelectedAppointmentClass();
5913
+ _this.parent.selectedElements = [];
5912
5914
  if (_this.parent.quickPopup) {
5913
5915
  _this.parent.quickPopup.quickPopupHide();
5914
5916
  }
@@ -5940,6 +5942,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5940
5942
  this.activeEventData(e, true);
5941
5943
  }
5942
5944
  this.removeSelectedAppointmentClass();
5945
+ this.parent.selectedElements = [];
5943
5946
  if (this.parent.activeEventData.element.classList.contains(INLINE_APPOINTMENT_CLASS) ||
5944
5947
  this.parent.activeEventData.element.querySelector('.' + INLINE_SUBJECT_CLASS)) {
5945
5948
  return;
@@ -6021,7 +6024,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
6021
6024
  var exception = event[this.parent.eventFields.recurrenceException];
6022
6025
  var maxCount;
6023
6026
  if (this.parent.currentView !== 'Agenda' && isMaxCount) {
6024
- maxCount = getDateCount(this.parent.activeView.startDate(), this.parent.activeView.endDate()) + 1;
6027
+ maxCount = getDateCount(viewDate, this.parent.activeView.endDate()) + 1;
6025
6028
  }
6026
6029
  var newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
6027
6030
  var firstDay = this.parent.activeViewOptions.firstDayOfWeek;
@@ -6220,7 +6223,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
6220
6223
  className: BLOCK_APPOINTMENT_CLASS,
6221
6224
  attrs: {
6222
6225
  'data-id': 'Appointment_' + record[this.parent.eventFields.id],
6223
- 'aria-readonly': 'true', 'aria-selected': 'false'
6226
+ 'aria-disabled': 'true', 'aria-pressed': 'false'
6224
6227
  }
6225
6228
  });
6226
6229
  var templateElement;
@@ -6676,8 +6679,8 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6676
6679
  'data-guid': record.Guid,
6677
6680
  'role': 'button',
6678
6681
  'tabindex': '0',
6679
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record),
6680
- 'aria-selected': 'false',
6682
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
6683
+ 'aria-pressed': 'false',
6681
6684
  'aria-grabbed': 'true',
6682
6685
  'aria-label': this.parent.getAnnouncementString(record)
6683
6686
  }
@@ -6772,7 +6775,7 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6772
6775
  });
6773
6776
  var moreIndicatorElement = createElement('div', {
6774
6777
  className: MORE_INDICATOR_CLASS,
6775
- attrs: { 'tabindex': '0', 'role': 'list', 'data-index': index.toString(), 'data-count': '1' },
6778
+ attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },
6776
6779
  innerHTML: '+1&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))
6777
6780
  });
6778
6781
  innerCountWrap.appendChild(moreIndicatorElement);
@@ -7396,9 +7399,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7396
7399
  this.sortByDateTime(blockList);
7397
7400
  if (this.parent.currentView === 'Month' && this.parent.rowAutoHeight && this.parent.activeViewOptions.group.resources.length === 0) {
7398
7401
  var totalCells = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));
7399
- var height_1 = this.parent.height === 'auto' ? (this.parent.element.querySelector('.e-content-wrap').clientHeight +
7400
- this.parent.element.querySelector('.e-date-header-wrap').clientHeight) / totalCells.length
7401
- : this.parent.element.querySelector('.e-schedule-table').clientHeight / totalCells.length;
7402
+ var height_1 = this.parent.element.querySelector('.' + CONTENT_TABLE_CLASS).clientHeight / totalCells.length;
7402
7403
  totalCells.forEach(function (cell) {
7403
7404
  setStyleAttribute(cell, { 'height': height_1 + 'px' });
7404
7405
  });
@@ -7609,7 +7610,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7609
7610
  var attrs = {
7610
7611
  'data-id': 'Appointment_' + record[this.fields.id],
7611
7612
  'role': 'button', 'tabindex': '0',
7612
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record), 'aria-selected': 'false', 'aria-grabbed': 'true',
7613
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
7613
7614
  'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)
7614
7615
  };
7615
7616
  if (!isCloneElement) {
@@ -7904,8 +7905,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7904
7905
  'tabindex': '0',
7905
7906
  'data-count': count.toString(),
7906
7907
  'data-start-date': startDate.getTime().toString(),
7907
- 'data-end-date': endDate.getTime().toString(),
7908
- 'role': 'list'
7908
+ 'data-end-date': endDate.getTime().toString()
7909
7909
  }
7910
7910
  });
7911
7911
  return moreIndicatorElement;
@@ -9104,8 +9104,8 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9104
9104
  attrs: {
9105
9105
  'data-id': '' + eventData[fields.id],
9106
9106
  'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0',
9107
- 'aria-readonly': this_1.parent.eventBase.getReadonlyAttribute(eventData),
9108
- 'aria-selected': 'false', 'aria-grabbed': 'true', 'aria-label': this_1.parent.getAnnouncementString(eventData)
9107
+ 'aria-disabled': this_1.parent.eventBase.getReadonlyAttribute(eventData),
9108
+ 'aria-pressed': 'false', 'aria-grabbed': 'true', 'aria-label': this_1.parent.getAnnouncementString(eventData)
9109
9109
  }
9110
9110
  });
9111
9111
  var templateElement = void 0;
@@ -9201,7 +9201,7 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9201
9201
  this.quickPopupHide();
9202
9202
  return;
9203
9203
  }
9204
- var targetEle = args.event.target;
9204
+ var targetEle = !isNullOrUndefined(args.event) ? args.event.target : args.element;
9205
9205
  if (this.parent.isAdaptive) {
9206
9206
  this.quickPopupHide();
9207
9207
  var newEventClone = this.parent.element.querySelector('.' + NEW_EVENT_CLASS);
@@ -9297,6 +9297,7 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9297
9297
  }
9298
9298
  else {
9299
9299
  var isSameTarget = this.isSameEventClick(events);
9300
+ this.parent.selectedElements = [];
9300
9301
  if (isSameTarget) {
9301
9302
  return;
9302
9303
  }
@@ -9362,7 +9363,7 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9362
9363
  ("<button class=\"" + (DELETE_CLASS + ' ' + ICON) + "\" title=\"" + this.l10n.getConstant('delete') + "\"></button>") +
9363
9364
  ("<button class=\"" + CLOSE_CLASS + "\" title=\"" + this.l10n.getConstant('close') + "\"></button></div>") +
9364
9365
  ("<div class=\"" + SUBJECT_WRAP + "\"><div class=\"" + SUBJECT_CLASS + " " + TEXT_ELLIPSIS + "\" ") +
9365
- ("title=\"" + args.eventSubject + "\">" + args.eventSubject + "</div></div >");
9366
+ ("title=\"" + (args.eventSubject ? args.eventSubject.replaceAll('"', '\'') : args.eventSubject) + "\">" + args.eventSubject + "</div></div >");
9366
9367
  break;
9367
9368
  }
9368
9369
  var templateWrapper = createElement('div', { innerHTML: header });
@@ -10621,7 +10622,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10621
10622
  value: VALUEFIELD
10622
10623
  },
10623
10624
  placeholder: this.localeObj.getConstant(REPEAT),
10624
- htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },
10625
+ htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT), role: 'option' },
10625
10626
  change: function (args) {
10626
10627
  self.setProperties({ selectedType: _this.frequencies.indexOf(args.value) }, false);
10627
10628
  self.element.querySelector('.' + REPEATCONTENT).innerHTML =
@@ -10643,6 +10644,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10643
10644
  text: TEXTFIELD,
10644
10645
  value: VALUEFIELD
10645
10646
  },
10647
+ htmlAttributes: { role: 'option' },
10646
10648
  change: function (args) {
10647
10649
  self.freshOnEndForm();
10648
10650
  self.updateEndOnForm(args.value);
@@ -10660,6 +10662,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10660
10662
  text: TEXTFIELD,
10661
10663
  value: VALUEFIELD
10662
10664
  },
10665
+ htmlAttributes: { role: 'option' },
10663
10666
  index: 1,
10664
10667
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10665
10668
  change: function (args) {
@@ -10679,6 +10682,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10679
10682
  text: TEXTFIELD,
10680
10683
  value: VALUEFIELD
10681
10684
  },
10685
+ htmlAttributes: { role: 'option' },
10682
10686
  enableRtl: this.enableRtl,
10683
10687
  index: 7,
10684
10688
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -11794,6 +11798,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
11794
11798
  resourceData.colorField + '}"></div><div class="e-resource-text">${' + resourceData.textField + '}</div></div>';
11795
11799
  if (resourceData.allowMultiple) {
11796
11800
  var listObj = new MultiSelect({
11801
+ enableRtl: this.parent.enableRtl,
11797
11802
  cssClass: this.parent.cssClass || '',
11798
11803
  dataSource: resourceData.dataSource,
11799
11804
  change: this.onMultiselectResourceChange.bind(this),
@@ -11852,7 +11857,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
11852
11857
  query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;
11853
11858
  e.updateData(_this.parent.timezoneDataSource, query);
11854
11859
  },
11855
- htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },
11860
+ htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName, role: 'option' },
11856
11861
  floatLabelType: 'Always',
11857
11862
  placeholder: this.getFieldLabel(value),
11858
11863
  popupHeight: '230px'
@@ -14350,13 +14355,15 @@ var Crud = /** @__PURE__ @class */ (function () {
14350
14355
  else {
14351
14356
  endDate = new Date(+followEvent[fields.startTime]);
14352
14357
  var newRecurrenceRule = followEvent[fields.recurrenceRule];
14353
- var startDate = parentEvent[fields.startTime];
14354
- var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
14355
- var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
14356
- var untilDate = new Date(dateCollection.slice(-1)[0]);
14357
- untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
14358
- endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
14359
- followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);
14358
+ if (newRecurrenceRule) {
14359
+ var startDate = parentEvent[fields.startTime];
14360
+ var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
14361
+ var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
14362
+ var untilDate = new Date(dateCollection.slice(-1)[0]);
14363
+ untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
14364
+ endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
14365
+ followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);
14366
+ }
14360
14367
  }
14361
14368
  parentEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(recurrenceRule, addDays(new Date(endDate.getTime()), -1), true);
14362
14369
  };
@@ -18237,6 +18244,72 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
18237
18244
  this.eventWindow.dialogClose();
18238
18245
  }
18239
18246
  };
18247
+ /**
18248
+ * To manually open the quick info popup based on cell or event details.
18249
+ *
18250
+ * @param {object} data Defines the cell or event data. If the data contains valid ID, it will open event quick info popup,
18251
+ * otherwise cell quick info popup displayed.
18252
+ * @returns {void}
18253
+ */
18254
+ Schedule.prototype.openQuickInfoPopup = function (data) {
18255
+ var _this = this;
18256
+ if (this.currentView === 'Year' || isNullOrUndefined(data)) {
18257
+ return;
18258
+ }
18259
+ if (isNullOrUndefined(data[this.eventFields.id])) {
18260
+ if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda' || isNullOrUndefined(this.activeView)) {
18261
+ return;
18262
+ }
18263
+ var cellData = {
18264
+ startTime: this.activeCellsData.startTime = this.getDateTime(data[this.eventFields.startTime]),
18265
+ endTime: this.activeCellsData.endTime = this.getDateTime(data[this.eventFields.endTime]),
18266
+ isAllDay: this.activeCellsData.isAllDay =
18267
+ !isNullOrUndefined(data[this.eventFields.isAllDay]) ? data[this.eventFields.isAllDay] : false
18268
+ };
18269
+ var startTime = this.activeView.getAdjustedDate(new Date(cellData.startTime));
18270
+ if (startTime) {
18271
+ var query = '.' + WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"]';
18272
+ if (this.activeViewOptions.group.resources.length > 0 && !this.uiStateValues.isGroupAdaptive
18273
+ && this.resourceBase && this.eventBase) {
18274
+ cellData.groupIndex = this.eventBase.getGroupIndexFromEvent(data);
18275
+ query = '.' + WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"][data-group-index="' + cellData.groupIndex + '"]';
18276
+ }
18277
+ var workCell = this.element.querySelector(query);
18278
+ if (workCell) {
18279
+ workCell.focus();
18280
+ cellData.element = workCell;
18281
+ this.notify(cellClick, cellData);
18282
+ }
18283
+ }
18284
+ }
18285
+ else {
18286
+ var app = this.getCurrentViewEvents().filter(function (item) {
18287
+ return data[_this.eventFields.id] === item[_this.eventFields.id];
18288
+ });
18289
+ if (app.length <= 0) {
18290
+ return;
18291
+ }
18292
+ var selectEvent = app[0];
18293
+ if (data[this.eventFields.recurrenceRule]) {
18294
+ var occurence = app.filter(function (x) {
18295
+ return x[_this.eventFields.startTime].getTime() === data[_this.eventFields.startTime].getTime();
18296
+ });
18297
+ if (occurence.length > 0) {
18298
+ selectEvent = occurence[0];
18299
+ }
18300
+ }
18301
+ var element = this.element.querySelector('div[data-guid="' + selectEvent.Guid + '"]');
18302
+ if (element) {
18303
+ this.eventBase.removeSelectedAppointmentClass();
18304
+ this.eventBase.addSelectedAppointments([element]);
18305
+ this.activeEventData = { event: selectEvent, element: element };
18306
+ if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda') {
18307
+ addClass([this.activeEventData.element], AGENDA_SELECTED_CELL);
18308
+ }
18309
+ this.notify(eventClick, this.activeEventData);
18310
+ }
18311
+ }
18312
+ };
18240
18313
  /**
18241
18314
  * To manually close the quick info popup
18242
18315
  *
@@ -18917,6 +18990,7 @@ var ActionBase = /** @__PURE__ @class */ (function () {
18917
18990
  };
18918
18991
  ActionBase.prototype.updateScrollPosition = function (e) {
18919
18992
  var _this = this;
18993
+ this.scrollEventArgs = e;
18920
18994
  if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {
18921
18995
  this.actionObj.scrollInterval = window.setInterval(function () {
18922
18996
  if (_this.autoScrollValidation() && !_this.actionObj.clone.classList.contains(ALLDAY_APPOINTMENT_CLASS)) {
@@ -18926,10 +19000,10 @@ var ActionBase = /** @__PURE__ @class */ (function () {
18926
19000
  }
18927
19001
  _this.autoScroll();
18928
19002
  if (_this.actionObj.action === 'drag') {
18929
- _this.parent.dragAndDropModule.updateDraggingDateTime(e);
19003
+ _this.parent.dragAndDropModule.updateDraggingDateTime(_this.scrollEventArgs);
18930
19004
  }
18931
19005
  else {
18932
- _this.parent.resizeModule.updateResizingDirection(e);
19006
+ _this.parent.resizeModule.updateResizingDirection(_this.scrollEventArgs);
18933
19007
  }
18934
19008
  }
18935
19009
  }, this.actionObj.scroll.timeDelay);
@@ -19732,7 +19806,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19732
19806
  }
19733
19807
  };
19734
19808
  YearEvent.prototype.timelineYearViewEvents = function () {
19735
- var workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS);
19809
+ var workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')');
19736
19810
  this.cellWidth = workCell.offsetWidth;
19737
19811
  this.cellHeader = getOuterHeight(workCell.querySelector('.' + DATE_HEADER_CLASS));
19738
19812
  var eventTable = this.parent.element.querySelector('.' + EVENT_TABLE_CLASS);
@@ -20017,7 +20091,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
20017
20091
  'data-id': 'Appointment_' + record[this.fields.id],
20018
20092
  'data-guid': record.Guid,
20019
20093
  'role': 'button', 'tabindex': '0',
20020
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record), 'aria-selected': 'false', 'aria-grabbed': 'true',
20094
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
20021
20095
  'aria-label': this.parent.getAnnouncementString(record)
20022
20096
  }
20023
20097
  });
@@ -21402,7 +21476,7 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
21402
21476
  var cursorElement = this.getCursorElement(e);
21403
21477
  if (cursorElement) {
21404
21478
  top = cursorElement.classList.contains(WORK_CELLS_CLASS) ? cursorElement.offsetTop :
21405
- cursorElement.offsetParent.classList.contains(APPOINTMENT_CLASS) ?
21479
+ (cursorElement.offsetParent && cursorElement.offsetParent.classList.contains(APPOINTMENT_CLASS)) ?
21406
21480
  cursorElement.offsetParent.offsetTop : top;
21407
21481
  }
21408
21482
  }
@@ -21951,6 +22025,14 @@ var ViewBase = /** @__PURE__ @class */ (function () {
21951
22025
  var tdDate = new Date(resetTime(new Date(+scrollDate)).getTime()).getTime();
21952
22026
  var dateElement = scrollWrap.querySelector("." + WORK_CELLS_CLASS + "[data-date=\"" + tdDate + "\"]");
21953
22027
  if (this.parent.currentView === 'Month' && dateElement) {
22028
+ if (scrollWrap.scrollWidth > scrollWrap.clientWidth) {
22029
+ if (!this.parent.enableRtl) {
22030
+ scrollWrap.scrollLeft = dateElement.offsetLeft;
22031
+ }
22032
+ else {
22033
+ scrollWrap.scrollLeft = -(this.parent.getContentTable().offsetWidth - dateElement.offsetLeft - dateElement.offsetWidth);
22034
+ }
22035
+ }
21954
22036
  scrollWrap.scrollTop = dateElement.offsetTop;
21955
22037
  }
21956
22038
  if (this.parent.currentView === 'TimelineMonth' && dateElement) {
@@ -21994,6 +22076,17 @@ var ViewBase = /** @__PURE__ @class */ (function () {
21994
22076
  }
21995
22077
  return endDate;
21996
22078
  };
22079
+ ViewBase.prototype.getAdjustedDate = function (startTime) {
22080
+ if (!this.parent.activeViewOptions.timeScale.enable || this.parent.currentView === 'Month' ||
22081
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length === 0)) {
22082
+ return new Date(startTime.setHours(0, 0, 0, 0));
22083
+ }
22084
+ else if (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length > 0) {
22085
+ startTime.setHours(0, 0, 0, 0);
22086
+ return new Date(startTime.setDate(1));
22087
+ }
22088
+ return null;
22089
+ };
21997
22090
  ViewBase.prototype.destroy = function () {
21998
22091
  if (this.element && this.element.parentNode) {
21999
22092
  remove(this.element);
@@ -22155,11 +22248,26 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22155
22248
  };
22156
22249
  VerticalView.prototype.scrollToHour = function (hour, scrollDate) {
22157
22250
  var date = this.parent.getStartEndTime(hour);
22158
- if (isNullOrUndefined(date) || !isNullOrUndefined(scrollDate)) {
22251
+ if (!isNullOrUndefined(scrollDate)) {
22252
+ var headerElement = this.element.querySelector('.' + HEADER_CELLS_CLASS + '[data-date="' + new Date(resetTime(scrollDate)).getTime() + '"]');
22253
+ if (headerElement) {
22254
+ if (this.parent.enableRtl) {
22255
+ var conWrap = this.element.querySelector('.' + CONTENT_TABLE_CLASS);
22256
+ this.getScrollableElement().scrollLeft = -(conWrap.offsetWidth - headerElement.offsetLeft - headerElement.offsetWidth);
22257
+ }
22258
+ else {
22259
+ this.getScrollableElement().scrollLeft = headerElement.offsetLeft;
22260
+ }
22261
+ }
22262
+ }
22263
+ if (isNullOrUndefined(date)) {
22159
22264
  return;
22160
22265
  }
22161
22266
  this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);
22162
22267
  };
22268
+ VerticalView.prototype.scrollToDate = function (scrollDate) {
22269
+ this.scrollToHour(null, scrollDate);
22270
+ };
22163
22271
  VerticalView.prototype.generateColumnLevels = function () {
22164
22272
  var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
22165
22273
  var columnLevels = [];
@@ -22498,12 +22606,11 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22498
22606
  var wrap = createElement('div', { className: DATE_HEADER_WRAP_CLASS });
22499
22607
  container.appendChild(wrap);
22500
22608
  var tbl = this.createTableLayout();
22501
- var trEle = createElement('tr');
22609
+ var trEle = createElement('tr', { className: HEADER_ROW_CLASS });
22502
22610
  var rowCount = this.colLevels.length;
22503
22611
  var lastLevel = this.colLevels[rowCount - 1];
22504
22612
  for (var i = 0; i < rowCount; i++) {
22505
22613
  var ntr = trEle.cloneNode();
22506
- addClass([ntr], HEADER_ROW_CLASS);
22507
22614
  var level = this.colLevels[i];
22508
22615
  for (var j = 0; j < level.length; j++) {
22509
22616
  ntr.appendChild(this.createTd(level[j]));
@@ -22516,13 +22623,13 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22516
22623
  return container;
22517
22624
  };
22518
22625
  VerticalView.prototype.createAllDayRow = function (table, tdData) {
22519
- var ntr = createElement('tr');
22520
- addClass([ntr], ALLDAY_ROW_CLASS);
22626
+ var ntr = createElement('tr', { className: ALLDAY_ROW_CLASS });
22521
22627
  for (var j = 0; j < tdData.length; j++) {
22522
22628
  var td = extend({}, tdData[j]);
22523
22629
  td.className = [ALLDAY_CELLS_CLASS];
22524
22630
  td.type = 'alldayCells';
22525
22631
  var ntd = this.createTd(td);
22632
+ ntd.setAttribute('role', 'gridcell');
22526
22633
  ntd.setAttribute('data-date', td.date.getTime().toString());
22527
22634
  if (!isNullOrUndefined(td.groupIndex)) {
22528
22635
  ntd.setAttribute('data-group-index', '' + td.groupIndex);
@@ -22555,6 +22662,7 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22555
22662
  }
22556
22663
  if (td.type === 'dateHeader' && td.className.indexOf(HEADER_CELLS_CLASS) >= 0) {
22557
22664
  tdEle.setAttribute('data-date', td.date.getTime().toString());
22665
+ tdEle.setAttribute('role', 'gridcell');
22558
22666
  if (!isNullOrUndefined(td.groupIndex)) {
22559
22667
  tdEle.setAttribute('data-group-index', '' + td.groupIndex);
22560
22668
  }
@@ -22757,6 +22865,23 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22757
22865
  }
22758
22866
  return rows;
22759
22867
  };
22868
+ VerticalView.prototype.getAdjustedDate = function (startTime) {
22869
+ if (!this.parent.activeViewOptions.timeScale.enable) {
22870
+ return new Date(startTime.setHours(0, 0, 0, 0));
22871
+ }
22872
+ else {
22873
+ var timeSlots = this.getTimeSlotRows();
22874
+ var startDate = new Date(new Date(timeSlots[0].date.getTime()).
22875
+ setHours(startTime.getHours(), startTime.getMinutes(), startTime.getMilliseconds()));
22876
+ for (var i = 0; i < timeSlots.length; i++) {
22877
+ if (timeSlots[i].date.getTime() > startDate.getTime()) {
22878
+ startTime.setHours(timeSlots[i - 1].date.getHours(), timeSlots[i - 1].date.getMinutes(), timeSlots[i - 1].date.getMilliseconds());
22879
+ return new Date(startTime);
22880
+ }
22881
+ }
22882
+ }
22883
+ return null;
22884
+ };
22760
22885
  VerticalView.prototype.destroy = function () {
22761
22886
  if (!this.parent || this.parent && this.parent.isDestroyed) {
22762
22887
  return;
@@ -23898,7 +24023,8 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23898
24023
  return this.parent.currentView === 'Year' ? getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek) : this.getStartDate();
23899
24024
  };
23900
24025
  Year.prototype.endDate = function () {
23901
- return this.parent.currentView === 'Year' ? addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) : this.getEndDate();
24026
+ return this.parent.currentView === 'Year' ? addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) :
24027
+ addDays(this.getEndDate(), 1);
23902
24028
  };
23903
24029
  Year.prototype.getEndDateFromStartDate = function (start) {
23904
24030
  var date = new Date(start.getTime());
@@ -24024,8 +24150,8 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24024
24150
  'data-guid': listData[li].Guid,
24025
24151
  'role': 'button',
24026
24152
  'tabindex': '0',
24027
- 'aria-readonly': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
24028
- 'aria-selected': 'false',
24153
+ 'aria-disabled': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
24154
+ 'aria-pressed': 'false',
24029
24155
  'aria-grabbed': 'true',
24030
24156
  'aria-label': _this.parent.getAnnouncementString(listData[li])
24031
24157
  }
@@ -24293,8 +24419,8 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24293
24419
  ntd.appendChild(this.createDateHeaderElement(tempData.date));
24294
24420
  addClass([ntd], [AGENDA_CELLS_CLASS, AGENDA_DATE_CLASS, DATE_BORDER_CLASS]);
24295
24421
  var daysCount = getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());
24296
- ntr.setAttribute('aria-rowindex', daysCount.toString());
24297
- if (this.parent.element.querySelector(".e-agenda-view tr[aria-rowindex=\"" + daysCount + "\"]")) {
24422
+ ntr.setAttribute('data-row-index', daysCount.toString());
24423
+ if (this.parent.element.querySelector(".e-agenda-view tr[data-row-index=\"" + daysCount + "\"]")) {
24298
24424
  break;
24299
24425
  }
24300
24426
  ntr.insertBefore(ntd, ntr.childNodes[0]);
@@ -24330,13 +24456,13 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24330
24456
  };
24331
24457
  AgendaBase.prototype.createTableRowElement = function (date, type) {
24332
24458
  var daysCount = getDaysCount(this.parent.selectedDate.getTime(), date.getTime());
24333
- var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });
24459
+ var tr = createElement('tr', { attrs: { 'role': 'row', 'data-row-index': daysCount.toString() } });
24334
24460
  var td = createElement('td', {
24335
24461
  attrs: {
24336
24462
  'class': (type === 'monthHeader') ? MONTH_HEADER_CLASS : AGENDA_CELLS_CLASS,
24337
24463
  'role': 'gridcell',
24338
24464
  'aria-selected': 'false',
24339
- 'aria-colindex': daysCount.toString(),
24465
+ 'data-column-index': daysCount.toString(),
24340
24466
  'data-date': date.getTime().toString()
24341
24467
  }
24342
24468
  });
@@ -24521,7 +24647,7 @@ var Agenda = /** @__PURE__ @class */ (function (_super) {
24521
24647
  for (var day = 0; day < this.parent.agendaDaysCount; day++) {
24522
24648
  var filterData = this.appointmentFiltering(agendaDate);
24523
24649
  var nTr = this.createTableRowElement(agendaDate, 'data');
24524
- if (this.element.querySelector('tr[aria-rowindex="' + parseInt(nTr.getAttribute('aria-rowindex'), 10) + '"]')) {
24650
+ if (this.element.querySelector('tr[data-row-index="' + parseInt(nTr.getAttribute('data-row-index'), 10) + '"]')) {
24525
24651
  agendaDate = addDays(agendaDate, 1);
24526
24652
  continue;
24527
24653
  }
@@ -24585,7 +24711,7 @@ var Agenda = /** @__PURE__ @class */ (function (_super) {
24585
24711
  prepend([].slice.call(emptyTBody.childNodes), tBody);
24586
24712
  this.wireEventActions();
24587
24713
  for (var s = 0, element = tBody.children; s < element.length; s++) {
24588
- if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {
24714
+ if (element[s].getAttribute('data-row-index') === topElement.getAttribute('data-column-index')) {
24589
24715
  var scrollToValue = element[s].offsetTop -
24590
24716
  this.element.querySelector('.e-agenda-item').offsetHeight;
24591
24717
  target.scrollTop = scrollToValue;
@@ -25336,6 +25462,20 @@ var TimelineViews = /** @__PURE__ @class */ (function (_super) {
25336
25462
  this.timelineAppointment.renderAppointments();
25337
25463
  this.parent.notify(eventsLoaded, {});
25338
25464
  };
25465
+ TimelineViews.prototype.getAdjustedDate = function (date) {
25466
+ if (!this.parent.activeViewOptions.timeScale.enable) {
25467
+ return new Date(date.setHours(0, 0, 0, 0));
25468
+ }
25469
+ else {
25470
+ var timeSlots = this.colLevels[this.colLevels.length - 1];
25471
+ for (var i = 0; i < timeSlots.length; i++) {
25472
+ if (timeSlots[i].date.getTime() > date.getTime()) {
25473
+ return timeSlots[i - 1].date;
25474
+ }
25475
+ }
25476
+ }
25477
+ return null;
25478
+ };
25339
25479
  TimelineViews.prototype.destroy = function () {
25340
25480
  if (!this.parent || this.parent && this.parent.isDestroyed) {
25341
25481
  return;
@@ -25494,6 +25634,15 @@ var TimelineMonth = /** @__PURE__ @class */ (function (_super) {
25494
25634
  this.colLevels = colLevels;
25495
25635
  return colLevels;
25496
25636
  };
25637
+ TimelineMonth.prototype.getAdjustedDate = function (startTime) {
25638
+ var timeSlots = this.colLevels[this.colLevels.length - 1];
25639
+ for (var i = 0; i < timeSlots.length; i++) {
25640
+ if (timeSlots[i].date.getTime() > startTime.getTime()) {
25641
+ return timeSlots[i - 1].date;
25642
+ }
25643
+ }
25644
+ return null;
25645
+ };
25497
25646
  TimelineMonth.prototype.destroy = function () {
25498
25647
  if (!this.parent || this.parent && this.parent.isDestroyed) {
25499
25648
  return;
@@ -25781,6 +25930,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25781
25930
  else {
25782
25931
  addClass([td], OTHERMONTH_CLASS);
25783
25932
  }
25933
+ if (td.classList.contains(OTHERMONTH_CLASS)) {
25934
+ continue;
25935
+ }
25784
25936
  td.appendChild(dateHeader);
25785
25937
  if (isDateAvail) {
25786
25938
  td.setAttribute('data-date', date.getTime().toString());
@@ -26294,6 +26446,10 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26294
26446
  var exportName = excelExportOptions.fileName || 'Schedule';
26295
26447
  var exportType = excelExportOptions.exportType || 'xlsx';
26296
26448
  var isIncludeOccurrences = excelExportOptions.includeOccurrences || false;
26449
+ var separator;
26450
+ if (!isNullOrUndefined(excelExportOptions.separator) && excelExportOptions.separator !== ',') {
26451
+ separator = excelExportOptions.separator;
26452
+ }
26297
26453
  var eventCollection;
26298
26454
  if (excelExportOptions.customData) {
26299
26455
  eventCollection = !isIncludeOccurrences ? excelExportOptions.customData :
@@ -26302,9 +26458,9 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26302
26458
  else {
26303
26459
  eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;
26304
26460
  }
26305
- this.processWorkbook(exportColumns, exportName, exportType, eventCollection);
26461
+ this.processWorkbook(exportColumns, exportName, exportType, eventCollection, separator);
26306
26462
  };
26307
- ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection) {
26463
+ ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection, separator) {
26308
26464
  var _this = this;
26309
26465
  var columns = [];
26310
26466
  var rows = [];
@@ -26326,7 +26482,7 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26326
26482
  rows.push({ index: i + 2, cells: columnData });
26327
26483
  });
26328
26484
  var workSheet = [{ columns: columns, rows: rows }];
26329
- var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale);
26485
+ var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);
26330
26486
  book.save(name + '.' + type);
26331
26487
  };
26332
26488
  ExcelExport.prototype.getExportColumns = function (exportOptions) {