@syncfusion/ej2-schedule 25.1.37 → 25.1.41

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 (65) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/ej2-schedule.min.js +2 -2
  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 +98 -16
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +107 -20
  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 +12 -12
  13. package/src/schedule/actions/virtual-scroll.d.ts +2 -0
  14. package/src/schedule/actions/virtual-scroll.js +24 -1
  15. package/src/schedule/base/css-constant.d.ts +2 -0
  16. package/src/schedule/base/css-constant.js +2 -0
  17. package/src/schedule/base/interface.d.ts +1 -0
  18. package/src/schedule/base/resource.js +1 -0
  19. package/src/schedule/base/schedule.d.ts +1 -0
  20. package/src/schedule/base/schedule.js +20 -4
  21. package/src/schedule/event-renderer/month.js +1 -2
  22. package/src/schedule/event-renderer/timeline-view.js +17 -5
  23. package/src/schedule/event-renderer/vertical-view.js +16 -3
  24. package/src/schedule/popups/event-window.js +1 -1
  25. package/src/schedule/popups/quick-popups.js +3 -1
  26. package/src/schedule/renderer/header-renderer.js +3 -2
  27. package/src/schedule/renderer/renderer.js +1 -0
  28. package/src/schedule/renderer/timeline-year.js +4 -1
  29. package/src/schedule/renderer/vertical-view.js +14 -0
  30. package/src/schedule/renderer/view-base.js +1 -1
  31. package/styles/bootstrap-dark.css +8 -1
  32. package/styles/bootstrap.css +8 -1
  33. package/styles/bootstrap4.css +8 -1
  34. package/styles/bootstrap5-dark.css +8 -1
  35. package/styles/bootstrap5.css +8 -1
  36. package/styles/fabric-dark.css +8 -1
  37. package/styles/fabric.css +8 -1
  38. package/styles/fluent-dark.css +8 -1
  39. package/styles/fluent.css +8 -1
  40. package/styles/highcontrast-light.css +8 -1
  41. package/styles/highcontrast.css +8 -1
  42. package/styles/material-dark.css +8 -1
  43. package/styles/material.css +8 -1
  44. package/styles/material3-dark.css +8 -1
  45. package/styles/material3.css +8 -1
  46. package/styles/schedule/_layout.scss +18 -1
  47. package/styles/schedule/bootstrap-dark.css +8 -1
  48. package/styles/schedule/bootstrap.css +8 -1
  49. package/styles/schedule/bootstrap4.css +8 -1
  50. package/styles/schedule/bootstrap5-dark.css +8 -1
  51. package/styles/schedule/bootstrap5.css +8 -1
  52. package/styles/schedule/fabric-dark.css +8 -1
  53. package/styles/schedule/fabric.css +8 -1
  54. package/styles/schedule/fluent-dark.css +8 -1
  55. package/styles/schedule/fluent.css +8 -1
  56. package/styles/schedule/highcontrast-light.css +8 -1
  57. package/styles/schedule/highcontrast.css +8 -1
  58. package/styles/schedule/material-dark.css +8 -1
  59. package/styles/schedule/material.css +8 -1
  60. package/styles/schedule/material3-dark.css +8 -1
  61. package/styles/schedule/material3.css +8 -1
  62. package/styles/schedule/tailwind-dark.css +8 -1
  63. package/styles/schedule/tailwind.css +8 -1
  64. package/styles/tailwind-dark.css +8 -1
  65. package/styles/tailwind.css +8 -1
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 25.1.37
3
+ * version : 25.1.41
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@25.1.35",
3
+ "_id": "@syncfusion/ej2-schedule@25.1.39",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-C5bGDJaFwqPz1Wq+Z8zpeJVuVORM+lbciSAfEMADI0Y4RxFMazNh7QeO+TmJob7HNwweDSMqndt8PekrkE+/iw==",
5
+ "_integrity": "sha512-n8KMWDnVN3i11oUDjapXygq0Nvk8VdRbYG0yP+02krCjEXT5+qb53ZhUPfnU5WU32INxNv5IofGeaBN8EVmF4A==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,8 +23,8 @@
23
23
  "/@syncfusion/ej2-react-schedule",
24
24
  "/@syncfusion/ej2-vue-schedule"
25
25
  ],
