@syncfusion/ej2-schedule 20.2.45 → 20.3.47

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 (125) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/ej2-schedule.min.js +10 -0
  3. package/dist/ej2-schedule.umd.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +603 -218
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +621 -230
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +2 -2
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +16 -16
  13. package/src/recurrence-editor/recurrence-editor-model.d.ts +1 -1
  14. package/src/recurrence-editor/recurrence-editor.d.ts +1 -0
  15. package/src/recurrence-editor/recurrence-editor.js +37 -10
  16. package/src/schedule/actions/action-base.js +5 -3
  17. package/src/schedule/actions/crud.js +1 -2
  18. package/src/schedule/actions/drag.js +17 -14
  19. package/src/schedule/actions/resize.js +1 -3
  20. package/src/schedule/actions/touch.js +2 -2
  21. package/src/schedule/actions/virtual-scroll.d.ts +12 -3
  22. package/src/schedule/actions/virtual-scroll.js +206 -54
  23. package/src/schedule/base/interface.d.ts +2 -1
  24. package/src/schedule/base/schedule-model.d.ts +7 -0
  25. package/src/schedule/base/schedule.d.ts +13 -0
  26. package/src/schedule/base/schedule.js +13 -4
  27. package/src/schedule/base/util.d.ts +15 -0
  28. package/src/schedule/base/util.js +29 -3
  29. package/src/schedule/event-renderer/agenda-base.js +3 -5
  30. package/src/schedule/event-renderer/event-base.d.ts +2 -1
  31. package/src/schedule/event-renderer/event-base.js +30 -3
  32. package/src/schedule/event-renderer/month.d.ts +1 -0
  33. package/src/schedule/event-renderer/month.js +8 -6
  34. package/src/schedule/event-renderer/vertical-view.d.ts +3 -0
  35. package/src/schedule/event-renderer/vertical-view.js +32 -12
  36. package/src/schedule/event-renderer/year.js +1 -1
  37. package/src/schedule/popups/event-window.d.ts +1 -0
  38. package/src/schedule/popups/event-window.js +35 -7
  39. package/src/schedule/popups/quick-popups.js +18 -5
  40. package/src/schedule/renderer/agenda.js +1 -0
  41. package/src/schedule/renderer/header-renderer.js +3 -3
  42. package/src/schedule/renderer/month.js +25 -6
  43. package/src/schedule/renderer/renderer.js +8 -2
  44. package/src/schedule/renderer/timeline-view.js +2 -2
  45. package/src/schedule/renderer/timeline-year.d.ts +1 -0
  46. package/src/schedule/renderer/timeline-year.js +20 -12
  47. package/src/schedule/renderer/vertical-view.d.ts +1 -1
  48. package/src/schedule/renderer/vertical-view.js +48 -44
  49. package/src/schedule/renderer/view-base.d.ts +2 -0
  50. package/src/schedule/renderer/view-base.js +31 -1
  51. package/src/schedule/renderer/year.d.ts +1 -1
  52. package/src/schedule/renderer/year.js +49 -30
  53. package/styles/bootstrap-dark.css +50 -33
  54. package/styles/bootstrap.css +50 -33
  55. package/styles/bootstrap4.css +50 -33
  56. package/styles/bootstrap5-dark.css +51 -38
  57. package/styles/bootstrap5.css +51 -38
  58. package/styles/fabric-dark.css +50 -33
  59. package/styles/fabric.css +50 -33
  60. package/styles/fluent-dark.css +52 -39
  61. package/styles/fluent.css +52 -39
  62. package/styles/highcontrast-light.css +50 -33
  63. package/styles/highcontrast.css +50 -33
  64. package/styles/material-dark.css +50 -33
  65. package/styles/material.css +50 -33
  66. package/styles/recurrence-editor/_all.scss +1 -1
  67. package/styles/recurrence-editor/_bootstrap-dark-definition.scss +1 -3
  68. package/styles/recurrence-editor/_bootstrap-definition.scss +1 -3
  69. package/styles/recurrence-editor/_bootstrap4-definition.scss +1 -3
  70. package/styles/recurrence-editor/_bootstrap5-definition.scss +1 -3
  71. package/styles/recurrence-editor/_fabric-dark-definition.scss +1 -4
  72. package/styles/recurrence-editor/_fabric-definition.scss +1 -3
  73. package/styles/recurrence-editor/_fluent-definition.scss +1 -3
  74. package/styles/recurrence-editor/_fusionnew-definition.scss +1 -3
  75. package/styles/recurrence-editor/_highcontrast-definition.scss +1 -3
  76. package/styles/recurrence-editor/_highcontrast-light-definition.scss +1 -3
  77. package/styles/recurrence-editor/_layout.scss +28 -38
  78. package/styles/recurrence-editor/_material-dark-definition.scss +1 -3
  79. package/styles/recurrence-editor/_material-definition.scss +1 -3
  80. package/styles/recurrence-editor/_material3-definition.scss +1 -3
  81. package/styles/recurrence-editor/_tailwind-definition.scss +1 -3
  82. package/styles/recurrence-editor/bootstrap-dark.css +21 -27
  83. package/styles/recurrence-editor/bootstrap.css +21 -27
  84. package/styles/recurrence-editor/bootstrap4.css +21 -27
  85. package/styles/recurrence-editor/bootstrap5-dark.css +21 -27
  86. package/styles/recurrence-editor/bootstrap5.css +21 -27
  87. package/styles/recurrence-editor/fabric-dark.css +21 -27
  88. package/styles/recurrence-editor/fabric.css +21 -27
  89. package/styles/recurrence-editor/fluent-dark.css +21 -27
  90. package/styles/recurrence-editor/fluent.css +21 -27
  91. package/styles/recurrence-editor/highcontrast-light.css +21 -27
  92. package/styles/recurrence-editor/highcontrast.css +21 -27
  93. package/styles/recurrence-editor/material-dark.css +21 -27
  94. package/styles/recurrence-editor/material.css +21 -27
  95. package/styles/recurrence-editor/tailwind-dark.css +21 -27
  96. package/styles/recurrence-editor/tailwind.css +21 -27
  97. package/styles/schedule/_all.scss +1 -1
  98. package/styles/schedule/_bootstrap4-definition.scss +0 -1
  99. package/styles/schedule/_bootstrap5-definition.scss +1 -1
  100. package/styles/schedule/_fusionnew-definition.scss +1 -1
  101. package/styles/schedule/_layout.scss +57 -32
  102. package/styles/schedule/_material3-definition.scss +1 -1
  103. package/styles/schedule/_theme.scss +12 -10
  104. package/styles/schedule/bootstrap-dark.css +29 -6
  105. package/styles/schedule/bootstrap.css +29 -6
  106. package/styles/schedule/bootstrap4.css +29 -6
  107. package/styles/schedule/bootstrap5-dark.css +30 -11
  108. package/styles/schedule/bootstrap5.css +30 -11
  109. package/styles/schedule/fabric-dark.css +29 -6
  110. package/styles/schedule/fabric.css +29 -6
  111. package/styles/schedule/fluent-dark.css +31 -12
  112. package/styles/schedule/fluent.css +31 -12
  113. package/styles/schedule/highcontrast-light.css +29 -6
  114. package/styles/schedule/highcontrast.css +29 -6
  115. package/styles/schedule/icons/_bootstrap5.scss +0 -1
  116. package/styles/schedule/icons/_fluent.scss +0 -1
  117. package/styles/schedule/icons/_fusionnew.scss +0 -1
  118. package/styles/schedule/icons/_material3.scss +0 -1
  119. package/styles/schedule/icons/_tailwind.scss +0 -1
  120. package/styles/schedule/material-dark.css +29 -6
  121. package/styles/schedule/material.css +29 -6
  122. package/styles/schedule/tailwind-dark.css +29 -6
  123. package/styles/schedule/tailwind.css +29 -6
  124. package/styles/tailwind-dark.css +50 -33
  125. package/styles/tailwind.css +50 -33
