@syncfusion/ej2-schedule 28.2.11 → 29.1.34

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 (155) hide show
  1. package/.gitleaksignore +4 -0
  2. package/README.md +2 -2
  3. package/dist/ej2-schedule.min.js +2 -2
  4. package/dist/ej2-schedule.umd.min.js +2 -2
  5. package/dist/ej2-schedule.umd.min.js.map +1 -1
  6. package/dist/es6/ej2-schedule.es2015.js +518 -146
  7. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  8. package/dist/es6/ej2-schedule.es5.js +570 -186
  9. package/dist/es6/ej2-schedule.es5.js.map +1 -1
  10. package/dist/global/ej2-schedule.min.js +2 -2
  11. package/dist/global/ej2-schedule.min.js.map +1 -1
  12. package/dist/global/index.d.ts +1 -1
  13. package/package.json +24 -26
  14. package/src/recurrence-editor/recurrence-editor-model.d.ts +14 -0
  15. package/src/recurrence-editor/recurrence-editor.d.ts +12 -0
  16. package/src/recurrence-editor/recurrence-editor.js +8 -1
  17. package/src/schedule/actions/action-base.js +4 -1
  18. package/src/schedule/actions/crud.d.ts +3 -0
  19. package/src/schedule/actions/crud.js +129 -63
  20. package/src/schedule/actions/drag.js +3 -0
  21. package/src/schedule/actions/resize.js +4 -1
  22. package/src/schedule/actions/virtual-scroll.js +3 -1
  23. package/src/schedule/base/constant.d.ts +6 -0
  24. package/src/schedule/base/constant.js +6 -0
  25. package/src/schedule/base/interface.d.ts +53 -0
  26. package/src/schedule/base/schedule-model.d.ts +54 -1
  27. package/src/schedule/base/schedule.d.ts +68 -2
  28. package/src/schedule/base/schedule.js +67 -0
  29. package/src/schedule/base/type.d.ts +2 -1
  30. package/src/schedule/event-renderer/event-base.d.ts +5 -0
  31. package/src/schedule/event-renderer/event-base.js +123 -27
  32. package/src/schedule/event-renderer/inline-edit.d.ts +3 -1
  33. package/src/schedule/event-renderer/inline-edit.js +18 -6
  34. package/src/schedule/event-renderer/month.d.ts +1 -0
  35. package/src/schedule/event-renderer/month.js +25 -0
  36. package/src/schedule/event-renderer/timeline-view.d.ts +1 -1
  37. package/src/schedule/event-renderer/timeline-view.js +12 -19
  38. package/src/schedule/event-renderer/vertical-view.js +2 -2
  39. package/src/schedule/event-renderer/year.js +1 -1
  40. package/src/schedule/exports/excel-export.js +9 -2
  41. package/src/schedule/exports/print.d.ts +2 -0
  42. package/src/schedule/exports/print.js +90 -52
  43. package/src/schedule/models/views-model.d.ts +32 -0
  44. package/src/schedule/models/views.d.ts +30 -0
  45. package/src/schedule/models/views.js +6 -0
  46. package/src/schedule/popups/event-tooltip.js +18 -0
  47. package/src/schedule/popups/event-window.d.ts +1 -0
  48. package/src/schedule/popups/event-window.js +35 -4
  49. package/src/schedule/popups/quick-popups.js +11 -4
  50. package/src/schedule/renderer/month.js +3 -1
  51. package/styles/bds-lite.css +35 -6
  52. package/styles/bds.css +37 -21
  53. package/styles/bootstrap-dark-lite.css +46 -17
  54. package/styles/bootstrap-dark.css +49 -33
  55. package/styles/bootstrap-lite.css +42 -13
  56. package/styles/bootstrap.css +44 -28
  57. package/styles/bootstrap4-lite.css +55 -26
  58. package/styles/bootstrap4.css +57 -41
  59. package/styles/bootstrap5-dark-lite.css +128 -99
  60. package/styles/bootstrap5-dark.css +131 -115
  61. package/styles/bootstrap5-lite.css +50 -21
  62. package/styles/bootstrap5.3-lite.css +35 -6
  63. package/styles/bootstrap5.3.css +37 -21
  64. package/styles/bootstrap5.css +52 -36
  65. package/styles/fabric-dark-lite.css +46 -17
  66. package/styles/fabric-dark.css +49 -33
  67. package/styles/fabric-lite.css +56 -27
  68. package/styles/fabric.css +58 -42
  69. package/styles/fluent-dark-lite.css +39 -10
  70. package/styles/fluent-dark.css +40 -24
  71. package/styles/fluent-lite.css +39 -10
  72. package/styles/fluent.css +40 -24
  73. package/styles/fluent2-lite.css +35 -6
  74. package/styles/fluent2.css +38 -22
  75. package/styles/highcontrast-light-lite.css +53 -24
  76. package/styles/highcontrast-light.css +56 -40
  77. package/styles/highcontrast-lite.css +53 -24
  78. package/styles/highcontrast.css +56 -40
  79. package/styles/material-dark-lite.css +34 -5
  80. package/styles/material-dark.css +35 -19
  81. package/styles/material-lite.css +34 -5
  82. package/styles/material.css +35 -19
  83. package/styles/material3-dark-lite.css +36 -7
  84. package/styles/material3-dark.css +39 -23
  85. package/styles/material3-lite.css +36 -7
  86. package/styles/material3.css +39 -23
  87. package/styles/recurrence-editor/_layout.scss +6 -1
  88. package/styles/recurrence-editor/bds.css +5 -1
  89. package/styles/recurrence-editor/bootstrap-dark.css +5 -1
  90. package/styles/recurrence-editor/bootstrap.css +5 -1
  91. package/styles/recurrence-editor/bootstrap4.css +5 -1
  92. package/styles/recurrence-editor/bootstrap5-dark.css +5 -1
  93. package/styles/recurrence-editor/bootstrap5.3.css +5 -1
  94. package/styles/recurrence-editor/bootstrap5.css +5 -1
  95. package/styles/recurrence-editor/fabric-dark.css +5 -1
  96. package/styles/recurrence-editor/fabric.css +5 -1
  97. package/styles/recurrence-editor/fluent-dark.css +5 -1
  98. package/styles/recurrence-editor/fluent.css +5 -1
  99. package/styles/recurrence-editor/fluent2.css +5 -1
  100. package/styles/recurrence-editor/highcontrast-light.css +5 -1
  101. package/styles/recurrence-editor/highcontrast.css +5 -1
  102. package/styles/recurrence-editor/material-dark.css +5 -1
  103. package/styles/recurrence-editor/material.css +5 -1
  104. package/styles/recurrence-editor/material3-dark.css +5 -1
  105. package/styles/recurrence-editor/material3.css +5 -1
  106. package/styles/recurrence-editor/tailwind-dark.css +5 -1
  107. package/styles/recurrence-editor/tailwind.css +5 -1
  108. package/styles/recurrence-editor/tailwind3.css +5 -1
  109. package/styles/schedule/_bds-definition.scss +2 -0
  110. package/styles/schedule/_bigger.scss +2 -17
  111. package/styles/schedule/_bootstrap-dark-definition.scss +5 -1
  112. package/styles/schedule/_bootstrap-definition.scss +5 -1
  113. package/styles/schedule/_bootstrap4-definition.scss +9 -5
  114. package/styles/schedule/_bootstrap5-definition.scss +5 -1
  115. package/styles/schedule/_bootstrap5.3-definition.scss +2 -0
  116. package/styles/schedule/_fabric-dark-definition.scss +2 -0
  117. package/styles/schedule/_fabric-definition.scss +5 -1
  118. package/styles/schedule/_fluent-definition.scss +3 -1
  119. package/styles/schedule/_fluent2-definition.scss +3 -1
  120. package/styles/schedule/_fusionnew-definition.scss +2 -0
  121. package/styles/schedule/_highcontrast-definition.scss +6 -2
  122. package/styles/schedule/_highcontrast-light-definition.scss +6 -2
  123. package/styles/schedule/_layout.scss +39 -9
  124. package/styles/schedule/_material-dark-definition.scss +2 -0
  125. package/styles/schedule/_material-definition.scss +2 -0
  126. package/styles/schedule/_material3-definition.scss +4 -2
  127. package/styles/schedule/_tailwind-definition.scss +2 -0
  128. package/styles/schedule/_tailwind3-definition.scss +4 -2
  129. package/styles/schedule/bds.css +32 -20
  130. package/styles/schedule/bootstrap-dark.css +44 -32
  131. package/styles/schedule/bootstrap.css +39 -27
  132. package/styles/schedule/bootstrap4.css +52 -40
  133. package/styles/schedule/bootstrap5-dark.css +126 -114
  134. package/styles/schedule/bootstrap5.3.css +32 -20
  135. package/styles/schedule/bootstrap5.css +47 -35
  136. package/styles/schedule/fabric-dark.css +44 -32
  137. package/styles/schedule/fabric.css +53 -41
  138. package/styles/schedule/fluent-dark.css +35 -23
  139. package/styles/schedule/fluent.css +35 -23
  140. package/styles/schedule/fluent2.css +33 -21
  141. package/styles/schedule/highcontrast-light.css +51 -39
  142. package/styles/schedule/highcontrast.css +51 -39
  143. package/styles/schedule/material-dark.css +30 -18
  144. package/styles/schedule/material.css +30 -18
  145. package/styles/schedule/material3-dark.css +34 -22
  146. package/styles/schedule/material3.css +34 -22
  147. package/styles/schedule/tailwind-dark.css +49 -37
  148. package/styles/schedule/tailwind.css +32 -20
  149. package/styles/schedule/tailwind3.css +34 -22
  150. package/styles/tailwind-dark-lite.css +52 -23
  151. package/styles/tailwind-dark.css +54 -38
  152. package/styles/tailwind-lite.css +35 -6
  153. package/styles/tailwind.css +37 -21
  154. package/styles/tailwind3-lite.css +36 -7
  155. package/styles/tailwind3.css +39 -23
@@ -76,6 +76,12 @@ var resourceHeader = 'resourceHeader';
76
76
  var dateHeader = 'dateHeader';
77
77
  /** @private */
78
78
  var beforePaste = 'beforePaste';
79
+ /** @private */
80
+ var beforePrint = 'beforePrint';
81
+ /** @private */
82
+ var excelExport = 'excelExport';
83
+ /** @private */
84
+ var tooltipOpen = 'tooltipOpen';
79
85
  /**
80
86
  * Specifies schedule internal events
81
87
  */
@@ -5838,6 +5844,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
5838
5844
  */
5839
5845
  function EventBase(parent) {
5840
5846
  this.slots = [];
5847
+ this.processedData = [];
5841
5848
  this.isDoubleTapped = false;
5842
5849
  this.parent = parent;
5843
5850
  }
@@ -5917,11 +5924,35 @@ var EventBase = /** @__PURE__ @class */ (function () {
5917
5924
  return !data[_this.parent.eventFields.isBlock];
5918
5925
  });
