@syncfusion/ej2-schedule 20.1.61 → 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 (76) hide show
  1. package/CHANGELOG.md +13 -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 +165 -40
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +170 -40
  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/crud.js +9 -7
  17. package/src/schedule/base/interface.d.ts +6 -0
  18. package/src/schedule/base/schedule.d.ts +8 -0
  19. package/src/schedule/base/schedule.js +66 -0
  20. package/src/schedule/event-renderer/agenda-base.js +6 -6
  21. package/src/schedule/event-renderer/event-base.js +4 -4
  22. package/src/schedule/event-renderer/month.js +2 -3
  23. package/src/schedule/event-renderer/vertical-view.js +3 -3
  24. package/src/schedule/event-renderer/year.js +2 -2
  25. package/src/schedule/exports/excel-export.js +8 -4
  26. package/src/schedule/popups/event-window.js +2 -1
  27. package/src/schedule/popups/quick-popups.js +3 -3
  28. package/src/schedule/renderer/agenda.js +2 -2
  29. package/src/schedule/renderer/timeline-month.d.ts +1 -0
  30. package/src/schedule/renderer/timeline-month.js +9 -0
  31. package/src/schedule/renderer/timeline-view.d.ts +1 -0
  32. package/src/schedule/renderer/timeline-view.js +14 -0
  33. package/src/schedule/renderer/timeline-year.js +3 -0
  34. package/src/schedule/renderer/vertical-view.d.ts +1 -0
  35. package/src/schedule/renderer/vertical-view.js +21 -4
  36. package/src/schedule/renderer/view-base.d.ts +1 -0
  37. package/src/schedule/renderer/view-base.js +11 -0
  38. package/src/schedule/renderer/year.js +2 -1
  39. package/styles/bootstrap-dark.css +5 -1
  40. package/styles/bootstrap.css +5 -1
  41. package/styles/bootstrap4.css +5 -1
  42. package/styles/bootstrap5-dark.css +5 -1
  43. package/styles/bootstrap5.css +5 -1
  44. package/styles/fabric-dark.css +5 -1
  45. package/styles/fabric.css +5 -1
  46. package/styles/fluent-dark.css +7 -3
  47. package/styles/fluent.css +7 -3
  48. package/styles/highcontrast-light.css +5 -1
  49. package/styles/highcontrast.css +5 -1
  50. package/styles/material-dark.css +5 -1
  51. package/styles/material.css +5 -1
  52. package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
  53. package/styles/recurrence-editor/_material3-definition.scss +15 -0
  54. package/styles/schedule/_fluent-definition.scss +1 -1
  55. package/styles/schedule/_fusionnew-definition.scss +224 -0
  56. package/styles/schedule/_layout.scss +6 -1
  57. package/styles/schedule/_material3-definition.scss +224 -0
  58. package/styles/schedule/bootstrap-dark.css +5 -1
  59. package/styles/schedule/bootstrap.css +5 -1
  60. package/styles/schedule/bootstrap4.css +5 -1
  61. package/styles/schedule/bootstrap5-dark.css +5 -1
  62. package/styles/schedule/bootstrap5.css +5 -1
  63. package/styles/schedule/fabric-dark.css +5 -1
  64. package/styles/schedule/fabric.css +5 -1
  65. package/styles/schedule/fluent-dark.css +7 -3
  66. package/styles/schedule/fluent.css +7 -3
  67. package/styles/schedule/highcontrast-light.css +5 -1
  68. package/styles/schedule/highcontrast.css +5 -1
  69. package/styles/schedule/icons/_fusionnew.scss +232 -0
  70. package/styles/schedule/icons/_material3.scss +232 -0
  71. package/styles/schedule/material-dark.css +5 -1
  72. package/styles/schedule/material.css +5 -1
  73. package/styles/schedule/tailwind-dark.css +5 -1
  74. package/styles/schedule/tailwind.css +5 -1
  75. package/styles/tailwind-dark.css +5 -1
  76. package/styles/tailwind.css +5 -1
@@ -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();
@@ -6024,7 +6024,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
6024
6024
  var exception = event[this.parent.eventFields.recurrenceException];
6025
6025
  var maxCount;
