@syncfusion/ej2-schedule 20.1.61 → 20.2.40

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 (81) hide show
  1. package/CHANGELOG.md +31 -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 +257 -84
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +261 -83
  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.d.ts +1 -0
  17. package/src/schedule/actions/crud.js +36 -9
  18. package/src/schedule/base/interface.d.ts +7 -1
  19. package/src/schedule/base/schedule.d.ts +8 -0
  20. package/src/schedule/base/schedule.js +75 -21
  21. package/src/schedule/event-renderer/agenda-base.js +6 -6
  22. package/src/schedule/event-renderer/event-base.d.ts +2 -0
  23. package/src/schedule/event-renderer/event-base.js +21 -5
  24. package/src/schedule/event-renderer/month.js +2 -3
  25. package/src/schedule/event-renderer/vertical-view.js +3 -3
  26. package/src/schedule/event-renderer/year.js +2 -2
  27. package/src/schedule/exports/calendar-export.d.ts +1 -0
  28. package/src/schedule/exports/calendar-export.js +6 -2
  29. package/src/schedule/exports/calendar-import.js +32 -18
  30. package/src/schedule/exports/excel-export.js +8 -4
  31. package/src/schedule/popups/event-window.js +3 -1
  32. package/src/schedule/popups/quick-popups.js +3 -3
  33. package/src/schedule/renderer/agenda.js +2 -2
  34. package/src/schedule/renderer/timeline-month.d.ts +1 -0
  35. package/src/schedule/renderer/timeline-month.js +9 -0
  36. package/src/schedule/renderer/timeline-view.d.ts +1 -0
  37. package/src/schedule/renderer/timeline-view.js +14 -0
  38. package/src/schedule/renderer/timeline-year.js +3 -0
  39. package/src/schedule/renderer/vertical-view.d.ts +1 -0
  40. package/src/schedule/renderer/vertical-view.js +21 -4
  41. package/src/schedule/renderer/view-base.d.ts +1 -0
  42. package/src/schedule/renderer/view-base.js +11 -0
  43. package/src/schedule/renderer/year.js +2 -1
  44. package/styles/bootstrap-dark.css +5 -1
  45. package/styles/bootstrap.css +5 -1
  46. package/styles/bootstrap4.css +5 -1
  47. package/styles/bootstrap5-dark.css +5 -1
  48. package/styles/bootstrap5.css +5 -1
  49. package/styles/fabric-dark.css +5 -1
  50. package/styles/fabric.css +5 -1
  51. package/styles/fluent-dark.css +20 -16
  52. package/styles/fluent.css +7 -3
  53. package/styles/highcontrast-light.css +5 -1
  54. package/styles/highcontrast.css +5 -1
  55. package/styles/material-dark.css +5 -1
  56. package/styles/material.css +5 -1
  57. package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
  58. package/styles/recurrence-editor/_material3-definition.scss +15 -0
  59. package/styles/schedule/_fluent-definition.scss +1 -1
  60. package/styles/schedule/_fusionnew-definition.scss +224 -0
  61. package/styles/schedule/_layout.scss +6 -1
  62. package/styles/schedule/_material3-definition.scss +224 -0
  63. package/styles/schedule/bootstrap-dark.css +5 -1
  64. package/styles/schedule/bootstrap.css +5 -1
  65. package/styles/schedule/bootstrap4.css +5 -1
  66. package/styles/schedule/bootstrap5-dark.css +5 -1
  67. package/styles/schedule/bootstrap5.css +5 -1
  68. package/styles/schedule/fabric-dark.css +5 -1
  69. package/styles/schedule/fabric.css +5 -1
  70. package/styles/schedule/fluent-dark.css +20 -16
  71. package/styles/schedule/fluent.css +7 -3
  72. package/styles/schedule/highcontrast-light.css +5 -1
  73. package/styles/schedule/highcontrast.css +5 -1
  74. package/styles/schedule/icons/_fusionnew.scss +232 -0
  75. package/styles/schedule/icons/_material3.scss +232 -0
  76. package/styles/schedule/material-dark.css +5 -1
  77. package/styles/schedule/material.css +5 -1
  78. package/styles/schedule/tailwind-dark.css +5 -1
  79. package/styles/schedule/tailwind.css +5 -1
  80. package/styles/tailwind-dark.css +5 -1
  81. package/styles/tailwind.css +5 -1
