@syncfusion/ej2-schedule 20.1.59 → 20.2.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/ej2-schedule.umd.min.js +2 -2
  3. package/dist/ej2-schedule.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-schedule.es2015.js +250 -68
  5. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es5.js +254 -67
  7. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  8. package/dist/global/ej2-schedule.min.js +2 -2
  9. package/dist/global/ej2-schedule.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/helpers/e2e/index.js +9 -7
  12. package/helpers/e2e/recurrence-editor.js +41 -25
  13. package/helpers/e2e/schedule.js +44 -28
  14. package/package.json +15 -15
  15. package/src/recurrence-editor/recurrence-editor.js +4 -1
  16. package/src/schedule/actions/action-base.d.ts +1 -0
  17. package/src/schedule/actions/action-base.js +3 -2
  18. package/src/schedule/actions/crud.js +9 -7
  19. package/src/schedule/actions/drag.js +1 -1
  20. package/src/schedule/base/interface.d.ts +6 -0
  21. package/src/schedule/base/schedule.d.ts +8 -0
  22. package/src/schedule/base/schedule.js +66 -0
  23. package/src/schedule/event-renderer/agenda-base.js +6 -6
  24. package/src/schedule/event-renderer/event-base.d.ts +2 -0
  25. package/src/schedule/event-renderer/event-base.js +23 -4
  26. package/src/schedule/event-renderer/month.js +3 -6
  27. package/src/schedule/event-renderer/vertical-view.js +3 -3
  28. package/src/schedule/event-renderer/year.js +2 -2
  29. package/src/schedule/exports/calendar-export.js +1 -1
  30. package/src/schedule/exports/calendar-import.js +32 -18
  31. package/src/schedule/exports/excel-export.js +8 -4
  32. package/src/schedule/popups/event-window.js +3 -1
  33. package/src/schedule/popups/quick-popups.js +5 -4
  34. package/src/schedule/renderer/agenda.js +2 -2
  35. package/src/schedule/renderer/timeline-month.d.ts +1 -0
  36. package/src/schedule/renderer/timeline-month.js +9 -0
  37. package/src/schedule/renderer/timeline-view.d.ts +1 -0
  38. package/src/schedule/renderer/timeline-view.js +14 -0
  39. package/src/schedule/renderer/timeline-year.js +3 -0
  40. package/src/schedule/renderer/vertical-view.d.ts +2 -0
  41. package/src/schedule/renderer/vertical-view.js +37 -5
  42. package/src/schedule/renderer/view-base.d.ts +1 -0
  43. package/src/schedule/renderer/view-base.js +19 -0
  44. package/src/schedule/renderer/year.js +2 -1
  45. package/styles/bootstrap-dark.css +6 -5
  46. package/styles/bootstrap.css +6 -5
  47. package/styles/bootstrap4.css +6 -5
  48. package/styles/bootstrap5-dark.css +5 -3
  49. package/styles/bootstrap5.css +6 -5
  50. package/styles/fabric-dark.css +6 -5
  51. package/styles/fabric.css +6 -5
  52. package/styles/fluent-dark.css +20 -18
  53. package/styles/fluent.css +8 -7
  54. package/styles/highcontrast-light.css +6 -5
  55. package/styles/highcontrast.css +6 -5
  56. package/styles/material-dark.css +6 -5
  57. package/styles/material.css +6 -5
  58. package/styles/recurrence-editor/_fusionnew-definition.scss +15 -0
  59. package/styles/recurrence-editor/_material3-definition.scss +15 -0
  60. package/styles/schedule/_fluent-definition.scss +1 -1
  61. package/styles/schedule/_fusionnew-definition.scss +224 -0
  62. package/styles/schedule/_layout.scss +6 -2
  63. package/styles/schedule/_material3-definition.scss +224 -0
  64. package/styles/schedule/bootstrap-dark.css +6 -5
  65. package/styles/schedule/bootstrap.css +6 -5
  66. package/styles/schedule/bootstrap4.css +6 -5
  67. package/styles/schedule/bootstrap5-dark.css +5 -3
  68. package/styles/schedule/bootstrap5.css +6 -5
  69. package/styles/schedule/fabric-dark.css +6 -5
  70. package/styles/schedule/fabric.css +6 -5
  71. package/styles/schedule/fluent-dark.css +20 -18
  72. package/styles/schedule/fluent.css +8 -7
  73. package/styles/schedule/highcontrast-light.css +6 -5
  74. package/styles/schedule/highcontrast.css +6 -5
  75. package/styles/schedule/icons/_fusionnew.scss +232 -0
  76. package/styles/schedule/icons/_material3.scss +232 -0
  77. package/styles/schedule/material-dark.css +6 -5
  78. package/styles/schedule/material.css +6 -5
  79. package/styles/schedule/tailwind-dark.css +5 -3
  80. package/styles/schedule/tailwind.css +6 -5
  81. package/styles/tailwind-dark.css +5 -3
  82. package/styles/tailwind.css +6 -5
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 20.1.59
3
+ * version : 20.2.38
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
@@ -1,7 +1,9 @@
1
- "use strict";
2
- function __export(m) {
3
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
- }
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- __export(require("./schedule"));
7
- __export(require("./recurrence-editor"));
1
+ define(["require", "exports", "./schedule", "./recurrence-editor"], function (require, exports, schedule_1, recurrence_editor_1) {
2
+ "use strict";
3
+ function __export(m) {
4
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
5
+ }
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ __export(schedule_1);
8
+ __export(recurrence_editor_1);
9
+ });
@@ -1,26 +1,42 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const e2e_1 = require("@syncfusion/ej2-base/helpers/e2e");
4
- class RecurrenceEditorHelper extends e2e_1.TestHelper {
5
- constructor(id, wrapperFn) {
6
- super();
7
- this.id = id;
8
- if (wrapperFn !== undefined) {
9
- this.wrapperFn = wrapperFn;
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ define(["require", "exports", "@syncfusion/ej2-base/helpers/e2e"], function (require, exports, e2e_1) {
15
+ "use strict";
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var RecurrenceEditorHelper = (function (_super) {
18
+ __extends(RecurrenceEditorHelper, _super);
19
+ function RecurrenceEditorHelper(id, wrapperFn) {
20
+ var _this = _super.call(this) || this;
21
+ _this.id = id;
22
+ if (wrapperFn !== undefined) {
23
+ _this.wrapperFn = wrapperFn;
24
+ }
25
+ return _this;
10
26
  }
11
- return this;
12
- }
13
- getElement() {
14
- return this.selector('#' + this.id);
15
- }
16
- changeRepeatType(repeatType) {
17
- if (typeof repeatType === 'string') {
18
- this.setModel('selectedType', repeatType.toLowerCase());
19
- }
20
- else {
21
- const frequencies = this.getModel('frequencies');
22
- this.setModel('selectedType', frequencies[repeatType]);
23
- }
24
- }
25
- }
26
- exports.RecurrenceEditorHelper = RecurrenceEditorHelper;
27
+ RecurrenceEditorHelper.prototype.getElement = function () {
28
+ return this.selector('#' + this.id);
29
+ };
30
+ RecurrenceEditorHelper.prototype.changeRepeatType = function (repeatType) {
31
+ if (typeof repeatType === 'string') {
32
+ this.setModel('selectedType', repeatType.toLowerCase());
33
+ }
34
+ else {
35
+ var frequencies = this.getModel('frequencies');
36
+ this.setModel('selectedType', frequencies[repeatType]);
37
+ }
38
+ };
39
+ return RecurrenceEditorHelper;
40
+ }(e2e_1.TestHelper));
41
+ exports.RecurrenceEditorHelper = RecurrenceEditorHelper;
42
+ });
@@ -1,29 +1,45 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const e2e_1 = require("@syncfusion/ej2-base/helpers/e2e");
4
- class ScheduleHelper extends e2e_1.TestHelper {
5
- constructor(id, wrapperFn) {
6
- super();
7
- this.id = id;
8
- if (wrapperFn !== undefined) {
9
- this.wrapperFn = wrapperFn;
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ define(["require", "exports", "@syncfusion/ej2-base/helpers/e2e"], function (require, exports, e2e_1) {
15
+ "use strict";
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var ScheduleHelper = (function (_super) {
18
+ __extends(ScheduleHelper, _super);
19
+ function ScheduleHelper(id, wrapperFn) {
20
+ var _this = _super.call(this) || this;
21
+ _this.id = id;
22
+ if (wrapperFn !== undefined) {
23
+ _this.wrapperFn = wrapperFn;
24
+ }
25
+ return _this;
10
26
  }
11
- return this;
12
- }
13
- getElement() {
14
- return this.selector('#' + this.id);
15
- }
16
- getEventWindow() {
17
- return this.selector('#' + this.id + '_dialog_wrapper');
18
- }
19
- getAlertDialog() {
20
- return this.selector('#' + this.id + 'QuickDialog');
21
- }
22
- getQuickPopup() {
23
- return this.selector('#' + this.id + ' .e-quick-popup-wrapper');
24
- }
25
- getMorePopup() {
26
- return this.selector('#' + this.id + ' .e-more-popup-wrapper');
27
- }
28
- }
29
- exports.ScheduleHelper = ScheduleHelper;
27
+ ScheduleHelper.prototype.getElement = function () {
28
+ return this.selector('#' + this.id);
29
+ };
30
+ ScheduleHelper.prototype.getEventWindow = function () {
31
+ return this.selector('#' + this.id + '_dialog_wrapper');
32
+ };
33
+ ScheduleHelper.prototype.getAlertDialog = function () {
34
+ return this.selector('#' + this.id + 'QuickDialog');
35
+ };
36
+ ScheduleHelper.prototype.getQuickPopup = function () {
37
+ return this.selector('#' + this.id + ' .e-quick-popup-wrapper');
38
+ };
39
+ ScheduleHelper.prototype.getMorePopup = function () {
40
+ return this.selector('#' + this.id + ' .e-more-popup-wrapper');
41
+ };
42
+ return ScheduleHelper;
43
+ }(e2e_1.TestHelper));
44
+ exports.ScheduleHelper = ScheduleHelper;
45
+ });
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@20.1.56",
3
+ "_id": "@syncfusion/ej2-schedule@20.2.36",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-itq16KmohzdmQIkD1yBVA4IRLG3wM64+gfpPCtFLaY4YxBFZCpNZJuFBHbyya+JIuqF2N4bAeGVGpurpSEplYA==",
5
+ "_integrity": "sha512-LvbKoK7n6mykYe9JbXXXshmU2sZVFJ0OJA22Ng55q2fBao9kgZt+AmwYZk9ffzyFZbzAYgIPKSiNrRF9+Ps3PA==",
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-20.1.56.tgz",
27
- "_shasum": "4d87acbdba4f46c0f6fec5f5605dc648ba192176",
26
+ "_resolved": "http://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-schedule/-/ej2-schedule-20.2.36.tgz",
27
+ "_shasum": "9714b4fa139a8afc99b3875e52350e177510889d",
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": "~20.1.57",
39
- "@syncfusion/ej2-buttons": "~20.1.55",
40
- "@syncfusion/ej2-calendars": "~20.1.58",
41
- "@syncfusion/ej2-data": "~20.1.55",
42
- "@syncfusion/ej2-dropdowns": "~20.1.59",
43
- "@syncfusion/ej2-excel-export": "~20.1.55",
44
- "@syncfusion/ej2-inputs": "~20.1.59",
45
- "@syncfusion/ej2-lists": "~20.1.55",
46
- "@syncfusion/ej2-navigations": "~20.1.58",
47
- "@syncfusion/ej2-popups": "~20.1.58"
38
+ "@syncfusion/ej2-base": "~20.2.38",
39
+ "@syncfusion/ej2-buttons": "~20.2.38",
40
+ "@syncfusion/ej2-calendars": "~20.2.38",
41
+ "@syncfusion/ej2-data": "~20.2.38",
42
+ "@syncfusion/ej2-dropdowns": "~20.2.38",
43
+ "@syncfusion/ej2-excel-export": "~20.2.38",
44
+ "@syncfusion/ej2-inputs": "~20.2.38",
45
+ "@syncfusion/ej2-lists": "~20.2.38",
46
+ "@syncfusion/ej2-navigations": "~20.2.38",
47
+ "@syncfusion/ej2-popups": "~20.2.38"
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": "20.1.59",
84
+ "version": "20.2.38",
85
85
  "sideEffects": false
86
86
  }
@@ -358,7 +358,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
358
358
  value: VALUEFIELD
359
359
  },
