@syncfusion/ej2-schedule 19.4.55 → 20.1.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 (75) hide show
  1. package/CHANGELOG.md +23 -9
  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 +156 -46
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +156 -46
  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/package.json +15 -15
  12. package/src/recurrence-editor/date-generator.js +4 -0
  13. package/src/schedule/base/schedule.js +4 -0
  14. package/src/schedule/event-renderer/agenda-base.js +1 -1
  15. package/src/schedule/event-renderer/month.d.ts +3 -0
  16. package/src/schedule/event-renderer/month.js +38 -24
  17. package/src/schedule/event-renderer/timeline-view.js +2 -1
  18. package/src/schedule/event-renderer/year.js +3 -1
  19. package/src/schedule/popups/event-window.js +4 -2
  20. package/src/schedule/renderer/month.d.ts +1 -0
  21. package/src/schedule/renderer/month.js +29 -12
  22. package/src/schedule/renderer/renderer.js +2 -1
  23. package/src/schedule/renderer/timeline-year.d.ts +2 -1
  24. package/src/schedule/renderer/timeline-year.js +49 -4
  25. package/src/schedule/renderer/year.js +20 -0
  26. package/styles/bootstrap-dark.css +10 -7
  27. package/styles/bootstrap.css +10 -7
  28. package/styles/bootstrap4.css +11 -8
  29. package/styles/bootstrap5-dark.css +20 -19
  30. package/styles/bootstrap5.css +20 -19
  31. package/styles/fabric-dark.css +10 -7
  32. package/styles/fabric.css +10 -7
  33. package/styles/fluent-dark.css +5102 -0
  34. package/styles/fluent-dark.scss +2 -0
  35. package/styles/fluent.css +5103 -0
  36. package/styles/fluent.scss +2 -0
  37. package/styles/highcontrast-light.css +10 -7
  38. package/styles/highcontrast.css +11 -8
  39. package/styles/material-dark.css +10 -7
  40. package/styles/material.css +10 -7
  41. package/styles/recurrence-editor/_fluent-dark-definition.scss +1 -0
  42. package/styles/recurrence-editor/fluent-dark.css +495 -0
  43. package/styles/recurrence-editor/fluent-dark.scss +3 -0
  44. package/styles/recurrence-editor/fluent.css +495 -0
  45. package/styles/recurrence-editor/fluent.scss +3 -0
  46. package/styles/schedule/_bootstrap4-definition.scss +1 -1
  47. package/styles/schedule/_bootstrap5-definition.scss +4 -4
  48. package/styles/schedule/_fluent-dark-definition.scss +1 -0
  49. package/styles/schedule/_fluent-definition.scss +10 -8
  50. package/styles/schedule/_highcontrast-definition.scss +1 -1
  51. package/styles/schedule/_layout.scss +55 -14
  52. package/styles/schedule/_tailwind-definition.scss +1 -0
  53. package/styles/schedule/_theme.scss +6 -9
  54. package/styles/schedule/bootstrap-dark.css +10 -7
  55. package/styles/schedule/bootstrap.css +10 -7
  56. package/styles/schedule/bootstrap4.css +11 -8
  57. package/styles/schedule/bootstrap5-dark.css +20 -19
  58. package/styles/schedule/bootstrap5.css +20 -19
  59. package/styles/schedule/fabric-dark.css +10 -7
  60. package/styles/schedule/fabric.css +10 -7
  61. package/styles/schedule/fluent-dark.css +4606 -0
  62. package/styles/schedule/fluent-dark.scss +4 -0
  63. package/styles/schedule/fluent.css +4607 -0
  64. package/styles/schedule/fluent.scss +5 -0
  65. package/styles/schedule/highcontrast-light.css +10 -7
  66. package/styles/schedule/highcontrast.css +11 -8
  67. package/styles/schedule/icons/_fluent-dark.scss +1 -0
  68. package/styles/schedule/icons/_fluent.scss +51 -50
  69. package/styles/schedule/icons/_tailwind.scss +51 -50
  70. package/styles/schedule/material-dark.css +10 -7
  71. package/styles/schedule/material.css +10 -7
  72. package/styles/schedule/tailwind-dark.css +65 -60
  73. package/styles/schedule/tailwind.css +65 -60
  74. package/styles/tailwind-dark.css +65 -60
  75. package/styles/tailwind.css +65 -60
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 19.4.55
3
+ * version : 20.1.47
4
4
  * Copyright Syncfusion Inc. 2001 - 2020. 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@19.4.52",
