@syncfusion/ej2-schedule 20.1.59 → 20.2.38

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 (82) hide show
  1. package/CHANGELOG.md +35 -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 +250 -68
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +254 -67
  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.d.ts +2 -0
  25. package/src/schedule/event-renderer/event-base.js +23 -4
  26. package/src/schedule/event-renderer/month.js +3 -6
  27. package/src/schedule/event-renderer/vertical-view.js +3 -3
  28. package/src/schedule/event-renderer/year.js +2 -2
  29. package/src/schedule/exports/calendar-export.js +1 -1
  30. package/src/schedule/exports/calendar-import.js +32 -18
  31. package/src/schedule/exports/excel-export.js +8 -4
  32. package/src/schedule/popups/event-window.js +3 -1
  33. package/src/schedule/popups/quick-popups.js +5 -4
  34. package/src/schedule/renderer/agenda.js +2 -2
  35. package/src/schedule/renderer/timeline-month.d.ts +1 -0
  36. package/src/schedule/renderer/timeline-month.js +9 -0
  37. package/src/schedule/renderer/timeline-view.d.ts +1 -0
  38. package/src/schedule/renderer/timeline-view.js +14 -0
  39. package/src/schedule/renderer/timeline-year.js +3 -0
  40. package/src/schedule/renderer/vertical-view.d.ts +2 -0
  41. package/src/schedule/renderer/vertical-view.js +37 -5
  42. package/src/schedule/renderer/view-base.d.ts +1 -0
  43. package/src/schedule/renderer/view-base.js +19 -0
  44. package/src/schedule/renderer/year.js +2 -1
  45. package/styles/bootstrap-dark.css +6 -5
  46. package/styles/bootstrap.css +6 -5
  47. package/styles/bootstrap4.css +6 -5
  48. package/styles/bootstrap5-dark.css +5 -3
  49. package/styles/bootstrap5.css +6 -5
  50. package/styles/fabric-dark.css +6 -5
  51. package/styles/fabric.css +6 -5
  52. package/styles/fluent-dark.css +20 -18
  53. package/styles/fluent.css +8 -7
  54. package/styles/highcontrast-light.css +6 -5
  55. package/styles/highcontrast.css +6 -5
  56. package/styles/material-dark.css +6 -5
  57. package/styles/material.css +6 -5
  58. package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
  59. package/styles/recurrence-editor/_material3-definition.scss +15 -0
  60. package/styles/schedule/_fluent-definition.scss +1 -1
  61. package/styles/schedule/_fusionnew-definition.scss +224 -0
  62. package/styles/schedule/_layout.scss +6 -2
  63. package/styles/schedule/_material3-definition.scss +224 -0
  64. package/styles/schedule/bootstrap-dark.css +6 -5
  65. package/styles/schedule/bootstrap.css +6 -5
  66. package/styles/schedule/bootstrap4.css +6 -5
  67. package/styles/schedule/bootstrap5-dark.css +5 -3
  68. package/styles/schedule/bootstrap5.css +6 -5
  69. package/styles/schedule/fabric-dark.css +6 -5
  70. package/styles/schedule/fabric.css +6 -5
  71. package/styles/schedule/fluent-dark.css +20 -18
  72. package/styles/schedule/fluent.css +8 -7
  73. package/styles/schedule/highcontrast-light.css +6 -5
  74. package/styles/schedule/highcontrast.css +6 -5
  75. package/styles/schedule/icons/_fusionnew.scss +232 -0
  76. package/styles/schedule/icons/_material3.scss +232 -0
  77. package/styles/schedule/material-dark.css +6 -5
  78. package/styles/schedule/material.css +6 -5
  79. package/styles/schedule/tailwind-dark.css +5 -3
  80. package/styles/schedule/tailwind.css +6 -5
  81. package/styles/tailwind-dark.css +5 -3
  82. package/styles/tailwind.css +6 -5
@@ -84,7 +84,7 @@ var YearEvent = /** @class */ (function (_super) {
84
84
  }
85
85
  };
86
86
  YearEvent.prototype.timelineYearViewEvents = function () {
87
- var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS);
87
+ var workCell = this.parent.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')');
88
88
  this.cellWidth = workCell.offsetWidth;
89
89
  this.cellHeader = util.getOuterHeight(workCell.querySelector('.' + cls.DATE_HEADER_CLASS));