@@ -374,7 +374,7 @@ var MonthEvent = /** @class */ (function (_super) {
374
374
  var attrs = {
375
375
  'data-id': 'Appointment_' + record[this.fields.id],
376
376
  'role': 'button', 'tabindex': '0',
377
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record), 'aria-selected': 'false', 'aria-grabbed': 'true',
377
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
378
378
  'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)
379
379
  };
380
380
  if (!isCloneElement) {
@@ -669,8 +669,7 @@ var MonthEvent = /** @class */ (function (_super) {
669
669
  'tabindex': '0',
670
670
  'data-count': count.toString(),
671
671
  'data-start-date': startDate.getTime().toString(),
672
- 'data-end-date': endDate.getTime().toString(),
673
- 'role': 'list'
672
+ 'data-end-date': endDate.getTime().toString()
674
673
  }
675
674
  });
676
675
  return moreIndicatorElement;
@@ -282,8 +282,8 @@ var VerticalEvent = /** @class */ (function (_super) {
282
282
  'data-guid': record.Guid,
283
283
  'role': 'button',
284
284
  'tabindex': '0',
285
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record),
286
- 'aria-selected': 'false',
285
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
286
+ 'aria-pressed': 'false',
287
287
  'aria-grabbed': 'true',
288
288
  'aria-label': this.parent.getAnnouncementString(record)
289
289
  }
@@ -378,7 +378,7 @@ var VerticalEvent = /** @class */ (function (_super) {
378
378
  });
379
379
  var moreIndicatorElement = createElement('div', {
380
380
  className: cls.MORE_INDICATOR_CLASS,
381
- attrs: { 'tabindex': '0', 'role': 'list', 'data-index': index.toString(), 'data-count': '1' },
381
+ attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },
382
382
  innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))
383
383
  });
384
384
  innerCountWrap.appendChild(moreIndicatorElement);
@@ -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
  });
