@syncfusion/ej2-schedule 27.2.3 → 28.1.33

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 (147) hide show
  1. package/README.md +2 -2
  2. package/dist/ej2-schedule.min.js +3 -3
  3. package/dist/ej2-schedule.umd.min.js +3 -3
  4. package/dist/ej2-schedule.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-schedule.es2015.js +437 -49
  6. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  7. package/dist/es6/ej2-schedule.es5.js +469 -54
  8. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  9. package/dist/global/ej2-schedule.min.js +3 -3
  10. package/dist/global/ej2-schedule.min.js.map +1 -1
  11. package/dist/global/index.d.ts +2 -2
  12. package/package.json +16 -16
  13. package/src/schedule/actions/action-base.js +4 -3
  14. package/src/schedule/actions/drag.js +2 -2
  15. package/src/schedule/actions/keyboard.d.ts +16 -0
  16. package/src/schedule/actions/keyboard.js +254 -8
  17. package/src/schedule/actions/touch.js +7 -2
  18. package/src/schedule/base/constant.d.ts +4 -0
  19. package/src/schedule/base/constant.js +4 -0
  20. package/src/schedule/base/css-constant.d.ts +2 -0
  21. package/src/schedule/base/css-constant.js +2 -0
  22. package/src/schedule/base/interface.d.ts +14 -4
  23. package/src/schedule/base/schedule-model.d.ts +17 -1
  24. package/src/schedule/base/schedule.d.ts +67 -1
  25. package/src/schedule/base/schedule.js +131 -1
  26. package/src/schedule/base/type.d.ts +8 -0
  27. package/src/schedule/models/event-settings-model.d.ts +2 -1
  28. package/src/schedule/models/event-settings.d.ts +2 -1
  29. package/src/schedule/popups/event-tooltip.js +4 -0
  30. package/src/schedule/renderer/agenda.d.ts +2 -1
  31. package/src/schedule/renderer/agenda.js +1 -1
  32. package/src/schedule/renderer/header-renderer.js +4 -2
  33. package/src/schedule/renderer/month-agenda.d.ts +2 -1
  34. package/src/schedule/renderer/month-agenda.js +2 -2
  35. package/src/schedule/renderer/month.d.ts +4 -3
  36. package/src/schedule/renderer/month.js +16 -9
  37. package/src/schedule/renderer/timeline-view.js +9 -4
  38. package/src/schedule/renderer/vertical-view.js +6 -2
  39. package/src/schedule/renderer/view-base.d.ts +5 -4
  40. package/src/schedule/renderer/view-base.js +13 -10
  41. package/src/schedule/renderer/year.d.ts +3 -2
  42. package/src/schedule/renderer/year.js +10 -7
  43. package/styles/bds-lite.css +4400 -0
  44. package/styles/bds-lite.scss +18 -0
  45. package/styles/bds.css +5161 -0
  46. package/styles/bds.scss +20 -0
  47. package/styles/bootstrap-dark-lite.css +19 -6
  48. package/styles/bootstrap-dark.css +23 -10
  49. package/styles/bootstrap-lite.css +18 -5
  50. package/styles/bootstrap.css +22 -9
  51. package/styles/bootstrap4-lite.css +18 -5
  52. package/styles/bootstrap4.css +22 -9
  53. package/styles/bootstrap5-dark-lite.css +18 -5
  54. package/styles/bootstrap5-dark.css +23 -10
  55. package/styles/bootstrap5-lite.css +18 -5
  56. package/styles/bootstrap5.3-lite.css +18 -5
  57. package/styles/bootstrap5.3.css +23 -10
  58. package/styles/bootstrap5.css +23 -10
  59. package/styles/fabric-dark-lite.css +18 -5
  60. package/styles/fabric-dark.css +22 -9
  61. package/styles/fabric-lite.css +18 -5
  62. package/styles/fabric.css +22 -9
  63. package/styles/fluent-dark-lite.css +18 -5
  64. package/styles/fluent-dark.css +22 -9
  65. package/styles/fluent-lite.css +18 -5
  66. package/styles/fluent.css +22 -9
  67. package/styles/fluent2-lite.css +43 -6
  68. package/styles/fluent2.css +50 -13
  69. package/styles/highcontrast-light-lite.css +18 -5
  70. package/styles/highcontrast-light.css +22 -9
  71. package/styles/highcontrast-lite.css +19 -6
  72. package/styles/highcontrast.css +23 -10
  73. package/styles/material-dark-lite.css +18 -5
  74. package/styles/material-dark.css +22 -9
  75. package/styles/material-lite.css +18 -5
  76. package/styles/material.css +22 -9
  77. package/styles/material3-dark-lite.css +18 -5
  78. package/styles/material3-dark.css +23 -10
  79. package/styles/material3-lite.css +18 -5
  80. package/styles/material3.css +23 -10
  81. package/styles/recurrence-editor/_bigger.scss +2 -3
  82. package/styles/recurrence-editor/_fluent2-definition.scss +1 -1
  83. package/styles/recurrence-editor/_tailwind3-definition.scss +14 -0
  84. package/styles/recurrence-editor/bds.css +533 -0
  85. package/styles/recurrence-editor/bds.scss +9 -0
  86. package/styles/recurrence-editor/bootstrap-dark.css +2 -3
  87. package/styles/recurrence-editor/bootstrap.css +2 -3
  88. package/styles/recurrence-editor/bootstrap4.css +2 -3
  89. package/styles/recurrence-editor/bootstrap5-dark.css +2 -3
  90. package/styles/recurrence-editor/bootstrap5.3.css +2 -3
  91. package/styles/recurrence-editor/bootstrap5.css +2 -3
  92. package/styles/recurrence-editor/fabric-dark.css +2 -3
  93. package/styles/recurrence-editor/fabric.css +2 -3
  94. package/styles/recurrence-editor/fluent-dark.css +2 -3
  95. package/styles/recurrence-editor/fluent.css +2 -3
  96. package/styles/recurrence-editor/fluent2.css +3 -4
  97. package/styles/recurrence-editor/highcontrast-light.css +2 -3
  98. package/styles/recurrence-editor/highcontrast.css +3 -4
  99. package/styles/recurrence-editor/material-dark.css +2 -3
  100. package/styles/recurrence-editor/material.css +2 -3
  101. package/styles/recurrence-editor/material3-dark.css +2 -3
  102. package/styles/recurrence-editor/material3.css +2 -3
  103. package/styles/recurrence-editor/tailwind-dark.css +2 -3
  104. package/styles/recurrence-editor/tailwind.css +2 -3
  105. package/styles/recurrence-editor/tailwind3.css +500 -0
  106. package/styles/recurrence-editor/tailwind3.scss +9 -0
  107. package/styles/schedule/_bigger.scss +2 -1
  108. package/styles/schedule/_bootstrap5-definition.scss +1 -1
  109. package/styles/schedule/_bootstrap5.3-definition.scss +1 -1
  110. package/styles/schedule/_fluent2-definition.scss +3 -3
  111. package/styles/schedule/_layout.scss +43 -2
  112. package/styles/schedule/_material3-definition.scss +1 -1
  113. package/styles/schedule/_tailwind-definition.scss +1 -1
  114. package/styles/schedule/_tailwind3-definition.scss +276 -0
  115. package/styles/schedule/_theme.scss +0 -4
  116. package/styles/schedule/bds.css +4760 -0
  117. package/styles/schedule/bds.scss +17 -0
  118. package/styles/schedule/bootstrap-dark.css +21 -7
  119. package/styles/schedule/bootstrap.css +20 -6
  120. package/styles/schedule/bootstrap4.css +20 -6
  121. package/styles/schedule/bootstrap5-dark.css +21 -7
  122. package/styles/schedule/bootstrap5.3.css +21 -7
  123. package/styles/schedule/bootstrap5.css +21 -7
  124. package/styles/schedule/fabric-dark.css +20 -6
  125. package/styles/schedule/fabric.css +20 -6
  126. package/styles/schedule/fluent-dark.css +20 -6
  127. package/styles/schedule/fluent.css +20 -6
  128. package/styles/schedule/fluent2.css +47 -9
  129. package/styles/schedule/highcontrast-light.css +20 -6
  130. package/styles/schedule/highcontrast.css +21 -7
  131. package/styles/schedule/icons/_tailwind3.scss +220 -0
  132. package/styles/schedule/material-dark.css +20 -6
  133. package/styles/schedule/material.css +20 -6
  134. package/styles/schedule/material3-dark.css +21 -7
  135. package/styles/schedule/material3.css +21 -7
  136. package/styles/schedule/tailwind-dark.css +21 -7
  137. package/styles/schedule/tailwind.css +21 -7
  138. package/styles/schedule/tailwind3.css +4599 -0
  139. package/styles/schedule/tailwind3.scss +17 -0
  140. package/styles/tailwind-dark-lite.css +18 -5
  141. package/styles/tailwind-dark.css +23 -10
  142. package/styles/tailwind-lite.css +18 -5
  143. package/styles/tailwind.css +23 -10
  144. package/styles/tailwind3-lite.css +4239 -0
  145. package/styles/tailwind3-lite.scss +18 -0
  146. package/styles/tailwind3.css +5000 -0
  147. package/styles/tailwind3.scss +20 -0
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 27.2.3
4
- * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
3
+ * version : 28.1.33
4
+ * Copyright Syncfusion Inc. 2001 - 2024. 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
7
7
  * licensing@syncfusion.com. Any infringement will be prosecuted under
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-schedule@*",
3
- "_id": "@syncfusion/ej2-schedule@27.2.2",
3
+ "_id": "@syncfusion/ej2-schedule@22.9.0",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-b88lLHfj7V4Wax5SAyfM5yU6BC5EBqGEcBOfUEp8z9eUQarVMuq5bRcbk+c5eqt53FLk/m+lHSaR/FyeLmP7HQ==",
5
+ "_integrity": "sha512-cR+XC2J8vmAcNH8/zygg6BgJ4xkhOm2Zsg13yKOgitQV035CAkGjxmTWONHlkL5Wsw8wWWojH2HL9dVxe6kiug==",
6
6
  "_location": "/@syncfusion/ej2-schedule",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -23,10 +23,10 @@
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-27.2.2.tgz",
27
- "_shasum": "6bbc889e31f9da833dcca1583c4a98d8a1d32c8b",
26
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-release/@syncfusion/ej2-schedule/-/ej2-schedule-22.9.0.tgz",
27
+ "_shasum": "2d61fb6d43051fddd4eb521a0a0f658de274c6ff",
28
28
  "_spec": "@syncfusion/ej2-schedule@*",