6026
6026
  if (this.parent.currentView !== 'Agenda' && isMaxCount) {
6027
- maxCount = getDateCount(this.parent.activeView.startDate(), this.parent.activeView.endDate()) + 1;
6027
+ maxCount = getDateCount(viewDate, this.parent.activeView.endDate()) + 1;
6028
6028
  }
6029
6029
  var newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
6030
6030
  var firstDay = this.parent.activeViewOptions.firstDayOfWeek;
@@ -6223,7 +6223,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
6223
6223
  className: BLOCK_APPOINTMENT_CLASS,
6224
6224
  attrs: {
6225
6225
  'data-id': 'Appointment_' + record[this.parent.eventFields.id],
6226
- 'aria-readonly': 'true', 'aria-selected': 'false'
6226
+ 'aria-disabled': 'true', 'aria-pressed': 'false'
6227
6227
  }
6228
6228
  });
6229
6229
  var templateElement;
@@ -6679,8 +6679,8 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6679
6679
  'data-guid': record.Guid,
6680
6680
  'role': 'button',
6681
6681
  'tabindex': '0',
6682
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record),
6683
- 'aria-selected': 'false',
6682
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
6683
+ 'aria-pressed': 'false',
6684
6684
  'aria-grabbed': 'true',
6685
6685
  'aria-label': this.parent.getAnnouncementString(record)
6686
6686
  }
@@ -6775,7 +6775,7 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6775
6775
  });
6776
6776
  var moreIndicatorElement = createElement('div', {
6777
6777
  className: MORE_INDICATOR_CLASS,
6778
- attrs: { 'tabindex': '0', 'role': 'list', 'data-index': index.toString(), 'data-count': '1' },
6778
+ attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },
6779
6779
  innerHTML: '+1&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))
6780
6780
  });
6781
6781
  innerCountWrap.appendChild(moreIndicatorElement);
@@ -7610,7 +7610,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7610
7610
  var attrs = {
7611
7611
  'data-id': 'Appointment_' + record[this.fields.id],
7612
7612
  'role': 'button', 'tabindex': '0',
7613
- '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',
7614
7614
  'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)
7615
7615
  };
7616
7616
  if (!isCloneElement) {
@@ -7905,8 +7905,7 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7905
7905
  'tabindex': '0',
7906
7906
  'data-count': count.toString(),
7907
7907
  'data-start-date': startDate.getTime().toString(),
7908
- 'data-end-date': endDate.getTime().toString(),
7909
- 'role': 'list'
7908
+ 'data-end-date': endDate.getTime().toString()
7910
7909
  }
7911
7910
  });
7912
7911
  return moreIndicatorElement;
@@ -9105,8 +9104,8 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9105
9104
  attrs: {
9106
9105
  'data-id': '' + eventData[fields.id],
9107
9106
  'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0',
9108
- 'aria-readonly': this_1.parent.eventBase.getReadonlyAttribute(eventData),
9109
- '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)
9110
9109
  }
9111
9110
  });
9112
9111
  var templateElement = void 0;
@@ -9202,7 +9201,7 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9202
9201
  this.quickPopupHide();
9203
9202
  return;
9204
9203
  }
9205
- var targetEle = args.event.target;
9204
+ var targetEle = !isNullOrUndefined(args.event) ? args.event.target : args.element;
9206
9205
  if (this.parent.isAdaptive) {
9207
9206
  this.quickPopupHide();
9208
9207
  var newEventClone = this.parent.element.querySelector('.' + NEW_EVENT_CLASS);
@@ -10623,7 +10622,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10623
10622
  value: VALUEFIELD
10624
10623
  },
10625
10624
  placeholder: this.localeObj.getConstant(REPEAT),
10626
- htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },
10625
+ htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT), role: 'option' },
10627
10626
  change: function (args) {
10628
10627
  self.setProperties({ selectedType: _this.frequencies.indexOf(args.value) }, false);
10629
10628
  self.element.querySelector('.' + REPEATCONTENT).innerHTML =
@@ -10645,6 +10644,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10645
10644
  text: TEXTFIELD,
10646
10645
  value: VALUEFIELD
10647
10646
  },
10647
+ htmlAttributes: { role: 'option' },
10648
10648
  change: function (args) {
10649
10649
  self.freshOnEndForm();
10650
10650
  self.updateEndOnForm(args.value);
@@ -10662,6 +10662,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10662
10662
  text: TEXTFIELD,
10663
10663
  value: VALUEFIELD
10664
10664
  },