@@ -6,6 +6,7 @@ export declare class ICalendarExport {
6
6
  private parent;
7
7
  constructor(parent: Schedule);
8
8
  initializeCalendarExport(fileName: string, customData: Record<string, any>[]): void;
9
+ getCalendarString(fileName?: string, customData?: Record<string, any>[]): string;
9
10
  private customFieldFilter;
10
11
  private convertDateToString;
11
12
  private download;
@@ -9,6 +9,10 @@ var ICalendarExport = /** @class */ (function () {
9
9
  this.parent = parent;
10
10
  }
11
11
  ICalendarExport.prototype.initializeCalendarExport = function (fileName, customData) {
12
+ var icsString = this.getCalendarString(fileName, customData);
13
+ this.download(icsString, fileName);
14
+ };
15
+ ICalendarExport.prototype.getCalendarString = function (fileName, customData) {
12
16
  var _this = this;
13
17
  var eventsData = (customData) ? customData :
14
18
  extend([], this.parent.eventsData, null, true);
@@ -19,7 +23,7 @@ var ICalendarExport = /** @class */ (function () {
19
23
  var timeZone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
20
24
  var fields = this.parent.eventFields;
21
25
  eventsData.forEach(function (eventObj) {
22
- var uId = _this.parent.eventBase.generateGuid();
26
+ var uId = eventObj[fields.id] || eventObj.Guid || _this.parent.eventBase.generateGuid();
23
27
  var editedExDate = [];
24
28
  if (eventObj[fields.recurrenceID]) {
25
29
  var filter = _this.filterEvents(filterCollection, fields.id, eventObj[fields.recurrenceID]);
@@ -94,7 +98,7 @@ var ICalendarExport = /** @class */ (function () {
94
98
  'X-WR-TIMEZONE:' + timeZone
95
99
  ].join(SEPARATOR);
96
100
  var icsString = iCalendar + SEPARATOR + iCalendarEvents.join(SEPARATOR) + SEPARATOR + 'END:VCALENDAR';
97
- this.download(icsString, fileName);
101
+ return icsString;
98
102
  };
99
103
  ICalendarExport.prototype.customFieldFilter = function (eventObj, fields) {
100
104
  var defaultFields = Object.keys(fields).map(function (key) { return fields[key]; });
@@ -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);
@@ -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());
@@ -57,5 +57,6 @@ export declare class VerticalView extends ViewBase implements IRenderer {
57
57
  getLeftPanelElement(): HTMLElement;
58
58
  getEndDateFromStartDate(start: Date): Date;
59
59
  getTimeSlotRows(handler?: CallbackFunction): TimeSlotData[];
60
+ getAdjustedDate(startTime: Date): Date;
60
61
  destroy(): void;
61
62
  }
@@ -514,12 +514,11 @@ var VerticalView = /** @class */ (function (_super) {
514
514
  var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });
515
515
  container.appendChild(wrap);
516
516
  var tbl = this.createTableLayout();
517
- var trEle = createElement('tr');
517
+ var trEle = createElement('tr', { className: cls.HEADER_ROW_CLASS });
518
518
  var rowCount = this.colLevels.length;
519
519
  var lastLevel = this.colLevels[rowCount - 1];
520
520
  for (var i = 0; i < rowCount; i++) {
521
521
  var ntr = trEle.cloneNode();
522
- addClass([ntr], cls.HEADER_ROW_CLASS);
523
522
  var level = this.colLevels[i];
524
523
  for (var j = 0; j < level.length; j++) {
525
524
  ntr.appendChild(this.createTd(level[j]));
@@ -532,13 +531,13 @@ var VerticalView = /** @class */ (function (_super) {
532
531
  return container;
533
532
  };
534
533
  VerticalView.prototype.createAllDayRow = function (table, tdData) {
535
- var ntr = createElement('tr');
536
- addClass([ntr], cls.ALLDAY_ROW_CLASS);
534
+ var ntr = createElement('tr', { className: cls.ALLDAY_ROW_CLASS });
537
535
  for (var j = 0; j < tdData.length; j++) {
538
536
  var td = extend({}, tdData[j]);
539
537
  td.className = [cls.ALLDAY_CELLS_CLASS];
540
538
  td.type = 'alldayCells';
541
539
  var ntd = this.createTd(td);
540
+ ntd.setAttribute('role', 'gridcell');
542
541
  ntd.setAttribute('data-date', td.date.getTime().toString());
543
542
  if (!isNullOrUndefined(td.groupIndex)) {
544
543
  ntd.setAttribute('data-group-index', '' + td.groupIndex);
@@ -571,6 +570,7 @@ var VerticalView = /** @class */ (function (_super) {
571
570
  }
572
571
  if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {
573
572
  tdEle.setAttribute('data-date', td.date.getTime().toString());
573
+ tdEle.setAttribute('role', 'gridcell');
574
574
  if (!isNullOrUndefined(td.groupIndex)) {
575
575
  tdEle.setAttribute('data-group-index', '' + td.groupIndex);
576
576
  }
@@ -773,6 +773,23 @@ var VerticalView = /** @class */ (function (_super) {
773
773
  }
774
774
  return rows;
775
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
+ };
776
793
  VerticalView.prototype.destroy = function () {
777
794
  if (!this.parent || this.parent && this.parent.isDestroyed) {
778
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
  }
@@ -533,6 +533,17 @@ var ViewBase = /** @class */ (function () {
533
533
  }
534
534
  return endDate;
535
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
+ };
536
547
  ViewBase.prototype.destroy = function () {
537
548
  if (this.element && this.element.parentNode) {
538
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());
@@ -1500,6 +1500,10 @@
1500
1500
  position: absolute;
1501
1501
  top: 0;
1502
1502
  }
1503
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1504
+ height: 75px;
1505
+ position: relative;
1506
+ }
1503
1507
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1504
1508
  position: absolute;
1505
1509
  }
@@ -2465,7 +2469,7 @@
2465
2469
  }
2466
2470
 
2467
2471
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2468
- width: 485px;
2472
+ width: 502px;
2469
2473
  }
2470
2474
 
2471
2475
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1498,6 +1498,10 @@
1498
1498
  position: absolute;
1499
1499
  top: 0;
1500
1500
  }
1501
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1502
+ height: 75px;
1503
+ position: relative;
1504
+ }
1501
1505
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1502
1506
  position: absolute;
1503
1507
  }
@@ -2463,7 +2467,7 @@
2463
2467
  }
2464
2468
 
2465
2469
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2466
- width: 485px;
2470
+ width: 502px;
2467
2471
  }
2468
2472
 
2469
2473
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1503,6 +1503,10 @@
1503
1503
  position: absolute;
1504
1504
  top: 0;
1505
1505
  }
1506
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1507
+ height: 75px;
1508
+ position: relative;
1509
+ }
1506
1510
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1507
1511
  position: absolute;
1508
1512
  }
@@ -2482,7 +2486,7 @@
2482
2486
  }
2483
2487
 
2484
2488
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2485
- width: 485px;
2489
+ width: 502px;
2486
2490
  }
2487
2491
 
2488
2492
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1508,6 +1508,10 @@
1508
1508
  position: absolute;
1509
1509
  top: 0;
1510
1510
  }
1511
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1512
+ height: 75px;
1513
+ position: relative;
1514
+ }
1511
1515
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1512
1516
  position: absolute;