90
90
  var eventTable = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
@@ -369,7 +369,7 @@ var YearEvent = /** @class */ (function (_super) {
369
369
  'data-id': 'Appointment_' + record[this.fields.id],
370
370
  'data-guid': record.Guid,
371
371
  'role': 'button', 'tabindex': '0',
372
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record), 'aria-selected': 'false', 'aria-grabbed': 'true',
372
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
373
373
  'aria-label': this.parent.getAnnouncementString(record)
374
374
  }
375
375
  });
@@ -19,7 +19,7 @@ var ICalendarExport = /** @class */ (function () {
19
19
  var timeZone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
20
20
  var fields = this.parent.eventFields;
21
21
  eventsData.forEach(function (eventObj) {
22
- var uId = _this.parent.eventBase.generateGuid();
22
+ var uId = eventObj[fields.id] || eventObj.Guid || _this.parent.eventBase.generateGuid();
23
23
  var editedExDate = [];
24
24
  if (eventObj[fields.recurrenceID]) {
25
25
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
@@ -78,8 +78,16 @@ var ICalendarImport = /** @class */ (function () {
78
78
  break;
79
79
  case 'UID':
80
80
  curEvent[uId] = value;
81
- curEvent[fields.id] = typeof (id) === 'string' ? id + count.toString() : id + count;
82
- count++;
81
+ if (typeof (id) == 'number') {
82
+ curEvent[fields.id] = parseInt(value, 10);
83
+ if (isNaN(curEvent[fields.id])) {
84
+ curEvent[fields.id] = id + count;
85
+ count++;
86
+ }
87
+ }
88
+ else {
89
+ curEvent[fields.id] = value;
90
+ }
83
91
  break;
84
92
  case 'SUMMARY':
85
93
  curEvent[fields.subject] = value;
@@ -115,6 +123,10 @@ var ICalendarImport = /** @class */ (function () {
115
123
  var appoint = [];
116
124
  var uId = 'UID';
117
125
  var fields = this.parent.eventFields;
126
+ var appointmentIds = [];
127
+ this.parent.eventsData.forEach(function (eventObj) {
128
+ appointmentIds.push(eventObj[fields.id]);
129
+ });
118
130
  app.forEach(function (eventObj) {
119
131
  var parentObj;
120
132
  var id;
@@ -123,24 +135,26 @@ var ICalendarImport = /** @class */ (function () {
123
135
  parentObj = eventObj;
124
136
  id = eventObj[fields.id];
125
137
  }
126
- var data = app.filter(function (data) { return data.UID === eventObj[uId]; });
127
- if (data.length > 1 && isNullOrUndefined(eventObj[fields.recurrenceID])) {
128
- for (var i = 0; i < data.length; i++) {
129
- // eslint-disable-next-line no-prototype-builtins
130
- if (data[i].hasOwnProperty(fields.recurrenceID)) {
131
- var exdate = data[i][fields.recurrenceID];
132
- data[i][fields.recurrenceID] = id;
133
- data[i][fields.recurrenceException] = null;
134
- parentObj[fields.recurrenceException] = (isNullOrUndefined(parentObj[fields.recurrenceException])) ?
135
- exdate : parentObj[fields.recurrenceException] + ',' + exdate;
136
- appoint.push(data[i]);
138
+ if (appointmentIds.indexOf(eventObj[fields.id]) < 0) {
139
+ var data = app.filter(function (data) { return data.UID === eventObj[uId]; });
140
+ if (data.length > 1 && isNullOrUndefined(eventObj[fields.recurrenceID])) {
141
+ for (var i = 0; i < data.length; i++) {
142
+ // eslint-disable-next-line no-prototype-builtins
143
+ if (data[i].hasOwnProperty(fields.recurrenceID)) {
144
+ var exdate = data[i][fields.recurrenceID];
145
+ data[i][fields.recurrenceID] = id;
146
+ data[i][fields.recurrenceException] = null;
147
+ parentObj[fields.recurrenceException] = (isNullOrUndefined(parentObj[fields.recurrenceException])) ?
148
+ exdate : parentObj[fields.recurrenceException] + ',' + exdate;
149
+ appoint.push(data[i]);
150
+ }
137
151
  }
152
+ appoint.push(parentObj);
153
+ // eslint-disable-next-line no-prototype-builtins
154
+ }
155
+ else if (!eventObj.hasOwnProperty(fields.recurrenceID)) {
156
+ appoint.push(eventObj);
138
157
  }
139
- appoint.push(parentObj);
140
- // eslint-disable-next-line no-prototype-builtins
141
- }
142
- else if (!eventObj.hasOwnProperty(fields.recurrenceID)) {
143
- appoint.push(eventObj);
144
158
  }
145
159
  });
146
160
  return appoint;
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Workbook } from '@syncfusion/ej2-excel-export';
3
- import { extend } from '@syncfusion/ej2-base';
3
+ import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';
4
4
  /**
5
5
  * Excel Export Module
6
6
  */
@@ -14,6 +14,10 @@ var ExcelExport = /** @class */ (function () {
14
14
  var exportName = excelExportOptions.fileName || 'Schedule';
15
15
  var exportType = excelExportOptions.exportType || 'xlsx';
16
16
  var isIncludeOccurrences = excelExportOptions.includeOccurrences || false;
17
+ var separator;
18
+ if (!isNullOrUndefined(excelExportOptions.separator) && excelExportOptions.separator !== ',') {
19
+ separator = excelExportOptions.separator;
20
+ }
17
21
  var eventCollection;
18
22
  if (excelExportOptions.customData) {
19
23
  eventCollection = !isIncludeOccurrences ? excelExportOptions.customData :
@@ -22,9 +26,9 @@ var ExcelExport = /** @class */ (function () {
22
26
  else {
23
27
  eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;
24
28
  }
25
- this.processWorkbook(exportColumns, exportName, exportType, eventCollection);
29
+ this.processWorkbook(exportColumns, exportName, exportType, eventCollection, separator);
26
30
  };
27
- ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection) {
31
+ ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection, separator) {
28
32
  var _this = this;
29
33
  var columns = [];
30
34
  var rows = [];
@@ -46,7 +50,7 @@ var ExcelExport = /** @class */ (function () {
46
50
  rows.push({ index: i + 2, cells: columnData });
47
51
  });
48
52
  var workSheet = [{ columns: columns, rows: rows }];
49
- var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale);
53
+ var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);
50
54
  book.save(name + '.' + type);
51
55
  };
52
56
  ExcelExport.prototype.getExportColumns = function (exportOptions) {
@@ -154,6 +154,7 @@ var EventWindow = /** @class */ (function () {
154
154
  EventWindow.prototype.setDialogContent = function () {
155
155
  this.dialogObject.content = this.getEventWindowContent();
156
156
  this.dialogObject.dataBind();
157
+ this.applyFormValidation();
157
158
  };
158
159
  EventWindow.prototype.preventEventSave = function (e) {
159
160
  if (this.parent && !this.parent.allowKeyboardInteraction && e.code === 'Enter') {
@@ -415,6 +416,7 @@ var EventWindow = /** @class */ (function () {
415
416
  resourceData.colorField + '}"></div><div class="e-resource-text">${' + resourceData.textField + '}</div></div>';
416
417
  if (resourceData.allowMultiple) {
417
418
  var listObj = new MultiSelect({
419
+ enableRtl: this.parent.enableRtl,
418
420
  cssClass: this.parent.cssClass || '',
419
421
  dataSource: resourceData.dataSource,
420
422
  change: this.onMultiselectResourceChange.bind(this),
@@ -473,7 +475,7 @@ var EventWindow = /** @class */ (function () {
473
475
  query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;
474
476
  e.updateData(_this.parent.timezoneDataSource, query);
475
477
  },
476
- htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName },
478
+ htmlAttributes: { 'title': this.getFieldLabel(value), 'name': fieldName, role: 'option' },
477
479
  floatLabelType: 'Always',
478
480
  placeholder: this.getFieldLabel(value),
479
481
  popupHeight: '230px'
@@ -318,8 +318,8 @@ var QuickPopups = /** @class */ (function () {
318
318
  attrs: {
319
319
  'data-id': '' + eventData[fields.id],
320
320
  'data-guid': eventData.Guid, 'role': 'button', 'tabindex': '0',
321
- 'aria-readonly': this_1.parent.eventBase.getReadonlyAttribute(eventData),
322
- 'aria-selected': 'false', 'aria-grabbed': 'true', 'aria-label': this_1.parent.getAnnouncementString(eventData)
321
+ 'aria-disabled': this_1.parent.eventBase.getReadonlyAttribute(eventData),
322
+ 'aria-pressed': 'false', 'aria-grabbed': 'true', 'aria-label': this_1.parent.getAnnouncementString(eventData)
323
323
  }
324
324
  });
325
325
  var templateElement = void 0;
@@ -415,7 +415,7 @@ var QuickPopups = /** @class */ (function () {
415
415
  this.quickPopupHide();
416
416
  return;
417
417
  }
418
- var targetEle = args.event.target;
418
+ var targetEle = !isNullOrUndefined(args.event) ? args.event.target : args.element;
419
419
  if (this.parent.isAdaptive) {
420
420
  this.quickPopupHide();
421
421
  var newEventClone = this.parent.element.querySelector('.' + cls.NEW_EVENT_CLASS);
@@ -511,6 +511,7 @@ var QuickPopups = /** @class */ (function () {
511
511
  }
512
512
  else {
513
513
  var isSameTarget = this.isSameEventClick(events);
514
+ this.parent.selectedElements = [];
514
515
  if (isSameTarget) {
515
516
  return;
516
517
  }
@@ -576,7 +577,7 @@ var QuickPopups = /** @class */ (function () {
576
577
  ("<button class=\"" + (cls.DELETE_CLASS + ' ' + cls.ICON) + "\" title=\"" + this.l10n.getConstant('delete') + "\"></button>") +
577
578
  ("<button class=\"" + cls.CLOSE_CLASS + "\" title=\"" + this.l10n.getConstant('close') + "\"></button></div>") +
578
579
  ("<div class=\"" + cls.SUBJECT_WRAP + "\"><div class=\"" + cls.SUBJECT_CLASS + " " + cls.TEXT_ELLIPSIS + "\" ") +
579
- ("title=\"" + args.eventSubject + "\">" + args.eventSubject + "</div></div >");
580
+ ("title=\"" + (args.eventSubject ? args.eventSubject.replaceAll('"', '\'') : args.eventSubject) + "\">" + args.eventSubject + "</div></div >");
580
581
  break;
581
582
  }
582
583
  var templateWrapper = createElement('div', { innerHTML: header });
@@ -171,7 +171,7 @@ var Agenda = /** @class */ (function (_super) {
171
171
  for (var day = 0; day < this.parent.agendaDaysCount; day++) {
172
172
  var filterData = this.appointmentFiltering(agendaDate);
173
173
  var nTr = this.createTableRowElement(agendaDate, 'data');
174
- if (this.element.querySelector('tr[aria-rowindex="' + parseInt(nTr.getAttribute('aria-rowindex'), 10) + '"]')) {
174
+ if (this.element.querySelector('tr[data-row-index="' + parseInt(nTr.getAttribute('data-row-index'), 10) + '"]')) {
175
175
  agendaDate = util.addDays(agendaDate, 1);
176
176
  continue;
177
177
  }
@@ -235,7 +235,7 @@ var Agenda = /** @class */ (function (_super) {
235
235
  prepend([].slice.call(emptyTBody.childNodes), tBody);
236
236
  this.wireEventActions();
237
237
  for (var s = 0, element = tBody.children; s < element.length; s++) {
238
- if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {
238
+ if (element[s].getAttribute('data-row-index') === topElement.getAttribute('data-column-index')) {
239
239
  var scrollToValue = element[s].offsetTop -
240
240
  this.element.querySelector('.e-agenda-item').offsetHeight;
241
241
  target.scrollTop = scrollToValue;
@@ -24,5 +24,6 @@ export declare class TimelineMonth extends Month {
24
24
  getMonthStart(currentDate: Date): Date;
25
25
  getMonthEnd(currentDate: Date): Date;
26
26
  generateColumnLevels(): TdData[][];
27
+ getAdjustedDate(startTime: Date): Date;
27
28
  destroy(): void;
28
29
  }
@@ -150,6 +150,15 @@ var TimelineMonth = /** @class */ (function (_super) {
150
150
  this.colLevels = colLevels;
151
151
  return colLevels;
152
152
  };
153
+ TimelineMonth.prototype.getAdjustedDate = function (startTime) {
154
+ var timeSlots = this.colLevels[this.colLevels.length - 1];
155
+ for (var i = 0; i < timeSlots.length; i++) {
156
+ if (timeSlots[i].date.getTime() > startTime.getTime()) {
157
+ return timeSlots[i - 1].date;
158
+ }
159
+ }
160
+ return null;
161
+ };
153
162
  TimelineMonth.prototype.destroy = function () {
154
163
  if (!this.parent || this.parent && this.parent.isDestroyed) {
155
164
  return;
@@ -27,5 +27,6 @@ export declare class TimelineViews extends VerticalView {
27
27
  getContentRows(): Element[];
28
28
  getContentTdClass(r: TimeSlotData): string[];
29
29
  renderEvents(): void;
30
+ getAdjustedDate(date: Date): Date;
30
31
  destroy(): void;
31
32
  }
@@ -246,6 +246,20 @@ var TimelineViews = /** @class */ (function (_super) {
246
246
  this.timelineAppointment.renderAppointments();
247
247
  this.parent.notify(event.eventsLoaded, {});
248
248
  };
249
+ TimelineViews.prototype.getAdjustedDate = function (date) {
250
+ if (!this.parent.activeViewOptions.timeScale.enable) {
251
+ return new Date(date.setHours(0, 0, 0, 0));
252
+ }
253
+ else {
254
+ var timeSlots = this.colLevels[this.colLevels.length - 1];
255
+ for (var i = 0; i < timeSlots.length; i++) {
256
+ if (timeSlots[i].date.getTime() > date.getTime()) {
257
+ return timeSlots[i - 1].date;
258
+ }
259
+ }
260
+ }
261
+ return null;
262
+ };
249
263
  TimelineViews.prototype.destroy = function () {
250
264
  if (!this.parent || this.parent && this.parent.isDestroyed) {
251
265
  return;
@@ -271,6 +271,9 @@ var TimelineYear = /** @class */ (function (_super) {
271
271
  else {
272
272
  addClass([td], cls.OTHERMONTH_CLASS);
273
273
  }
274
+ if (td.classList.contains(cls.OTHERMONTH_CLASS)) {
275
+ continue;
276
+ }
274
277
  td.appendChild(dateHeader);
275
278
  if (isDateAvail) {
276
279
  td.setAttribute('data-date', date.getTime().toString());
@@ -23,6 +23,7 @@ export declare class VerticalView extends ViewBase implements IRenderer {
23
23
  setContentHeight(element: HTMLElement, leftPanelElement: HTMLElement, height: number): void;
24
24
  scrollToWorkHour(): void;
25
25
  scrollToHour(hour: string, scrollDate?: Date): void;
26
+ scrollToDate(scrollDate: Date): void;
26
27
  generateColumnLevels(): TdData[][];
27
28
  getDateSlots(renderDates: Date[], workDays: number[], workStartHour?: string, workEndHour?: string): TdData[];
28
29
  private isWorkHourRange;
@@ -56,5 +57,6 @@ export declare class VerticalView extends ViewBase implements IRenderer {
56
57
  getLeftPanelElement(): HTMLElement;
57
58
  getEndDateFromStartDate(start: Date): Date;
58
59
  getTimeSlotRows(handler?: CallbackFunction): TimeSlotData[];
60
+ getAdjustedDate(startTime: Date): Date;
59
61
  destroy(): void;
60
62
  }
@@ -156,11 +156,26 @@ var VerticalView = /** @class */ (function (_super) {
156
156
  };
157
157
  VerticalView.prototype.scrollToHour = function (hour, scrollDate) {
158
158
  var date = this.parent.getStartEndTime(hour);
159
- if (isNullOrUndefined(date) || !isNullOrUndefined(scrollDate)) {
159
+ if (!isNullOrUndefined(scrollDate)) {
160
+ var headerElement = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="' + new Date(util.resetTime(scrollDate)).getTime() + '"]');
161
+ if (headerElement) {
162
+ if (this.parent.enableRtl) {
163
+ var conWrap = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
164
+ this.getScrollableElement().scrollLeft = -(conWrap.offsetWidth - headerElement.offsetLeft - headerElement.offsetWidth);
165
+ }
166
+ else {
167
+ this.getScrollableElement().scrollLeft = headerElement.offsetLeft;
168
+ }
169
+ }
170
+ }
171
+ if (isNullOrUndefined(date)) {
160
172
  return;
161
173
  }
162
174
  this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);
163
175
  };
176
+ VerticalView.prototype.scrollToDate = function (scrollDate) {
177
+ this.scrollToHour(null, scrollDate);
178
+ };
164
179
  VerticalView.prototype.generateColumnLevels = function () {
165
180
  var level = this.getDateSlots(this.renderDates, this.parent.activeViewOptions.workDays);
166
181
  var columnLevels = [];
@@ -499,12 +514,11 @@ var VerticalView = /** @class */ (function (_super) {
499
514
  var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });
500
515
  container.appendChild(wrap);
501
516
  var tbl = this.createTableLayout();
502
- var trEle = createElement('tr');
517
+ var trEle = createElement('tr', { className: cls.HEADER_ROW_CLASS });
503
518
  var rowCount = this.colLevels.length;
504
519
  var lastLevel = this.colLevels[rowCount - 1];
505
520
  for (var i = 0; i < rowCount; i++) {
506
521
  var ntr = trEle.cloneNode();
507
- addClass([ntr], cls.HEADER_ROW_CLASS);
508
522
  var level = this.colLevels[i];
509
523
  for (var j = 0; j < level.length; j++) {
510
524
  ntr.appendChild(this.createTd(level[j]));
@@ -517,13 +531,13 @@ var VerticalView = /** @class */ (function (_super) {
517
531
  return container;
518
532
  };
519
533
  VerticalView.prototype.createAllDayRow = function (table, tdData) {
520
- var ntr = createElement('tr');
521
- addClass([ntr], cls.ALLDAY_ROW_CLASS);
534
+ var ntr = createElement('tr', { className: cls.ALLDAY_ROW_CLASS });
522
535
  for (var j = 0; j < tdData.length; j++) {
523
536
  var td = extend({}, tdData[j]);
524
537
  td.className = [cls.ALLDAY_CELLS_CLASS];
525
538
  td.type = 'alldayCells';
526
539
  var ntd = this.createTd(td);
540
+ ntd.setAttribute('role', 'gridcell');
527
541
  ntd.setAttribute('data-date', td.date.getTime().toString());
528
542
  if (!isNullOrUndefined(td.groupIndex)) {
529
543
  ntd.setAttribute('data-group-index', '' + td.groupIndex);
@@ -556,6 +570,7 @@ var VerticalView = /** @class */ (function (_super) {
556
570
  }
557
571
  if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {
558
572
  tdEle.setAttribute('data-date', td.date.getTime().toString());
573
+ tdEle.setAttribute('role', 'gridcell');
559
574
  if (!isNullOrUndefined(td.groupIndex)) {
560
575
  tdEle.setAttribute('data-group-index', '' + td.groupIndex);
561
576
  }
@@ -758,6 +773,23 @@ var VerticalView = /** @class */ (function (_super) {
758
773
  }
759
774
  return rows;
760
775
  };
776
+ VerticalView.prototype.getAdjustedDate = function (startTime) {
777
+ if (!this.parent.activeViewOptions.timeScale.enable) {
778
+ return new Date(startTime.setHours(0, 0, 0, 0));
779
+ }
780
+ else {
781
+ var timeSlots = this.getTimeSlotRows();
782
+ var startDate = new Date(new Date(timeSlots[0].date.getTime()).
783
+ setHours(startTime.getHours(), startTime.getMinutes(), startTime.getMilliseconds()));
784
+ for (var i = 0; i < timeSlots.length; i++) {
785
+ if (timeSlots[i].date.getTime() > startDate.getTime()) {
786
+ startTime.setHours(timeSlots[i - 1].date.getHours(), timeSlots[i - 1].date.getMinutes(), timeSlots[i - 1].date.getMilliseconds());
787
+ return new Date(startTime);
788
+ }
789
+ }
790
+ }
791
+ return null;
792
+ };
761
793
  VerticalView.prototype.destroy = function () {
762
794
  if (!this.parent || this.parent && this.parent.isDestroyed) {
763
795
  return;
@@ -68,5 +68,6 @@ export declare class ViewBase {
68
68
  retainScrollPosition(): void;
69
69
  getViewStartDate(): Date;
70
70
  getViewEndDate(): Date;
71
+ getAdjustedDate(startTime: Date): Date;
71
72
  destroy(): void;
72
73
  }
@@ -482,6 +482,14 @@ var ViewBase = /** @class */ (function () {
482
482
  var tdDate = new Date(util.resetTime(new Date(+scrollDate)).getTime()).getTime();
483
483
  var dateElement = scrollWrap.querySelector("." + cls.WORK_CELLS_CLASS + "[data-date=\"" + tdDate + "\"]");
484
484
  if (this.parent.currentView === 'Month' && dateElement) {
485
+ if (scrollWrap.scrollWidth > scrollWrap.clientWidth) {
486
+ if (!this.parent.enableRtl) {
487
+ scrollWrap.scrollLeft = dateElement.offsetLeft;
488
+ }
489
+ else {
490
+ scrollWrap.scrollLeft = -(this.parent.getContentTable().offsetWidth - dateElement.offsetLeft - dateElement.offsetWidth);
491
+ }
492
+ }
485
493
  scrollWrap.scrollTop = dateElement.offsetTop;
486
494
  }
487
495
  if (this.parent.currentView === 'TimelineMonth' && dateElement) {
@@ -525,6 +533,17 @@ var ViewBase = /** @class */ (function () {
525
533
  }
526
534
  return endDate;
527
535
  };
536
+ ViewBase.prototype.getAdjustedDate = function (startTime) {
537
+ if (!this.parent.activeViewOptions.timeScale.enable || this.parent.currentView === 'Month' ||
538
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length === 0)) {
539
+ return new Date(startTime.setHours(0, 0, 0, 0));
540
+ }
541
+ else if (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.group.resources.length > 0) {
542
+ startTime.setHours(0, 0, 0, 0);
543
+ return new Date(startTime.setDate(1));
544
+ }
545
+ return null;
546
+ };
528
547
  ViewBase.prototype.destroy = function () {
529
548
  if (this.element && this.element.parentNode) {
530
549
  remove(this.element);
@@ -331,7 +331,8 @@ var Year = /** @class */ (function (_super) {
331
331
  return this.parent.currentView === 'Year' ? util.getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek) : this.getStartDate();
332
332
  };
333
333
  Year.prototype.endDate = function () {
334
- return this.parent.currentView === 'Year' ? util.addDays(util.getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) : this.getEndDate();
334
+ return this.parent.currentView === 'Year' ? util.addDays(util.getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) :
335
+ util.addDays(this.getEndDate(), 1);
335
336
  };
336
337
  Year.prototype.getEndDateFromStartDate = function (start) {
337
338
  var date = new Date(start.getTime());
@@ -1,5 +1,4 @@
1
- /*! recurrence editor theme wise definitions*/
2
- /*! Schedule component's bootstrap theme definitions and variables */
1
+ /*! recurrence editor theme wise definitions*/ /*! Schedule component's bootstrap theme definitions and variables */
3
2
  .e-schedule .e-schedule-toolbar .e-icon-prev::before {
4
3
  content: "\e990";
5
4
  }
@@ -1073,8 +1072,6 @@
1073
1072
  height: 70px;
1074
1073
  }
1075
1074
  .e-schedule .e-month-view .e-content-wrap {
1076
- display: -ms-flexbox;
1077
- display: flex;
1078
1075
  font-size: 13px;
1079
1076
  }
1080
1077
  .e-schedule .e-month-view .e-date-header-wrap table col {
@@ -1503,6 +1500,10 @@
1503
1500
  position: absolute;
1504
1501
  top: 0;
1505
1502
  }
1503
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1504
+ height: 75px;
1505
+ position: relative;
1506
+ }
1506
1507
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1507
1508
  position: absolute;
1508
1509
  }
@@ -2468,7 +2469,7 @@
2468
2469
  }
2469
2470
 
2470
2471
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2471
- width: 485px;
2472
+ width: 502px;
2472
2473
  }
2473
2474
 
2474
2475
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1,5 +1,4 @@
1
- /*! recurrence editor theme wise definitions*/
2
- /*! Schedule component's bootstrap theme definitions and variables */
1
+ /*! recurrence editor theme wise definitions*/ /*! Schedule component's bootstrap theme definitions and variables */
3
2
  .e-schedule .e-schedule-toolbar .e-icon-prev::before {
4
3
  content: "\e990";
5
4
  }
@@ -1071,8 +1070,6 @@
1071
1070
  height: 70px;
1072
1071
  }
1073
1072
  .e-schedule .e-month-view .e-content-wrap {
1074
- display: -ms-flexbox;
1075
- display: flex;
1076
1073
  font-size: 13px;
1077
1074
  }
1078
1075
  .e-schedule .e-month-view .e-date-header-wrap table col {
@@ -1501,6 +1498,10 @@
1501
1498
  position: absolute;
1502
1499
  top: 0;
1503
1500
  }
1501
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1502
+ height: 75px;
1503
+ position: relative;
1504
+ }
1504
1505
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1505
1506
  position: absolute;
1506
1507
  }
@@ -2466,7 +2467,7 @@
2466
2467
  }
2467
2468
 
2468
2469
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2469
- width: 485px;
2470
+ width: 502px;
2470
2471
  }
2471
2472
 
2472
2473
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1,5 +1,4 @@
1
- /*! recurrence editor theme wise definitions*/
2
- /*! Schedule component's bootstrap4 theme definitions and variables */
1
+ /*! recurrence editor theme wise definitions*/ /*! Schedule component's bootstrap4 theme definitions and variables */
3
2
  .e-schedule .e-schedule-toolbar .e-icon-prev::before {
4
3
  content: "\e78c";
5
4
  }
@@ -1073,8 +1072,6 @@
1073
1072
  height: 70px;
1074
1073
  }
1075
1074
  .e-schedule .e-month-view .e-content-wrap {
1076
- display: -ms-flexbox;
1077
- display: flex;
1078
1075
  font-size: 14px;
1079
1076
  }
1080
1077
  .e-schedule .e-month-view .e-date-header-wrap table col {
@@ -1506,6 +1503,10 @@
1506
1503
  position: absolute;
1507
1504
  top: 0;
1508
1505
  }
1506
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1507
+ height: 75px;
1508
+ position: relative;
1509
+ }
1509
1510
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1510
1511
  position: absolute;
1511
1512
  }
@@ -2485,7 +2486,7 @@
2485
2486
  }
2486
2487
 
2487
2488
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2488
- width: 485px;
2489
+ width: 502px;
2489
2490
  }
2490
2491
 
2491
2492
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1079,8 +1079,6 @@
1079
1079
  height: 70px;
1080
1080
  }
1081
1081
  .e-schedule .e-month-view .e-content-wrap {
1082
- display: -ms-flexbox;
1083
- display: flex;
1084
1082
  font-size: 14px;
1085
1083
  }
1086
1084
  .e-schedule .e-month-view .e-date-header-wrap table col {
@@ -1510,6 +1508,10 @@
1510
1508
  position: absolute;
1511
1509
  top: 0;
1512
1510
  }
1511
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1512
+ height: 75px;
1513
+ position: relative;
1514
+ }
1513
1515
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1514
1516
  position: absolute;
1515
1517
  }
@@ -2493,7 +2495,7 @@
2493
2495
  }
2494
2496
 
2495
2497
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2496
- width: 485px;
2498
+ width: 502px;
2497
2499
  }
2498
2500
 
2499
2501
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1,5 +1,4 @@
1
- /*! recurrence editor theme wise definitions*/
2
- /*! Schedule's bootstrap5 theme wise override definitions and variables */
1
+ /*! recurrence editor theme wise definitions*/ /*! Schedule's bootstrap5 theme wise override definitions and variables */
3
2
  .e-schedule .e-schedule-toolbar .e-icon-prev::before {
4
3
  content: "\e765";
5
4
  }
@@ -1080,8 +1079,6 @@
1080
1079
  height: 70px;
1081
1080
  }
1082
1081
  .e-schedule .e-month-view .e-content-wrap {
1083
- display: -ms-flexbox;
1084
- display: flex;
1085
1082
  font-size: 14px;
1086
1083
  }
1087
1084
  .e-schedule .e-month-view .e-date-header-wrap table col {
@@ -1511,6 +1508,10 @@
1511
1508
  position: absolute;
1512
1509
  top: 0;
1513
1510
  }
1511
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1512
+ height: 75px;
1513
+ position: relative;
1514
+ }
1514
1515
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1515
1516
  position: absolute;
1516
1517
  }
@@ -2494,7 +2495,7 @@
2494
2495
  }
2495
2496
 
2496
2497
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2497
- width: 485px;
2498
+ width: 502px;
2498
2499
  }
2499
2500
 
2500
2501
  .e-dialog.e-quick-dialog.e-following-events-dialog {