360
360
  placeholder: this.localeObj.getConstant(REPEAT),
361
- htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT) },
361
+ htmlAttributes: { 'title': this.localeObj.getConstant(REPEAT), role: 'option' },
362
362
  change: function (args) {
363
363
  self.setProperties({ selectedType: _this.frequencies.indexOf(args.value) }, false);
364
364
  self.element.querySelector('.' + REPEATCONTENT).innerHTML =
@@ -380,6 +380,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
380
380
  text: TEXTFIELD,
381
381
  value: VALUEFIELD
382
382
  },
383
+ htmlAttributes: { role: 'option' },
383
384
  change: function (args) {
384
385
  self.freshOnEndForm();
385
386
  self.updateEndOnForm(args.value);
@@ -397,6 +398,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
397
398
  text: TEXTFIELD,
398
399
  value: VALUEFIELD
399
400
  },
401
+ htmlAttributes: { role: 'option' },
400
402
  index: 1,
401
403
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
402
404
  change: function (args) {
@@ -416,6 +418,7 @@ var RecurrenceEditor = /** @class */ (function (_super) {
416
418
  text: TEXTFIELD,
417
419
  value: VALUEFIELD
418
420
  },
421
+ htmlAttributes: { role: 'option' },
419
422
  enableRtl: this.enableRtl,
420
423
  index: 7,
421
424
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -16,6 +16,7 @@ export declare class ActionBase {
16
16
  verticalEvent: VerticalEvent;
17
17
  yearEvent: YearEvent;
18
18
  daysVariation: number;
19
+ private scrollEventArgs;
19
20
  constructor(parent: Schedule);
20
21
  getChangedData(multiData?: Record<string, any>[]): Record<string, any>;
21
22
  saveChangedData(eventArgs: DragEventArgs | ResizeEventArgs, isMultiSelect?: boolean): void;
@@ -300,6 +300,7 @@ var ActionBase = /** @class */ (function () {
300
300
  };
301
301
  ActionBase.prototype.updateScrollPosition = function (e) {
302
302
  var _this = this;
303
+ this.scrollEventArgs = e;
303
304
  if (this.actionObj.scroll.enable && isNullOrUndefined(this.actionObj.scrollInterval)) {
304
305
  this.actionObj.scrollInterval = window.setInterval(function () {
305
306
  if (_this.autoScrollValidation() && !_this.actionObj.clone.classList.contains(cls.ALLDAY_APPOINTMENT_CLASS)) {
@@ -309,10 +310,10 @@ var ActionBase = /** @class */ (function () {
309
310
  }
310
311
  _this.autoScroll();
311
312
  if (_this.actionObj.action === 'drag') {
312
- _this.parent.dragAndDropModule.updateDraggingDateTime(e);
313
+ _this.parent.dragAndDropModule.updateDraggingDateTime(_this.scrollEventArgs);
313
314
  }
314
315
  else {
315
- _this.parent.resizeModule.updateResizingDirection(e);
316
+ _this.parent.resizeModule.updateResizingDirection(_this.scrollEventArgs);
316
317
  }
317
318
  }
318
319
  }, this.actionObj.scroll.timeDelay);
@@ -632,13 +632,15 @@ var Crud = /** @class */ (function () {
632
632
  else {
633
633
  endDate = new Date(+followEvent[fields.startTime]);
634
634
  var newRecurrenceRule = followEvent[fields.recurrenceRule];
635
- var startDate = parentEvent[fields.startTime];
636
- var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
637
- var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
638
- var untilDate = new Date(dateCollection.slice(-1)[0]);
639
- untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
640
- endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
641
- followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);
635
+ if (newRecurrenceRule) {
636
+ var startDate = parentEvent[fields.startTime];
637
+ var ruleException = (this.parent.currentAction === 'DeleteFollowingEvents') ? followEvent[fields.recurrenceException] : null;
638
+ var dateCollection = generate(startDate, newRecurrenceRule, ruleException, this.parent.activeViewOptions.firstDayOfWeek);
639
+ var untilDate = new Date(dateCollection.slice(-1)[0]);
640
+ untilDate.setHours(endDate.getHours(), endDate.getMinutes(), endDate.getSeconds());
641
+ endDate.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds());
642
+ followEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(newRecurrenceRule, new Date(+untilDate), false);
643
+ }
642
644
  }
643
645
  parentEvent[fields.recurrenceRule] = this.getUpdatedRecurrenceRule(recurrenceRule, util.addDays(new Date(endDate.getTime()), -1), true);
644
646
  };
@@ -1238,7 +1238,7 @@ var DragAndDrop = /** @class */ (function (_super) {
1238
1238
  var cursorElement = this.getCursorElement(e);
1239
1239
  if (cursorElement) {
1240
1240
  top = cursorElement.classList.contains(cls.WORK_CELLS_CLASS) ? cursorElement.offsetTop :
1241
- cursorElement.offsetParent.classList.contains(cls.APPOINTMENT_CLASS) ?
1241
+ (cursorElement.offsetParent && cursorElement.offsetParent.classList.contains(cls.APPOINTMENT_CLASS)) ?
1242
1242
  cursorElement.offsetParent.offsetTop : top;
1243
1243
  }
1244
1244
  }
@@ -281,6 +281,11 @@ export interface ExportOptions {
281
281
  * the occurrences as separate instances on an exported Excel file.
282
282
  */
283
283
  includeOccurrences?: boolean;
284
+ /**
285
+ * Defines the delimiter for csv file export.
286
+ * By default, csv files are using comma(,) as separator. You can specify this property to change the delimiter in csv file.
287
+ */
288
+ separator?: string;
284
289
  }
285
290
  /** An interface that holds the field name and its header text to export to excel. */
286
291
  export interface ExportFieldInfo {
@@ -414,6 +419,7 @@ export interface IRenderer {
414
419
  isTimelineView(): boolean;
415
420
  setColWidth(content: HTMLElement): void;
416
421
  resetColWidth(): void;
422
+ getAdjustedDate?(date: Date): Date;
417
423
  viewIndex: number;
418
424
  }
419
425
  /** @private */
@@ -1641,6 +1641,14 @@ export declare class Schedule extends Component<HTMLElement> implements INotifyP
1641
1641
  * @returns {void}
1642
1642
  */
1643
1643
  closeEditor(): void;
1644
+ /**
1645
+ * To manually open the quick info popup based on cell or event details.
1646
+ *
1647
+ * @param {object} data Defines the cell or event data. If the data contains valid ID, it will open event quick info popup,
1648
+ * otherwise cell quick info popup displayed.
1649
+ * @returns {void}
1650
+ */
1651
+ openQuickInfoPopup(data: Record<string, any>): void;
1644
1652
  /**
1645
1653
  * To manually close the quick info popup
1646
1654
  *
@@ -2399,6 +2399,72 @@ var Schedule = /** @class */ (function (_super) {
2399
2399
  this.eventWindow.dialogClose();
2400
2400
  }
2401
2401
  };
2402
+ /**
2403
+ * To manually open the quick info popup based on cell or event details.
2404
+ *
2405
+ * @param {object} data Defines the cell or event data. If the data contains valid ID, it will open event quick info popup,
2406
+ * otherwise cell quick info popup displayed.
2407
+ * @returns {void}
2408
+ */
2409
+ Schedule.prototype.openQuickInfoPopup = function (data) {
2410
+ var _this = this;
2411
+ if (this.currentView === 'Year' || isNullOrUndefined(data)) {
2412
+ return;
2413
+ }
2414
+ if (isNullOrUndefined(data[this.eventFields.id])) {
2415
+ if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda' || isNullOrUndefined(this.activeView)) {
2416
+ return;
2417
+ }
2418
+ var cellData = {
2419
+ startTime: this.activeCellsData.startTime = this.getDateTime(data[this.eventFields.startTime]),
2420
+ endTime: this.activeCellsData.endTime = this.getDateTime(data[this.eventFields.endTime]),
2421
+ isAllDay: this.activeCellsData.isAllDay =
2422
+ !isNullOrUndefined(data[this.eventFields.isAllDay]) ? data[this.eventFields.isAllDay] : false
2423
+ };
2424
+ var startTime = this.activeView.getAdjustedDate(new Date(cellData.startTime));
2425
+ if (startTime) {
2426
+ var query = '.' + cls.WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"]';
2427
+ if (this.activeViewOptions.group.resources.length > 0 && !this.uiStateValues.isGroupAdaptive
2428
+ && this.resourceBase && this.eventBase) {
2429
+ cellData.groupIndex = this.eventBase.getGroupIndexFromEvent(data);
2430
+ query = '.' + cls.WORK_CELLS_CLASS + '[data-date="' + startTime.getTime() + '"][data-group-index="' + cellData.groupIndex + '"]';
2431
+ }
2432
+ var workCell = this.element.querySelector(query);
2433
+ if (workCell) {
2434
+ workCell.focus();
2435
+ cellData.element = workCell;
2436
+ this.notify(events.cellClick, cellData);
2437
+ }
2438
+ }
2439
+ }
2440
+ else {
2441
+ var app = this.getCurrentViewEvents().filter(function (item) {
2442
+ return data[_this.eventFields.id] === item[_this.eventFields.id];
2443
+ });
2444
+ if (app.length <= 0) {
2445
+ return;
2446
+ }
2447
+ var selectEvent = app[0];
2448
+ if (data[this.eventFields.recurrenceRule]) {
2449
+ var occurence = app.filter(function (x) {
2450
+ return x[_this.eventFields.startTime].getTime() === data[_this.eventFields.startTime].getTime();
2451
+ });
2452
+ if (occurence.length > 0) {
2453
+ selectEvent = occurence[0];
2454
+ }
2455
+ }
2456
+ var element = this.element.querySelector('div[data-guid="' + selectEvent.Guid + '"]');
2457
+ if (element) {
2458
+ this.eventBase.removeSelectedAppointmentClass();
2459
+ this.eventBase.addSelectedAppointments([element]);
2460
+ this.activeEventData = { event: selectEvent, element: element };
2461
+ if (this.currentView === 'Agenda' || this.currentView === 'MonthAgenda') {
2462
+ addClass([this.activeEventData.element], cls.AGENDA_SELECTED_CELL);
2463
+ }
2464
+ this.notify(events.eventClick, this.activeEventData);
2465
+ }
2466
+ }
2467
+ };
2402
2468
  /**
2403
2469
  * To manually close the quick info popup
2404
2470
  *
@@ -54,8 +54,8 @@ var AgendaBase = /** @class */ (function (_super) {
54
54
  'data-guid': listData[li].Guid,
55
55
  'role': 'button',
56
56
  'tabindex': '0',
57
- 'aria-readonly': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
58
- 'aria-selected': 'false',
57
+ 'aria-disabled': _this.parent.eventBase.getReadonlyAttribute(listData[li]),
58
+ 'aria-pressed': 'false',
59
59
  'aria-grabbed': 'true',
60
60
  'aria-label': _this.parent.getAnnouncementString(listData[li])
61
61
  }
@@ -323,8 +323,8 @@ var AgendaBase = /** @class */ (function (_super) {
323
323
  ntd.appendChild(this.createDateHeaderElement(tempData.date));
324
324
  addClass([ntd], [cls.AGENDA_CELLS_CLASS, cls.AGENDA_DATE_CLASS, cls.DATE_BORDER_CLASS]);
325
325
  var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), tempData.date.getTime());
326
- ntr.setAttribute('aria-rowindex', daysCount.toString());
327
- if (this.parent.element.querySelector(".e-agenda-view tr[aria-rowindex=\"" + daysCount + "\"]")) {
326
+ ntr.setAttribute('data-row-index', daysCount.toString());
327
+ if (this.parent.element.querySelector(".e-agenda-view tr[data-row-index=\"" + daysCount + "\"]")) {
328
328
  break;
329
329
  }
330
330
  ntr.insertBefore(ntd, ntr.childNodes[0]);
@@ -360,13 +360,13 @@ var AgendaBase = /** @class */ (function (_super) {
360
360
  };
361
361
  AgendaBase.prototype.createTableRowElement = function (date, type) {
362
362
  var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());
363
- var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });
363
+ var tr = createElement('tr', { attrs: { 'role': 'row', 'data-row-index': daysCount.toString() } });
364
364
  var td = createElement('td', {
365
365
  attrs: {
366
366
  'class': (type === 'monthHeader') ? cls.MONTH_HEADER_CLASS : cls.AGENDA_CELLS_CLASS,
367
367
  'role': 'gridcell',
368
368
  'aria-selected': 'false',
369
- 'aria-colindex': daysCount.toString(),
369
+ 'data-column-index': daysCount.toString(),
370
370
  'data-date': date.getTime().toString()
371
371
  }
372
372
  });
@@ -58,6 +58,8 @@ export declare class EventBase {
58
58
  getEventMaxID(resourceId?: number): number | string;
59
59
  private activeEventData;
60
60
  generateOccurrence(event: Record<string, any>, viewDate?: Date, oldTimezone?: string, isMaxCount?: boolean): Record<string, any>[];
61
+ private getDSTAdjustedTime;
62
+ private getDSTDiff;
61
63
  getParentEvent(eventObj: Record<string, any>, isParent?: boolean): Record<string, any>;
62
64
  getEventCollections(parentObj: Record<string, any>, childObj?: Record<string, any>): {
63
65
  [key: string]: Record<string, any>[];
@@ -522,7 +522,7 @@ var EventBase = /** @class */ (function () {
522
522
  var selectedAppointments = this.getSelectedAppointments();
523
523
  for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {
524
524
  var appointment = selectedAppointments_1[_i];
525
- appointment.setAttribute('aria-selected', 'false');
525
+ appointment.setAttribute('aria-pressed', 'false');
526
526
  }
527
527
  removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);
528
528
  if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {
@@ -532,7 +532,7 @@ var EventBase = /** @class */ (function () {
532
532
  EventBase.prototype.addSelectedAppointments = function (cells) {
533
533
  for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {
534
534
  var cell = cells_1[_i];
535
- cell.setAttribute('aria-selected', 'true');
535
+ cell.setAttribute('aria-pressed', 'true');
536
536
  }
537
537
  if (this.parent.currentView !== 'MonthAgenda') {
538
538
  this.parent.removeSelectedClass();
@@ -660,6 +660,7 @@ var EventBase = /** @class */ (function () {
660
660
  }
661
661
  else if (!closest(element, '.' + cls.POPUP_OPEN)) {
662
662
  this.removeSelectedAppointmentClass();
663
+ this.parent.selectedElements = [];
663
664
  }
664
665
  };
665
666
  EventBase.prototype.wireAppointmentEvents = function (element, event, isPreventCrud) {
@@ -765,6 +766,7 @@ var EventBase = /** @class */ (function () {
765
766
  this.parent.trigger(event.eventClick, args, function (eventClickArgs) {
766
767
  if (eventClickArgs.cancel) {
767
768
  _this.removeSelectedAppointmentClass();
769
+ _this.parent.selectedElements = [];
768
770
  if (_this.parent.quickPopup) {
769
771
  _this.parent.quickPopup.quickPopupHide();
770
772
  }
@@ -796,6 +798,7 @@ var EventBase = /** @class */ (function () {
796
798
  this.activeEventData(e, true);
797
799
  }
798
800
  this.removeSelectedAppointmentClass();
801
+ this.parent.selectedElements = [];
799
802
  if (this.parent.activeEventData.element.classList.contains(cls.INLINE_APPOINTMENT_CLASS) ||
800
803
  this.parent.activeEventData.element.querySelector('.' + cls.INLINE_SUBJECT_CLASS)) {
801
804
  return;
@@ -877,7 +880,7 @@ var EventBase = /** @class */ (function () {
877
880
  var exception = event[this.parent.eventFields.recurrenceException];
878
881
  var maxCount;
879
882
  if (this.parent.currentView !== 'Agenda' && isMaxCount) {
880
- maxCount = util.getDateCount(this.parent.activeView.startDate(), this.parent.activeView.endDate()) + 1;
883
+ maxCount = util.getDateCount(viewDate, this.parent.activeView.endDate()) + 1;
881
884
  }
882
885
  var newTimezone = this.parent.timezone || this.parent.tzModule.getLocalTimezoneName();
883
886
  var firstDay = this.parent.activeViewOptions.firstDayOfWeek;
@@ -900,6 +903,7 @@ var EventBase = /** @class */ (function () {
900
903
  for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
901
904
  var date = dates_1[_i];
902
905
  var clonedObject = extend({}, event, null, true);
906
+ date = this.getDSTAdjustedTime(date, clonedObject);
903
907
  clonedObject[this.parent.eventFields.startTime] = new Date(date);
904
908
  clonedObject[this.parent.eventFields.endTime] = new Date(new Date(date).setMilliseconds(duration));
905
909
  clonedObject[this.parent.eventFields.recurrenceID] = clonedObject[this.parent.eventFields.id];
@@ -910,6 +914,21 @@ var EventBase = /** @class */ (function () {
910
914
  }
911
915
  return occurrenceCollection;
912
916
  };
917
+ EventBase.prototype.getDSTAdjustedTime = function (date, event) {
918
+ var occurDate = date;
919
+ if (this.parent.timezone &&
920
+ (event[this.parent.eventFields.startTimezone] || event[this.parent.eventFields.endTimezone])) {
921
+ var eventOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), event[this.parent.eventFields.startTimezone]);
922
+ var schOffset = this.getDSTDiff(event[this.parent.eventFields.startTime], new Date(date), this.parent.timezone);
923
+ occurDate = (new Date(date).getTime() - (eventOffset - schOffset) * 60000);
924
+ }
925
+ return occurDate;
926
+ };
927
+ EventBase.prototype.getDSTDiff = function (startDate, occurDate, timezone) {
928
+ var startOffset = this.parent.tzModule.offset(new Date(startDate), timezone);
929
+ var occurOffset = this.parent.tzModule.offset(new Date(occurDate), timezone);
930
+ return startOffset - occurOffset;
931
+ };
913
932
  EventBase.prototype.getParentEvent = function (eventObj, isParent) {
914
933
  if (isParent === void 0) { isParent = false; }
915
934
  var parentEvent;
@@ -1076,7 +1095,7 @@ var EventBase = /** @class */ (function () {
1076
1095
  className: cls.BLOCK_APPOINTMENT_CLASS,
1077
1096
  attrs: {
1078
1097
  'data-id': 'Appointment_' + record[this.parent.eventFields.id],
1079
- 'aria-readonly': 'true', 'aria-selected': 'false'
1098
+ 'aria-disabled': 'true', 'aria-pressed': 'false'
1080
1099
  }
1081
1100
  });
1082
1101
  var templateElement;
@@ -163,9 +163,7 @@ var MonthEvent = /** @class */ (function (_super) {
163
163
  this.sortByDateTime(blockList);
164
164
  if (this.parent.currentView === 'Month' && this.parent.rowAutoHeight && this.parent.activeViewOptions.group.resources.length === 0) {
165
165
  var totalCells = [].slice.call(this.parent.element.querySelectorAll('.e-content-wrap table tr td:first-child'));
166
- var height_1 = this.parent.height === 'auto' ? (this.parent.element.querySelector('.e-content-wrap').clientHeight +
167
- this.parent.element.querySelector('.e-date-header-wrap').clientHeight) / totalCells.length
168
- : this.parent.element.querySelector('.e-schedule-table').clientHeight / totalCells.length;
166
+ var height_1 = this.parent.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).clientHeight / totalCells.length;
169
167
  totalCells.forEach(function (cell) {
170
168
  setStyleAttribute(cell, { 'height': height_1 + 'px' });
171
169
  });
@@ -376,7 +374,7 @@ var MonthEvent = /** @class */ (function (_super) {
376
374
  var attrs = {
377
375
  'data-id': 'Appointment_' + record[this.fields.id],
378
376
  'role': 'button', 'tabindex': '0',
379
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record), 'aria-selected': 'false', 'aria-grabbed': 'true',
377
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record), 'aria-pressed': 'false', 'aria-grabbed': 'true',
380
378
  'aria-label': this.parent.getAnnouncementString(newRecord, eventSubject)
381
379
  };
382
380
  if (!isCloneElement) {
@@ -671,8 +669,7 @@ var MonthEvent = /** @class */ (function (_super) {
671
669
  'tabindex': '0',
672
670
  'data-count': count.toString(),
673
671
  'data-start-date': startDate.getTime().toString(),
674
- 'data-end-date': endDate.getTime().toString(),
675
- 'role': 'list'
672
+ 'data-end-date': endDate.getTime().toString()
676
673
  }
677
674
  });
678
675
  return moreIndicatorElement;
@@ -282,8 +282,8 @@ var VerticalEvent = /** @class */ (function (_super) {
282
282
  'data-guid': record.Guid,
283
283
  'role': 'button',
284
284
  'tabindex': '0',
285
- 'aria-readonly': this.parent.eventBase.getReadonlyAttribute(record),
286
- 'aria-selected': 'false',
285
+ 'aria-disabled': this.parent.eventBase.getReadonlyAttribute(record),
286
+ 'aria-pressed': 'false',
287
287
  'aria-grabbed': 'true',
288
288
  'aria-label': this.parent.getAnnouncementString(record)
289
289
  }
@@ -378,7 +378,7 @@ var VerticalEvent = /** @class */ (function (_super) {
378
378
  });
379
379
  var moreIndicatorElement = createElement('div', {
380
380
  className: cls.MORE_INDICATOR_CLASS,
381
- attrs: { 'tabindex': '0', 'role': 'list', 'data-index': index.toString(), 'data-count': '1' },
381
+ attrs: { 'tabindex': '0', 'data-index': index.toString(), 'data-count': '1' },
382
382
  innerHTML: '+1&nbsp;' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))
383
383
  });
384
384
  innerCountWrap.appendChild(moreIndicatorElement);