1513
1517
  }
@@ -2491,7 +2495,7 @@
2491
2495
  }
2492
2496
 
2493
2497
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2494
- width: 485px;
2498
+ width: 502px;
2495
2499
  }
2496
2500
 
2497
2501
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1508,6 +1508,10 @@
1508
1508
  position: absolute;
1509
1509
  top: 0;
1510
1510
  }
1511
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1512
+ height: 75px;
1513
+ position: relative;
1514
+ }
1511
1515
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1512
1516
  position: absolute;
1513
1517
  }
@@ -2491,7 +2495,7 @@
2491
2495
  }
2492
2496
 
2493
2497
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2494
- width: 485px;
2498
+ width: 502px;
2495
2499
  }
2496
2500
 
2497
2501
  .e-dialog.e-quick-dialog.e-following-events-dialog {
@@ -1500,6 +1500,10 @@
1500
1500
  position: absolute;
1501
1501
  top: 0;
1502
1502
  }
1503
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1504
+ height: 75px;
1505
+ position: relative;
1506
+ }
1503
1507
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1504
1508
  position: absolute;
1505
1509
  }
@@ -2466,7 +2470,7 @@
2466
2470
  }
2467
2471
 
2468
2472
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2469
- width: 485px;
2473
+ width: 502px;
2470
2474
  }
2471
2475
 
2472
2476
  .e-dialog.e-quick-dialog.e-following-events-dialog {
package/styles/fabric.css CHANGED
@@ -1500,6 +1500,10 @@
1500
1500
  position: absolute;
1501
1501
  top: 0;
1502
1502
  }
1503
+ .e-schedule .e-timeline-year-view .e-event-table .e-appointment-container.e-event-container {
1504
+ height: 75px;
1505
+ position: relative;
1506
+ }
1503
1507
  .e-schedule .e-timeline-year-view .e-event-table .e-appointment-wrapper {
1504
1508
  position: absolute;
1505
1509
  }
@@ -2466,7 +2470,7 @@
2466
2470
  }
2467
2471
 
2468
2472
  .e-bigger .e-dialog.e-quick-dialog.e-following-events-dialog {
2469
- width: 485px;
2473
+ width: 502px;
2470
2474
  }
2471
2475
 
2472
2476
  .e-dialog.e-quick-dialog.e-following-events-dialog {