10665
+ htmlAttributes: { role: 'option' },
10665
10666
  index: 1,
10666
10667
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
10667
10668
  change: function (args) {
@@ -10681,6 +10682,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10681
10682
  text: TEXTFIELD,
10682
10683
  value: VALUEFIELD
10683
10684
  },
10685
+ htmlAttributes: { role: 'option' },
10684
10686
  enableRtl: this.enableRtl,
10685
10687
  index: 7,
10686
10688
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -11796,6 +11798,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
11796
11798
  resourceData.colorField + '}"></div><div class="e-resource-text">${' + resourceData.textField + '}</div></div>';
11797
11799
  if (resourceData.allowMultiple) {
11798
11800
  var listObj = new MultiSelect({
11801
+ enableRtl: this.parent.enableRtl,
11799
11802
  cssClass: this.parent.cssClass || '',
11800
11803
  dataSource: resourceData.dataSource,
11801
11804
  change: this.onMultiselectResourceChange.bind(this),
@@ -11854,7 +11857,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
11854
11857
  query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;
11855
11858
  e.updateData(_this.parent.timezoneDataSource, query);
11856
11859
  },
11857
- htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },
11860
+ htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName, role: 'option' },
11858
11861
  floatLabelType: 'Always',
11859
11862
  placeholder: this.getFieldLabel(value),
11860
11863
  popupHeight: '230px'
@@ -14352,13 +14355,15 @@ var Crud = /** @__PURE__ @class */ (function () {
14352
14355
  else {
14353
14356
  endDate = new Date(+followEvent[fields.startTime]);
14354
14357
  var newRecurrenceRule = followEvent[fields.recurrenceRule];
14355
- var startDate = parentEvent[fields.startTime];
14356
- var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
14357
- var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
14358
- var untilDate = new Date(dateCollection.slice(-1)[0]);
14359
- untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
14360
- endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
14361
- 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
+ }
14362
14367
  }
14363
14368
  parentEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(recurrenceRule, addDays(new Date(endDate.getTime()), -1), true);
14364
14369
  };
@@ -18239,6 +18244,72 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
18239
18244
  this.eventWindow.dialogClose();
18240
18245
  }