@@ -12,7 +12,7 @@ var __extends = (this && this.__extends) || (function () {
12
12
  };
13
13
  })();
14
14
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
- import { append, addClass, createElement } from '@syncfusion/ej2-base';
15
+ import { append, addClass, createElement, EventHandler } from '@syncfusion/ej2-base';
16
16
  import { Year } from './year';
17
17
  import * as event from '../base/constant';
18
18
  import * as cls from '../base/css-constant';
@@ -163,6 +163,7 @@ var TimelineYear = /** @class */ (function (_super) {
163
163
  var content = createElement('div', { className: cls.CONTENT_WRAP_CLASS });
164
164
  lastTd.appendChild(content);
165
165
  var contentTable = this.createTableLayout(cls.CONTENT_TABLE_CLASS);
166
+ this.setAriaAttributes(contentTable);
166
167
  content.appendChild(contentTable);
167
168
  var eventWrapper = createElement('div', { className: cls.EVENT_TABLE_CLASS });
168
169
  content.appendChild(eventWrapper);
@@ -196,12 +197,12 @@ var TimelineYear = /** @class */ (function (_super) {
196
197
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[month], 1);
197
198
  var monthStart = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
198
199
  var monthEnd = this.parent.calendarUtil.getMonthEndDate(new Date(monthDate.getTime()));
199
- var tr = createElement('tr', { attrs: { 'role': 'row' } });
200
+ var tr = createElement('tr');
200
201
  var monthTr = tr.cloneNode();
201
202
  monthBody.appendChild(monthTr);
202
203
  var contentTr = tr.cloneNode();
203
204
  contentBody.appendChild(contentTr);
204
- var monthTd = createElement('td', { className: cls.MONTH_HEADER_CLASS, attrs: { 'role': 'gridcell' } });
205
+ var monthTd = createElement('td', { className: cls.MONTH_HEADER_CLASS });
205
206
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
206
207
  if (this.parent.monthHeaderTemplate) {
207
208
  append(this.renderDayMonthHeaderTemplate(monthStart, month, 'monthHeaderTemplate'), monthTd);
@@ -236,7 +237,7 @@ var TimelineYear = /** @class */ (function (_super) {
236
237
  isDateAvail = column >= monthStart.getDay() && date.getTime() < monthEnd.getTime();
237
238
  }
238
239
  var td = createElement('td', {
239
- className: cls.WORK_CELLS_CLASS, attrs: { 'role': 'gridcell', 'aria-selected': 'false' }
240
+ className: cls.WORK_CELLS_CLASS, attrs: { 'aria-selected': 'false' }
240
241
  });
241
242
  contentTr.appendChild(td);
242
243
  var dateHeader = createElement('div', {
@@ -277,7 +278,7 @@ var TimelineYear = /** @class */ (function (_super) {
277
278
  td.appendChild(dateHeader);
278
279
  if (isDateAvail) {
279
280
  td.setAttribute('data-date', date.getTime().toString());
280
- this.wireEvents(td, 'cell');
281
+ this.wireEvents(td);
281
282
  }
282
283
  this.renderCellTemplate({ date: date, type: 'workCells' }, td);
283
284
  this.parent.trigger(event.renderCell, { elementType: 'workCells', element: td, date: date });
@@ -293,7 +294,7 @@ var TimelineYear = /** @class */ (function (_super) {
293
294
  var tRow = [];
294
295
  var monthCells = this.getMonths();
295
296
  for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
296
- var tr = createElement('tr', { attrs: { 'role': 'row' } });
297
+ var tr = createElement('tr');
297
298
  tRow.push(tr);
298
299
  var resData = void 0;
299
300
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
@@ -316,14 +317,14 @@ var TimelineYear = /** @class */ (function (_super) {
316
317
  var tdELe = createElement('td', {
317
318
  className: cls.WORK_CELLS_CLASS,
318
319
  attrs: {
319
- 'role': 'gridcell', 'aria-selected': 'false',
320
+ 'aria-selected': 'false',
320
321
  'data-date': date.getTime().toString()
321
322
  }
322
323
  });
323
324
  addClass([tdELe], classList);
324
325
  tdELe.setAttribute('data-group-index', groupIndex.toString());
325
326
  this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
326
- this.wireEvents(tdELe, 'cell');
327
+ this.wireEvents(tdELe);
327
328
  this.parent.trigger(event.renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
328
329
  tr.appendChild(tdELe);
329
330
  }
@@ -334,7 +335,7 @@ var TimelineYear = /** @class */ (function (_super) {
334
335
  var months = this.getMonths();
335
336
  for (var row = 0; row < this.rowCount; row++) {
336
337
  wrapper.appendChild(createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS }));
337
- var tr = createElement('tr', { attrs: { 'role': 'row' } });
338
+ var tr = createElement('tr');
338
339
  contentBody.appendChild(tr);
339
340
  var resData = void 0;
340
341
  if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
@@ -347,7 +348,7 @@ var TimelineYear = /** @class */ (function (_super) {
347
348
  monthBody.appendChild(monthTr);
348
349
  var monthTd = createElement('td', {
349
350
  className: cls.MONTH_HEADER_CLASS,
350
- attrs: { 'role': 'gridcell', 'data-date': date.getTime().toString() }
351
+ attrs: { 'data-date': date.getTime().toString() }
351
352
  });
352
353
  if (this.parent.monthHeaderTemplate) {
353
354
  append(this.renderDayMonthHeaderTemplate(monthDate, row, 'monthHeaderTemplate'), monthTd);
@@ -379,14 +380,14 @@ var TimelineYear = /** @class */ (function (_super) {
379
380
  var td = createElement('td', {
380
381
  className: cls.WORK_CELLS_CLASS,
381
382
  attrs: {
382
- 'role': 'gridcell', 'aria-selected': 'false',
383
+ 'aria-selected': 'false',
383
384
  'data-date': date.getTime().toString()
384
385
  }
385
386
  });
386
387
  addClass([td], classList);
387
388
  td.setAttribute('data-group-index', groupIndex.toString());
388
389
  this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, td);
389
- this.wireEvents(td, 'cell');
390
+ this.wireEvents(td);
390
391
  tr.appendChild(td);
391
392
  this.parent.trigger(event.renderCell, { elementType: 'resourceGroupCells', element: td, date: date });
392
393
  }
@@ -451,6 +452,13 @@ var TimelineYear = /** @class */ (function (_super) {
451
452
  return this.getContentAreaElement();
452
453
  }
453
454
  };
455
+ TimelineYear.prototype.wireEvents = function (element) {
456
+ EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);
457
+ EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);
458
+ if (!this.parent.isAdaptive) {
459
+ EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
460
+ }
461
+ };
454
462
  return TimelineYear;
455
463
  }(Year));
456
464
  export { TimelineYear };
@@ -49,10 +49,10 @@ export declare class VerticalView extends ViewBase implements IRenderer {
49
49
  private renderTimeCells;
50
50
  renderContentArea(): Element;
51
51
  renderContentTable(table: Element): void;
52
+ getContentRows(): Element[];
52
53
  createContentTd(tdData: TdData, r: TimeSlotData, td: Element): Element;
53
54
  getContentTdClass(r: TimeSlotData): string[];
54
55
  private renderContentTableHeader;
55
- private createEventWrapper;
56
56
  getScrollableElement(): Element;
57
57
  getLeftPanelElement(): HTMLElement;
58
58
  getEndDateFromStartDate(start: Date): Date;
@@ -259,15 +259,27 @@ var VerticalView = /** @class */ (function (_super) {
259
259
  if (!isNullOrUndefined(this.parent.resourceBase) && (this.parent.activeViewOptions.group.resources.length > 0) &&
260
260
  !this.parent.uiStateValues.isGroupAdaptive) {
261
261
  var count = 0;
262
- for (var _i = 0, _a = this.parent.resourceBase.lastResourceLevel; _i < _a.length; _i++) {
263
- var resource = _a[_i];
264
- var index = this.parent.getIndexOfDate(resource.renderDates, util.resetTime(this.parent.getCurrentTime()));
265
- if (index >= 0) {
266
- var resIndex = this.parent.activeViewOptions.group.byDate ?
267
- (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;
268
- currentDateIndex.push(resIndex);
262
+ if (this.parent.virtualScrollModule && this.parent.activeViewOptions.allowVirtualScrolling &&
263
+ this.parent.activeViewOptions.group.byDate) {
264
+ for (var _i = 0, _a = this.parent.resourceBase.expandedResources; _i < _a.length; _i++) {
265
+ var resource = _a[_i];
266
+ if (util.resetTime(resource.date).getTime() === util.resetTime(this.parent.getCurrentTime()).getTime()) {
267
+ currentDateIndex.push(count);
268
+ }
269
+ count += 1;
270
+ }
271
+ }
272
+ else {
273
+ for (var _b = 0, _c = this.parent.resourceBase.renderedResources; _b < _c.length; _b++) {
274
+ var resource = _c[_b];
275
+ var index = this.parent.getIndexOfDate(resource.renderDates, util.resetTime(this.parent.getCurrentTime()));
276
+ if (index >= 0) {
277
+ var resIndex = this.parent.activeViewOptions.group.byDate ?
278
+ (this.parent.resourceBase.lastResourceLevel.length * index) + count : count + index;
279
+ currentDateIndex.push(resIndex);
280
+ }
281
+ count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;
269
282
  }
270
- count += this.parent.activeViewOptions.group.byDate ? 1 : resource.renderDates.length;
271
283
  }
272
284
  }
273
285
  else {
@@ -413,7 +425,7 @@ var VerticalView = /** @class */ (function (_super) {
413
425
  if (!this.parent.activeViewOptions.timeScale.enable) {
414
426
  addClass([this.element], [cls.TIMESCALE_DISABLE, this.viewClass]);
415
427
  }
416
- if (this.parent.activeViewOptions.allowVirtualScrolling) {
428
+ if (this.parent.activeViewOptions.allowVirtualScrolling && !this.parent.uiStateValues.isGroupAdaptive) {
417
429
  clsList.push(cls.VIRTUAL_SCROLL_CLASS);
418
430
  }
419
431
  if (this.parent.rowAutoHeight && this.parent.eventSettings.ignoreWhitespace) {
@@ -444,6 +456,9 @@ var VerticalView = /** @class */ (function (_super) {
444
456
  prepend([tr], this.element.querySelector('tbody'));
445
457
  };
446
458
  VerticalView.prototype.renderContent = function () {
459
+ if (this.parent.activeViewOptions.group.resources.length > 0) {
460
+ this.parent.resourceBase.renderedResources = extend([], this.parent.resourceBase.lastResourceLevel, null, true);
461
+ }
447
462
  var tr = createElement('tr');
448
463
  var workTd = createElement('td');
449
464
  if (this.parent.isAdaptive) {
@@ -459,13 +474,22 @@ var VerticalView = /** @class */ (function (_super) {
459
474
  tr.appendChild(workTd);
460
475
  }
461
476
  else {
462
- workTd.appendChild(this.renderContentArea());
477
+ var levels = this.colLevels.slice(0);
478
+ if (this.parent.virtualScrollModule) {
479
+ this.resetColLevels();
480
+ }
481
+ var wrap = this.renderContentArea();
482
+ workTd.appendChild(wrap);
463
483
  if (this.parent.activeViewOptions.timeScale.enable) {
464
484
  var timesTd = createElement('td');
465
485
  timesTd.appendChild(this.renderTimeCells());
466
486
  tr.appendChild(timesTd);
467
487
  }
468
488
  tr.appendChild(workTd);
489
+ if (this.parent.virtualScrollModule) {
490
+ this.colLevels = levels;
491
+ this.parent.virtualScrollModule.renderVirtualTrack(wrap);
492
+ }
469
493
  }
470
494
  this.element.querySelector('tbody').appendChild(tr);
471
495
  };
@@ -537,7 +561,6 @@ var VerticalView = /** @class */ (function (_super) {
537
561
  td.className = [cls.ALLDAY_CELLS_CLASS];
538
562
  td.type = 'alldayCells';
539
563
  var ntd = this.createTd(td);
540
- ntd.setAttribute('role', 'gridcell');
541
564
  ntd.setAttribute('data-date', td.date.getTime().toString());
542
565
  if (!isNullOrUndefined(td.groupIndex)) {
543
566
  ntd.setAttribute('data-group-index', '' + td.groupIndex);
@@ -550,7 +573,7 @@ var VerticalView = /** @class */ (function (_super) {
550
573
  }
551
574
  table.querySelector('tbody').appendChild(ntr);
552
575
  var thead = createElement('thead');
553
- thead.appendChild(this.createEventWrapper('allDay'));
576
+ thead.appendChild(this.parent.eventBase.createEventWrapper('allDay'));
554
577
  prepend([thead], table);
555
578
  };
556
579
  VerticalView.prototype.createTd = function (td) {
@@ -570,7 +593,6 @@ var VerticalView = /** @class */ (function (_super) {
570
593
  }
571
594
  if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {
572
595
  tdEle.setAttribute('data-date', td.date.getTime().toString());
573
- tdEle.setAttribute('role', 'gridcell');
574
596
  if (!isNullOrUndefined(td.groupIndex)) {
575
597
  tdEle.setAttribute('data-group-index', '' + td.groupIndex);
576
598
  }
@@ -611,6 +633,7 @@ var VerticalView = /** @class */ (function (_super) {
611
633
  VerticalView.prototype.renderContentArea = function () {
612
634
  var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });
613
635
  var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);
636
+ this.setAriaAttributes(tbl);
614
637
  this.addAutoHeightClass(tbl);
615
638
  this.renderContentTable(tbl);
616
639
  this.createColGroup(tbl, this.colLevels.slice(-1)[0]);
@@ -621,10 +644,15 @@ var VerticalView = /** @class */ (function (_super) {
621
644
  return wrap;
622
645
  };
623
646
  VerticalView.prototype.renderContentTable = function (table) {
647
+ var tBody = table.querySelector('tbody');
648
+ append(this.getContentRows(), tBody);
649
+ this.renderContentTableHeader(table);
650
+ };
651
+ VerticalView.prototype.getContentRows = function () {
624
652
  var _this = this;
625
- var tr = createElement('tr', { attrs: { role: 'row' } });
626
- var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });
627
- var tbody = table.querySelector('tbody');
653
+ var rows = [];
654
+ var tr = createElement('tr');
655
+ var td = createElement('td', { attrs: { 'aria-selected': 'false' } });
628
656
  var handler = function (r) {
629
657
  var ntr = tr.cloneNode();
630
658
  for (var _i = 0, _a = _this.colLevels[_this.colLevels.length - 1]; _i < _a.length; _i++) {
@@ -632,11 +660,11 @@ var VerticalView = /** @class */ (function (_super) {
632
660
  var ntd = _this.createContentTd(tdData, r, td);
633
661
  ntr.appendChild(ntd);
634
662
  }
635
- tbody.appendChild(ntr);
663
+ rows.push(ntr);
636
664
  return r;
637
665
  };
638
666
  this.getTimeSlotRows(handler);
639
- this.renderContentTableHeader(table);
667
+ return rows;
640
668
  };
641
669
  VerticalView.prototype.createContentTd = function (tdData, r, td) {
642
670
  var ntd = td.cloneNode();
@@ -683,36 +711,12 @@ var VerticalView = /** @class */ (function (_super) {
683
711
  };
684
712
  VerticalView.prototype.renderContentTableHeader = function (table) {
685
713
  var thead = createElement('thead');
686
- thead.appendChild(this.createEventWrapper());
714
+ thead.appendChild(this.parent.eventBase.createEventWrapper());
687
715
  if (this.parent.activeViewOptions.timeScale.enable) {
688
- thead.appendChild(this.createEventWrapper('timeIndicator'));
716
+ thead.appendChild(this.parent.eventBase.createEventWrapper('timeIndicator'));
689
717
  }
690
718
  prepend([thead], table);
691
719
  };
692
- VerticalView.prototype.createEventWrapper = function (type) {
693
- if (type === void 0) { type = ''; }
694
- var tr = createElement('tr');
695
- var levels = this.colLevels.slice(-1)[0];
696
- for (var i = 0, len = levels.length; i < len; i++) {
697
- var col = levels[i];
698
- var appointmentWrap = createElement('td', {
699
- className: (type === 'allDay') ? cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS : (type === 'timeIndicator') ?
700
- cls.TIMELINE_WRAPPER_CLASS : cls.DAY_WRAPPER_CLASS, attrs: { 'data-date': col.date.getTime().toString() }
701
- });
702
- if (!isNullOrUndefined(col.groupIndex)) {
703
- appointmentWrap.setAttribute('data-group-index', col.groupIndex.toString());
704
- }
705
- if (type === '') {
706
- var innerWrapper = createElement('div', {
707
- id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + i.toString(),
708
- className: cls.APPOINTMENT_WRAPPER_CLASS
709
- });
710
- appointmentWrap.appendChild(innerWrapper);
711
- }
712
- tr.appendChild(appointmentWrap);
713
- }
714
- return tr;
715
- };
716
720
  VerticalView.prototype.getScrollableElement = function () {
717
721
  if (this.parent.isAdaptive && !this.isTimelineView()) {
718
722
  return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);
@@ -27,6 +27,7 @@ export declare class ViewBase {
27
27
  getEventRows(trCount: number): Element[];
28
28
  collapseRows(wrap: Element): void;
29
29
  createTableLayout(className?: string): Element;
30
+ setAriaAttributes(table: Element): void;
30
31
  createColGroup(table: Element, lastRow: TdData[]): void;
31
32
  getScrollXIndent(content: HTMLElement): number;
32
33
  scrollTopPanel(target: HTMLElement): void;
@@ -69,5 +70,6 @@ export declare class ViewBase {
69
70
  getViewStartDate(): Date;
70
71
  getViewEndDate(): Date;
71
72
  getAdjustedDate(startTime: Date): Date;
73
+ resetColLevels(): void;
72
74
  destroy(): void;
73
75
  }
@@ -75,11 +75,15 @@ var ViewBase = /** @class */ (function () {
75
75
  };
76
76
  ViewBase.prototype.createTableLayout = function (className) {
77
77
  var clsName = className || '';
78
- var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName, attrs: { role: 'table' } });
78
+ var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });
79
79
  var tbody = createElement('tbody');
80
80
  table.appendChild(tbody);
81
81
  return table;
82
82
  };
83
+ ViewBase.prototype.setAriaAttributes = function (table) {
84
+ table.setAttribute('role', 'grid');
85
+ table.setAttribute('aria-label', this.getLabelText(this.parent.currentView));
86
+ };
83
87
  ViewBase.prototype.createColGroup = function (table, lastRow) {
84
88
  var length = lastRow.length;
85
89
  if (lastRow[0] && lastRow[0].colSpan) {
@@ -544,6 +548,32 @@ var ViewBase = /** @class */ (function () {
544
548
  }
545
549
  return null;
546
550
  };
551
+ ViewBase.prototype.resetColLevels = function () {
552
+ this.parent.resourceBase.expandedResources = [];
553
+ var renderedCount = this.parent.virtualScrollModule.getRenderedCount();
554
+ var lastLevel = this.parent.activeViewOptions.group.byDate ? this.colLevels[0] :
555
+ this.parent.resourceBase.renderedResources;
556
+ var index = 0;
557
+ for (var i = 0; i < lastLevel.length; i++) {
558
+ if (index >= renderedCount) {
559
+ break;
560
+ }
561
+ index += lastLevel[i].colSpan;
562
+ this.parent.resourceBase.expandedResources.push(lastLevel[i]);
563
+ }
564
+ if (this.parent.activeViewOptions.group.byDate) {
565
+ this.colLevels[0] = this.parent.resourceBase.expandedResources;
566
+ this.parent.virtualScrollModule.setRenderedDates(this.parent.resourceBase.expandedResources);
567
+ }
568
+ else {
569
+ this.colLevels[this.colLevels.length - 2] = this.parent.resourceBase.expandedResources;
570
+ this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources;
571
+ }
572
+ if (this.parent.currentView !== 'Month') {
573
+ this.colLevels[this.colLevels.length - 1] = this.colLevels[this.colLevels.length - 1].slice(0, index);
574
+ this.parent.resourceBase.expandedResources = this.colLevels[this.colLevels.length - 1];
575
+ }
576
+ };
547
577
  ViewBase.prototype.destroy = function () {
548
578
  if (this.element && this.element.parentNode) {
549
579
  remove(this.element);
@@ -26,6 +26,7 @@ export declare class Year extends ViewBase implements IRenderer {
26
26
  getRowColumnCount(type: string): number;
27
27
  isCurrentDate(date: Date): boolean;
28
28
  getMonths(): number[];
29
+ private renderTemplates;
29
30
  private onCellClick;
30
31
  onContentScroll(e: Event): void;
31
32
  onScrollUiUpdate(args: NotifyEventArgs): void;
@@ -39,7 +40,6 @@ export declare class Year extends ViewBase implements IRenderer {
39
40
  addEventListener(): void;
40
41
  removeEventListener(): void;
41
42
  onDataReady(args: NotifyEventArgs): void;
42
- wireEvents(element: HTMLElement, type: string): void;
43
43
  scrollToDate(scrollDate: Date): void;
44
44
  destroy(): void;
45
45
  }
@@ -12,7 +12,7 @@ var __extends = (this && this.__extends) || (function () {
12
12
  };
13
13
  })();
14
14
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
- import { EventHandler, formatUnit, createElement, addClass, closest, prepend } from '@syncfusion/ej2-base';
15
+ import { EventHandler, formatUnit, createElement, addClass, closest, prepend, append, extend } from '@syncfusion/ej2-base';
16
16
  import { ViewBase } from './view-base';
17
17
  import { YearEvent } from '../event-renderer/year';
18
18
  import * as util from '../base/util';
@@ -56,7 +56,7 @@ var Year = /** @class */ (function (_super) {
56
56
  this.generateColumnLevels();
57
57
  this.renderResourceMobileLayout();
58
58
  }
59
- this.wireEvents(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), 'scroll');
59
+ EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), 'scroll', this.onContentScroll, this);
60
60
  this.parent.notify(event.contentReady, {});
61
61
  };
62
62
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -92,7 +92,14 @@ var Year = /** @class */ (function (_super) {
92
92
  };
93
93
  Year.prototype.renderCalendarHeader = function (currentDate) {
94
94
  var headerWrapper = createElement('div', { className: 'e-header e-month' });
95
- var headerContent = createElement('div', { className: 'e-day e-title', innerHTML: this.getMonthName(currentDate) });
95
+ var headerContent = createElement('div', { className: 'e-day e-title' });
96
+ if (this.parent.monthHeaderTemplate) {
97
+ var args = { date: currentDate, type: 'monthHeader' };
98
+ this.renderTemplates(this.parent.getMonthHeaderTemplate(), args, 'monthHeaderTemplate', this.parent.activeViewOptions.monthHeaderTemplateName, headerContent);
99
+ }
100
+ else {
101
+ headerContent.innerHTML = this.getMonthName(currentDate);
102
+ }
96
103
  headerWrapper.appendChild(headerContent);
97
104
  this.parent.trigger(event.renderCell, { elementType: 'headerCells', element: headerContent, date: currentDate });
98
105
  return headerWrapper;
@@ -102,6 +109,7 @@ var Year = /** @class */ (function (_super) {
102
109
  var contentWrapper = createElement('div', { className: 'e-content e-month' });
103
110
  var contentTable = this.createTableLayout('e-calendar-table ' + cls.CONTENT_TABLE_CLASS);
104
111
  contentWrapper.appendChild(contentTable);
112
+ this.setAriaAttributes(contentTable);
105
113
  var thead = createElement('thead', { className: 'e-week-header' });
106
114
  var tr = createElement('tr');
107
115
  var currentWeek = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);
@@ -109,7 +117,15 @@ var Year = /** @class */ (function (_super) {
109
117
  tr.appendChild(createElement('th'));
110
118
  }
111
119
  for (var i = 0; i < util.WEEK_LENGTH; i++) {
112
- tr.appendChild(createElement('th', { innerHTML: this.parent.getDayNames('narrow')[currentWeek.getDay()] }));
120
+ if (this.parent.dayHeaderTemplate) {
121
+ var th = createElement('th');
122
+ var args = { date: currentWeek, type: 'dayHeader' };
123
+ this.renderTemplates(this.parent.getDayHeaderTemplate(), args, 'dayHeaderTemplate', this.parent.activeViewOptions.dayHeaderTemplateName, th);
124
+ tr.appendChild(th);
125
+ }
126
+ else {
127
+ tr.appendChild(createElement('th', { innerHTML: this.parent.getDayNames('narrow')[currentWeek.getDay()] }));
128
+ }
113
129
  currentWeek = new Date(currentWeek.getTime() + util.MS_PER_DAY);
114
130
  }
115
131
  thead.appendChild(tr);
@@ -117,12 +133,12 @@ var Year = /** @class */ (function (_super) {
117
133
  var tbody = contentTable.querySelector('tbody');
118
134
  while (dateCollection.length > 0) {
119
135
  var weekDates = dateCollection.splice(0, util.WEEK_LENGTH);
120
- var tr_1 = createElement('tr', { attrs: { 'role': 'row' } });
136
+ var tr_1 = createElement('tr');
121
137
  if (this.parent.activeViewOptions.showWeekNumber) {
122
138
  var weekNumber = this.parent.getWeekNumberContent(weekDates);
123
139
  var td = createElement('td', {
124
140
  className: 'e-week-number',
125
- attrs: { 'role': 'gridcell', 'title': this.parent.localeObj.getConstant('week') + ' ' + weekNumber },
141
+ attrs: { 'title': this.parent.localeObj.getConstant('week') + ' ' + weekNumber },
126
142
  innerHTML: weekNumber
127
143
  });
128
144
  tr_1.appendChild(td);
@@ -132,13 +148,23 @@ var Year = /** @class */ (function (_super) {
132
148
  var date = weekDates_1[_i];
133
149
  var td = createElement('td', {
134
150
  className: 'e-cell ' + cls.WORK_CELLS_CLASS,
135
- attrs: { 'role': 'gridcell', 'aria-selected': 'false', 'data-date': date.getTime().toString() }
151
+ attrs: { 'aria-selected': 'false', 'data-date': date.getTime().toString() }
136
152
  });
137
- var span = createElement('span', {
138
- className: 'e-day', innerHTML: this.parent.globalize.formatDate(date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }),
139
- attrs: { title: this.parent.globalize.formatDate(date, { type: 'date', skeleton: 'full' }) }
140
- });
141
- td.appendChild(span);
153
+ if (this.parent.activeViewOptions.cellHeaderTemplate) {
154
+ var args = { date: date, type: 'monthCells' };
155
+ this.renderTemplates(this.parent.getCellHeaderTemplate(), args, 'cellHeaderTemplate', this.parent.activeViewOptions.cellHeaderTemplateName, td);
156
+ }
157
+ else {
158
+ var span = createElement('span', {
159
+ className: 'e-day', innerHTML: this.parent.globalize.formatDate(date, { skeleton: 'd', calendar: this.parent.getCalendarMode() }),
160
+ attrs: { title: this.parent.globalize.formatDate(date, { type: 'date', skeleton: 'full' }) }
161
+ });
162
+ td.appendChild(span);
163
+ }
164
+ if (this.parent.activeViewOptions.cellTemplate) {
165
+ var args = { date: date, type: 'monthCells' };
166
+ this.renderTemplates(this.parent.getCellTemplate(), args, 'cellTemplate', this.parent.activeViewOptions.cellTemplateName, td);
167
+ }
142
168
  var classList = [];
143
169
  if (currentDate.getMonth() !== date.getMonth()) {
144
170
  classList.push(cls.OTHERMONTH_CLASS);
@@ -150,7 +176,10 @@ var Year = /** @class */ (function (_super) {
150
176
  addClass([td], classList);
151
177
  }
152
178
  tr_1.appendChild(td);
153
- this.wireEvents(td, 'cell');
179
+ EventHandler.add(td, 'click', this.onCellClick, this);
180
+ if (!this.parent.isAdaptive) {
181
+ EventHandler.add(td, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
182
+ }
154
183
  this.parent.trigger(event.renderCell, { elementType: 'workCells', element: td, date: date });
155
184
  }
156
185
  tbody.appendChild(tr_1);
@@ -236,6 +265,11 @@ var Year = /** @class */ (function (_super) {
236
265
  return _this.parent.firstMonthOfYear + index;
237
266
  });
238
267
  };
268
+ Year.prototype.renderTemplates = function (fn, args, tName, vName, ele) {
269
+ var templateId = this.parent.element.id + '_' + vName + tName;
270
+ var template = [].slice.call(fn(args, this.parent, tName, templateId, false));
271
+ append(template, ele);
272
+ };
239
273
  Year.prototype.onCellClick = function (e) {
240
274
  var target = closest(e.target, '.' + cls.WORK_CELLS_CLASS);
241
275
  var startDate = this.parent.getDateFromElement(target);
@@ -258,6 +292,8 @@ var Year = /** @class */ (function (_super) {
258
292
  target = this.parent.element.querySelector(':not(.' + cls.OTHERMONTH_CLASS + ')[data-date="' + target.getAttribute('data-date') + '"]');
259
293
  }
260
294
  this.parent.activeCellsData = this.parent.getCellDetails(target);
295
+ var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });
296
+ this.parent.trigger(event.cellClick, args);
261
297
  this.parent.quickPopup.moreEventClick(moreEventArgs, endDate);
262
298
  }
263
299
  };
@@ -369,23 +405,6 @@ var Year = /** @class */ (function (_super) {
369
405
  this.yearEventModule.renderAppointments();
370
406
  this.parent.notify(event.eventsLoaded, args);
371
407
  };
372
- Year.prototype.wireEvents = function (element, type) {
373
- if (type === 'cell') {
374
- if (this.parent.currentView !== 'TimelineYear') {
375
- EventHandler.add(element, 'click', this.onCellClick, this);
376
- }
377
- else {
378
- EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);
379
- EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);
380
- if (!this.parent.isAdaptive) {
381
- EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
382
- }
383
- }
384
- }
385
- else {
386
- EventHandler.add(element, 'scroll', this.onContentScroll, this);
387
- }
388
- };
389
408
  Year.prototype.scrollToDate = function (scrollDate) {
390
409
  var date = +new Date(util.resetTime(scrollDate));
391
410
  var element = this.element.querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')[data-date="' + date + '"]');