5919
5926
  this.parent.eventsProcessed = this.filterEvents(start, end, eventData);
5927
+ if (!this.parent.activeViewOptions.allowOverlap && this.parent.eventsProcessed.length > 0) {
5928
+ this.processedData = this.parent.eventsProcessed;
5929
+ var nonOverlapList = [];
5930
+ var fields_1 = this.parent.eventFields;
5931
+ for (var _a = 0, _b = this.parent.eventsProcessed; _a < _b.length; _a++) {
5932
+ var data = _b[_a];
5933
+ var overlappingData = this.findOverlappingData(data, nonOverlapList);
5934
+ if (!overlappingData) {
5935
+ nonOverlapList.push(data);
5936
+ }
5937
+ else if (!this.parent.eventSettings.sortComparer) {
5938
+ var dataDuration = new Date(data[fields_1.endTime]).getTime() - new Date(data[fields_1.startTime]).getTime();
5939
+ var duplicateDuration = new Date(overlappingData[fields_1.endTime]).getTime() - new Date(overlappingData[fields_1.startTime]).getTime();
5940
+ if ((dataDuration > duplicateDuration && data[fields_1.startTime] === overlappingData[fields_1.startTime]) || (data[fields_1.isAllDay] === true)) {
5941
+ var index = nonOverlapList.indexOf(overlappingData);
5942
+ if (index !== -1) {
5943
+ nonOverlapList.splice(index, 1);
5944
+ }
5945
+ nonOverlapList.push(data);
5946
+ }
5947
+ }
5948
+ }
5949
+ this.parent.eventsProcessed = nonOverlapList;
5950
+ }
5920
5951
  var blockData = processed.filter(function (data) {
5921
5952
  return data[_this.parent.eventFields.isBlock];
5922
5953
  });