26
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-25.1.35.tgz",
27
- "_shasum": "dcc2a86f99921e8b4a2578498d701159a470ecec",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-25.1.39.tgz",
27
+ "_shasum": "166c86d21160b16e7c4f6edb56bf633324aa511f",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/elease-automation_release_25.1.1/packages/included",
30
30
  "author": {
@@ -36,15 +36,15 @@
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
38
  "@syncfusion/ej2-base": "~25.1.35",
39
- "@syncfusion/ej2-buttons": "~25.1.35",
40
- "@syncfusion/ej2-calendars": "~25.1.37",
39
+ "@syncfusion/ej2-buttons": "~25.1.39",
40
+ "@syncfusion/ej2-calendars": "~25.1.40",
41
41
  "@syncfusion/ej2-data": "~25.1.35",
42
- "@syncfusion/ej2-dropdowns": "~25.1.37",
42
+ "@syncfusion/ej2-dropdowns": "~25.1.41",
43
43
  "@syncfusion/ej2-excel-export": "~25.1.35",
44
- "@syncfusion/ej2-inputs": "~25.1.37",
45
- "@syncfusion/ej2-lists": "~25.1.35",
46
- "@syncfusion/ej2-navigations": "~25.1.37",
47
- "@syncfusion/ej2-popups": "~25.1.35"
44
+ "@syncfusion/ej2-inputs": "~25.1.40",
45
+ "@syncfusion/ej2-lists": "~25.1.41",
46
+ "@syncfusion/ej2-navigations": "~25.1.41",
47
+ "@syncfusion/ej2-popups": "~25.1.41"
48
48
  },
49
49
  "deprecated": false,
50
50
  "description": "Flexible scheduling library with more built-in features and enhanced customization options similar to outlook and google calendar, allowing the users to plan and manage their appointments with efficient data-binding support.",
@@ -73,6 +73,6 @@
73
73
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
74
74
  },
75
75
  "typings": "index.d.ts",
76
- "version": "25.1.37",
76
+ "version": "25.1.41",
77
77
  "sideEffects": false
78
78
  }