18241
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
+ };
18242
18313
  /**
18243
18314
  * To manually close the quick info popup
18244
18315
  *
@@ -19735,7 +19806,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19735
19806
  }
19736
19807
  };
19737
19808
  YearEvent.prototype.timelineYearViewEvents = function () {
19738
- var workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS);
19809
+ var workCell = this.parent.element.querySelector('.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')');
19739
19810
  this.cellWidth = workCell.offsetWidth;
19740
19811
  this.cellHeader = getOuterHeight(workCell.querySelector('.' + DATE_HEADER_CLASS));
19741
19812
  var eventTable = this.parent.element.querySelector('.' + EVENT_TABLE_CLASS);
@@ -20020,7 +20091,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
20020
20091
  'data-id': 'Appointment_' + record[this.fields.id],
20021
20092
  'data-guid': record.Guid,
20022
20093
  'role': 'button', 'tabindex': '0',
20023
- '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',
20024
20095
  'aria-label': this.parent.getAnnouncementString(record)
20025
20096
  }
20026
20097
  });
@@ -22005,6 +22076,17 @@ var ViewBase = /** @__PURE__ @class */ (function () {
22005
22076
  }
22006
22077
  return endDate;
22007
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
+ };
22008
22090
  ViewBase.prototype.destroy = function () {
22009
22091
  if (this.element && this.element.parentNode) {
22010
22092
  remove(this.element);
@@ -22524,12 +22606,11 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22524
22606
  var wrap = createElement('div', { className: DATE_HEADER_WRAP_CLASS });
22525
22607
  container.appendChild(wrap);
22526
22608
  var tbl = this.createTableLayout();
22527
- var trEle = createElement('tr');
22609
+ var trEle = createElement('tr', { className: HEADER_ROW_CLASS });
22528
22610
  var rowCount = this.colLevels.length;
22529
22611
  var lastLevel = this.colLevels[rowCount - 1];
22530
22612
  for (var i = 0; i < rowCount; i++) {
22531
22613
  var ntr = trEle.cloneNode();
22532
- addClass([ntr], HEADER_ROW_CLASS);
22533
22614
  var level = this.colLevels[i];
22534
22615
  for (var j = 0; j < level.length; j++) {
22535
22616
  ntr.appendChild(this.createTd(level[j]));
@@ -22542,13 +22623,13 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22542
22623
  return container;
22543
22624
  };
22544
22625
  VerticalView.prototype.createAllDayRow = function (table, tdData) {
22545
- var ntr = createElement('tr');
22546
- addClass([ntr], ALLDAY_ROW_CLASS);
22626
+ var ntr = createElement('tr', { className: ALLDAY_ROW_CLASS });
22547
22627
  for (var j = 0; j < tdData.length; j++) {
22548
22628
  var td = extend({}, tdData[j]);
22549
22629
  td.className = [ALLDAY_CELLS_CLASS];
22550
22630
  td.type = 'alldayCells';
22551
22631
  var ntd = this.createTd(td);
22632
+ ntd.setAttribute('role', 'gridcell');
22552
22633
  ntd.setAttribute('data-date', td.date.getTime().toString());
22553
22634
  if (!isNullOrUndefined(td.groupIndex)) {
22554
22635
  ntd.setAttribute('data-group-index', '' + td.groupIndex);
@@ -22581,6 +22662,7 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22581
22662
  }
22582
22663
  if (td.type === 'dateHeader' && td.className.indexOf(HEADER_CELLS_CLASS) >= 0) {
22583
22664
  tdEle.setAttribute('data-date', td.date.getTime().toString());
22665
+ tdEle.setAttribute('role', 'gridcell');
22584
22666
  if (!isNullOrUndefined(td.groupIndex)) {
22585
22667
  tdEle.setAttribute('data-group-index', '' + td.groupIndex);
22586
22668
  }
@@ -22783,6 +22865,23 @@ var VerticalView = /** @__PURE__ @class */ (function (_super) {
22783
22865
  }
22784
22866
  return rows;
22785
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
+ };
22786
22885
  VerticalView.prototype.destroy = function () {
22787
22886
  if (!this.parent || this.parent && this.parent.isDestroyed) {
22788
22887
  return;
@@ -23924,7 +24023,8 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23924
24023
  return this.parent.currentView === 'Year' ? getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek) : this.getStartDate();
23925
24024
  };
23926
24025
  Year.prototype.endDate = function () {
23927
- 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);
23928
24028
  };
23929
24029
  Year.prototype.getEndDateFromStartDate = function (start) {
23930
24030
  var date = new Date(start.getTime());
@@ -24050,8 +24150,8 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24050
24150
  'data-guid': listData[li].Guid,
24051
24151
  'role': 'button',
24052
24152
  'tabindex': '0',
24053
- 'aria-readonly': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
24054
- 'aria-selected': 'false',
24153
+ 'aria-disabled': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
24154
+ 'aria-pressed': 'false',
24055
24155
  'aria-grabbed': 'true',
24056
24156
  'aria-label': _this.parent.getAnnouncementString(listData[li])
24057
24157
  }
@@ -24319,8 +24419,8 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24319
24419
  ntd.appendChild(this.createDateHeaderElement(tempData.date));
24320
24420
  addClass([ntd], [AGENDA_CELLS_CLASS, AGENDA_DATE_CLASS, DATE_BORDER_CLASS]);
24321
24421
  var daysCount = getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());
24322
- ntr.setAttribute('aria-rowindex', daysCount.toString());
24323
- 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 + "\"]")) {
24324
24424
  break;
24325
24425
  }
24326
24426
  ntr.insertBefore(ntd, ntr.childNodes[0]);
@@ -24356,13 +24456,13 @@ var AgendaBase = /** @__PURE__ @class */ (function (_super) {
24356
24456
  };
24357
24457
  AgendaBase.prototype.createTableRowElement = function (date, type) {
24358
24458
  var daysCount = getDaysCount(this.parent.selectedDate.getTime(), date.getTime());
24359
- var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });
24459
+ var tr = createElement('tr', { attrs: { 'role': 'row', 'data-row-index': daysCount.toString() } });
24360
24460
  var td = createElement('td', {
24361
24461
  attrs: {
24362
24462
  'class': (type === 'monthHeader') ? MONTH_HEADER_CLASS : AGENDA_CELLS_CLASS,
24363
24463
  'role': 'gridcell',
24364
24464
  'aria-selected': 'false',
24365
- 'aria-colindex': daysCount.toString(),
24465
+ 'data-column-index': daysCount.toString(),
24366
24466
  'data-date': date.getTime().toString()
24367
24467
  }
24368
24468
  });
@@ -24547,7 +24647,7 @@ var Agenda = /** @__PURE__ @class */ (function (_super) {
24547
24647
  for (var day = 0; day < this.parent.agendaDaysCount; day++) {
24548
24648
  var filterData = this.appointmentFiltering(agendaDate);
24549
24649
  var nTr = this.createTableRowElement(agendaDate, 'data');
24550
- 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) + '"]')) {
24551
24651
  agendaDate = addDays(agendaDate, 1);
24552
24652
  continue;
24553
24653
  }
@@ -24611,7 +24711,7 @@ var Agenda = /** @__PURE__ @class */ (function (_super) {
24611
24711
  prepend([].slice.call(emptyTBody.childNodes), tBody);
24612
24712
  this.wireEventActions();
24613
24713
  for (var s = 0, element = tBody.children; s < element.length; s++) {
24614
- if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {
24714
+ if (element[s].getAttribute('data-row-index') === topElement.getAttribute('data-column-index')) {
24615
24715
  var scrollToValue = element[s].offsetTop -
24616
24716
  this.element.querySelector('.e-agenda-item').offsetHeight;
24617
24717
  target.scrollTop = scrollToValue;
@@ -25362,6 +25462,20 @@ var TimelineViews = /** @__PURE__ @class */ (function (_super) {
25362
25462
  this.timelineAppointment.renderAppointments();
25363
25463
  this.parent.notify(eventsLoaded, {});
25364
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
+ };
25365
25479
  TimelineViews.prototype.destroy = function () {
25366
25480
  if (!this.parent || this.parent && this.parent.isDestroyed) {
25367
25481
  return;
@@ -25520,6 +25634,15 @@ var TimelineMonth = /** @__PURE__ @class */ (function (_super) {
25520
25634
  this.colLevels = colLevels;
25521
25635
  return colLevels;
25522
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
+ };
25523
25646
  TimelineMonth.prototype.destroy = function () {
25524
25647
  if (!this.parent || this.parent && this.parent.isDestroyed) {
25525
25648
  return;
@@ -25807,6 +25930,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25807
25930
  else {
25808
25931
  addClass([td], OTHERMONTH_CLASS);
25809
25932
  }
25933
+ if (td.classList.contains(OTHERMONTH_CLASS)) {
25934
+ continue;
25935
+ }
25810
25936
  td.appendChild(dateHeader);
25811
25937
  if (isDateAvail) {
25812
25938
  td.setAttribute('data-date', date.getTime().toString());
@@ -26320,6 +26446,10 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26320
26446
  var exportName = excelExportOptions.fileName || 'Schedule';
26321
26447
  var exportType = excelExportOptions.exportType || 'xlsx';
26322
26448
  var isIncludeOccurrences = excelExportOptions.includeOccurrences || false;
26449
+ var separator;
26450
+ if (!isNullOrUndefined(excelExportOptions.separator) && excelExportOptions.separator !== ',') {
26451
+ separator = excelExportOptions.separator;
26452
+ }
26323
26453
  var eventCollection;
26324
26454
  if (excelExportOptions.customData) {
26325
26455
  eventCollection = !isIncludeOccurrences ? excelExportOptions.customData :
@@ -26328,9 +26458,9 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26328
26458
  else {
26329
26459
  eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;
26330
26460
  }
26331
- this.processWorkbook(exportColumns, exportName, exportType, eventCollection);
26461
+ this.processWorkbook(exportColumns, exportName, exportType, eventCollection, separator);
26332
26462
  };
26333
- ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection) {
26463
+ ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection, separator) {
26334
26464
  var _this = this;
26335
26465
  var columns = [];
26336
26466
  var rows = [];
@@ -26352,7 +26482,7 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
26352
26482
  rows.push({ index: i + 2, cells: columnData });
26353
26483
  });
26354
26484
  var workSheet = [{ columns: columns, rows: rows }];
26355
- var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale);
26485
+ var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);
26356
26486
  book.save(name + '.' + type);
26357
26487
  };
26358
26488
  ExcelExport.prototype.getExportColumns = function (exportOptions) {