5923
- for (var _a = 0, blockData_1 = blockData; _a < blockData_1.length; _a++) {
5924
- var eventObj = blockData_1[_a];
5954
+ for (var _c = 0, blockData_1 = blockData; _c < blockData_1.length; _c++) {
5955
+ var eventObj = blockData_1[_c];
5925
5956
  if (eventObj[fields.isAllDay]) {
5926
5957
  var isDifferentDate = resetTime(new Date(eventObj[fields.startTime].getTime())) <
5927
5958
  resetTime(new Date(eventObj[fields.endTime].getTime()));
@@ -5934,6 +5965,77 @@ var EventBase = /** @__PURE__ @class */ (function () {
5934
5965
  this.parent.blockProcessed = blockData;
5935
5966
  return eventData;
5936
5967
  };
5968
+ EventBase.prototype.findOverlappingData = function (eventData, eventList) {
5969
+ var isResource = this.parent.activeViewOptions.group.resources.length > 0;
5970
+ var resourceCollection = isResource ? this.parent.resourceBase.resourceCollection : [];
5971
+ var lastLevelResource = isResource ? resourceCollection[resourceCollection.length - 1].field : null;
5972
+ var fields = this.parent.eventFields;
5973
+ var newStartTime = new Date(eventData[fields.startTime]);
5974
+ var newEndTime = new Date(eventData[fields.endTime]);
5975
+ for (var _i = 0, eventList_1 = eventList; _i < eventList_1.length; _i++) {
5976
+ var existingEvent = eventList_1[_i];
5977
+ if (newStartTime < existingEvent[fields.endTime] &&
5978
+ newEndTime > existingEvent[fields.startTime] &&
5979
+ existingEvent[fields.id] !== eventData[fields.id] &&
5980
+ (!isResource || isNullOrUndefined(lastLevelResource) ||
5981
+ this.compareResourceValues(existingEvent["" + lastLevelResource], eventData["" + lastLevelResource]))) {
5982
+ return existingEvent;
5983
+ }
5984
+ }
5985
+ return undefined;
5986
+ };
5987
+ EventBase.prototype.isOverlapRange = function (eventData, currentAction) {
5988
+ var _this = this;
5989
+ if (currentAction === void 0) { currentAction = null; }
5990
+ var isResource = this.parent.activeViewOptions.group.resources.length > 0;
5991
+ var resourceCollection = isResource ? this.parent.resourceBase.resourceCollection : [];
5992
+ var lastLevelResource = isResource ? resourceCollection[resourceCollection.length - 1].field : null;
5993
+ var eventCollection = Array.isArray(eventData) ? eventData : [eventData];
5994
+ var fields = this.parent.eventFields;
5995
+ var processOverlappingEvents = function (data) {
5996
+ return _this.processedData.filter(function (x) {
5997
+ return data[fields.startTime] < x[fields.endTime] &&
5998
+ data[fields.endTime] > x[fields.startTime] &&
5999
+ x[fields.id] !== data[fields.id] &&
6000
+ (!isResource || isNullOrUndefined(lastLevelResource) || _this.compareResourceValues(x["" + lastLevelResource], data["" + lastLevelResource]));
6001
+ });
6002
+ };
6003
+ var overlappedEvents = [];
6004
+ var isOverlapAlert = false;
6005
+ for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {
6006
+ var event_2 = eventCollection_1[_i];
6007
+ var dataCol = !isNullOrUndefined(event_2[fields.recurrenceRule]) &&
6008
+ (isNullOrUndefined(event_2[fields.recurrenceID]) || event_2[fields.recurrenceID] === event_2[fields.id]) &&
6009
+ (isNullOrUndefined(event_2[fields.recurrenceID]) || currentAction === 'EditSeries')
6010
+ ? this.generateOccurrence(event_2)
6011
+ : [event_2];
6012
+ for (var _a = 0, dataCol_1 = dataCol; _a < dataCol_1.length; _a++) {
6013
+ var data = dataCol_1[_a];
6014
+ var overlappingEvents = processOverlappingEvents(data);
6015
+ if (overlappingEvents.length > 0) {
6016
+ overlappedEvents.push.apply(overlappedEvents, overlappingEvents);
6017
+ }
6018
+ if (this.findOverlappingData(data, this.parent.eventsProcessed)) {
6019
+ isOverlapAlert = true;
6020
+ }
6021
+ }
6022
+ }
6023
+ this.parent.overlapAppointments = overlappedEvents;
6024
+ return isOverlapAlert;
6025
+ };
6026
+ EventBase.prototype.compareResourceValues = function (a, b) {
6027
+ var getValue = function (value) { return Array.isArray(value) ? value[0] : value; };
6028
+ return getValue(a) === getValue(b);
6029
+ };
6030
+ EventBase.prototype.checkOverlap = function (eventData) {
6031
+ if (!this.parent.activeViewOptions.allowOverlap) {
6032
+ if (this.isOverlapRange(eventData)) {
6033
+ this.parent.quickPopup.openValidationError('overlapAlert', eventData);
6034
+ return true;
6035
+ }
6036
+ }
6037
+ return false;
6038
+ };
5937
6039
  EventBase.prototype.updateEventDateTime = function (eventData) {
5938
6040
  if (typeof eventData[this.parent.eventFields.startTime] === 'string') {
5939
6041
  eventData[this.parent.eventFields.startTime] = getDateFromString(eventData[this.parent.eventFields.startTime]);
@@ -5946,14 +6048,14 @@ var EventBase = /** @__PURE__ @class */ (function () {
5946
6048
  EventBase.prototype.getProcessedEvents = function (eventCollection) {
5947
6049
  if (eventCollection === void 0) { eventCollection = this.parent.eventsData; }
5948
6050
  var processed = [];
5949
- for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {
5950
- var event_2 = eventCollection_1[_i];
5951
- if (!isNullOrUndefined(event_2[this.parent.eventFields.recurrenceRule]) &&
5952
- isNullOrUndefined(event_2[this.parent.eventFields.recurrenceID])) {
5953
- processed = processed.concat(this.generateOccurrence(event_2));
6051
+ for (var _i = 0, eventCollection_2 = eventCollection; _i < eventCollection_2.length; _i++) {
6052
+ var event_3 = eventCollection_2[_i];
6053
+ if (!isNullOrUndefined(event_3[this.parent.eventFields.recurrenceRule]) &&
6054
+ isNullOrUndefined(event_3[this.parent.eventFields.recurrenceID])) {
6055
+ processed = processed.concat(this.generateOccurrence(event_3));
5954
6056
  }
5955
6057
  else {
5956
- processed.push(event_2);
6058
+ processed.push(event_3);
5957
6059
  }
5958
6060
  }
5959
6061
  return processed;
@@ -6851,13 +6953,13 @@ var EventBase = /** @__PURE__ @class */ (function () {
6851
6953
  } while (followingEvent);
6852
6954
  var collections = {};
6853
6955
  if (childObj) {
6854
- var fields_1 = this.parent.eventFields;
6956
+ var fields_2 = this.parent.eventFields;
6855
6957
  collections = {
6856
6958
  follow: followingCollection.filter(function (eventData) {
6857
- return eventData[fields_1.startTime] >= childObj[fields_1.startTime];
6959
+ return eventData[fields_2.startTime] >= childObj[fields_2.startTime];
6858
6960
  }),
6859
6961
  occurrence: occurrenceCollection.filter(function (eventData) {
6860
- return eventData[fields_1.startTime] >= childObj[fields_1.startTime];
6962
+ return eventData[fields_2.startTime] >= childObj[fields_2.startTime];
6861
6963
  })
6862
6964
  };
6863
6965
  }
@@ -6899,9 +7001,9 @@ var EventBase = /** @__PURE__ @class */ (function () {
6899
7001
  var occurrenceCollection = [];
6900
7002
  var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });
6901
7003
  for (var _i = 0, parentObject_1 = parentObject; _i < parentObject_1.length; _i++) {
6902
- var event_3 = parentObject_1[_i];
6903
- if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {
6904
- occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));
7004
+ var event_4 = parentObject_1[_i];
7005
+ if (!isNullOrUndefined(event_4[fields.recurrenceRule])) {
7006
+ occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_4));
6905
7007
  }
6906
7008
  }
6907
7009
  return occurrenceCollection;
@@ -6910,9 +7012,9 @@ var EventBase = /** @__PURE__ @class */ (function () {
6910
7012
  var fields = this.parent.eventFields;
6911
7013
  var occurrenceCollection = [];
6912
7014
  for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {
6913
- var event_4 = _a[_i];
6914
- if (!isNullOrUndefined(event_4[fields.recurrenceRule])) {
6915
- occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_4));
7015
+ var event_5 = _a[_i];
7016
+ if (!isNullOrUndefined(event_5[fields.recurrenceRule])) {
7017
+ occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_5));
6916
7018
  }
6917
7019
  }
6918
7020
  var filter = occurrenceCollection.filter(function (obj) {
@@ -7020,17 +7122,17 @@ var EventBase = /** @__PURE__ @class */ (function () {
7020
7122
  var isBlockAlert = false;
7021
7123
  var fields = this.parent.eventFields;
7022
7124
  for (var _i = 0, _a = eventCollection; _i < _a.length; _i++) {
7023
- var event_5 = _a[_i];
7125
+ var event_6 = _a[_i];
7024
7126
  var dataCol = [];
7025
- if (!isNullOrUndefined(event_5[fields.recurrenceRule]) &&
7026
- (isNullOrUndefined(event_5[fields.recurrenceID]) || event_5[fields.id] === event_5[fields.recurrenceID])) {
7027
- dataCol = this.generateOccurrence(event_5);
7127
+ if (!isNullOrUndefined(event_6[fields.recurrenceRule]) &&
7128
+ (isNullOrUndefined(event_6[fields.recurrenceID]) || event_6[fields.id] === event_6[fields.recurrenceID])) {
7129
+ dataCol = this.generateOccurrence(event_6);
7028
7130
  }
7029
7131
  else {
7030
- dataCol.push(event_5);
7132
+ dataCol.push(event_6);
7031
7133
  }
7032
- for (var _b = 0, dataCol_1 = dataCol; _b < dataCol_1.length; _b++) {
7033
- var data = dataCol_1[_b];
7134
+ for (var _b = 0, dataCol_2 = dataCol; _b < dataCol_2.length; _b++) {
7135
+ var data = dataCol_2[_b];
7034
7136
  var filterBlockEvents = this.filterBlockEvents(data);
7035
7137
  if (filterBlockEvents.length > 0) {
7036
7138
  isBlockAlert = true;
@@ -7075,9 +7177,9 @@ var EventBase = /** @__PURE__ @class */ (function () {
7075
7177
  var deleteRecurrenceEventList = [];
7076
7178
  var delEditedEvents;
7077
7179
  for (var _i = 0, deleteFutureEditEventList_1 = deleteFutureEditEventList; _i < deleteFutureEditEventList_1.length; _i++) {
7078
- var event_6 = deleteFutureEditEventList_1[_i];
7079
- var delEventQuery = new Predicate(fields.recurrenceID, 'equal', event_6[fields.id]).
7080
- or(new Predicate(fields.recurrenceID, 'equal', event_6[fields.followingID]).
7180
+ var event_7 = deleteFutureEditEventList_1[_i];
7181
+ var delEventQuery = new Predicate(fields.recurrenceID, 'equal', event_7[fields.id]).
7182
+ or(new Predicate(fields.recurrenceID, 'equal', event_7[fields.followingID]).
7081
7183
  and(new Predicate(fields.recurrenceID, 'notequal', undefined)).
7082
7184
  and(new Predicate(fields.recurrenceID, 'notequal', null)));
7083
7185
  if (this.parent.currentAction === 'EditFollowingEvents' || this.parent.currentAction === 'DeleteFollowingEvents') {
@@ -7759,7 +7861,7 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
7759
7861
  var widthAdjustment = record.data.isRight ? 0 :
7760
7862
  this.parent.currentView === 'Day' ? 4 : 7;
7761
7863
  if (allDayDifference_1 >= 0) {
7762
- appWidth = (allDayDifference_1 * 100) - widthAdjustment;
7864
+ appWidth = (allDayDifference_1 * 100) - (!this.parent.activeViewOptions.allowOverlap ? 0 : widthAdjustment);
7763
7865
  }
7764
7866
  if (isNullOrUndefined(this.renderedAllDayEvents[parseInt(resource.toString(), 10)])) {
7765
7867
  this.renderedAllDayEvents[parseInt(resource.toString(), 10)] = [];
@@ -7852,7 +7954,7 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
7852
7954
  appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned, resource);
7853
7955
  }
7854
7956
  setStyleAttribute(appointmentElement, {
7855
- 'width': (this.parent.eventSettings.enableMaxHeight ? '100%' : tempData.appWidth),
7957
+ 'width': (this.parent.eventSettings.enableMaxHeight || !this.parent.activeViewOptions.allowOverlap ? '100%' : tempData.appWidth),
7856
7958
  'height': appHeight + 'px', 'top': topValue + 'px'
7857
7959
  });
7858
7960
  var iconHeight = appointmentElement.querySelectorAll('.' + EVENT_INDICATOR_CLASS).length * 15;
@@ -8672,8 +8774,16 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
8672
8774
  setStyleAttribute(appointmentElement, { 'width': appWidth + 'px', 'top': appTop + 'px' });
8673
8775
  this.renderEventElement(event, appointmentElement, cellTd);
8674
8776
  if (this.parent.rowAutoHeight) {
8777
+ var conWrap = this.parent.element.querySelector('.' + CONTENT_WRAP_CLASS);
8778
+ var conWidth = this.parent.getElementWidth(conWrap);
8779
+ var isWithoutScroll = conWrap.offsetHeight === conWrap.clientHeight &&
8780
+ conWrap.offsetWidth === conWrap.clientWidth;
8675
8781
  var firstChild = cellTd.parentElement.firstElementChild;
8676
8782
  this.updateCellHeight(firstChild, height);
8783
+ if (isWithoutScroll &&
8784
+ (conWrap.offsetWidth > conWrap.clientWidth || conWidth !== this.parent.getElementWidth(conWrap))) {
8785
+ this.adjustAppointments(conWidth);
8786
+ }
8677
8787
  }
8678
8788
  }
8679
8789
  else {
@@ -8704,6 +8814,23 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
8704
8814
  }
8705
8815
  }
8706
8816
  };
8817
+ MonthEvent.prototype.adjustAppointments = function (conWidth) {
8818
+ var _this = this;
8819
+ var tr = this.parent.element.querySelector('.' + CONTENT_TABLE_CLASS + ' tbody tr');
8820
+ var actualCellWidth = this.parent.getElementWidth(this.workCells[0]);
8821
+ this.cellWidth = actualCellWidth / +(this.workCells[0].getAttribute('colspan') || 1);
8822
+ var currentPercentage = (actualCellWidth * tr.children.length) / (conWidth / 100);
8823
+ var apps = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CLASS));
8824
+ apps.forEach(function (app) {
8825
+ if (_this.parent.enableRtl && app.style.right !== '0px') {
8826
+ app.style.right = ((parseFloat(app.style.right) / 100) * currentPercentage) + 'px';
8827
+ }
8828
+ else if (app.style.left !== '0px') {
8829
+ app.style.left = ((parseFloat(app.style.left) / 100) * currentPercentage) + 'px';
8830
+ }
8831
+ app.style.width = ((parseFloat(app.style.width) / 100) * currentPercentage) + 'px';
8832
+ });
8833
+ };
8707
8834
  MonthEvent.prototype.updateCellHeight = function (cell, height) {
8708
8835
  if ((height > cell.offsetHeight)) {
8709
8836
  setStyleAttribute(cell, { 'height': height + 'px' });
@@ -9211,23 +9338,6 @@ var TimelineEvent = /** @__PURE__ @class */ (function (_super) {
9211
9338
  }
9212
9339
  }
9213
9340
  };
9214
- TimelineEvent.prototype.adjustAppointments = function (conWidth) {
9215
- var _this = this;
9216
- var tr = this.parent.element.querySelector('.' + CONTENT_TABLE_CLASS + ' tbody tr');
9217
- var actualCellWidth = this.parent.getElementWidth(this.workCells[0]);
9218
- this.cellWidth = actualCellWidth / +(this.workCells[0].getAttribute('colspan') || 1);
9219
- var currentPercentage = (actualCellWidth * tr.children.length) / (conWidth / 100);
9220
- var apps = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CLASS));
9221
- apps.forEach(function (app) {
9222
- if (_this.parent.enableRtl && app.style.right !== '0px') {
9223
- app.style.right = ((parseFloat(app.style.right) / 100) * currentPercentage) + 'px';
9224
- }
9225
- else if (app.style.left !== '0px') {
9226
- app.style.left = ((parseFloat(app.style.left) / 100) * currentPercentage) + 'px';
9227
- }
9228
- app.style.width = ((parseFloat(app.style.width) / 100) * currentPercentage) + 'px';
9229
- });
9230
- };
9231
9341
  TimelineEvent.prototype.getFirstChild = function (index) {
9232
9342
  var query = '.' + CONTENT_TABLE_CLASS + ' tbody td';
9233
9343
  var groupIndex = '';
@@ -9344,13 +9454,23 @@ var TimelineEvent = /** @__PURE__ @class */ (function (_super) {
9344
9454
  endWidth = 0;
9345
9455
  }
9346
9456
  else {
9347
- var end = getStartEndHours(resetTime(new Date(endDate.getTime())), this.startHour, this.endHour);
9348
- endWidth = this.getSameDayEventsWidth(endDate, end.endHour);
9457
+ var _a = getStartEndHours(resetTime(new Date(endDate.getTime())), this.startHour, this.endHour), startHour = _a.startHour, endHour = _a.endHour;
9458
+ var interval = this.interval / this.slotCount;
9459
+ var lastSlotEndTime = this.getEndTimeOfLastSlot(startHour, endHour, interval);
9460
+ var adjustedEndDate = endHour < lastSlotEndTime ? endHour : lastSlotEndTime;
9461
+ endWidth = this.getSameDayEventsWidth(endDate, adjustedEndDate);
9349
9462
  endWidth = ((this.slotsPerDay * this.cellWidth) === endWidth) ? 0 : endWidth;
9350
9463
  }
9351
9464
  var spannedWidth = startWidth + endWidth;
9352
9465
  return (width > spannedWidth) ? width - spannedWidth : width - startWidth;
9353
9466
  };
9467
+ TimelineEvent.prototype.getEndTimeOfLastSlot = function (startHour, endHour, interval) {
9468
+ var minutesInDay = (endHour.getTime() - startHour.getTime()) / (1000 * 60);
9469
+ var lastSlotEndMinutes = Math.floor(minutesInDay / interval) * interval;
9470
+ var lastSlotEndTime = new Date(startHour);
9471
+ lastSlotEndTime.setMinutes(lastSlotEndMinutes);
9472
+ return lastSlotEndTime;
9473
+ };
9354
9474
  TimelineEvent.prototype.isSameDay = function (startTime, endTime) {
9355
9475
  var startDay = this.parent.getIndexOfDate(this.dateRender, resetTime(new Date(startTime.getTime())));
9356
9476
  var endDay = this.parent.getIndexOfDate(this.dateRender, resetTime(new Date(endTime.getTime())));
@@ -9549,7 +9669,8 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
9549
9669
  else {
9550
9670
  subject = args.data[this.parent.eventFields.subject];
9551
9671
  }
9552
- inlineSubject = createElement('input', { className: INLINE_SUBJECT_CLASS, attrs: { value: subject } });
9672
+ inlineSubject = this.inlineInputEle =
9673
+ createElement('input', { className: INLINE_SUBJECT_CLASS, attrs: { value: subject } });
9553
9674
  if (closest(args.element, '.' + MORE_POPUP_WRAPPER_CLASS)) {
9554
9675
  args.element.insertBefore(inlineSubject, subEle);
9555
9676
  }
@@ -9668,8 +9789,7 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
9668
9789
  }
9669
9790
  return saveObj;
9670
9791
  };
9671
- InlineEdit.prototype.documentClick = function () {
9672
- var target = this.parent.element.querySelector('.' + INLINE_SUBJECT_CLASS);
9792
+ InlineEdit.prototype.documentClick = function (target) {
9673
9793
  if (target && target.value !== '') {
9674
9794
  this.inlineCrudActions(target);
9675
9795
  }
@@ -9701,7 +9821,8 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
9701
9821
  });
9702
9822
  var inlineDetails = createElement('div', { className: APPOINTMENT_DETAILS });
9703
9823
  inlineAppointmentElement.appendChild(inlineDetails);
9704
- var inline = createElement('input', { className: INLINE_SUBJECT_CLASS });
9824
+ var inline = this.inlineInputEle =
9825
+ createElement('input', { className: INLINE_SUBJECT_CLASS });
9705
9826
  inlineDetails.appendChild(inline);
9706
9827
  if (inlineData) {
9707
9828
  this.parent.eventBase.applyResourceColor(inlineAppointmentElement, inlineData, 'backgroundColor');
@@ -9711,9 +9832,15 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
9711
9832
  InlineEdit.prototype.removeInlineAppointmentElement = function () {
9712
9833
  var inlineAppointment = [].slice.call(this.parent.element.querySelectorAll('.' + INLINE_APPOINTMENT_CLASS));
9713
9834
  if (inlineAppointment.length > 0) {
9714
- inlineAppointment.forEach(function (node) { return remove(node); });
9835
+ inlineAppointment.forEach(function (node) {
9836
+ var inlineSubject = node.querySelector('.' + INLINE_SUBJECT_CLASS);
9837
+ if (!isNullOrUndefined(inlineSubject)) {
9838
+ inlineSubject.blur();
9839
+ }
9840
+ remove(node);
9841
+ });
9715
9842
  }
9716
- var inlineSubject = this.parent.element.querySelector('.' + INLINE_SUBJECT_CLASS);
9843
+ var inlineSubject = this.getInlineElement();
9717
9844
  if (inlineSubject) {
9718
9845
  var appointmentSubject = closest(inlineSubject, '.' + APPOINTMENT_CLASS);
9719
9846
  var subject = appointmentSubject.querySelector('.' + SUBJECT_CLASS);
@@ -9722,8 +9849,13 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
9722
9849
  }
9723
9850
  remove(inlineSubject);
9724
9851
  }
9852
+ this.inlineInputEle = null;
9853
+ };
9854
+ InlineEdit.prototype.getInlineElement = function () {
9855
+ return this.inlineInputEle;
9725
9856
  };
9726
9857
  InlineEdit.prototype.destroy = function () {
9858
+ this.inlineInputEle = null;
9727
9859
  this.parent.off(inlineClick, this.inlineEdit);
9728
9860
  };
9729
9861
  return InlineEdit;
@@ -10105,7 +10237,7 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
10105
10237
  okButton.setAttribute('aria-label', cancelButton.innerHTML);
10106
10238
  }
10107
10239
  this.quickDialogClass('Alert');
10108
- this.showQuickDialog('ValidationAlert', eventData);
10240
+ this.showQuickDialog(type === 'overlapAlert' ? 'OverlapAlert' : 'ValidationAlert', eventData);
10109
10241
  };
10110
10242
  QuickPopups.prototype.showQuickDialog = function (popupType, eventData) {
10111
10243
  var _this = this;
@@ -10114,6 +10246,9 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
10114
10246
  type: popupType, cancel: false, element: this.quickDialog.element,
10115
10247
  data: extend({}, (eventData || this.parent.activeEventData.event), null, true)
10116
10248
  };
10249
+ if (!this.parent.activeViewOptions.allowOverlap) {
10250
+ eventProp.overlapEvents = this.parent.overlapAppointments;
10251
+ }
10117
10252
  this.parent.trigger(popupOpen, eventProp, function (popupArgs) {
10118
10253
  if (!popupArgs.cancel) {
10119
10254
  _this.quickDialog.show();
@@ -11131,16 +11266,20 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
11131
11266
  };
11132
11267
  QuickPopups.prototype.documentClick = function (e) {
11133
11268
  var target = e.event.target;
11269
+ var isInsideDialog = !!closest(target, '.e-dialog');
11134
11270
  var classNames = '.' + POPUP_WRAPPER_CLASS + ',.' + HEADER_CELLS_CLASS + ',.' + ALLDAY_CELLS_CLASS +
11135
11271
  ',.' + WORK_CELLS_CLASS + ',.' + APPOINTMENT_CLASS;
11272
+ if (!isInsideDialog) {
11273
+ classNames += ',.e-popup';
11274
+ }
11136
11275
  var popupWrap = this.parent.element.querySelector('.' + POPUP_WRAPPER_CLASS);
11137
11276
  if ((popupWrap && popupWrap.childElementCount > 0 && !closest(target, classNames)) || !closest(target, classNames)) {
11138
11277
  this.quickPopupHide();
11139
11278
  this.parent.removeNewEventElement();
11140
11279
  }
11141
- var tar = this.parent.element.querySelector('.' + INLINE_SUBJECT_CLASS);
11142
- if (tar && tar !== target && this.parent.allowInline) {
11143
- this.parent.inlineModule.documentClick();
11280
+ var tar = this.parent.allowInline ? this.parent.inlineModule.getInlineElement() : null;
11281
+ if (tar && tar !== target) {
11282
+ this.parent.inlineModule.documentClick(tar);
11144
11283
  }
11145
11284
  if (closest(target, '.' + APPOINTMENT_CLASS + ',.' + HEADER_CELLS_CLASS)) {
11146
11285
  this.parent.removeNewEventElement();
@@ -11393,6 +11532,23 @@ var EventTooltip = /** @__PURE__ @class */ (function () {
11393
11532
  if (args.element && this.parent.isReact && !isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {
11394
11533
  addClass([args.element], TOOLTIP_HIDDEN_CLASS);
11395
11534
  }
11535
+ var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));
11536
+ if (isNullOrUndefined(record)) {
11537
+ return;
11538
+ }
11539
+ var callbackArgs = {
11540
+ cancel: false,
11541
+ data: record,
11542
+ content: args.element,
11543
+ target: args.target
11544
+ };
11545
+ this.parent.trigger(tooltipOpen, callbackArgs, function (callbackArgs) {
11546
+ if (callbackArgs.cancel) {
11547
+ args.cancel = true;
11548
+ return;
11549
+ }
11550
+ args.element = callbackArgs.content;
11551
+ });
11396
11552
  };
11397
11553
  EventTooltip.prototype.onTooltipClose = function (args) {
11398
11554
  if (args.element) {
@@ -11453,6 +11609,7 @@ var MONETHEXPANDERWRAPPER = 'e-month-expander';
11453
11609
  var MONETHEXPANDWRAPPER = 'e-month-expand-wrapper';
11454
11610
  var MONTHEXPANDERELEMENT = 'e-month-expander-element';
11455
11611
  var MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';
11612
+ var REPEATONWEEKSELECTOR = 'e-repeat-on-week-selector';
11456
11613
  var FORMLEFT = 'e-form-left';
11457
11614
  var FORMRIGHT = 'e-form-right';
11458
11615
  var MONTHDAYWRAPPER = 'e-month-day';
@@ -12160,7 +12317,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
12160
12317
  this.localeObj.getConstant('on') + '" />' +
12161
12318
  '</div></td></tr>' +
12162
12319
  '<tr><td>' +
12163
- '<div class="' + INPUTWARAPPER + ' ' + MONTHEXPANDERCHECKBOXWRAPPER + '" style="min-width: 30px;margin-bottom:18px;">' +
12320
+ '<div class="' + INPUTWARAPPER + ' ' + MONTHEXPANDERCHECKBOXWRAPPER + ' ' + REPEATONWEEKSELECTOR + '">' +
12164
12321
  '<input class="' + MONTHEXPANNDERELEM + '"title="' + this.localeObj.getConstant('monthExpander') + '" type="radio">' +
12165
12322
  '</div></td>' +
12166
12323
  '<td><div class="' + INPUTWARAPPER + ' ' + WEEKPOSITION + '" >' +
@@ -12562,6 +12719,12 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
12562
12719
  __decorate([
12563
12720
  Event()
12564
12721
  ], RecurrenceEditor.prototype, "change", void 0);
12722
+ __decorate([
12723
+ Event()
12724
+ ], RecurrenceEditor.prototype, "created", void 0);
12725
+ __decorate([
12726
+ Event()
12727
+ ], RecurrenceEditor.prototype, "destroyed", void 0);
12565
12728
  RecurrenceEditor = __decorate([
12566
12729
  NotifyPropertyChanges
12567
12730
  ], RecurrenceEditor);
@@ -12840,6 +13003,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12840
13003
  var callBackPromise = new Deferred();
12841
13004
  this.parent.trigger(popupOpen, eventProp, function (popupArgs) {
12842
13005
  args.cancel = popupArgs.cancel;
13006
+ args.maxHeight = _this.parent.isAdaptive ? 'max-content' : args.maxHeight;
12843
13007
  _this.duration = _this.cellClickAction ? popupArgs.duration : null;
12844
13008
  if (_this.eventData[_this.fields.endTime].getTime() === endTime && !_this.cellClickAction &&
12845
13009
  _this.eventData[_this.fields.endTime].getHours() === 0 &&
@@ -12993,7 +13157,8 @@ var EventWindow = /** @__PURE__ @class */ (function () {
12993
13157
  var description = this.createDivElement(DESCRIPTION_CLASS + '-row');
12994
13158
  description.appendChild(this.renderTextBox(DESCRIPTION_CLASS));
12995
13159
  parentDiv.appendChild(description);
12996
- var submit = createElement('button', { attrs: { type: 'hidden', title: 'submit', style: 'display:none' } });
13160
+ var submit = createElement('button', { attrs: { type: 'hidden', title: 'submit' } });
13161
+ submit.style.display = 'none';
12997
13162
  parentDiv.appendChild(submit);
12998
13163
  return parentDiv;
12999
13164
  };
@@ -13079,6 +13244,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13079
13244
  }
13080
13245
  };
13081
13246
  EventWindow.prototype.renderResourceDetails = function (resourceData) {
13247
+ var _this = this;
13082
13248
  var fieldName = resourceData.field;
13083
13249
  var value = 'e-' + fieldName;
13084
13250
  var labelValue = resourceData.title;
@@ -13086,7 +13252,7 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13086
13252
  var resourceInput = this.createInputElement(value + ' ' + EVENT_FIELD$1, fieldName);
13087
13253
  resourceDiv.appendChild(resourceInput);
13088
13254
  var resourceTemplate = function (data) {
13089
- return SanitizeHtmlHelper.sanitize("<div class=\"e-resource-template\"><div class=\"e-resource-color\" style=\"background-color:" + data[resourceData.colorField] + "\"></div><div class=\"e-resource-text\">" + data[resourceData.textField] + "</div></div>");
13255
+ return SanitizeHtmlHelper.sanitize("<div class=\"e-resource-template\">\n <div class=\"e-resource-color\" data-resource-color=\"" + data[resourceData.colorField] + "\"></div>\n <div class=\"e-resource-text\">" + data[resourceData.textField] + "</div></div>");
13090
13256
  };
13091
13257
  initializeCSPTemplate(resourceTemplate, resourceData);
13092
13258
  if (resourceData.allowMultiple) {
@@ -13106,7 +13272,12 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13106
13272
  placeholder: labelValue,
13107
13273
  popupHeight: '230px',
13108
13274
  popupWidth: '447px',
13109
- mode: 'Box'
13275
+ mode: 'Box',
13276
+ open: function (args) {
13277
+ Promise.resolve().then(function () {
13278
+ _this.applyStylesAfterRender(args);
13279
+ });
13280
+ }
13110
13281
  });
13111
13282
  listObj.appendTo(resourceInput);
13112
13283
  }
@@ -13125,12 +13296,29 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13125
13296
  placeholder: labelValue,
13126
13297
  popupHeight: '230px',
13127
13298
  popupWidth: '447px',
13128
- itemTemplate: resourceTemplate
13299
+ itemTemplate: resourceTemplate,
13300
+ open: function (args) {
13301
+ Promise.resolve().then(function () {
13302
+ _this.applyStylesAfterRender(args);
13303
+ });
13304
+ }
13129
13305
  });
13130
13306
  dropDownList.appendTo(resourceInput);
13131
13307
  }
13132
13308
  return resourceDiv;
13133
13309
  };
13310
+ EventWindow.prototype.applyStylesAfterRender = function (args) {
13311
+ if (!args.popup || !args.popup.element) {
13312
+ return;
13313
+ }
13314
+ var resourceColors = args.popup.element.querySelectorAll('.e-resource-color[data-resource-color]');
13315
+ resourceColors.forEach(function (element) {
13316
+ var color = element.getAttribute('data-resource-color');
13317
+ if (color) {
13318
+ element.style.backgroundColor = color;
13319
+ }
13320
+ });
13321
+ };
13134
13322
  EventWindow.prototype.renderDropDown = function (value) {
13135
13323
  var _this = this;
13136
13324
  var fieldName = this.getFieldName(value);
@@ -13948,6 +14136,9 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13948
14136
  if (eventObj[this.fields.isReadonly]) {
13949
14137
  return false;
13950
14138
  }
14139
+ if (this.parent.eventBase.checkOverlap(eventObj)) {
14140
+ return true;
14141
+ }
13951
14142
  var currentAction = void 0;
13952
14143
  if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {
13953
14144
  currentAction = this.parent.currentAction;
@@ -13982,6 +14173,9 @@ var EventWindow = /** @__PURE__ @class */ (function () {
13982
14173
  }
13983
14174
  else {
13984
14175
  this.parent.currentAction = 'Add';
14176
+ if (this.parent.eventBase.checkOverlap(eventObj)) {
14177
+ return true;
14178
+ }
13985
14179
  if (isResourceEventExpand) {
13986
14180
  this.resourceSaveEvent(eventObj, this.parent.currentAction);
13987
14181
  }
@@ -14582,13 +14776,13 @@ var VirtualScroll = /** @__PURE__ @class */ (function () {
14582
14776
  function VirtualScroll(parent) {
14583
14777
  this.translateY = 0;
14584
14778
  this.itemSize = 60;
14585
- this.bufferCount = 3;
14586
14779
  this.renderedLength = 0;
14587
14780
  this.averageRowHeight = 0;
14588
14781
  this.startIndex = 0;
14589
14782
  this.existingDataCollection = [];
14590
14783
  this.enableTransition = true;
14591
14784
  this.parent = parent;
14785
+ this.bufferCount = parent.activeViewOptions.overscanCount < 3 ? 3 : parent.activeViewOptions.overscanCount;
14592
14786
  this.addEventListener();
14593
14787
  }
14594
14788
  VirtualScroll.prototype.addEventListener = function () {
@@ -14865,6 +15059,7 @@ var VirtualScroll = /** @__PURE__ @class */ (function () {
14865
15059
  };
14866
15060
  VirtualScroll.prototype.getCollection = function (startIndex, endIndex) {
14867
15061
  this.translateY = startIndex * this.itemSize;
15062
+ startIndex = (startIndex < 0) ? 0 : startIndex;
14868
15063
  var lastLevel = this.getResCollection(startIndex, endIndex);
14869
15064
  if (this.parent.enableRtl) {
14870
15065
  this.translateY = -this.translateY;
@@ -14873,6 +15068,7 @@ var VirtualScroll = /** @__PURE__ @class */ (function () {
14873
15068
  };
14874
15069
  VirtualScroll.prototype.getResCollection = function (startIndex, endIndex) {
14875
15070
  var lastLevel = this.parent.activeView.colLevels[this.parent.activeView.colLevels.length - 1];
15071
+ endIndex = endIndex > lastLevel.length ? lastLevel.length - 1 : endIndex;
14876
15072
  var resCollection = [];
14877
15073
  var index = { startIndex: 0, endIndex: 0 };
14878
15074
  if (this.parent.activeViewOptions.group.byDate) {
@@ -15608,6 +15804,74 @@ var Crud = /** @__PURE__ @class */ (function () {
15608
15804
  });
15609
15805
  }
15610
15806
  };
15807
+ Crud.prototype.processAddEvent = function (addArgs) {
15808
+ var fields = this.parent.eventFields;
15809
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15810
+ var promise;
15811
+ if (addArgs.addedRecords instanceof Array) {
15812
+ for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {
15813
+ var event_1 = _a[_i];
15814
+ event_1 = this.parent.eventBase.updateEventDateTime(event_1);
15815
+ var eventData = extend({}, this.parent.eventBase.processTimezone(event_1, true), null, true);
15816
+ editParams.addedRecords.push(eventData);
15817
+ }
15818
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
15819
+ }
15820
+ else {
15821
+ var event_2 = this.parent.eventBase.processTimezone(addArgs.addedRecords, true);
15822
+ editParams.addedRecords.push(event_2);
15823
+ promise = this.parent.dataModule.dataManager.insert(event_2, this.getTable(), this.getQuery());
15824
+ }
15825
+ var crudArgs = {
15826
+ requestType: 'eventCreated', cancel: false, data: addArgs.addedRecords, promise: promise, editParams: editParams
15827
+ };
15828
+ this.refreshData(crudArgs);
15829
+ };
15830
+ Crud.prototype.processSaveEvent = function (saveArgs) {
15831
+ var promise;
15832
+ var fields = this.parent.eventFields;
15833
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15834
+ if (saveArgs.changedRecords instanceof Array) {
15835
+ for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {
15836
+ var event_3 = _a[_i];
15837
+ event_3 = this.parent.eventBase.updateEventDateTime(event_3);
15838
+ var eventData = extend({}, this.parent.eventBase.processTimezone(event_3, true), null, true);
15839
+ editParams.changedRecords.push(eventData);
15840
+ }
15841
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
15842
+ }
15843
+ else {
15844
+ var event_4 = this.parent.eventBase.processTimezone(saveArgs.changedRecords, true);
15845
+ editParams.changedRecords.push(event_4);
15846
+ promise = this.parent.dataModule.dataManager.update(fields.id, event_4, this.getTable(), this.getQuery());
15847
+ }
15848
+ var cloneEvent = extend({}, saveArgs.changedRecords[saveArgs.changedRecords.length - 1], null, true);
15849
+ this.parent.eventBase.selectWorkCellByTime([this.parent.eventBase.processTimezone(cloneEvent)]);
15850
+ var crudArgs = {
15851
+ requestType: 'eventChanged', cancel: false,
15852
+ data: saveArgs.changedRecords, promise: promise, editParams: editParams
15853
+ };
15854
+ this.refreshData(crudArgs);
15855
+ };
15856
+ Crud.prototype.processDeleteEvent = function (deleteArgs) {
15857
+ var promise;
15858
+ var fields = this.parent.eventFields;
15859
+ var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15860
+ if (deleteArgs.deletedRecords.length > 1) {
15861
+ editParams.deletedRecords = editParams.deletedRecords.concat(deleteArgs.deletedRecords);
15862
+ promise = this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, this.getTable(), this.getQuery());
15863
+ }
15864
+ else {
15865
+ editParams.deletedRecords.push(deleteArgs.deletedRecords[0]);
15866
+ promise = this.parent.dataModule.dataManager.remove(fields.id, deleteArgs.deletedRecords[0], this.getTable(), this.getQuery());
15867
+ }
15868
+ this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);
15869
+ var crudArgs = {
15870
+ requestType: 'eventRemoved', cancel: false,
15871
+ data: deleteArgs.deletedRecords, promise: promise, editParams: editParams
15872
+ };
15873
+ this.refreshData(crudArgs);
15874
+ };
15611
15875
  Crud.prototype.addEvent = function (eventData) {
15612
15876
  var _this = this;
15613
15877
  if (this.parent.eventSettings.allowAdding && !this.parent.activeViewOptions.readonly) {
@@ -15615,6 +15879,9 @@ var Crud = /** @__PURE__ @class */ (function () {
15615
15879
  this.parent.quickPopup.openValidationError('blockAlert', eventData);
15616
15880
  return;
15617
15881
  }
15882
+ if (this.parent.eventBase.checkOverlap(eventData)) {
15883
+ return;
15884
+ }
15618
15885
  var addEvents = (eventData instanceof Array) ? eventData : [eventData];
15619
15886
  if (addEvents.length === 0) {
15620
15887
  return;
@@ -15625,27 +15892,24 @@ var Crud = /** @__PURE__ @class */ (function () {
15625
15892
  };
15626
15893
  this.parent.trigger(actionBegin, args, function (addArgs) {
15627
15894
  if (!addArgs.cancel) {
15628
- var fields = _this.parent.eventFields;
15629
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15630
- var promise = void 0;
15631
- if (addArgs.addedRecords instanceof Array) {
15632
- for (var _i = 0, _a = addArgs.addedRecords; _i < _a.length; _i++) {
15633
- var event_1 = _a[_i];
15634
- event_1 = _this.parent.eventBase.updateEventDateTime(event_1);
15635
- var eventData_1 = extend({}, _this.parent.eventBase.processTimezone(event_1, true), null, true);
15636
- editParams.addedRecords.push(eventData_1);
15637
- }
15638
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
15895
+ if (addArgs.promise) {
15896
+ addArgs.promise.then(function (hasContinue) {
15897
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
15898
+ return;
15899
+ }
15900
+ if (hasContinue) {
15901
+ _this.processAddEvent(addArgs);
15902
+ }
15903
+ }).catch(function (e) {
15904
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
15905
+ return;
15906
+ }
15907
+ _this.parent.trigger(actionFailure, { error: e });
15908
+ });
15639
15909
  }
15640
15910
  else {
15641
- var event_2 = _this.parent.eventBase.processTimezone(addArgs.addedRecords, true);
15642
- editParams.addedRecords.push(event_2);
15643
- promise = _this.parent.dataModule.dataManager.insert(event_2, _this.getTable(), _this.getQuery());
15911
+ _this.processAddEvent(addArgs);
15644
15912
  }
15645
- var crudArgs = {
15646
- requestType: 'eventCreated', cancel: false, data: addArgs.addedRecords, promise: promise, editParams: editParams
15647
- };
15648
- _this.refreshData(crudArgs);
15649
15913
  }
15650
15914
  });
15651
15915
  }
@@ -15681,36 +15945,33 @@ var Crud = /** @__PURE__ @class */ (function () {
15681
15945
  }
15682
15946
  }
15683
15947
  else {
15948
+ if (this.parent.eventBase.checkOverlap(eventData)) {
15949
+ return;
15950
+ }
15684
15951
  var args = {
15685
15952
  requestType: 'eventChange', cancel: false, data: eventData,
15686
15953
  addedRecords: [], changedRecords: updateEvents, deletedRecords: []
15687
15954
  };
15688
15955
  this.parent.trigger(actionBegin, args, function (saveArgs) {
15689
15956
  if (!saveArgs.cancel) {
15690
- var promise = void 0;
15691
- var fields = _this.parent.eventFields;
15692
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15693
- if (saveArgs.changedRecords instanceof Array) {
15694
- for (var _i = 0, _a = saveArgs.changedRecords; _i < _a.length; _i++) {
15695
- var event_3 = _a[_i];
15696
- event_3 = _this.parent.eventBase.updateEventDateTime(event_3);
15697
- var eventData_2 = extend({}, _this.parent.eventBase.processTimezone(event_3, true), null, true);
15698
- editParams.changedRecords.push(eventData_2);
15699
- }
15700
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
15957
+ if (saveArgs.promise) {
15958
+ saveArgs.promise.then(function (hasContinue) {
15959
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
15960
+ return;
15961
+ }
15962
+ if (hasContinue) {
15963
+ _this.processSaveEvent(saveArgs);
15964
+ }
15965
+ }).catch(function (e) {
15966
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
15967
+ return;
15968
+ }
15969
+ _this.parent.trigger(actionFailure, { error: e });
15970
+ });
15701
15971
  }
15702
15972
  else {
15703
- var event_4 = _this.parent.eventBase.processTimezone(saveArgs.changedRecords, true);
15704
- editParams.changedRecords.push(event_4);
15705
- promise = _this.parent.dataModule.dataManager.update(fields.id, event_4, _this.getTable(), _this.getQuery());
15973
+ _this.processSaveEvent(saveArgs);
15706
15974
  }
15707
- var cloneEvent = extend({}, saveArgs.changedRecords[saveArgs.changedRecords.length - 1], null, true);
15708
- _this.parent.eventBase.selectWorkCellByTime([_this.parent.eventBase.processTimezone(cloneEvent)]);
15709
- var crudArgs = {
15710
- requestType: 'eventChanged', cancel: false,
15711
- data: saveArgs.changedRecords, promise: promise, editParams: editParams
15712
- };
15713
- _this.refreshData(crudArgs);
15714
15975
  }
15715
15976
  });
15716
15977
  }
@@ -15755,23 +16016,24 @@ var Crud = /** @__PURE__ @class */ (function () {
15755
16016
  };
15756
16017
  this.parent.trigger(actionBegin, args, function (deleteArgs) {
15757
16018
  if (!deleteArgs.cancel) {
15758
- var promise = void 0;
15759
- var fields = _this.parent.eventFields;
15760
- var editParams = { addedRecords: [], changedRecords: [], deletedRecords: [] };
15761
- if (deleteArgs.deletedRecords.length > 1) {
15762
- editParams.deletedRecords = editParams.deletedRecords.concat(deleteArgs.deletedRecords);
15763
- promise = _this.parent.dataModule.dataManager.saveChanges(editParams, fields.id, _this.getTable(), _this.getQuery());
16019
+ if (deleteArgs.promise) {
16020
+ deleteArgs.promise.then(function (hasContinue) {
16021
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
16022
+ return;
16023
+ }
16024
+ if (hasContinue) {
16025
+ _this.processDeleteEvent(deleteArgs);
16026
+ }
16027
+ }).catch(function (e) {
16028
+ if (!_this.parent || _this.parent && _this.parent.isDestroyed) {
16029
+ return;
16030
+ }
16031
+ _this.parent.trigger(actionFailure, { error: e });
16032
+ });
15764
16033
  }
15765
16034
  else {
15766
- editParams.deletedRecords.push(deleteArgs.deletedRecords[0]);
15767
- promise = _this.parent.dataModule.dataManager.remove(fields.id, deleteArgs.deletedRecords[0], _this.getTable(), _this.getQuery());
16035
+ _this.processDeleteEvent(deleteArgs);
15768
16036
  }
15769
- _this.parent.eventBase.selectWorkCellByTime(deleteArgs.deletedRecords);
15770
- var crudArgs = {
15771
- requestType: 'eventRemoved', cancel: false,
15772
- data: deleteArgs.deletedRecords, promise: promise, editParams: editParams
15773
- };
15774
- _this.refreshData(crudArgs);
15775
16037
  }
15776
16038
  });
15777
16039
  }
@@ -15782,8 +16044,8 @@ var Crud = /** @__PURE__ @class */ (function () {
15782
16044
  var occurrenceData = [];
15783
16045
  var isDeletedRecords = false;
15784
16046
  if (eventData instanceof Array) {
15785
- for (var _i = 0, eventData_3 = eventData; _i < eventData_3.length; _i++) {
15786
- var event_5 = eventData_3[_i];
16047
+ for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {
16048
+ var event_5 = eventData_1[_i];
15787
16049
  occurrenceData.push({ occurrence: event_5, parent: this.getParentEvent(event_5) });
15788
16050
  }
15789
16051
  }
@@ -15856,8 +16118,8 @@ var Crud = /** @__PURE__ @class */ (function () {
15856
16118
  var _this = this;
15857
16119
  var followData = [];
15858
16120
  if (eventData instanceof Array) {
15859
- for (var _i = 0, eventData_4 = eventData; _i < eventData_4.length; _i++) {
15860
- var event_6 = eventData_4[_i];
16121
+ for (var _i = 0, eventData_2 = eventData; _i < eventData_2.length; _i++) {
16122
+ var event_6 = eventData_2[_i];
15861
16123
  followData.push({ occurrence: event_6, parent: this.getParentEvent(event_6) });
15862
16124
  }
15863
16125
  }
@@ -15934,8 +16196,8 @@ var Crud = /** @__PURE__ @class */ (function () {
15934
16196
  var seriesData = [];
15935
16197
  var isDeletedRecords = false;
15936
16198
  if (eventData instanceof Array) {
15937
- for (var _i = 0, eventData_5 = eventData; _i < eventData_5.length; _i++) {
15938
- var event_7 = eventData_5[_i];
16199
+ for (var _i = 0, eventData_3 = eventData; _i < eventData_3.length; _i++) {
16200
+ var event_7 = eventData_3[_i];
15939
16201
  seriesData.push(this.getParentEvent(event_7, true));
15940
16202
  }
15941
16203
  }
@@ -16018,8 +16280,8 @@ var Crud = /** @__PURE__ @class */ (function () {
16018
16280
  Crud.prototype.processDelete = function (eventData) {
16019
16281
  var _this = this;
16020
16282
  var deleteData = [];
16021
- for (var _i = 0, eventData_6 = eventData; _i < eventData_6.length; _i++) {
16022
- var eventObj = eventData_6[_i];
16283
+ for (var _i = 0, eventData_4 = eventData; _i < eventData_4.length; _i++) {
16284
+ var eventObj = eventData_4[_i];
16023
16285
  if (eventObj[this.parent.eventFields.recurrenceRule]) {
16024
16286
  deleteData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });
16025
16287
  }
@@ -16085,8 +16347,8 @@ var Crud = /** @__PURE__ @class */ (function () {
16085
16347
  var _this = this;
16086
16348
  var eventData = (data instanceof Array) ? data : [data];
16087
16349
  var editData = [];
16088
- for (var _i = 0, eventData_7 = eventData; _i < eventData_7.length; _i++) {
16089
- var eventObj = eventData_7[_i];
16350
+ for (var _i = 0, eventData_5 = eventData; _i < eventData_5.length; _i++) {
16351
+ var eventObj = eventData_5[_i];
16090
16352
  if (eventObj[this.parent.eventFields.recurrenceRule]) {
16091
16353
  editData.push({ occurrence: eventObj, parent: this.getParentEvent(eventObj) });
16092
16354
  }
@@ -18237,6 +18499,8 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
18237
18499
  readonly: this.readonly,
18238
18500
  startHour: this.startHour,
18239
18501
  allowVirtualScrolling: false,
18502
+ allowOverlap: this.allowOverlap,
18503
+ overscanCount: this.overscanCount,
18240
18504
  cellHeaderTemplate: this.cellHeaderTemplate,
18241
18505
  dayHeaderTemplate: this.dayHeaderTemplate,
18242
18506
  monthHeaderTemplate: this.monthHeaderTemplate,
@@ -18696,6 +18960,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
18696
18960
  startEndError: 'The selected end date occurs before the start date.',
18697
18961
  invalidDateError: 'The entered date value is invalid.',
18698
18962
  blockAlert: 'Events cannot be scheduled within the blocked time range.',
18963
+ overlapAlert: 'Events cannot be scheduled during the chosen time as it overlaps with another event.',
18699
18964
  ok: 'Ok',
18700
18965
  yes: 'Yes',
18701
18966
  no: 'No',
@@ -19595,6 +19860,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
19595
19860
  case 'allowDragAndDrop':
19596
19861
  case 'allowResizing':
19597
19862
  case 'eventDragArea':
19863
+ case 'allowOverlap':
19598
19864
  this.refreshEvents(false);
19599
19865
  break;
19600
19866
  case 'weekRule':
@@ -20650,6 +20916,54 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
20650
20916
  this.quickPopup.quickPopupHide(true);
20651
20917
  }
20652
20918
  };
20919
+ /**
20920
+ * To manually open the overlap validation Alert.
20921
+ *
20922
+ * @param {PopupOpenEventArgs} args The arguments for opening the popup.
20923
+ * @param {string} args.type Defines the type of overlap alert (e.g., 'OverlapAlert').
20924
+ * @param {Record<string, any>} args.data The data associated with the popup.
20925
+ * @param {Record<string, any>[]} args.overlapEvents The overlap events.
20926
+ * @returns {void}
20927
+ */
20928
+ Schedule.prototype.openOverlapAlert = function (args) {
20929
+ var _this = this;
20930
+ if (this.quickPopup) {
20931
+ var eventProp = {
20932
+ type: 'OverlapAlert',
20933
+ cancel: false,
20934
+ element: this.quickPopup.quickDialog.element,
20935
+ data: args.data,
20936
+ overlapEvents: args.overlapEvents
20937
+ };
20938
+ this.trigger(popupOpen, eventProp, function (popupArgs) {
20939
+ if (!popupArgs.cancel) {
20940
+ _this.quickPopup.openValidationError('overlapAlert', args.data);
20941
+ }
20942
+ });
20943
+ }
20944
+ };
20945
+ /**
20946
+ * To manually close the overlap validation Alert.
20947
+ *
20948
+ * @function closeOverlapValidationAlert
20949
+ * @returns {void}
20950
+ */
20951
+ Schedule.prototype.closeOverlapAlert = function () {
20952
+ var _this = this;
20953
+ if (this.quickPopup) {
20954
+ var args = {
20955
+ type: 'OverlapAlert',
20956
+ cancel: false,
20957
+ data: this.activeEventData.event,
20958
+ element: this.quickPopup.quickDialog.element
20959
+ };
20960
+ this.trigger(popupClose, args, function (popupArgs) {
20961
+ if (!popupArgs.cancel) {
20962
+ _this.quickPopup.quickDialog.hide();
20963
+ }
20964
+ });
20965
+ }
20966
+ };
20653
20967
  /**
20654
20968
  * Closes the tooltip.
20655
20969
  * For example, when the context menu is opened for an event,
@@ -20845,6 +21159,12 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
20845
21159
  __decorate$b([
20846
21160
  Property(true)
20847
21161
  ], Schedule.prototype, "allowSwiping", void 0);
21162
+ __decorate$b([
21163
+ Property(true)
21164
+ ], Schedule.prototype, "allowOverlap", void 0);
21165
+ __decorate$b([
21166
+ Property(3)
21167
+ ], Schedule.prototype, "overscanCount", void 0);
20848
21168
  __decorate$b([
20849
21169
  Collection([], ToolbarItem)
20850
21170
  ], Schedule.prototype, "toolbarItems", void 0);
@@ -21103,6 +21423,15 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
21103
21423
  __decorate$b([
21104
21424
  Event()
21105
21425
  ], Schedule.prototype, "beforePaste", void 0);
21426
+ __decorate$b([
21427
+ Event()
21428
+ ], Schedule.prototype, "beforePrint", void 0);
21429
+ __decorate$b([
21430
+ Event()
21431
+ ], Schedule.prototype, "excelExport", void 0);
21432
+ __decorate$b([
21433
+ Event()
21434
+ ], Schedule.prototype, "tooltipOpen", void 0);
21106
21435
  Schedule = __decorate$b([
21107
21436
  NotifyPropertyChanges
21108
21437
  ], Schedule);
@@ -21195,7 +21524,9 @@ var ActionBase = /** @__PURE__ @class */ (function () {
21195
21524
  };
21196
21525
  ActionBase.prototype.calculateIntervalTime = function (date) {
21197
21526
  var dateInMS = resetTime(date).getTime();
21527
+ var startHour = this.parent.activeView.getStartHour();
21198
21528
  var intervalInMS = MS_PER_MINUTE * this.actionObj.interval;
21529
+ dateInMS += (startHour.getHours() * 60 + startHour.getMinutes()) * MS_PER_MINUTE + startHour.getSeconds() * 1000;
21199
21530
  dateInMS = dateInMS + Math.floor((date.getTime() - dateInMS) / intervalInMS) * intervalInMS;
21200
21531
  return new Date(dateInMS);
21201
21532
  };
@@ -21306,7 +21637,8 @@ var ActionBase = /** @__PURE__ @class */ (function () {
21306
21637
  return originalElement;
21307
21638
  };
21308
21639
  ActionBase.prototype.createCloneElement = function (element) {
21309
- var cloneWrapper = createElement('div', { innerHTML: element.outerHTML });
21640
+ var cloneWrapper = document.createElement('div');
21641
+ cloneWrapper.appendChild(element.cloneNode(true));
21310
21642
  var cloneElement = cloneWrapper.children[0];
21311
21643
  var cloneClassLists = [CLONE_ELEMENT_CLASS];
21312
21644
  cloneClassLists.push((this.actionObj.action === 'drag') ? DRAG_CLONE_CLASS : RESIZE_CLONE_CLASS);
@@ -21898,6 +22230,9 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
21898
22230
  if (resizeEventArgs.cancel) {
21899
22231
  return;
21900
22232
  }
22233
+ if (_this.parent.eventBase.checkOverlap(resizeEventArgs.data)) {
22234
+ return;
22235
+ }
21901
22236
  if (_this.parent.isSpecificResourceEvents()) {
21902
22237
  _this.parent.crudModule.crudObj.sourceEvent =
21903
22238
  [_this.parent.resourceBase.lastResourceLevel[parseInt(resizeEventArgs.element.getAttribute('data-group-index'), 10)]];
@@ -22023,7 +22358,7 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
22023
22358
  resizeTime.setHours(eventEnd.getHours(), eventEnd.getMinutes(), eventEnd.getSeconds());
22024
22359
  }
22025
22360
  }
22026
- var isNotHourSlot = ['TimelineMonth', 'Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1 ||
22361
+ var isNotHourSlot = ['TimelineMonth', 'Year', 'Month', 'Week', 'WorkWeek', 'Date', 'Day'].indexOf(headerName) !== -1 ||
22027
22362
  !this.parent.activeViewOptions.timeScale.enable;
22028
22363
  if (isLeft) {
22029
22364
  if ((eventEnd.getTime() - resizeTime.getTime()) <= 0) {
@@ -22213,7 +22548,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
22213
22548
  this.parent.dragAndDropModule.setDragArea();
22214
22549
  }
22215
22550
  this.fields = this.parent.eventFields;
22216
- var elementSelector = (this.parent.currentView === 'Year') ? '.' + APPOINTMENT_CLASS :
22551
+ var elementSelector = (this.parent.currentView === 'Year') ? '.' + WORK_CELLS_CLASS + ' ' + '.' + APPOINTMENT_CLASS :
22217
22552
  '.' + APPOINTMENT_WRAPPER_CLASS + ',.' + MORE_INDICATOR_CLASS;
22218
22553
  var eventWrappers = [].slice.call(this.parent.element.querySelectorAll(elementSelector));
22219
22554
  for (var _i = 0, eventWrappers_1 = eventWrappers; _i < eventWrappers_1.length; _i++) {
@@ -23224,6 +23559,9 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
23224
23559
  if (dragEventArgs.cancel) {
23225
23560
  return;
23226
23561
  }
23562
+ if (_this.parent.eventBase.checkOverlap(dragEventArgs.data)) {
23563
+ return;
23564
+ }
23227
23565
  if (_this.parent.isSpecificResourceEvents()) {
23228
23566
  _this.parent.crudModule.crudObj.isCrudAction = true;
23229
23567
  _this.parent.crudModule.crudObj.sourceEvent =
@@ -25970,8 +26308,10 @@ var Month = /** @__PURE__ @class */ (function (_super) {
25970
26308
  this.retainScrollPosition();
25971
26309
  };
25972
26310
  Month.prototype.scrollToSelectedDate = function () {
26311
+ var selectedDate = new Date(this.parent.selectedDate);
26312
+ selectedDate.setHours(0, 0, 0, 0);
25973
26313
  var headerCell = this.element.querySelector('.' + HEADER_CELLS_CLASS + '[data-date="'
25974
- + this.parent.selectedDate.getTime().toString() + '"]');
26314
+ + selectedDate.getTime().toString() + '"]');
25975
26315
  var content = this.getContentAreaElement();
25976
26316
  if (!isNullOrUndefined(headerCell)) {
25977
26317
  content.scrollLeft = !this.parent.enableRtl ?
@@ -29675,8 +30015,14 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
29675
30015
  rows.push({ index: i + 2, cells: columnData });
29676
30016
  });
29677
30017
  var workSheet = [{ columns: columns, rows: rows }];
29678
- var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale, undefined, separator);
29679
- book.save(name + '.' + type);
30018
+ var args = { cancel: false, worksheets: workSheet };
30019
+ this.parent.trigger(excelExport, args, function (args) {
30020
+ if (args.cancel) {
30021
+ return;
30022
+ }
30023
+ var book = new Workbook({ worksheets: args.worksheets }, type, _this.parent.locale, undefined, separator);
30024
+ book.save(name + '.' + type);
30025
+ });
29680
30026
  };
29681
30027
  ExcelExport.prototype.getExportColumns = function (exportOptions) {
29682
30028
  var _this = this;
@@ -29715,51 +30061,59 @@ var Print = /** @__PURE__ @class */ (function () {
29715
30061
  }
29716
30062
  };
29717
30063
  Print.prototype.printScheduler = function () {
30064
+ var _this = this;
29718
30065
  var clone = this.parent.element.cloneNode(true);
29719
30066
  clone.id = this.parent.element.id + '_print';
29720
- document.body.appendChild(clone);
29721
- var className = this.parent.currentView === 'MonthAgenda' ? '.e-appointment-wrap' : '.e-content-wrap';
29722
- var scrollableEle = this.parent.element.querySelector(className);
29723
- var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));
29724
- var reference = '';
29725
- for (var _i = 0, links_1 = links; _i < links_1.length; _i++) {
29726
- var link = links_1[_i];
29727
- reference += link.outerHTML;
29728
- }
29729
- var div = createElement('div');
29730
- clone.style.width = this.parent.element.offsetWidth + 'px';
29731
- var elementWidth = Math.round((parseInt(clone.style.width, 10)) / 100) * 100;
29732
- div.appendChild(clone);
29733
- var printWindow = window.open('', 'print', 'height=550,width=' + elementWidth + ',tabbar=no');
29734
- printWindow.document.write('<!DOCTYPE html><html><head>' + reference + '</head><body>' + div.innerHTML +
29735
- '<script>(function() { window.ready = true; })();</script></body></html>');
29736
- printWindow.document.close();
29737
- printWindow.focus();
29738
- setTimeout(function () {
29739
- if (printWindow.ready && scrollableEle) {
29740
- // eslint-disable-next-line no-self-assign
29741
- scrollableEle.scrollLeft = scrollableEle.scrollLeft;
29742
- // eslint-disable-next-line no-self-assign
29743
- scrollableEle.scrollTop = scrollableEle.scrollTop;
29744
- var headerTimeCellsScroll = printWindow.document.querySelector('.e-date-header-wrap');
29745
- if (headerTimeCellsScroll) {
29746
- headerTimeCellsScroll.scrollLeft = scrollableEle.scrollLeft;
29747
- }
29748
- var timeCellsScroll = printWindow.document.querySelector('.e-time-cells-wrap');
29749
- if (timeCellsScroll) {
29750
- timeCellsScroll.scrollTop = scrollableEle.scrollTop;
29751
- }
29752
- var contentCellScroll = printWindow.document.querySelector(className);
29753
- if (contentCellScroll) {
29754
- contentCellScroll.scrollLeft = scrollableEle.scrollLeft;
29755
- contentCellScroll.scrollTop = scrollableEle.scrollTop;
29756
- }
29757
- printWindow.print();
29758
- printWindow.close();
29759
- }
29760
- }, 500);
30067
+ var args = { cancel: false, printElement: clone };
30068
+ this.parent.trigger(beforePrint, args, function (printElement) {
30069
+ if (printElement.cancel) {
30070
+ return;
30071
+ }
30072
+ document.body.appendChild(clone);
30073
+ var className = _this.parent.currentView === 'MonthAgenda' ? '.e-appointment-wrap' : '.e-content-wrap';
30074
+ var scrollableEle = _this.parent.element.querySelector(className);
30075
+ var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));
30076
+ var reference = '';
30077
+ for (var _i = 0, links_1 = links; _i < links_1.length; _i++) {
30078
+ var link = links_1[_i];
30079
+ reference += link.outerHTML;
30080
+ }
30081
+ var div = createElement('div');
30082
+ clone.style.width = _this.parent.element.offsetWidth + 'px';
30083
+ var elementWidth = Math.round((parseInt(clone.style.width, 10)) / 100) * 100;
30084
+ div.appendChild(clone);
30085
+ var printWindow = window.open('', 'print', 'height=550,width=' + elementWidth + ',tabbar=no');
30086
+ printWindow.document.write('<!DOCTYPE html><html><head>' + reference + '</head><body>' + div.innerHTML +
30087
+ '<script>(function() { window.ready = true; })();</script></body></html>');
30088
+ printWindow.document.close();
30089
+ printWindow.focus();
30090
+ setTimeout(function () {
30091
+ if (printWindow.ready && scrollableEle) {
30092
+ // eslint-disable-next-line no-self-assign
30093
+ scrollableEle.scrollLeft = scrollableEle.scrollLeft;
30094
+ // eslint-disable-next-line no-self-assign
30095
+ scrollableEle.scrollTop = scrollableEle.scrollTop;
30096
+ var headerTimeCellsScroll = printWindow.document.querySelector('.e-date-header-wrap');
30097
+ if (headerTimeCellsScroll) {
30098
+ headerTimeCellsScroll.scrollLeft = scrollableEle.scrollLeft;
30099
+ }
30100
+ var timeCellsScroll = printWindow.document.querySelector('.e-time-cells-wrap');
30101
+ if (timeCellsScroll) {
30102
+ timeCellsScroll.scrollTop = scrollableEle.scrollTop;
30103
+ }
30104
+ var contentCellScroll = printWindow.document.querySelector(className);
30105
+ if (contentCellScroll) {
30106
+ contentCellScroll.scrollLeft = scrollableEle.scrollLeft;
30107
+ contentCellScroll.scrollTop = scrollableEle.scrollTop;
30108
+ }
30109
+ printWindow.print();
30110
+ printWindow.close();
30111
+ }
30112
+ }, 500);
30113
+ });
29761
30114
  };
29762
30115
  Print.prototype.printSchedulerWithModel = function (printOptions) {
30116
+ var _this = this;
29763
30117
  var element = createElement('div', { id: this.parent.element.id + '_print', className: 'e-print-schedule' });
29764
30118
  document.body.appendChild(element);
29765
30119
  Schedule.Inject(Day, Week, WorkWeek, Month, Agenda, MonthAgenda, TimelineViews, TimelineMonth, Year, TimelineYear);
@@ -29768,10 +30122,17 @@ var Print = /** @__PURE__ @class */ (function () {
29768
30122
  this.printInstance.registeredTemplate = this.parent.registeredTemplate;
29769
30123
  this.printInstance.root = this.parent.root ? this.parent.root : this.parent;
29770
30124
  this.printInstance.appendTo(element);
29771
- this.printInstance.on(print, this.contentReady, this);
29772
- this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');
29773
- this.printWindow.moveTo(0, 0);
29774
- this.printWindow.resizeTo(screen.availWidth, screen.availHeight);
30125
+ var args = { cancel: false, printElement: element };
30126
+ this.parent.trigger(beforePrint, args, function (printElement) {
30127
+ if (printElement.cancel) {
30128
+ _this.printCleanup();
30129
+ return;
30130
+ }
30131
+ _this.printInstance.on(print, _this.contentReady, _this);
30132
+ _this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');
30133
+ _this.printWindow.moveTo(0, 0);
30134
+ _this.printWindow.resizeTo(screen.availWidth, screen.availHeight);
30135
+ });
29775
30136
  };
29776
30137
  Print.prototype.getPrintScheduleModel = function (printOptions) {
29777
30138
  var printModel = {};
@@ -29855,16 +30216,39 @@ var Print = /** @__PURE__ @class */ (function () {
29855
30216
  Print.prototype.contentReady = function () {
29856
30217
  var _this = this;
29857
30218
  this.printWindow = print$1(this.printInstance.element, this.printWindow);
30219
+ this.closePrintWindow(this.printWindow, true);
29858
30220
  this.printWindow.onbeforeunload = function () {
29859
- if (_this.printInstance) {
29860
- _this.printInstance.off(print, _this.contentReady);
29861
- _this.printInstance.element.remove();
29862
- _this.printInstance.destroy();
29863
- _this.printInstance = null;
29864
- }
29865
- _this.printWindow = null;
30221
+ _this.printCleanup();
29866
30222
  };
29867
30223
  };
30224
+ Print.prototype.closePrintWindow = function (printWindow, cleanupRequired) {
30225
+ var _this = this;
30226
+ if (Browser.isIos) {
30227
+ var printInterval_1 = setInterval(function () {
30228
+ if (printWindow.opener) {
30229
+ printWindow.close();
30230
+ }
30231
+ else if (isNullOrUndefined(printWindow.opener)) {
30232
+ if (cleanupRequired) {
30233
+ _this.printCleanup();
30234
+ }
30235
+ clearInterval(printInterval_1);
30236
+ }
30237
+ }, 500);
30238
+ }
30239
+ };
30240
+ Print.prototype.printCleanup = function () {
30241
+ if (this.printInstance) {
30242
+ this.printInstance.off(print, this.contentReady);
30243
+ this.printInstance.element.remove();
30244
+ this.printInstance.destroy();
30245
+ this.printInstance = null;
30246
+ }
30247
+ if (this.printWindow) {
30248
+ this.printWindow.onbeforeunload = null;
30249
+ this.printWindow = null;
30250
+ }
30251
+ };
29868
30252
  Print.prototype.getModuleName = function () {
29869
30253
  return 'print';
29870
30254
  };
@@ -29874,5 +30258,5 @@ var Print = /** @__PURE__ @class */ (function () {
29874
30258
  return Print;
29875
30259
  }());
29876
30260
 
29877
- export { Agenda, DEFAULT_WEEKS, Day, DragAndDrop, ExcelExport, Gregorian, HeaderRenderer, ICalendarExport, ICalendarImport, Islamic, MS_PER_DAY, MS_PER_MINUTE, Month, MonthAgenda, Print, RecurrenceEditor, Resize, Schedule, TimelineMonth, TimelineViews, TimelineYear, Timezone, ViewBase, WEEK_LENGTH, Week, WorkWeek, Year, actionBegin, actionComplete, actionFailure, addDays, addMonths, addYears, agendaCells, beforePaste, capitalizeFirstWord, cellClick, cellDoubleClick, cellMouseDown, cellSelect, contentReady, dataBinding, dataBound, dataReady, dateHeader, documentClick, documentPaste, drag, dragStart, dragStop, eventClick, eventDoubleClick, eventRendered, eventsLoaded, extractObjectFromRule, findIndexInData, firstDateOfMonth, generate, generateSummary, getCalendarUtil, getDateCount, getDateFromRecurrenceDateString, getDateFromString, getDateInMs, getDaysCount, getElementHeight, getElementHeightFromClass, getElementTop, getElementWidth, getElementWidthFromClass, getMaxDays, getOuterHeight, getRecurrenceStringFromDate, getScrollBarWidth, getStartEndHours, getTranslateX, getTranslateY, getUniversalTime, getWeekFirstDate, getWeekLastDate, getWeekMiddleDate, getWeekNumber, hover, initialEnd, initialLoad, inlineClick, isDaylightSavingTime, isIPadDevice, isMobile, lastDateOfMonth, moreEventsClick, navigating, noEvents, popupClose, popupOpen, print, removeChildren, renderCell, resetScrollbarWidth, resetTime, resizeStart, resizeStop, resizing, resourceHeader, scroll, scrollUiUpdate, select, setTime, timezoneData, uiUpdate, virtualScroll, virtualScrollStart, virtualScrollStop };
30261
+ export { Agenda, DEFAULT_WEEKS, Day, DragAndDrop, ExcelExport, Gregorian, HeaderRenderer, ICalendarExport, ICalendarImport, Islamic, MS_PER_DAY, MS_PER_MINUTE, Month, MonthAgenda, Print, RecurrenceEditor, Resize, Schedule, TimelineMonth, TimelineViews, TimelineYear, Timezone, ViewBase, WEEK_LENGTH, Week, WorkWeek, Year, actionBegin, actionComplete, actionFailure, addDays, addMonths, addYears, agendaCells, beforePaste, beforePrint, capitalizeFirstWord, cellClick, cellDoubleClick, cellMouseDown, cellSelect, contentReady, dataBinding, dataBound, dataReady, dateHeader, documentClick, documentPaste, drag, dragStart, dragStop, eventClick, eventDoubleClick, eventRendered, eventsLoaded, excelExport, extractObjectFromRule, findIndexInData, firstDateOfMonth, generate, generateSummary, getCalendarUtil, getDateCount, getDateFromRecurrenceDateString, getDateFromString, getDateInMs, getDaysCount, getElementHeight, getElementHeightFromClass, getElementTop, getElementWidth, getElementWidthFromClass, getMaxDays, getOuterHeight, getRecurrenceStringFromDate, getScrollBarWidth, getStartEndHours, getTranslateX, getTranslateY, getUniversalTime, getWeekFirstDate, getWeekLastDate, getWeekMiddleDate, getWeekNumber, hover, initialEnd, initialLoad, inlineClick, isDaylightSavingTime, isIPadDevice, isMobile, lastDateOfMonth, moreEventsClick, navigating, noEvents, popupClose, popupOpen, print, removeChildren, renderCell, resetScrollbarWidth, resetTime, resizeStart, resizeStop, resizing, resourceHeader, scroll, scrollUiUpdate, select, setTime, timezoneData, tooltipOpen, uiUpdate, virtualScroll, virtualScrollStart, virtualScrollStop };
29878
30262
  //# sourceMappingURL=ej2-schedule.es5.js.map