29
- "_where": "/jenkins/workspace/elease-automation_release_27.1.1/packages/included",
29
+ "_where": "/jenkins/workspace/elease-automation_release_28.1.1/packages/included",
30
30
  "author": {
31
31
  "name": "Syncfusion Inc."
32
32
  },
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "bundleDependencies": false,
37
37
  "dependencies": {
38
- "@syncfusion/ej2-base": "~27.2.2",
39
- "@syncfusion/ej2-buttons": "~27.2.2",
40
- "@syncfusion/ej2-calendars": "~27.2.3",
41
- "@syncfusion/ej2-data": "~27.2.2",
42
- "@syncfusion/ej2-dropdowns": "~27.2.3",
43
- "@syncfusion/ej2-excel-export": "~27.2.2",
44
- "@syncfusion/ej2-inputs": "~27.2.2",
45
- "@syncfusion/ej2-lists": "~27.2.3",
46
- "@syncfusion/ej2-navigations": "~27.2.3",
47
- "@syncfusion/ej2-popups": "~27.2.2"
38
+ "@syncfusion/ej2-base": "~28.1.33",
39
+ "@syncfusion/ej2-buttons": "~28.1.33",
40
+ "@syncfusion/ej2-calendars": "~28.1.33",
41
+ "@syncfusion/ej2-data": "~28.1.33",
42
+ "@syncfusion/ej2-dropdowns": "~28.1.33",
43
+ "@syncfusion/ej2-excel-export": "~28.1.33",
44
+ "@syncfusion/ej2-inputs": "~28.1.33",
45
+ "@syncfusion/ej2-lists": "~28.1.33",
46
+ "@syncfusion/ej2-navigations": "~28.1.33",
47
+ "@syncfusion/ej2-popups": "~28.1.33"
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": "27.2.3",
76
+ "version": "28.1.33",
77
77
  "sideEffects": false
78
78
  }