3
+ "_id": "@syncfusion/ej2-schedule@19.17.32",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-kqGJwynLsmjHrf6W2CXoFcDdFZwAEhU2iQvUoGHGtuSVVSlOJSb5TTuOU6daT4o5idjLl6nBb+OKdBEsZ+w4/w==",
5
+ "_integrity": "sha512-4FHdUSAgXuBaBtXh874obmuZajDCyXhm0DWafIQzUuBzXMzaPGjtQvAWyy5FHJ8nT8hm8XkmfHZQP7HiBZUuiw==",
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": "http://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-19.4.52.tgz",
27
- "_shasum": "869690125c5717449b0c8c251c01d781f6515e53",
26
+ "_resolved": "http://nexus.syncfusion.com/repository/ej2-release/@syncfusion/ej2-schedule/-/ej2-schedule-19.17.32.tgz",
27
+ "_shasum": "fcd93d1277377068fff0cce62d697ac67af1bd7e",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
29
  "_where": "/jenkins/workspace/automation_release_19.1.0.1-ZPMUBNQ6AUYH6YGEFBPVYMEQLRRW2SLD4XCZ6GATNZJFYJ3RIAOA/packages/included",
30
30
  "author": {
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~19.4.52",
39
- "@syncfusion/ej2-buttons": "~19.4.55",
40
- "@syncfusion/ej2-calendars": "~19.4.55",
41
- "@syncfusion/ej2-data": "~19.4.54",
42
- "@syncfusion/ej2-dropdowns": "~19.4.55",
43
- "@syncfusion/ej2-excel-export": "~19.4.52",
44
- "@syncfusion/ej2-inputs": "~19.4.52",
45
- "@syncfusion/ej2-lists": "~19.4.55",
46
- "@syncfusion/ej2-navigations": "~19.4.55",
47
- "@syncfusion/ej2-popups": "~19.4.53"
38
+ "@syncfusion/ej2-base": "~20.1.47",
39
+ "@syncfusion/ej2-buttons": "~20.1.47",
40
+ "@syncfusion/ej2-calendars": "~20.1.47",
41
+ "@syncfusion/ej2-data": "~20.1.47",
42
+ "@syncfusion/ej2-dropdowns": "~20.1.47",
43
+ "@syncfusion/ej2-excel-export": "~20.1.47",
44
+ "@syncfusion/ej2-inputs": "~20.1.47",
45
+ "@syncfusion/ej2-lists": "~20.1.47",
46
+ "@syncfusion/ej2-navigations": "~20.1.47",
47
+ "@syncfusion/ej2-popups": "~20.1.47"
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.",
@@ -81,6 +81,6 @@
81
81
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
82
82
  },
83
83
  "typings": "index.d.ts",
84
- "version": "19.4.55",
84
+ "version": "20.1.47",
85
85
  "sideEffects": false
86
86
  }
@@ -145,6 +145,10 @@ export function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCo
145
145
  }
146
146
  maxOccurrence = maximumCount;
147
147
  setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);