@@ -14,6 +14,7 @@ export declare class VirtualScroll {
14
14
  private focusedEle;
15
15
  private isResourceCell;
16
16
  isHorizontalScroll: boolean;
17
+ isRemoteRefresh: boolean;
17
18
  private startIndex;
18
19
  constructor(parent: Schedule);
19
20
  private addEventListener;
@@ -23,6 +24,7 @@ export declare class VirtualScroll {
23
24
  updateVirtualScrollHeight(): void;
24
25
  updateVirtualTrackHeight(wrap: HTMLElement): void;
25
26
  setItemSize(): void;
27
+ refreshLayout(): void;
26
28
  private renderEvents;
27
29
  virtualScrolling(): void;
28
30
  private horizontalScrolling;
@@ -92,6 +92,27 @@ var VirtualScroll = /** @class */ (function () {
92
92
  this.itemSize = util.getElementHeightFromClass(this.parent.activeView.element, cls.WORK_CELLS_CLASS) || this.itemSize;
93
93
  }
94
94
  };
95
+ VirtualScroll.prototype.refreshLayout = function () {
96
+ var initialHeight = this.parent.uiStateValues.scheduleHeight;
97
+ this.parent.uiStateValues.scheduleHeight = this.parent.element.offsetHeight;
98
+ var preRenderedLength = this.renderedLength;
99
+ if (this.parent.uiStateValues.scheduleHeight !== initialHeight) {
100
+ if (preRenderedLength < this.getRenderedCount()) {
101
+ this.isRemoteRefresh = true;
102
+ }
103
+ var resWrap = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
104
+ var conWrap = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
105
+ var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
106
+ var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
107
+ var endIndex = (firstTDIndex + this.renderedLength);
108
+ firstTDIndex = (endIndex > this.parent.resourceBase.expandedResources.length) ?
109
+ (this.parent.resourceBase.expandedResources.length - this.renderedLength) : firstTDIndex;
110
+ this.parent.resourceBase.renderedResources = this.parent.resourceBase.expandedResources.slice(firstTDIndex, endIndex);
111
+ if (this.parent.resourceBase.renderedResources.length > 0) {
112
+ this.updateContent(resWrap, conWrap, eventWrap, this.parent.resourceBase.renderedResources);
113
+ }
114
+ }
115
+ };
95
116
  VirtualScroll.prototype.renderEvents = function () {
96
117
  this.setTabIndex();
97
118
  var dynamicData = this.triggerScrollEvent(events.virtualScrollStop);
@@ -127,7 +148,9 @@ var VirtualScroll = /** @class */ (function () {
127
148
  var eventWrap = this.parent.element.querySelector('.' + cls.EVENT_TABLE_CLASS);
128
149
  var timeIndicator = this.parent.element.querySelector('.' + cls.CURRENT_TIMELINE_CLASS);
129
150
  var conTable = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);
130
- addClass([conWrap], 'e-transition');
151
+ if (!this.parent.rowAutoHeight) {
152
+ addClass([conWrap, resWrap], 'e-transition');
153
+ }
131
154
  this.renderedLength = resWrap.querySelector('tbody').children.length;
132
155
  var firstTDIndex = parseInt(resWrap.querySelector('tbody td').getAttribute('data-group-index'), 10);
133
156
  var scrollHeight = this.parent.rowAutoHeight ?
@@ -8,6 +8,8 @@ export declare const RTL: string;
8
8
  /** @private */
9
9
  export declare const DEVICE_CLASS: string;
10
10
  /** @private */
11
+ export declare const ADAPTIVE_CLASS: string;
12
+ /** @private */
11
13
  export declare const MULTI_DRAG: string;
12
14
  /** @private */
13
15
  export declare const ICON: string;
@@ -8,6 +8,8 @@ export var RTL = 'e-rtl';
8
8
  /** @private */
9
9
  export var DEVICE_CLASS = 'e-device';
10
10
  /** @private */
11
+ export var ADAPTIVE_CLASS = 'e-adaptive';
12
+ /** @private */
11
13
  export var MULTI_DRAG = 'e-multi-drag';
12
14
  /** @private */
13
15
  export var ICON = 'e-icons';
@@ -522,6 +522,7 @@ export interface UIStateArgs {
522
522
  isCustomMonth?: boolean;
523
523
  isPreventTimezone?: boolean;
524
524
  isPreventEventRefresh?: boolean;
525
+ scheduleHeight?: number;
525
526
  }
526
527
  /**
527
528
  * @private
@@ -493,6 +493,7 @@ var ResourceBase = /** @class */ (function () {
493
493
  args = {
494
494
  cancel: false, event: (event) ? event.event : null, groupIndex: _this.parent.uiStateValues.groupIndex, requestType: 'resourceChanged'
495
495
  };
496
+ _this.parent.adaptiveGroupIndex = _this.parent.uiStateValues.groupIndex;
496
497
  _this.parent.trigger(events.actionComplete, args);
497
498
  }
498
499
  });
@@ -137,6 +137,7 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
137
137
  scrollTop: number;
138
138
  scrollLeft: number;
139
139
  isPrinting: boolean;
140
+ adaptiveGroupIndex: number;
140
141
  /**
141
142
  * Sets the `width` of the Schedule component, accepting both string and number values.
142
143
  *
@@ -72,7 +72,9 @@ var Schedule = /** @class */ (function (_super) {
72
72
  * @param {string | HTMLElement} element Accepts the DOM element reference
73
73
  */
74
74
  function Schedule(options, element) {
75
- return _super.call(this, options, element) || this;
75
+ var _this = _super.call(this, options, element) || this;
76
+ _this.adaptiveGroupIndex = 0;
77
+ return _this;
76
78
  }
77
79
  /**
78
80
  * Core method that initializes the control rendering.
@@ -96,6 +98,12 @@ var Schedule = /** @class */ (function (_super) {
96
98
  else {
97
99
  removeClasses.push(cls.DEVICE_CLASS);
98
100
  }
101
+ if (this.enableAdaptiveUI) {
102
+ addClasses.push(cls.ADAPTIVE_CLASS);
103
+ }
104
+ else {
105
+ removeClasses.push(cls.ADAPTIVE_CLASS);
106
+ }
99
107
  if (this.allowMultiDrag) {
100
108
  addClasses.push(cls.MULTI_DRAG);
101
109
  }
@@ -708,7 +716,7 @@ var Schedule = /** @class */ (function (_super) {
708
716
  if (this && isNullOrUndefined(this.uiStateValues) || !(this.enablePersistence)) {
709
717
  this.uiStateValues = {
710
718
  expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false,
711
- isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false
719
+ isIgnoreOccurrence: false, groupIndex: this.adaptiveGroupIndex, action: false, isBlock: false, isCustomMonth: true, isPreventTimezone: false
712
720
  };
713
721
  }
714
722
  this.currentTimezoneDate = this.getCurrentTime();
@@ -1202,6 +1210,9 @@ var Schedule = /** @class */ (function (_super) {
1202
1210
  && document.activeElement.classList.contains(cls.SUBJECT_CLASS))) {
1203
1211
  return;
1204
1212
  }
1213
+ if (this.virtualScrollModule && this.activeView.isTimelineView()) {
1214
+ this.virtualScrollModule.refreshLayout();
1215
+ }
1205
1216
  if (this.activeViewOptions.timeScale.enable && this.activeView) {
1206
1217
  this.activeView.highlightCurrentTime();
1207
1218
  }
@@ -1213,7 +1224,12 @@ var Schedule = /** @class */ (function (_super) {
1213
1224
  && !this.activeViewOptions.timeScale.enable) || this.activeView.isTimelineView()) {
1214
1225
  this.activeView.resetColWidth();
1215
1226
  this.notify(events.scrollUiUpdate, { cssProperties: this.getCssProperties(), isPreventScrollUpdate: true });
1216
- this.refreshEvents(false);
1227
+ var isRemoteRefresh = false;
1228
+ if (this.activeViewOptions.enableLazyLoading && this.virtualScrollModule && this.virtualScrollModule.isRemoteRefresh) {
1229
+ isRemoteRefresh = this.virtualScrollModule.isRemoteRefresh;
1230
+ this.virtualScrollModule.isRemoteRefresh = false;
1231
+ }
1232
+ this.refreshEvents(isRemoteRefresh);
1217
1233
  }
1218
1234
  else {
1219
1235
  this.notify(events.contentReady, {});
@@ -1396,7 +1412,7 @@ var Schedule = /** @class */ (function (_super) {
1396
1412
  * @private
1397
1413
  */
1398
1414
  Schedule.prototype.getPersistData = function () {
1399
- return this.addOnPersist(['currentView', 'selectedDate', 'scrollTop', 'scrollLeft']);
1415
+ return this.addOnPersist(['currentView', 'selectedDate', 'scrollTop', 'scrollLeft', 'adaptiveGroupIndex']);
1400
1416
  };
1401
1417
  /**
1402
1418
  * Called internally, if any of the property value changed.
@@ -676,8 +676,7 @@ var MonthEvent = /** @class */ (function (_super) {
676
676
  attrs: {
677
677
  'role': 'button',
678
678
  'tabindex': '0',
679
- 'aria-label': this.parent.globalize.formatNumber(count) + '&nbsp;'
680
- + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
679
+ 'aria-label': this.parent.globalize.formatNumber(count) + ' ' + this.parent.localeObj.getConstant('moreEvents'),
681
680
  'data-count': count.toString(),
682
681
  'data-start-date': startDate.getTime().toString(),
683
682
  'data-end-date': endDate.getTime().toString()
@@ -90,11 +90,18 @@ var TimelineEvent = /** @class */ (function (_super) {
90
90
  };
91
91
  TimelineEvent.prototype.getOverlapSortComparerEvents = function (startDate, endDate, appointmentsCollection) {
92
92
  var appointments = [];
93
- for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {
94
- var app = appointmentsCollection_1[_i];
95
- if (this.renderType === 'day') {
96
- if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(new Date(startDate.getTime())).getTime()) &&
97
- (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(new Date(startDate.getTime())).getTime())) {
93
+ var _loop_1 = function (app) {
94
+ if (this_1.renderType === 'day') {
95
+ var start_1 = util.resetTime(startDate).getTime();
96
+ var end_1 = util.resetTime(endDate).getTime();
97
+ var appStart_1 = util.resetTime(app[this_1.fields.startTime]).getTime();
98
+ var appEnd_1 = util.resetTime(app[this_1.fields.endTime]).getTime();
99
+ var isEndOverlap = function () {
100
+ var endTime = (end_1 - (util.getDateInMs(endDate) <= 0 ? util.MS_PER_DAY : 0));
101
+ endTime = start_1 > endTime ? start_1 : endTime;
102
+ return appEnd_1 >= endTime && appStart_1 <= endTime;
103
+ };
104
+ if (appStart_1 <= start_1 && appEnd_1 >= start_1 || isEndOverlap() || appStart_1 > start_1 && appEnd_1 < end_1) {
98
105
  appointments.push(app);
99
106
  }
100
107
  }
@@ -105,6 +112,11 @@ var TimelineEvent = /** @class */ (function (_super) {
105
112
  appointments.push(app);
106
113
  }
107
114
  }
115
+ };
116
+ var this_1 = this;
117
+ for (var _i = 0, appointmentsCollection_1 = appointmentsCollection; _i < appointmentsCollection_1.length; _i++) {
118
+ var app = appointmentsCollection_1[_i];
119
+ _loop_1(app);
108
120
  }
109
121
  return appointments;
110
122
  };
@@ -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, createElement, extend, EventHandler, Animation, formatUnit } from '@syncfusion/ej2-base';
15
+ import { append, createElement, extend, EventHandler, Animation, formatUnit, closest } from '@syncfusion/ej2-base';
16
16
  import { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';
17
17
  import { EventBase } from './event-base';
18
18
  import * as util from '../base/util';
@@ -55,6 +55,14 @@ var VerticalEvent = /** @class */ (function (_super) {
55
55
  var wrapperElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.BLOCK_APPOINTMENT_CLASS +
56
56
  ',.' + cls.APPOINTMENT_CLASS + ',.' + cls.ROW_COUNT_WRAPPER_CLASS));
57
57
  var isDragging = (this.parent.crudModule && this.parent.crudModule.crudObj.isCrudAction) ? true : false;
58
+ var hideWrapper = function (wrapper) {
59
+ if (_this.parent.isReact && !isNullOrUndefined(_this.parent.activeViewOptions.eventTemplate)) {
60
+ var appWrapper = closest(wrapper, '.' + cls.DAY_WRAPPER_CLASS + ',.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS);
61
+ if (appWrapper && !appWrapper.classList.contains(cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS)) {
62
+ addClass([appWrapper], cls.APPOINTMENT_WRAPPER_HIDDEN_CLASS);
63
+ }
64
+ }
65
+ };
58
66
  for (var _i = 0, wrapperElements_1 = wrapperElements; _i < wrapperElements_1.length; _i++) {
59
67
  var wrapper = wrapperElements_1[_i];
60
68
  if (isDragging && !(wrapper.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS) ||
@@ -63,11 +71,13 @@ var VerticalEvent = /** @class */ (function (_super) {
63
71
  for (var j = 0, len = this.parent.crudModule.crudObj.sourceEvent.length; j < len; j++) {
64
72
  if (groupIndex === this.parent.crudModule.crudObj.sourceEvent[parseInt(j.toString(), 10)].groupIndex ||
65
73
  groupIndex === this.parent.crudModule.crudObj.targetEvent[parseInt(j.toString(), 10)].groupIndex) {
74
+ hideWrapper(wrapper);
66
75
  remove(wrapper);
67
76
  }
68
77
  }
69
78
  }
70
79
  else {
80
+ hideWrapper(wrapper);
71
81
  remove(wrapper);
72
82
  }
73
83
  }
@@ -628,9 +638,12 @@ var VerticalEvent = /** @class */ (function (_super) {
628
638
  return (tempLeft > 99 ? 99 : tempLeft) + '%';
629
639
  };
630
640
  VerticalEvent.prototype.getTopValue = function (date, day, resource) {
631
- var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]), this.startHour, this.endHour);
641
+ var viewDate = util.resetTime(this.dateRender[parseInt(resource.toString(), 10)][parseInt(day.toString(), 10)]);
642
+ var startEndHours = util.getStartEndHours(viewDate, this.startHour, this.endHour);
632
643
  var startHour = startEndHours.startHour;
633
- var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());
644
+ var adjustedStartHour = util.isDaylightSavingTime(viewDate) && (startHour.getHours() !== this.startHour.getHours()) ?
645
+ this.startHour.getHours() : startHour.getHours();
646
+ var diffInMinutes = ((date.getHours() - adjustedStartHour) * 60) + (date.getMinutes() - startHour.getMinutes());
634
647
  return (this.parent.activeViewOptions.timeScale.enable) ? ((diffInMinutes * this.cellHeight * this.slotCount) / this.interval) : 0;
635
648
  };
636
649
  VerticalEvent.prototype.getOverlapIndex = function (record, day, isAllDay, resource) {
@@ -519,7 +519,7 @@ var EventWindow = /** @class */ (function () {
519
519
  var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);
520
520
  resourceDiv.appendChild(resourceInput);
521
521
  var resourceTemplate = function (data) {
522
- return "<div class=\"e-resource-template\"><div class=\"e-resource-color\" style=\"background-color:" + data[resourceData.colorField] + "\"></div><div class=\"e-resource-text\">" + data[resourceData.textField] + "</div></div>";
522
+ return SanitizeHtmlHelper.sanitize("<div class=\"e-resource-template\"><div class=\"e-resource-color\" style=\"background-color:" + data[resourceData.colorField] + "\"></div><div class=\"e-resource-text\">" + data[resourceData.textField] + "</div></div>");
523
523
  };
524
524
  initializeCSPTemplate(resourceTemplate, resourceData);
525
525
  if (resourceData.allowMultiple) {
@@ -53,7 +53,7 @@ var QuickPopups = /** @class */ (function () {
53
53
  QuickPopups.prototype.renderMorePopup = function () {
54
54
  var moreEventPopup = "<div class=\"" + cls.MORE_EVENT_POPUP_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_CLASS + "\">" +
55
55
  ("<div class=\"" + cls.MORE_EVENT_CLOSE_CLASS + "\" title=\"" + this.l10n.getConstant('close') + "\" tabindex=\"0\" role=\"button\"></div>") +
56
- ("<div class=\"" + cls.MORE_EVENT_DATE_HEADER_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_DAY_CLASS + "\"></div>") +
56
+ ("<div class=\"" + cls.MORE_EVENT_DATE_HEADER_CLASS + "\"><div class=\"" + cls.MORE_EVENT_HEADER_DAY_CLASS + "\" id=\"" + this.parent.element.id + "_more_popup\"></div>") +
57
57
  ("<div class=\"" + cls.MORE_EVENT_HEADER_DATE_CLASS + " " + cls.NAVIGATE_CLASS + "\" tabindex=\"0\" role=\"link\"></div></div></div></div>");
58
58
  var moreEventWrapper = createElement('div', {
59
59
  className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close',
@@ -78,6 +78,8 @@ var QuickPopups = /** @class */ (function () {
78
78
  viewPortElement: (this.parent.isAdaptive ? document.body : this.parent.element),
79
79
  zIndex: (this.parent.isAdaptive ? 1002 : 2)
80
80
  });
81
+ this.morePopup.element.setAttribute('role', 'dialog');
82
+ this.morePopup.element.setAttribute('aria-labelledby', this.parent.element.id + '_more_popup');
81
83
  var closeButton = this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS);
82
84
  this.renderButton('e-round', cls.ICON + ' ' + cls.CLOSE_ICON_CLASS, false, closeButton, this.closeClick);
83
85
  EventHandler.add(this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.navigationClick, this);
@@ -86,6 +86,7 @@ var HeaderRenderer = /** @class */ (function () {
86
86
  });
87
87
  _this.toolbarObj.root = _this.parent.root ? _this.parent.root : _this.parent;
88
88
  _this.toolbarObj.appendTo(_this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));
89
+ _this.toolbarObj.element.setAttribute('aria-label', 'Scheduler');
89
90
  var prevNavEle = _this.toolbarObj.element.querySelector('.e-prev');
90
91
  if (prevNavEle) {
91
92
  prevNavEle.firstElementChild.setAttribute('title', _this.l10n.getConstant('previous'));
@@ -273,7 +274,7 @@ var HeaderRenderer = /** @class */ (function () {
273
274
  switch (item.name) {
274
275
  case 'Today':
275
276
  tbItem = {
276
- showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-day',
277
+ showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',
277
278
  text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'
278
279
  };
279
280
  tbItem.align = propItem.align ? propItem.align : item.align;
@@ -360,7 +361,7 @@ var HeaderRenderer = /** @class */ (function () {
360
361
  }
361
362
  else {
362
363
  items.push({
363
- align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-day',
364
+ align: 'Right', showAlwaysInPopup: (this.parent.isAdaptive || this.parent.enableAdaptiveUI), prefixIcon: 'e-icon-today',
364
365
  text: this.l10n.getConstant('today'), cssClass: 'e-today', overflow: 'Show'
365
366
  });
366
367
  if (this.parent.views.length > 1) {
@@ -88,6 +88,7 @@ var Render = /** @class */ (function () {
88
88
  }
89
89
  throw Error('Inject required modules');
90
90
  }
91
+ this.parent.uiStateValues.scheduleHeight = this.parent.element.offsetHeight;
91
92
  this.parent.activeView.viewIndex = this.parent.viewIndex;
92
93
  this.updateLabelText(viewName);
93
94
  this.parent.activeView.addEventListener();
@@ -385,11 +385,14 @@ var TimelineYear = /** @class */ (function (_super) {
385
385
  groupIndex = this.colLevels.slice(-1)[0][parseInt(month.toString(), 10)].groupIndex;
386
386
  classList.push(cls.WORKDAY_CLASS);
387
387
  }
388
+ var startDateText = this.parent.globalize.formatDate(date, { type: 'dateTime', skeleton: 'full', calendar: this.parent.getCalendarMode() });
389
+ var endDateText = this.parent.globalize.formatDate(this.parent.calendarUtil.getMonthEndDate(new Date(monthDate.getTime())), { type: 'dateTime', skeleton: 'full', calendar: this.parent.getCalendarMode() });
388
390
  var td = createElement('td', {
389
391
  className: cls.WORK_CELLS_CLASS,
390
392
  attrs: {
391
393
  'aria-selected': 'false',
392
- 'data-date': date.getTime().toString()
394
+ 'data-date': date.getTime().toString(),
395
+ 'aria-label': startDateText + ' ' + this.parent.localeObj.getConstant('endAt') + ' ' + endDateText
393
396
  }
394
397
  });
395
398
  addClass([td], classList);
@@ -713,6 +713,20 @@ var VerticalView = /** @class */ (function (_super) {
713
713
  append(tooltipTemplate, ntd);
714
714
  }
715
715
  ntd.setAttribute('data-date', cellDate.getTime().toString());
716
+ var skeleton = 'full';
717
+ if (!this.parent.activeViewOptions.timeScale.enable) {
718
+ var announcementText = this.parent.globalize.formatDate(tdData.date, { skeleton: skeleton, calendar: this.parent.getCalendarMode() });
719
+ ntd.setAttribute('aria-label', announcementText);
720
+ }
721
+ else {
722
+ var startDateText = this.parent.globalize.formatDate(cellDate, {
723
+ type: 'dateTime', skeleton: skeleton, calendar: this.parent.getCalendarMode()
724
+ });
725
+ var endDateText = this.parent.globalize.formatDate(this.getEndDateFromStartDate(cellDate), {
726
+ type: 'dateTime', skeleton: skeleton, calendar: this.parent.getCalendarMode()
727
+ });
728
+ ntd.setAttribute('aria-label', startDateText + ' ' + this.parent.localeObj.getConstant('endAt') + ' ' + endDateText);
729
+ }
716
730
  if (!isNullOrUndefined(tdData.groupIndex) || this.parent.uiStateValues.isGroupAdaptive) {
717
731
  var groupIndex = this.parent.uiStateValues.isGroupAdaptive ? this.parent.uiStateValues.groupIndex :
718
732
  tdData.groupIndex;
@@ -452,7 +452,7 @@ var ViewBase = /** @class */ (function () {
452
452
  var colWidth_1 = (util.getElementWidth(contentBody) / (colElements.length / 2));
453
453
  if (content.offsetHeight !== content.clientHeight) {
454
454
  var resourceColumn = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_WRAP_CLASS);
455
- if (!isNullOrUndefined(resourceColumn)) {
455
+ if (!isNullOrUndefined(resourceColumn) && resourceColumn.offsetHeight !== content.clientHeight) {
456
456
  setStyleAttribute(resourceColumn, { 'height': formatUnit(content.clientHeight) });
457
457
  }
458
458
  }
@@ -395,6 +395,12 @@
395
395
  background: #393939;
396
396
  color: #0070f0;
397
397
  }
398
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
399
+ display: block;
400
+ }
401
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
402
+ display: none;
403
+ }
398
404
  .e-schedule.e-device .e-schedule-toolbar {
399
405
  height: 56px;
400
406
  min-height: 56px;
@@ -2020,7 +2026,8 @@
2020
2026
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2021
2027
  position: relative;
2022
2028
  }
2023
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2029
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2030
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2024
2031
  transition: all 1000ms linear;
2025
2032
  }
2026
2033
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -390,6 +390,12 @@
390
390
  background: #e6e6e6;
391
391
  color: #317ab9;
392
392
  }
393
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
394
+ display: block;
395
+ }
396
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
397
+ display: none;
398
+ }
393
399
  .e-schedule.e-device .e-schedule-toolbar {
394
400
  height: 56px;
395
401
  min-height: 56px;
@@ -2015,7 +2021,8 @@
2015
2021
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2016
2022
  position: relative;
2017
2023
  }
2018
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2024
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2025
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2019
2026
  transition: all 1000ms linear;
2020
2027
  }
2021
2028
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -495,6 +495,12 @@
495
495
  background: #545b62;
496
496
  color: #fff;
497
497
  }
498
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
499
+ display: block;
500
+ }
501
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
502
+ display: none;
503
+ }
498
504
  .e-schedule.e-device .e-schedule-toolbar {
499
505
  height: 54px;
500
506
  min-height: 54px;
@@ -2120,7 +2126,8 @@
2120
2126
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2121
2127
  position: relative;
2122
2128
  }
2123
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2129
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2130
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2124
2131
  transition: all 1000ms linear;
2125
2132
  }
2126
2133
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -440,6 +440,12 @@
440
440
  background: #495057;
441
441
  color: rgba(13, 110, 253, 0.87);
442
442
  }
443
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
444
+ display: block;
445
+ }
446
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
447
+ display: none;
448
+ }
443
449
  .e-schedule.e-device .e-schedule-toolbar {
444
450
  height: 54px;
445
451
  min-height: 54px;
@@ -2065,7 +2071,8 @@
2065
2071
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2066
2072
  position: relative;
2067
2073
  }
2068
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2074
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2075
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2069
2076
  transition: all 1000ms linear;
2070
2077
  }
2071
2078
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -440,6 +440,12 @@
440
440
  background: #dee2e6;
441
441
  color: rgba(13, 110, 253, 0.87);
442
442
  }
443
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
444
+ display: block;
445
+ }
446
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
447
+ display: none;
448
+ }
443
449
  .e-schedule.e-device .e-schedule-toolbar {
444
450
  height: 54px;
445
451
  min-height: 54px;
@@ -2065,7 +2071,8 @@
2065
2071
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2066
2072
  position: relative;
2067
2073
  }
2068
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2074
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2075
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2069
2076
  transition: all 1000ms linear;
2070
2077
  }
2071
2078
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -358,6 +358,12 @@
358
358
  background: #414040;
359
359
  color: #dadada;
360
360
  }
361
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
362
+ display: block;
363
+ }
364
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
365
+ display: none;
366
+ }
361
367
  .e-schedule.e-device .e-schedule-toolbar {
362
368
  height: 56px;
363
369
  min-height: 56px;
@@ -1983,7 +1989,8 @@
1983
1989
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
1984
1990
  position: relative;
1985
1991
  }
1986
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
1992
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
1993
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
1987
1994
  transition: all 1000ms linear;
1988
1995
  }
1989
1996
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
package/styles/fabric.css CHANGED
@@ -348,6 +348,12 @@
348
348
  background: #f4f4f4;
349
349
  color: #333;
350
350
  }
351
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
352
+ display: block;
353
+ }
354
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
355
+ display: none;
356
+ }
351
357
  .e-schedule.e-device .e-schedule-toolbar {
352
358
  height: 56px;
353
359
  min-height: 56px;
@@ -1973,7 +1979,8 @@
1973
1979
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
1974
1980
  position: relative;
1975
1981
  }
1976
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
1982
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
1983
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
1977
1984
  transition: all 1000ms linear;
1978
1985
  }
1979
1986
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,
@@ -422,6 +422,12 @@
422
422
  background: #292827;
423
423
  color: rgba(0, 120, 212, 0.87);
424
424
  }
425
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today {
426
+ display: block;
427
+ }
428
+ .e-schedule.e-adaptive .e-schedule-toolbar .e-toolbar-items .e-toolbar-item.e-today .e-icon-today + .e-tbar-btn-text {
429
+ display: none;
430
+ }
425
431
  .e-schedule.e-device .e-schedule-toolbar {
426
432
  height: 54px;
427
433
  min-height: 54px;
@@ -2047,7 +2053,8 @@
2047
2053
  .e-schedule .e-virtual-scroll .e-content-table.e-virtual-relative {
2048
2054
  position: relative;
2049
2055
  }
2050
- .e-schedule .e-virtual-scroll .e-content-wrap.e-transition {
2056
+ .e-schedule .e-virtual-scroll .e-content-wrap.e-transition,
2057
+ .e-schedule .e-virtual-scroll .e-resource-column-wrap.e-transition {
2051
2058
  transition: all 1000ms linear;
2052
2059
  }
2053
2060
  .e-schedule.e-rtl .e-timeline-view .e-appointment .e-left-icon,