@@ -87,9 +87,10 @@ var ActionBase = /** @class */ (function () {
87
87
  }
88
88
  };
89
89
  ActionBase.prototype.calculateIntervalTime = function (date) {
90
- var intervalTime = new Date(+date);
91
- intervalTime.setMinutes(Math.floor(intervalTime.getMinutes() / this.actionObj.interval) * this.actionObj.interval);
92
- return intervalTime;
90
+ var dateInMS = util.resetTime(date).getTime();
91
+ var intervalInMS = util.MS_PER_MINUTE * this.actionObj.interval;
92
+ dateInMS = dateInMS + Math.floor((date.getTime() - dateInMS) / intervalInMS) * intervalInMS;
93
+ return new Date(dateInMS);
93
94
  };
94
95
  ActionBase.prototype.getContentAreaDimension = function () {
95
96
  var viewElement = this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);
@@ -534,12 +534,12 @@ var DragAndDrop = /** @class */ (function (_super) {
534
534
  if ((dragArea.scrollLeft === 0) &&
535
535
  (Math.round(this.actionObj.X) <=
536
536
  Math.round(dragArea.getBoundingClientRect().left + this.actionObj.cellWidth + window.pageXOffset))) {
537
- navigationType = this.parent.enableRtl ? 'next' : 'previous';
537
+ navigationType = this.parent.enableRtl ? 'Next' : 'Previous';
538
538
  }
539
539
  else if ((Math.round(dragArea.scrollLeft) + dragArea.clientWidth === dragArea.scrollWidth) &&
540
540
  (Math.round(this.actionObj.X) >=
541
541
  Math.round(dragArea.getBoundingClientRect().right - this.actionObj.cellWidth + window.pageXOffset))) {
542
- navigationType = this.parent.enableRtl ? 'previous' : 'next';
542
+ navigationType = this.parent.enableRtl ? 'Previous' : 'Next';
543
543
  }
544
544
  if (navigationType) {
545
545
  this.parent.changeDate(this.parent.activeView.getNextPreviousDate(navigationType));
@@ -1,3 +1,4 @@
1
+ import { KeyboardEventArgs } from '@syncfusion/ej2-base';
1
2
  import { Schedule } from '../base/schedule';
2
3
  /**
3
4
  * Keyboard interaction
@@ -9,6 +10,9 @@ export declare class KeyboardInteraction {
9
10
  private parent;
10
11
  private initialTarget;
11
12
  selectedCells: HTMLTableCellElement[];
13
+ private clipBoardTextArea;
14
+ private isCutContentPasted;
15
+ private isCutAction;
12
16
  private keyConfigs;
13
17
  private keyboardModule;
14
18
  constructor(parent: Schedule);
@@ -68,6 +72,18 @@ export declare class KeyboardInteraction {
68
72
  private isPreventAction;
69
73
  private processTabOnResourceCells;
70
74
  private setScrollPosition;
75
+ private createClipboardElement;
76
+ private setCopy;
77
+ private filterReadOnlyEvent;
78
+ processClipboardAction(isCut: boolean, copiedEventData?: Record<string, any>[], e?: KeyboardEventArgs): void;
79
+ pasteHandler(clipboardEvent: ClipboardEvent, targetElement?: HTMLElement): void;
80
+ private processPaste;
81
+ private getTargetElements;
82
+ private isAllDayEvent;
83
+ private processEventData;
84
+ private adjustEventTime;
85
+ private prepareEventData;
86
+ private calculateTotalDuration;
71
87
  /**
72
88
  * Get module name.
73
89
  *
@@ -1,5 +1,16 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
1
12
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';
13
+ import { KeyboardEvents, closest, EventHandler, extend, Browser } from '@syncfusion/ej2-base';
3
14
  import { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';
4
15
  import * as event from '../base/constant';
5
16
  import * as util from '../base/util';
@@ -11,6 +22,8 @@ import { cellSelect } from '../base/constant';
11
22
  var KeyboardInteraction = /** @class */ (function () {
12
23
  function KeyboardInteraction(parent) {
13
24
  this.selectedCells = [];
25
+ this.isCutContentPasted = false;
26
+ this.isCutAction = false;
14
27
  this.keyConfigs = {
15
28
  downArrow: 'downarrow',
16
29
  upArrow: 'uparrow',
@@ -45,7 +58,11 @@ var KeyboardInteraction = /** @class */ (function () {
45
58
  ctrlShiftLeftArrow: 'ctrl+shift+leftarrow',
46
59
  ctrlShiftRightArrow: 'ctrl+shift+rightarrow',
47
60
  shiftAltY: 'shift+alt+y',
48
- shiftAltN: 'shift+alt+n'
61
+ shiftAltN: 'shift+alt+n',
62
+ cut: 'ctrl+x',
63
+ copy: 'ctrl+c',
64
+ cmdCut: 'cmd+x',
65
+ cmdCopy: 'cmd+c'
49
66
  };
50
67
  this.parent = parent;
51
68
  this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;
@@ -55,6 +72,7 @@ var KeyboardInteraction = /** @class */ (function () {
55
72
  eventName: 'keydown'
56
73
  });
57
74
  this.addEventListener();
75
+ this.createClipboardElement();
58
76
  }
59
77
  KeyboardInteraction.prototype.keyActionHandler = function (e) {
60
78
  switch (e.action) {
@@ -75,13 +93,13 @@ var KeyboardInteraction = /** @class */ (function () {
75
93
  this.processRight(e, e.shiftKey);
76
94
  break;
77
95
  case 'ctrlLeftArrow':
78
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);
96
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Previous'), e);
79
97
  if (this.parent.headerModule) {
80
98
  this.parent.headerModule.element.querySelector('.e-prev button').focus();
81
99
  }
82
100
  break;
83
101
  case 'ctrlRightArrow':
84
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);
102
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Next'), e);
85
103
  if (this.parent.headerModule) {
86
104
  this.parent.headerModule.element.querySelector('.e-next button').focus();
87
105
  }
@@ -136,6 +154,14 @@ var KeyboardInteraction = /** @class */ (function () {
136
154
  }
137
155
  this.processShiftAltN(e);
138
156
  break;
157
+ case 'cut':
158
+ case 'cmdCut':
159
+ this.processClipboardAction(true, undefined, e);
160
+ break;
161
+ case 'copy':
162
+ case 'cmdCopy':
163
+ this.processClipboardAction(false, undefined, e);
164
+ break;
139
165
  }
140
166
  };
141
167
  KeyboardInteraction.prototype.processShiftAltN = function (e) {
@@ -183,9 +209,13 @@ var KeyboardInteraction = /** @class */ (function () {
183
209
  };
184
210
  KeyboardInteraction.prototype.addEventListener = function () {
185
211
  this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);
212
+ if (this.parent.allowClipboard) {
213
+ this.parent.on(event.documentPaste, this.pasteHandler, this);
214
+ }
186
215
  };
187
216
  KeyboardInteraction.prototype.removeEventListener = function () {
188
217
  this.parent.off(event.cellMouseDown, this.onCellMouseDown);
218
+ this.parent.off(event.documentPaste, this.pasteHandler);
189
219
  };
190
220
  KeyboardInteraction.prototype.onCellMouseDown = function (e) {
191
221
  if (e.event.shiftKey) {
@@ -825,7 +855,7 @@ var KeyboardInteraction = /** @class */ (function () {
825
855
  return;
826
856
  }
827
857
  var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;
828
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);
858
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Next'), e);
829
859
  var tableEle = this.parent.getContentTable();
830
860
  var cell = isMonthEnd ? tableEle.rows[parseInt(rowIndex.toString(), 10)].querySelector('.' + cls.WORK_CELLS_CLASS + ':not(.' + cls.OTHERMONTH_CLASS + ')')
831
861
  : tableEle.rows[parseInt(rowIndex.toString(), 10)].cells[0];
@@ -841,7 +871,7 @@ var KeyboardInteraction = /** @class */ (function () {
841
871
  this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);
842
872
  }
843
873
  else if (curColIndex === maxColIndex - 1 && !isMultiple) {
844
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);
874
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Next'), e);
845
875
  var allDayRow_1 = this.parent.getAllDayRow();
846
876
  this.selectCells(false, allDayRow_1.cells[0]);
847
877
  }
@@ -895,7 +925,7 @@ var KeyboardInteraction = /** @class */ (function () {
895
925
  this.selectCells(isMultiple, this.parent.element.querySelector('[data-date="' + (targetDate.getTime() - util.MS_PER_DAY) + '"]'));
896
926
  return;
897
927
  }
898
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);
928
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Previous'), e);
899
929
  var tableEle = this.parent.getContentTable();
900
930
  var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;
901
931
  var cell = tableEle.rows[parseInt(rowIndex.toString(), 10)].cells[key.maxIndex - 1];
@@ -915,7 +945,7 @@ var KeyboardInteraction = /** @class */ (function () {
915
945
  this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);
916
946
  }
917
947
  else if (curColIndex === 0 && !isMultiple) {
918
- this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);
948
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate('Previous'), e);
919
949
  var allDayRow_2 = this.parent.getAllDayRow();
920
950
  this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);
921
951
  }
@@ -1181,6 +1211,221 @@ var KeyboardInteraction = /** @class */ (function () {
1181
1211
  this.parent.element.querySelector('.' + cls.CONTENT_WRAP_CLASS).scrollTop = workCell.offsetTop;
1182
1212
  }
1183
1213
  };
1214
+ KeyboardInteraction.prototype.createClipboardElement = function () {
1215
+ if (!this.parent.allowClipboard) {
1216
+ return;
1217
+ }
1218
+ this.clipBoardTextArea = this.parent.createElement('textarea', {
1219
+ className: cls.CLIPBOARD_CLASS,
1220
+ attrs: {
1221
+ tabindex: '-1'
1222
+ }
1223
+ });
1224
+ this.parent.element.appendChild(this.clipBoardTextArea);
1225
+ };
1226
+ KeyboardInteraction.prototype.setCopy = function (copiedEventData, e) {
1227
+ var _this = this;
1228
+ if (window.getSelection().toString() !== '') {
1229
+ return;
1230
+ }
1231
+ this.clipBoardTextArea.value = '';
1232
+ var eventDetails = { elements: [], eventDatas: [] };
1233
+ if (copiedEventData) {
1234
+ var filteredContent = this.filterReadOnlyEvent(copiedEventData);
1235
+ eventDetails.eventDatas = filteredContent;
1236
+ }
1237
+ else {
1238
+ if (!this.parent || !this.parent.eventBase) {
1239
+ return;
1240
+ }
1241
+ var selectedEvents = this.parent.eventBase.getSelectedEvents();
1242
+ selectedEvents.event = selectedEvents && selectedEvents.event ? Array.isArray(selectedEvents.event)
1243
+ ? this.filterReadOnlyEvent(selectedEvents.event) :
1244
+ this.filterReadOnlyEvent([selectedEvents.event]) : undefined;
1245
+ if (selectedEvents.element && selectedEvents.event) {
1246
+ eventDetails = {
1247
+ elements: selectedEvents.element,
1248
+ eventDatas: selectedEvents.event
1249
+ };
1250
+ }
1251
+ else {
1252
+ eventDetails.element = [e.target];
1253
+ eventDetails.eventDatas = [this.parent.getEventDetails(e.target)];
1254
+ }
1255
+ }
1256
+ this.clipBoardTextArea.value = JSON.stringify(eventDetails.eventDatas, undefined, 2);
1257
+ if (!/ipad|ipod|iphone/i.test(Browser.userAgent)) {
1258
+ this.clipBoardTextArea.select();
1259
+ }
1260
+ else {
1261
+ this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);
1262
+ }
1263
+ if (!isNullOrUndefined(navigator.clipboard)) {
1264
+ navigator.clipboard.writeText(this.clipBoardTextArea.value)
1265
+ .then(function () {
1266
+ _this.clipBoardTextArea.blur();
1267
+ window.getSelection().removeAllRanges();
1268
+ if (e) {
1269
+ var closestAppointment = e.target.closest('.' + cls.APPOINTMENT_CLASS);
1270
+ if (closestAppointment) {
1271
+ closestAppointment.focus();
1272
+ }
1273
+ }
1274
+ })
1275
+ .catch(function (err) {
1276
+ throw err;
1277
+ });
1278
+ }
1279
+ };
1280
+ KeyboardInteraction.prototype.filterReadOnlyEvent = function (args) {
1281
+ var _this = this;
1282
+ return args.filter(function (event) { return !event[_this.parent.eventFields.isReadonly]; });
1283
+ };
1284
+ KeyboardInteraction.prototype.processClipboardAction = function (isCut, copiedEventData, e) {
1285
+ if (!this.parent.allowClipboard) {
1286
+ return;
1287
+ }
1288
+ this.isCutAction = isCut;
1289
+ this.isCutContentPasted = false;
1290
+ this.parent.closeQuickInfoPopup();
1291
+ this.setCopy(copiedEventData ? copiedEventData : undefined, e);
1292
+ };
1293
+ KeyboardInteraction.prototype.pasteHandler = function (clipboardEvent, targetElement) {
1294
+ var _this = this;
1295
+ if (!this.parent.allowClipboard || this.isCutContentPasted) {
1296
+ return;
1297
+ }
1298
+ var target = this.parent.getSelectedCells().length > 0
1299
+ ? this.parent.getSelectedCells()
1300
+ : (targetElement ? [targetElement] : []);
1301
+ if (target.length === 0 || this.parent.eventWindow.dialogObject.visible ||
1302
+ this.parent.quickPopup.quickPopup.element.classList.contains(cls.POPUP_OPEN)) {
1303
+ return;
1304
+ }
1305
+ var clipboardData = clipboardEvent.clipboardData || clipboardEvent.event.clipboardData
1306
+ || window.clipboardData;
1307
+ var pastedData = clipboardData.getData('text');
1308
+ if (pastedData === '[]' || pastedData === '') {
1309
+ return;
1310
+ }
1311
+ var parsedData;
1312
+ try {
1313
+ parsedData = JSON.parse(pastedData);
1314
+ }
1315
+ catch (_a) {
1316
+ parsedData = pastedData;
1317
+ }
1318
+ var args = { cancel: false, data: parsedData, element: target };
1319
+ this.parent.trigger(event.beforePaste, args, function (pasteEventArgs) {
1320
+ if (!pasteEventArgs.cancel) {
1321
+ if (!Array.isArray(pasteEventArgs.data) || !pasteEventArgs.data.every(function (item) { return typeof item === 'object'; })) {
1322
+ _this.clipBoardTextArea.value = '';
1323
+ return;
1324
+ }
1325
+ _this.processPaste(pasteEventArgs.data, targetElement);
1326
+ if (_this.isCutAction) {
1327
+ _this.isCutContentPasted = true;
1328
+ }
1329
+ }
1330
+ else {
1331
+ _this.parent.closeQuickInfoPopup();
1332
+ return;
1333
+ }
1334
+ });
1335
+ };
1336
+ KeyboardInteraction.prototype.processPaste = function (data, targetElement) {
1337
+ if (!this.parent || !this.parent.eventWindow || !this.parent.eventBase || !data || !data.length) {
1338
+ return;
1339
+ }
1340
+ var target = this.getTargetElements(targetElement);
1341
+ var cellDetails = this.parent.getCellDetails(target);
1342
+ var eventDetails = {};
1343
+ this.parent.eventWindow.convertToEventData(cellDetails, eventDetails);
1344
+ var isAllDay = this.isAllDayEvent(target);
1345
+ var resources = this.parent.getResourcesByIndex(cellDetails.groupIndex);
1346
+ var processedData = this.processEventData(data, isAllDay, cellDetails, resources);
1347
+ var selectedEventData = this.parent.eventBase.sortByDateTime(processedData);
1348
+ var saveData = this.prepareEventData(selectedEventData, eventDetails);
1349
+ removeClass(target, cls.SELECTED_CELL_CLASS);
1350
+ if (saveData.length > 0) {
1351
+ if (this.isCutAction) {
1352
+ this.parent.saveEvent(saveData);
1353
+ }
1354
+ else {
1355
+ this.parent.addEvent(saveData);
1356
+ }
1357
+ }
1358
+ };
1359
+ KeyboardInteraction.prototype.getTargetElements = function (targetElement) {
1360
+ return this.parent.getSelectedCells().length > 0
1361
+ ? this.parent.getSelectedCells()
1362
+ : (targetElement ? [targetElement] : []);
1363
+ };
1364
+ KeyboardInteraction.prototype.isAllDayEvent = function (target) {
1365
+ return !target.some(function (cell) { return cell.classList.contains(cls.WORK_CELLS_CLASS); });
1366
+ };
1367
+ KeyboardInteraction.prototype.processEventData = function (data, isAllDay, cellDetails, resources) {
1368
+ var _this = this;
1369
+ return data.map(function (item) {
1370
+ var _a;
1371
+ var processedItem = __assign({}, item, (_a = {}, _a[_this.parent.eventFields.startTime] = new Date(item[_this.parent.eventFields.startTime]), _a[_this.parent.eventFields.endTime] = new Date(item[_this.parent.eventFields.endTime]), _a[_this.parent.eventFields.recurrenceID] = null, _a[_this.parent.eventFields.isAllDay] = isAllDay, _a));
1372
+ _this.adjustEventTime(processedItem, isAllDay, item.IsAllDay, cellDetails);
1373
+ if (resources && resources.groupData) {
1374
+ Object.assign(processedItem, resources.groupData);
1375
+ }
1376
+ return processedItem;
1377
+ });
1378
+ };
1379
+ KeyboardInteraction.prototype.adjustEventTime = function (processedItem, isAllDay, itemIsAllDay, cellDetails) {
1380
+ var isTimeScaleEnabled = this.parent.activeViewOptions.timeScale.enable;
1381
+ if ((['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) && isTimeScaleEnabled) {
1382
+ if (isAllDay) {
1383
+ processedItem[this.parent.eventFields.endTime] = new Date(processedItem[this.parent.eventFields.startTime]);
1384
+ processedItem[this.parent.eventFields.endTime].setDate(processedItem[this.parent.eventFields.startTime].getDate() + 1);
1385
+ }
1386
+ else if (itemIsAllDay) {
1387
+ processedItem[this.parent.eventFields.startTime] = new Date(processedItem[this.parent.eventFields.startTime]
1388
+ .setHours(0, 0, 0, 0));
1389
+ processedItem[this.parent.eventFields.endTime] = new Date(processedItem[this.parent.eventFields.startTime].getTime() + (cellDetails.endTime.getTime() - cellDetails.startTime.getTime()));
1390
+ }
1391
+ }
1392
+ else if (itemIsAllDay) {
1393
+ processedItem[this.parent.eventFields.isAllDay] = true;
1394
+ processedItem[this.parent.eventFields.startTime] = new Date(processedItem[this.parent.eventFields.startTime]
1395
+ .setHours(0, 0, 0, 0));
1396
+ processedItem[this.parent.eventFields.endTime] = new Date(processedItem[this.parent.eventFields.startTime].getTime() +
1397
+ (processedItem[this.parent.eventFields.endTime].getTime() - processedItem[this.parent.eventFields.startTime].getTime()));
1398
+ }
1399
+ };
1400
+ KeyboardInteraction.prototype.prepareEventData = function (selectedEventData, eventDetails) {
1401
+ var _this = this;
1402
+ var initialEventTime = new Date(selectedEventData[0][this.parent.eventFields.startTime]);
1403
+ var uniqueId = this.parent.getEventMaxID();
1404
+ return selectedEventData.map(function (events) {
1405
+ var totalDuration = _this.calculateTotalDuration(events, eventDetails, initialEventTime);
1406
+ var cloneDetails = _this.isCutAction ? events : __assign({}, events);
1407
+ if (!events[_this.parent.eventFields.recurrenceRule]) {
1408
+ cloneDetails[_this.parent.eventFields.startTime] =
1409
+ new Date(new Date(cloneDetails[_this.parent.eventFields.startTime]).setMilliseconds(totalDuration));
1410
+ cloneDetails[_this.parent.eventFields.endTime] =
1411
+ new Date(new Date(cloneDetails[_this.parent.eventFields.endTime]).setMilliseconds(totalDuration));
1412
+ }
1413
+ if (!_this.isCutAction) {
1414
+ cloneDetails[_this.parent.eventFields.id] = uniqueId++;
1415
+ }
1416
+ return cloneDetails;
1417
+ });
1418
+ };
1419
+ KeyboardInteraction.prototype.calculateTotalDuration = function (events, eventDetails, initialEventTime) {
1420
+ if ((['Month', 'TimelineMonth', 'TimelineYear'].indexOf(this.parent.currentView) !== -1) || !this.parent.activeViewOptions.timeScale.enable) {
1421
+ var eventStartTime = new Date(events[this.parent.eventFields.startTime]);
1422
+ return eventDetails[this.parent.eventFields.startTime].getTime() - initialEventTime.getTime() +
1423
+ (eventStartTime.getHours() * 3600000 + eventStartTime.getMinutes() * 60000 + eventStartTime.getSeconds() * 1000);
1424
+ }
1425
+ else {
1426
+ return eventDetails[this.parent.eventFields.startTime].getTime() - initialEventTime.getTime();
1427
+ }
1428
+ };
1184
1429
  /**
1185
1430
  * Get module name.
1186
1431
  *
@@ -1198,6 +1443,7 @@ var KeyboardInteraction = /** @class */ (function () {
1198
1443
  KeyboardInteraction.prototype.destroy = function () {
1199
1444
  this.removeEventListener();
1200
1445
  this.selectedCells = [];
1446
+ this.clipBoardTextArea = null;
1201
1447
  this.keyboardModule.destroy();
1202
1448
  };
1203
1449
  return KeyboardInteraction;
@@ -21,6 +21,9 @@ var ScheduleTouch = /** @class */ (function () {
21
21
  this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';
22
22
  }
23
23
  ScheduleTouch.prototype.scrollHandler = function (e) {
24
+ if (!isNullOrUndefined(this.parent.eventTooltip)) {
25
+ this.parent.eventTooltip.close();
26
+ }
24
27
  var blockSwipe = !this.parent.isAdaptive && e.originalEvent && e.originalEvent.target &&
25
28
  !isNullOrUndefined(closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS));
26
29
  this.parent.uiStateValues.isTouchScroll = blockSwipe && e.originalEvent.type === 'touchmove' && !this.parent.uiStateValues.action;
@@ -28,6 +31,7 @@ var ScheduleTouch = /** @class */ (function () {
28
31
  this.parent.uiStateValues.isTapHold) {
29
32
  return;
30
33
  }
34
+ this.parent.uiStateValues.isSwipeScroll = true;
31
35
  if (!this.timeStampStart) {
32
36
  this.timeStampStart = Date.now();
33
37
  }
@@ -52,7 +56,7 @@ var ScheduleTouch = /** @class */ (function () {
52
56
  }
53
57
  if (e.scrollDirection === this.touchLeftDirection) {
54
58
  if (!this.nextPanel) {
55
- this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');
59
+ this.renderPanel(cls.NEXT_PANEL_CLASS, 'Next');
56
60
  this.nextPanel = {
57
61
  element: this.parent.activeView.getPanel(),
58
62
  selectedDate: new Date(this.parent.selectedDate.getTime()),
@@ -67,7 +71,7 @@ var ScheduleTouch = /** @class */ (function () {
67
71
  else if (e.scrollDirection === this.touchRightDirection) {
68
72
  var prevWidth = 0;
69
73
  if (!this.previousPanel) {
70
- this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');
74
+ this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'Previous');
71
75
  this.previousPanel = {
72
76
  element: this.parent.activeView.getPanel(),
73
77
  selectedDate: new Date(this.parent.selectedDate.getTime()),
@@ -215,6 +219,7 @@ var ScheduleTouch = /** @class */ (function () {
215
219
  if (!isNullOrUndefined(this.element) && !this.element.classList.contains(cls.TRANSLATE_CLASS)) {
216
220
  return;
217
221
  }
222
+ this.parent.uiStateValues.isSwipeScroll = false;
218
223
  removeClass([this.element], cls.TRANSLATE_CLASS);
219
224
  this.element.style.transitionDuration = '';
220
225
  this.element.style.transform = '';
@@ -63,6 +63,8 @@ export declare const agendaCells: string;
63
63
  export declare const resourceHeader: string;
64
64
  /** @private */
65
65
  export declare const dateHeader: string;
66
+ /** @private */
67
+ export declare const beforePaste: string;
66
68
  /**
67
69
  * Specifies schedule internal events
68
70
  */
@@ -89,4 +91,6 @@ export declare const uiUpdate: string;
89
91
  /** @private */
90
92
  export declare const documentClick: string;
91
93
  /** @private */
94
+ export declare const documentPaste: string;
95
+ /** @private */
92
96
  export declare const cellMouseDown: string;
@@ -63,6 +63,8 @@ export var agendaCells = 'agendaCells';
63
63
  export var resourceHeader = 'resourceHeader';
64
64
  /** @private */
65
65
  export var dateHeader = 'dateHeader';
66
+ /** @private */
67
+ export var beforePaste = 'beforePaste';
66
68
  /**
67
69
  * Specifies schedule internal events
68
70
  */
@@ -89,4 +91,6 @@ export var uiUpdate = 'ui-update';
89
91
  /** @private */
90
92
  export var documentClick = 'document-click';
91
93
  /** @private */
94
+ export var documentPaste = 'document-paste';
95
+ /** @private */
92
96
  export var cellMouseDown = 'cell-mouse-down';
@@ -467,3 +467,5 @@ export declare const SCROLL_HIDDEN: string;
467
467
  export declare const ALLDAY_APPOINTMENT_SCROLL: string;
468
468
  /** @private */
469
469
  export declare const ALLDAY_APPOINTMENT_AUTO: string;
470
+ /** @private */
471
+ export declare const CLIPBOARD_CLASS: string;
@@ -467,3 +467,5 @@ export var SCROLL_HIDDEN = 'e-scroll-hidden';
467
467
  export var ALLDAY_APPOINTMENT_SCROLL = 'e-all-day-scroll';
468
468
  /** @private */
469
469
  export var ALLDAY_APPOINTMENT_AUTO = 'e-all-day-auto';
470
+ /** @private */
471
+ export var CLIPBOARD_CLASS = 'e-clipboard';
@@ -1,6 +1,6 @@
1
1
  import { BaseEventArgs } from '@syncfusion/ej2-base';
2
2
  import { ItemModel } from '@syncfusion/ej2-navigations';
3
- import { PopupType, ExcelFormat, View } from './type';
3
+ import { PopupType, ExcelFormat, View, NavigationDirection } from './type';
4
4
  import { ResourcesModel, ViewsModel } from '../models/models';
5
5
  /**
6
6
  * Interface
@@ -406,6 +406,15 @@ export interface CrudArgs extends ActionEventArgs {
406
406
  promise?: Promise<any>;
407
407
  editParams?: SaveChanges;
408
408
  }
409
+ /** An interface that holds the options of pasted events data */
410
+ export interface BeforePasteEventArgs {
411
+ /** Returns the event data which is currently being pasted on the Scheduler. */
412
+ data?: Record<string, any>[] | string;
413
+ /** Defines the cancel option. */
414
+ cancel: boolean;
415
+ /** Returns the target element on which the cell is getting pasted. */
416
+ target?: Element;
417
+ }
409
418
  /** @private */
410
419
  export interface IRenderer {
411
420
  element: HTMLElement;
@@ -423,15 +432,15 @@ export interface IRenderer {
423
432
  getStartHour(): Date;
424
433
  getEndHour(): Date;
425
434
  getLabelText(view: string): string;
426
- getDateRangeText(date?: Date): string;
435
+ getDateRangeText(date?: Date, dateCollection?: Date[]): string;
427
436
  getEndDateFromStartDate(date: Date): Date;
428
437
  addEventListener(): void;
429
438
  removeEventListener(): void;
430
- getRenderDates(workDays?: number[]): Date[];
439
+ getRenderDates(workDays?: number[], selectedDate?: Date): Date[];
431
440
  getContentRows(): Element[];
432
441
  getEventRows(trCount: number): Element[];
433
442
  getDateSlots(renderDates: Date[], workDays: number[]): TdData[];
434
- getNextPreviousDate(type: string): Date;
443
+ getNextPreviousDate(type: NavigationDirection): Date;
435
444
  refreshHeader(): void;
436
445
  refreshResourceHeader(): void;
437
446
  renderLayout(type: string): void;
@@ -529,6 +538,7 @@ export interface UIStateArgs {
529
538
  isTapHold?: boolean;
530
539
  isTouchScroll?: boolean;
531
540
  isTransformed?: boolean;
541
+ isSwipeScroll?: boolean;
532
542
  }
533
543
  /**
534
544
  * @private