148
+ if (ruleObject.until) {
149
+ var end = resetTime(ruleObject.until);
150
+ ruleObject.until = new Date(end.getFullYear(), end.getMonth(), end.getDate(), 23, 59, 59);
151
+ }
148
152
  switch (ruleObject.freq) {
149
153
  case 'DAILY':
150
154
  dailyType(modifiedDate, ruleObject.until, data, ruleObject);
@@ -517,6 +517,7 @@ var Schedule = /** @class */ (function (_super) {
517
517
  };
518
518
  _this.trigger(events.navigating, navArgs, function (navigationArgs) {
519
519
  if (!navigationArgs.cancel) {
520
+ _this.uiStateValues.isInitial = ['TimelineMonth', 'TimelineYear', 'Year'].indexOf(view) > -1 ? true : _this.uiStateValues.isInitial;
520
521
  _this.viewIndex = navigationArgs.viewIndex;
521
522
  _this.setProperties({ currentView: view }, true);
522
523
  if (_this.headerModule) {
@@ -1141,6 +1142,9 @@ var Schedule = /** @class */ (function (_super) {
1141
1142
  if (document.querySelectorAll(template).length) {
1142
1143
  return compile(document.querySelector(template).innerHTML.trim());
1143
1144
  }
1145
+ else {
1146
+ return compile(template);
1147
+ }
1144
1148
  }
1145
1149
  catch (error) {
1146
1150
  return compile(template);
@@ -34,7 +34,7 @@ var AgendaBase = /** @class */ (function (_super) {
34
34
  moduleName: 'agenda',
35
35
  listClass: this.parent.activeView.viewClass,
36
36
  itemClass: this.parent.activeView.viewClass,
37
- template: '<div class=' + cls.AGENDA_NO_EVENT_CLASS + '>${subject}</div>'
37
+ template: "<div class=\"" + cls.AGENDA_NO_EVENT_CLASS + "\">" + this.parent.localeObj.getConstant('noEvents') + "</div>"
38
38
  });
39
39
  }
40
40
  else {
@@ -9,6 +9,7 @@ export declare class MonthEvent extends EventBase {
9
9
  fields: EventFieldsMapping;
10
10
  dateRender: Date[];
11
11
  renderedEvents: Record<string, any>[];
12
+ eventsRendered: Record<string, any>[];
12
13
  eventHeight: number;
13
14
  private monthHeaderHeight;
14
15
  workCells: HTMLElement[];
@@ -40,6 +41,7 @@ export declare class MonthEvent extends EventBase {
40
41
  createAppointmentElement(record: Record<string, any>, resIndex: number, isCloneElement?: boolean): HTMLElement;
41
42
  private appendEventIcons;
42
43
  renderEvents(event: Record<string, any>, resIndex: number, eventsList?: Record<string, any>[]): void;
44
+ private renderMoreIndicators;
43
45
  updateCellHeight(cell: HTMLElement, height: number): void;
44
46
  updateBlockElements(): void;
45
47
  getFilteredEvents(startDate: Date, endDate: Date, groupIndex: string, eventsList?: Record<string, any>[]): Record<string, any>[];
@@ -50,6 +52,7 @@ export declare class MonthEvent extends EventBase {
50
52
  getEventData(event: Record<string, any>): Record<string, any>;
51
53
  renderElement(cellTd: HTMLElement | Element, element: HTMLElement, isAppointment?: boolean): void;
52
54
  getMoreIndicatorElement(count: number, startDate: Date, endDate: Date): HTMLElement;
55
+ private getMoreIndicatorText;
53
56
  removeHeightProperty(selector: string): void;
54
57
  setMaxEventHeight(event: HTMLElement, cell: HTMLElement): void;
55
58
  destroy(): void;
@@ -27,6 +27,7 @@ var MonthEvent = /** @class */ (function (_super) {
27
27
  function MonthEvent(parent) {
28
28
  var _this = _super.call(this, parent) || this;
29
29
  _this.renderedEvents = [];
30
+ _this.eventsRendered = [];
30
31
  _this.monthHeaderHeight = 0;
31
32
  _this.moreIndicatorHeight = 19;
32
33
  _this.renderType = 'day';
@@ -47,7 +48,7 @@ var MonthEvent = /** @class */ (function (_super) {
47
48
  appElement = (this.parent.currentView === 'Month') ? appElement : [appElement[0]];
48
49
  for (var _i = 0, appElement_1 = appElement; _i < appElement_1.length; _i++) {
49
50
  var wrap = appElement_1[_i];
50
- if (!wrap.classList.contains('e-more-indicator') && wrap.parentElement && wrap.parentElement.parentNode) {
51
+ if (wrap.parentElement && wrap.parentElement.parentNode) {
51
52
  remove(wrap.parentElement);
52
53
  }
53
54
  }
@@ -143,6 +144,7 @@ var MonthEvent = /** @class */ (function (_super) {
143
144
  };
144
145
  MonthEvent.prototype.renderEventsHandler = function (dateRender, workDays, resData) {
145
146
  this.renderedEvents = [];
147
+ this.eventsRendered = [];
146
148
  var eventsList;
147
149
  var blockList;
148
150
  var resIndex = 0;
@@ -493,16 +495,16 @@ var MonthEvent = /** @class */ (function (_super) {
493
495
  }
494
496
  var overlapCount = this.getIndex(startTime);
495
497
  event.Index = overlapCount;
496
- var appHeight = this.eventHeight;
497
498
  this.renderedEvents.push(extend({}, event, null, true));
498
499
  var diffInDays = event.data.count;
499
500
  if (startTime.getTime() <= endTime.getTime()) {
500
501
  var appWidth = (diffInDays * this.cellWidth) - 5;
501
502
  var cellTd = this.workCells[day];
502
- var appTop = (overlapCount * (appHeight + EVENT_GAP));
503
- var height = this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + this.moreIndicatorHeight;
503
+ var appTop = (overlapCount * (this.eventHeight + EVENT_GAP));
504
+ var height = this.monthHeaderHeight + ((overlapCount + 1) * (this.eventHeight + EVENT_GAP)) + this.moreIndicatorHeight;
504
505
  var enableAppRender = this.maxOrIndicator ? overlapCount < 1 ? true : false : this.cellHeight > height;
505
506
  if (this.parent.rowAutoHeight || enableAppRender) {
507
+ this.eventsRendered.push(extend({}, event, null, true));
506
508
  var appointmentElement = void 0;
507
509
  if (this.inlineValue) {
508
510
  appointmentElement = this.parent.inlineModule.createInlineAppointmentElement();
@@ -518,28 +520,37 @@ var MonthEvent = /** @class */ (function (_super) {
518
520
  var firstChild = cellTd.parentElement.firstElementChild;
519
521
  this.updateCellHeight(firstChild, height);
520
522
  }
523
+ else if (cellTd.querySelector('.' + cls.MORE_INDICATOR_CLASS)) {
524
+ this.renderMoreIndicators(diffInDays, day);
525
+ }
521
526
  }
522
527
  else {
523
- for (var i = 0; i < diffInDays; i++) {
524
- var cellTd_1 = this.workCells[day + i];
525
- if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {
526
- var startDate = new Date(this.dateRender[day + i].getTime());
527
- var endDate = util.addDays(this.dateRender[day + i], 1);
528
- var groupIndex = cellTd_1.getAttribute('data-group-index');
529
- var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);
530
- var appArea = this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight;
531
- appHeight = this.withIndicator ? appArea : appHeight;
532
- var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));
533
- var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);
534
- var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);
535
- if (!isNullOrUndefined(groupIndex)) {
536
- moreIndicatorElement.setAttribute('data-group-index', groupIndex);
537
- }
538
- moreIndicatorElement.style.top = appArea + 'px';
539
- moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
540
- this.renderElement(cellTd_1, moreIndicatorElement);
541
- EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
528
+ this.renderMoreIndicators(diffInDays, day);
529
+ }
530
+ }
531
+ };
532
+ MonthEvent.prototype.renderMoreIndicators = function (diffInDays, day) {
533
+ for (var i = 0; i < diffInDays; i++) {
534
+ if (this.workCells[day + i]) {
535
+ var startDate = new Date(this.dateRender[day + i].getTime());
536
+ var endDate = util.addDays(this.dateRender[day + i], 1);
537
+ var groupIndex = this.workCells[day + i].getAttribute('data-group-index');
538
+ var filterEvents = this.getFilteredEvents(startDate, endDate, groupIndex);
539
+ var renderedAppCount = this.getOverlapEvents(startDate, this.eventsRendered).length;
540
+ var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);
541
+ var indicator = this.workCells[day + i].querySelector('.' + cls.MORE_INDICATOR_CLASS);
542
+ if (indicator) {
543
+ indicator.innerHTML = this.getMoreIndicatorText(count);
544
+ }
545
+ else {
546
+ var moreIndicatorElement = this.getMoreIndicatorElement(count, startDate, endDate);
547
+ if (!isNullOrUndefined(groupIndex)) {
548
+ moreIndicatorElement.setAttribute('data-group-index', groupIndex);
542
549
  }
550
+ moreIndicatorElement.style.top = (this.cellHeight - this.monthHeaderHeight - this.moreIndicatorHeight) + 'px';
551
+ moreIndicatorElement.style.width = this.cellWidth - 2 + 'px';
552
+ this.renderElement(this.workCells[day + i], moreIndicatorElement);
553
+ EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);
543
554
  }
544
555
  }
545
556
  }
@@ -661,7 +672,7 @@ var MonthEvent = /** @class */ (function (_super) {
661
672
  MonthEvent.prototype.getMoreIndicatorElement = function (count, startDate, endDate) {
662
673
  var moreIndicatorElement = createElement('div', {
663
674
  className: cls.MORE_INDICATOR_CLASS,
664
- innerHTML: '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),
675
+ innerHTML: this.getMoreIndicatorText(count),
665
676
  attrs: {
666
677
  'tabindex': '0',
667
678
  'data-start-date': startDate.getTime().toString(),
@@ -671,6 +682,9 @@ var MonthEvent = /** @class */ (function (_super) {
671
682
  });
672
683
  return moreIndicatorElement;
673
684
  };
685
+ MonthEvent.prototype.getMoreIndicatorText = function (count) {
686
+ return '+' + this.parent.globalize.formatNumber(count) + '&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));
687
+ };
674
688
  MonthEvent.prototype.removeHeightProperty = function (selector) {
675
689
  var rows = [].slice.call(this.element.querySelectorAll('.' + selector + ' tbody tr'));
676
690
  for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {
@@ -276,7 +276,8 @@ var TimelineEvent = /** @class */ (function (_super) {
276
276
  }
277
277
  };
278
278
  TimelineEvent.prototype.updateCellHeight = function (cell, height) {
279
- if ((height > this.cellHeight)) {
279
+ var cellHeight = cell.style.height === '' ? this.cellHeight : parseInt(cell.style.height, 10);
280
+ if (height > cellHeight) {
280
281
  setStyleAttribute(cell, { 'height': height + 'px' });
281
282
  if (this.parent.activeViewOptions.group.resources.length > 0) {
282
283
  var resourceCell = this.parent.element.querySelector('.' + cls.RESOURCE_COLUMN_TABLE_CLASS + ' ' + 'tbody td[data-group-index="' +
@@ -224,7 +224,9 @@ var YearEvent = /** @class */ (function (_super) {
224
224
  this.eventHeight = util.getElementHeightFromClass(eventTable, cls.APPOINTMENT_CLASS);
225
225
  var wrapperCollection = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CONTAINER_CLASS));
226
226
  var resources = this.parent.uiStateValues.isGroupAdaptive ?
227
- [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] : this.parent.resourceBase.lastResourceLevel;
227
+ [this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex]] :
228
+ this.parent.activeViewOptions.allowVirtualScrolling ? this.parent.resourceBase.renderedResources :
229
+ this.parent.resourceBase.lastResourceLevel;
228
230
  var months = this.getMonths();
229
231
  if (this.parent.activeViewOptions.orientation === 'Horizontal') {
230
232
  for (var month = 0; month < months.length; month++) {
@@ -656,7 +656,8 @@ var EventWindow = /** @class */ (function () {
656
656
  return labelText;
657
657
  };
658
658
  EventWindow.prototype.onChange = function (args) {
659
- var target = args.event.currentTarget.querySelector('input');
659
+ var targetSelector = "." + cls.EVENT_WINDOW_ALL_DAY_CLASS + ",." + cls.TIME_ZONE_CLASS + ",." + cls.EVENT_WINDOW_REPEAT_CLASS;
660
+ var target = closest(args.event.target, targetSelector);
660
661
  if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {
661
662
  this.onAllDayChange(args.checked);
662
663
  }
@@ -822,7 +823,8 @@ var EventWindow = /** @class */ (function () {
822
823
  };
823
824
  EventWindow.prototype.showDetails = function (eventData) {
824
825
  var eventObj = extend({}, eventData, null, true);
825
- if (eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
826
+ if ((!this.cellClickAction || this.cellClickAction && !isNullOrUndefined(this.parent.editorTemplate)) &&
827
+ eventObj[this.fields.endTime].getHours() === 0 && eventObj[this.fields.endTime].getMinutes() === 0) {
826
828
  this.trimAllDay(eventObj);
827
829
  }
828
830
  this.eventData = eventObj;
@@ -19,6 +19,7 @@ export declare class Month extends ViewBase implements IRenderer {
19
19
  scrollLeftPanel(target: HTMLElement): void;
20
20
  getLeftPanelElement(): HTMLElement;
21
21
  onScrollUIUpdate(args: NotifyEventArgs): void;
22
+ private scrollToSelectedDate;
22
23
  setContentHeight(content: HTMLElement, leftPanelElement: HTMLElement, height: number): void;
23
24
  generateColumnLevels(): TdData[][];
24
25
  getDateSlots(renderDates: Date[], workDays: number[]): TdData[];
@@ -57,6 +57,8 @@ var Month = /** @class */ (function (_super) {
57
57
  this.parent.notify(event.virtualScroll, e);
58
58
  this.scrollTopPanel(e.target);
59
59
  this.scrollLeftPanel(e.target);
60
+ this.parent.uiStateValues.top = e.target.scrollTop;
61
+ this.parent.uiStateValues.left = e.target.scrollLeft;
60
62
  this.setPersistence();
61
63
  };
62
64
  Month.prototype.scrollLeftPanel = function (target) {
@@ -89,26 +91,41 @@ var Month = /** @class */ (function (_super) {
89
91
  header.style[args.cssProperties.padding] = '';
90
92
  }
91
93
  this.setColWidth(content);
92
- if (args.scrollPosition) {
94
+ if (args.scrollPosition || !args.isPreventScrollUpdate && this.parent.currentView === 'TimelineMonth') {
95
+ var top_1 = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.top : args.scrollPosition.top;
93
96
  if (leftPanel) {
94
- leftPanel.scrollTop = args.scrollPosition.top;
97
+ leftPanel.scrollTop = top_1;
95
98
  }
96
- content.scrollTop = args.scrollPosition.top;
97
- content.scrollLeft = args.scrollPosition.left;
98
- }
99
- else {
100
- var headerCell = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="'
101
- + this.parent.selectedDate.getTime().toString() + '"]');
102
- if (!isNullOrUndefined(headerCell)) {
103
- content.scrollLeft = !this.parent.enableRtl ?
104
- headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
99
+ content.scrollTop = top_1;
100
+ if (this.parent.uiStateValues.isInitial) {
101
+ this.scrollToSelectedDate();
102
+ this.parent.uiStateValues.isInitial = false;
105
103
  }
106
104
  else {
107
- content.scrollLeft = 0;
105
+ content.scrollLeft = this.parent.currentView === 'TimelineMonth' ? this.parent.uiStateValues.left :
106
+ args.scrollPosition.left;
108
107
  }
109
108
  }
109
+ else {
110
+ this.scrollToSelectedDate();
111
+ }
110
112
  this.retainScrollPosition();
111
113
  };
114
+ Month.prototype.scrollToSelectedDate = function () {
115
+ var headerCell = this.element.querySelector('.' + cls.HEADER_CELLS_CLASS + '[data-date="'
116
+ + this.parent.selectedDate.getTime().toString() + '"]');
117
+ var content = this.getContentAreaElement();
118
+ if (!isNullOrUndefined(headerCell)) {
119
+ content.scrollLeft = !this.parent.enableRtl ?
120
+ headerCell.offsetLeft : -(this.parent.getContentTable().offsetWidth - headerCell.offsetLeft - headerCell.offsetWidth);
121
+ }
122
+ else {
123
+ content.scrollLeft = 0;
124
+ }
125
+ if (content.scrollLeft === 0 && this.parent.uiStateValues.isInitial) {
126
+ this.parent.uiStateValues.left = 0;
127
+ }
128
+ };
112
129
  Month.prototype.setContentHeight = function (content, leftPanelElement, height) {
113
130
  content.style.height = 'auto';
114
131
  if (this.parent.currentView === 'Month') {
@@ -91,7 +91,8 @@ var Render = /** @class */ (function () {
91
91
  this.parent.virtualScrollModule.destroy();
92
92
  this.parent.virtualScrollModule = null;
93
93
  }
94
- if (this.parent.currentView.indexOf('Timeline') !== -1 && this.parent.currentView.indexOf('Year') === -1
94
+ if (this.parent.currentView.indexOf('Timeline') !== -1 && (this.parent.currentView.indexOf('Year') === -1 ||
95
+ (this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical'))
95
96
  && this.parent.activeViewOptions.allowVirtualScrolling
96
97
  && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
97
98
  this.parent.virtualScrollModule = new VirtualScroll(this.parent);
@@ -12,7 +12,8 @@ export declare class TimelineYear extends Year {
12
12
  private renderResourceHeader;
13
13
  renderContent(contentWrapper: HTMLElement): void;
14
14
  private renderDefaultContent;
15
- private renderResourceContent;
15
+ getContentRows(): Element[];
16
+ renderResourceContent(wrapper: HTMLElement, monthBody: HTMLTableSectionElement, contentBody: HTMLTableSectionElement): void;
16
17
  private renderDayMonthHeaderTemplate;
17
18
  private renderCellTemplate;
18
19
  scrollToDate(scrollDate: Date): void;
@@ -149,7 +149,7 @@ var TimelineYear = /** @class */ (function (_super) {
149
149
  !this.parent.uiStateValues.isGroupAdaptive) {
150
150
  tdCollection.push(firstTd);
151
151
  firstTd.appendChild(this.parent.resourceBase.createResourceColumn());
152
- this.rowCount = this.parent.resourceBase.lastResourceLevel.length;
152
+ this.rowCount = this.parent.resourceBase.renderedResources.length;
153
153
  }
154
154
  else {
155
155
  tdCollection.push(firstTd);
@@ -166,6 +166,9 @@ var TimelineYear = /** @class */ (function (_super) {
166
166
  content.appendChild(contentTable);
167
167
  var eventWrapper = createElement('div', { className: cls.EVENT_TABLE_CLASS });
168
168
  content.appendChild(eventWrapper);
169
+ if (this.parent.virtualScrollModule) {
170
+ this.parent.virtualScrollModule.renderVirtualTrack(content);
171
+ }
169
172
  var contentTBody = contentTable.querySelector('tbody');
170
173
  if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
171
174
  if (this.parent.rowAutoHeight) {
@@ -283,6 +286,47 @@ var TimelineYear = /** @class */ (function (_super) {
283
286
  }
284
287
  }
285
288
  };
289
+ TimelineYear.prototype.getContentRows = function () {
290
+ var tRow = [];
291
+ var monthCells = this.getMonths();
292
+ for (var row = 0; row < this.parent.resourceBase.renderedResources.length; row++) {
293
+ var tr = createElement('tr', { attrs: { 'role': 'row' } });
294
+ tRow.push(tr);
295
+ var resData = void 0;
296
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
297
+ resData = this.parent.resourceBase.renderedResources[row];
298
+ }
299
+ var monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[row], 1);
300
+ var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
301
+ for (var month = 0; month < this.columnCount; month++) {
302
+ var classList = [];
303
+ var groupIndex = resData.groupIndex;
304
+ classList = classList.concat(resData.className);
305
+ if (classList.indexOf(cls.RESOURCE_PARENT_CLASS) > -1) {
306
+ classList.push(cls.RESOURCE_GROUP_CELLS_CLASS);
307
+ }
308
+ else {
309
+ classList.push(cls.WORKDAY_CLASS);
310
+ }
311
+ monthDate = new Date(this.parent.selectedDate.getFullYear(), monthCells[month], 1);
312
+ date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
313
+ var tdELe = createElement('td', {
314
+ className: cls.WORK_CELLS_CLASS,
315
+ attrs: {
316
+ 'role': 'gridcell', 'aria-selected': 'false',
317
+ 'data-date': date.getTime().toString()
318
+ }
319
+ });
320
+ addClass([tdELe], classList);
321
+ tdELe.setAttribute('data-group-index', groupIndex.toString());
322
+ this.renderCellTemplate({ date: date, type: 'resourceGroupCells', groupIndex: groupIndex }, tdELe);
323
+ this.wireEvents(tdELe, 'cell');
324
+ this.parent.trigger(event.renderCell, { elementType: 'resourceGroupCells', element: tdELe, date: date });
325
+ tr.appendChild(tdELe);
326
+ }
327
+ }
328
+ return tRow;
329
+ };
286
330
  TimelineYear.prototype.renderResourceContent = function (wrapper, monthBody, contentBody) {
287
331
  var months = this.getMonths();
288
332
  for (var row = 0; row < this.rowCount; row++) {
@@ -290,8 +334,8 @@ var TimelineYear = /** @class */ (function (_super) {
290
334
  var tr = createElement('tr', { attrs: { 'role': 'row' } });
291
335
  contentBody.appendChild(tr);
292
336
  var resData = void 0;
293
- if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
294
- resData = this.parent.resourceBase.lastResourceLevel[row];
337
+ if (this.parent.activeViewOptions.orientation === 'Vertical' && this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
338
+ resData = this.parent.resourceBase.renderedResources[row];
295
339
  }
296
340
  var monthDate = new Date(this.parent.selectedDate.getFullYear(), months[row], 1);
297
341
  var date = this.parent.calendarUtil.getMonthStartDate(new Date(monthDate.getTime()));
@@ -312,8 +356,9 @@ var TimelineYear = /** @class */ (function (_super) {
312
356
  }
313
357
  for (var month = 0; month < this.columnCount; month++) {
314
358
  var classList = [];
315
- var groupIndex = row;
359
+ var groupIndex = void 0;
316
360
  if (this.parent.activeViewOptions.orientation === 'Vertical') {
361
+ groupIndex = resData.groupIndex;
317
362
  classList = classList.concat(resData.className);
318
363
  if (classList.indexOf(cls.RESOURCE_PARENT_CLASS) > -1) {
319
364
  classList.push(cls.RESOURCE_GROUP_CELLS_CLASS);
@@ -41,6 +41,9 @@ var Year = /** @class */ (function (_super) {
41
41
  var viewTypeClass = this.parent.activeViewOptions.orientation === 'Horizontal' ? 'e-horizontal' : 'e-vertical';
42
42
  addClass([this.element], [this.viewClass, viewTypeClass, className]);
43
43
  this.renderPanel(className);
44
+ if (this.parent.activeViewOptions.allowVirtualScrolling) {
45
+ addClass([this.element], [cls.VIRTUAL_SCROLL_CLASS]);
46
+ }
44
47
  var calendarTable = this.createTableLayout(cls.OUTER_TABLE_CLASS);
45
48
  this.element.appendChild(calendarTable);
46
49
  this.element.querySelector('table').setAttribute('role', 'presentation');
@@ -261,6 +264,7 @@ var Year = /** @class */ (function (_super) {
261
264
  Year.prototype.onContentScroll = function (e) {
262
265
  var target = e.target;
263
266
  var headerWrapper = this.getDatesHeaderElement();
267
+ this.parent.notify(event.virtualScroll, e);
264
268
  if (headerWrapper) {
265
269
  headerWrapper.firstElementChild.scrollLeft = target.scrollLeft;
266
270
  }
@@ -269,6 +273,10 @@ var Year = /** @class */ (function (_super) {
269
273
  if (scrollTopElement) {
270
274
  scrollTopElement.scrollTop = target.scrollTop;
271
275
  }
276
+ if (!this.parent.isAdaptive) {
277
+ this.parent.uiStateValues.top = e.target.scrollTop;
278
+ }
279
+ this.parent.uiStateValues.left = e.target.scrollLeft;
272
280
  this.setPersistence();
273
281
  };
274
282
  Year.prototype.onScrollUiUpdate = function (args) {
@@ -299,6 +307,18 @@ var Year = /** @class */ (function (_super) {
299
307
  var isYScroll = contentWrapper.scrollWidth > contentWrapper.clientWidth;
300
308
  leftPanelElement.style.height = formatUnit(height - (isYScroll ? 17 : 0));
301
309
  }
310
+ if (!args.isPreventScrollUpdate) {
311
+ if (this.parent.uiStateValues.isInitial) {
312
+ this.parent.uiStateValues.isInitial = false;
313
+ }
314
+ else {
315
+ if (leftPanelElement) {
316
+ leftPanelElement.scrollTop = this.parent.uiStateValues.top;
317
+ }
318
+ contentWrapper.scrollTop = this.parent.uiStateValues.top;
319
+ contentWrapper.scrollLeft = this.parent.uiStateValues.left;
320
+ }
321
+ }
302
322
  this.retainScrollPosition();
303
323
  };
304
324
  Year.prototype.getStartDate = function () {
@@ -1847,6 +1847,15 @@
1847
1847
  text-decoration: underline;
1848
1848
  }
1849
1849
 
1850
+ .e-schedule .e-timeline-year-view.e-virtual-mask .e-work-cells {
1851
+ background-color: rgba(0, 0, 0, 0.08);
1852
+ box-shadow: inset 0 0 0 8px #2a2a2a;
1853
+ }
1854
+
1855
+ .e-schedule .e-timeline-year-view.e-virtual-mask .e-work-cells:hover {
1856
+ background-color: rgba(0, 0, 0, 0.08);
1857
+ }
1858
+
1850
1859
  .e-schedule .e-timeline-year-view .e-event-table {
1851
1860
  position: absolute;
1852
1861
  top: 0;
@@ -2878,13 +2887,6 @@
2878
2887
  min-width: 34px;
2879
2888
  }
2880
2889
 
2881
- .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons,
2882
- .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons,
2883
- .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons,
2884
- .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons {
2885
- padding: 0;
2886
- }
2887
-
2888
2890
  .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons.e-icon-right,
2889
2891
  .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons.e-icon-right,
2890
2892
  .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons.e-icon-right,
@@ -4015,6 +4017,7 @@
4015
4017
 
4016
4018
  .e-bigger .e-more-popup-wrapper .e-more-event-content,
4017
4019
  .e-more-popup-wrapper .e-more-event-content {
4020
+ color: #f0f0f0;
4018
4021
  height: calc(100% - 35px);
4019
4022
  max-height: 150px;
4020
4023
  overflow-y: auto;
@@ -1844,6 +1844,15 @@
1844
1844
  text-decoration: underline;
1845
1845
  }
1846
1846
 
1847
+ .e-schedule .e-timeline-year-view.e-virtual-mask .e-work-cells {
1848
+ background-color: rgba(0, 0, 0, 0.08);
1849
+ box-shadow: inset 0 0 0 8px #f8f8f8;
1850
+ }
1851
+
1852
+ .e-schedule .e-timeline-year-view.e-virtual-mask .e-work-cells:hover {
1853
+ background-color: rgba(0, 0, 0, 0.08);
1854
+ }
1855
+
1847
1856
  .e-schedule .e-timeline-year-view .e-event-table {
1848
1857
  position: absolute;
1849
1858
  top: 0;
@@ -2875,13 +2884,6 @@
2875
2884
  min-width: 34px;
2876
2885
  }
2877
2886
 
2878
- .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons,
2879
- .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons,
2880
- .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons,
2881
- .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons {
2882
- padding: 0;
2883
- }
2884
-
2885
2887
  .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons.e-icon-right,
2886
2888
  .e-bigger .e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item .e-tbar-btn.e-btn.e-control.e-tbtn-txt .e-icons.e-icon-right,
2887
2889
  .e-bigger.e-schedule .e-schedule-toolbar .e-toolbar-items .e-toolbar-item button.e-btn.e-tbtn-txt .e-icons.e-icon-right,
@@ -4013,6 +4015,7 @@
4013
4015
 
4014
4016
  .e-bigger .e-more-popup-wrapper .e-more-event-content,
4015
4017
  .e-more-popup-wrapper .e-more-event-content {
4018
+ color: #333;
4016
4019
  height: calc(100% - 35px);
4017
4020
  max-height: 150px;
4018
4021
  overflow-y: auto;