@syncfusion/ej2-schedule 19.3.53 → 19.4.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +63 -0
  2. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +39 -0
  3. package/CHANGELOG.md +51 -9
  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 +492 -148
  7. package/dist/es6/ej2-schedule.es2015.js.map +1 -1
  8. package/dist/es6/ej2-schedule.es5.js +495 -154
  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 +15 -15
  14. package/src/recurrence-editor/date-generator.js +3 -3
  15. package/src/recurrence-editor/recurrence-editor.js +2 -2
  16. package/src/schedule/actions/drag.js +12 -4
  17. package/src/schedule/actions/keyboard.d.ts +7 -0
  18. package/src/schedule/actions/keyboard.js +197 -28
  19. package/src/schedule/actions/resize.js +44 -37
  20. package/src/schedule/base/css-constant.d.ts +6 -0
  21. package/src/schedule/base/css-constant.js +6 -0
  22. package/src/schedule/base/interface.d.ts +12 -0
  23. package/src/schedule/base/resource.js +1 -0
  24. package/src/schedule/base/schedule-model.d.ts +89 -20
  25. package/src/schedule/base/schedule.d.ts +88 -19
  26. package/src/schedule/base/schedule.js +15 -4
  27. package/src/schedule/base/util.d.ts +1 -0
  28. package/src/schedule/base/util.js +1 -0
  29. package/src/schedule/event-renderer/event-base.d.ts +2 -1
  30. package/src/schedule/event-renderer/event-base.js +19 -4
  31. package/src/schedule/event-renderer/inline-edit.js +8 -5
  32. package/src/schedule/event-renderer/month.js +3 -2
  33. package/src/schedule/event-renderer/timeline-view.js +4 -0
  34. package/src/schedule/event-renderer/vertical-view.js +9 -6
  35. package/src/schedule/event-renderer/year.js +1 -1
  36. package/src/schedule/exports/excel-export.d.ts +2 -1
  37. package/src/schedule/exports/excel-export.js +21 -18
  38. package/src/schedule/models/event-settings-model.d.ts +17 -9
  39. package/src/schedule/models/event-settings.d.ts +15 -8
  40. package/src/schedule/models/event-settings.js +6 -3
  41. package/src/schedule/models/views-model.d.ts +19 -0
  42. package/src/schedule/models/views.d.ts +17 -0
  43. package/src/schedule/models/views.js +6 -0
  44. package/src/schedule/popups/quick-popups.js +3 -0
  45. package/src/schedule/renderer/agenda.js +2 -1
  46. package/src/schedule/renderer/header-renderer.d.ts +1 -0
  47. package/src/schedule/renderer/header-renderer.js +23 -8
  48. package/src/schedule/renderer/month.d.ts +4 -0
  49. package/src/schedule/renderer/month.js +69 -19
  50. package/src/schedule/renderer/renderer.js +6 -1
  51. package/src/schedule/renderer/timeline-year.js +4 -1
  52. package/src/schedule/renderer/view-base.js +11 -0
  53. package/src/schedule/renderer/year.d.ts +2 -2
  54. package/src/schedule/renderer/year.js +24 -6
  55. package/styles/bootstrap-dark.css +108 -27
  56. package/styles/bootstrap.css +105 -27
  57. package/styles/bootstrap4.css +117 -62
  58. package/styles/bootstrap5-dark.css +118 -67
  59. package/styles/bootstrap5.css +118 -67
  60. package/styles/fabric-dark.css +108 -26
  61. package/styles/fabric.css +109 -26
  62. package/styles/highcontrast-light.css +104 -26
  63. package/styles/highcontrast.css +109 -28
  64. package/styles/material-dark.css +110 -32
  65. package/styles/material.css +103 -25
  66. package/styles/recurrence-editor/_bootstrap-dark-definition.scss +7 -0
  67. package/styles/recurrence-editor/_bootstrap-definition.scss +7 -0
  68. package/styles/recurrence-editor/_bootstrap4-definition.scss +7 -0
  69. package/styles/recurrence-editor/_bootstrap5-definition.scss +7 -0
  70. package/styles/recurrence-editor/_fabric-dark-definition.scss +8 -0
  71. package/styles/recurrence-editor/_fabric-definition.scss +7 -0
  72. package/styles/recurrence-editor/_fluent-definition.scss +15 -0
  73. package/styles/recurrence-editor/_highcontrast-definition.scss +7 -0
  74. package/styles/recurrence-editor/_highcontrast-light-definition.scss +7 -0
  75. package/styles/recurrence-editor/_layout.scss +20 -4
  76. package/styles/recurrence-editor/_material-dark-definition.scss +7 -0
  77. package/styles/recurrence-editor/_material-definition.scss +7 -0
  78. package/styles/recurrence-editor/_tailwind-definition.scss +15 -8
  79. package/styles/recurrence-editor/bootstrap-dark.css +20 -4
  80. package/styles/recurrence-editor/bootstrap.css +20 -4
  81. package/styles/recurrence-editor/bootstrap4.css +20 -4
  82. package/styles/recurrence-editor/bootstrap5-dark.css +20 -4
  83. package/styles/recurrence-editor/bootstrap5.css +20 -4
  84. package/styles/recurrence-editor/fabric-dark.css +20 -4
  85. package/styles/recurrence-editor/fabric.css +20 -4
  86. package/styles/recurrence-editor/highcontrast-light.css +20 -4
  87. package/styles/recurrence-editor/highcontrast.css +20 -4
  88. package/styles/recurrence-editor/material-dark.css +20 -4
  89. package/styles/recurrence-editor/material.css +20 -4
  90. package/styles/recurrence-editor/tailwind-dark.css +20 -4
  91. package/styles/recurrence-editor/tailwind.css +20 -4
  92. package/styles/schedule/_bootstrap-dark-definition.scss +22 -1
  93. package/styles/schedule/_bootstrap-definition.scss +22 -1
  94. package/styles/schedule/_bootstrap4-definition.scss +23 -1
  95. package/styles/schedule/_bootstrap5-definition.scss +145 -119
  96. package/styles/schedule/_fabric-dark-definition.scss +22 -1
  97. package/styles/schedule/_fabric-definition.scss +22 -1
  98. package/styles/schedule/_fluent-definition.scss +218 -0
  99. package/styles/schedule/_highcontrast-definition.scss +22 -1
  100. package/styles/schedule/_highcontrast-light-definition.scss +22 -1
  101. package/styles/schedule/_layout.scss +95 -158
  102. package/styles/schedule/_material-dark-definition.scss +22 -1
  103. package/styles/schedule/_material-definition.scss +21 -0
  104. package/styles/schedule/_tailwind-definition.scss +216 -195
  105. package/styles/schedule/_theme.scss +1 -1
  106. package/styles/schedule/bootstrap-dark.css +88 -23
  107. package/styles/schedule/bootstrap.css +85 -23
  108. package/styles/schedule/bootstrap4.css +97 -58
  109. package/styles/schedule/bootstrap5-dark.css +98 -63
  110. package/styles/schedule/bootstrap5.css +98 -63
  111. package/styles/schedule/fabric-dark.css +88 -22
  112. package/styles/schedule/fabric.css +89 -22
  113. package/styles/schedule/highcontrast-light.css +84 -22
  114. package/styles/schedule/highcontrast.css +89 -24
  115. package/styles/schedule/icons/_fluent.scss +231 -0
  116. package/styles/schedule/icons/_tailwind.scss +231 -231
  117. package/styles/schedule/material-dark.css +90 -28
  118. package/styles/schedule/material.css +83 -21
  119. package/styles/schedule/tailwind-dark.css +94 -52
  120. package/styles/schedule/tailwind.css +94 -52
  121. package/styles/tailwind-dark.css +114 -56
  122. package/styles/tailwind.css +114 -56
@@ -91,6 +91,7 @@ var cellMouseDown = 'cell-mouse-down';
91
91
  * Schedule common utilities
92
92
  */
93
93
  var WEEK_LENGTH = 7;
94
+ var DEFAULT_WEEKS = 6;
94
95
  var MS_PER_DAY = 86400000;
95
96
  var MS_PER_MINUTE = 60000;
96
97
  /**
@@ -514,6 +515,12 @@ var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';
514
515
  /** @private */
515
516
  var HEADER_CELLS_CLASS = 'e-header-cells';
516
517
  /** @private */
518
+ var HEADER_WEEK_CELLS_CLASS = 'e-header-week-cell';
519
+ /** @private */
520
+ var HEADER_MONTH_CELLS_CLASS = 'e-header-month-cell';
521
+ /** @private */
522
+ var HEADER_YEAR_CELLS_CLASS = 'e-header-year-cell';
523
+ /** @private */
517
524
  var WORKDAY_CLASS = 'e-work-days';
518
525
  /** @private */
519
526
  var OTHERMONTH_CLASS = 'e-other-month';
@@ -1247,8 +1254,10 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1247
1254
  enableRtl: this.parent.enableRtl
1248
1255
  });
1249
1256
  var calendarView = this.getCalendarView();
1257
+ var isDisplayDate = this.parent.currentView === 'Month' &&
1258
+ !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && !this.hasSelectedDate();
1250
1259
  this.headerCalendar = new Calendar({
1251
- value: this.parent.selectedDate,
1260
+ value: isDisplayDate ? this.parent.activeViewOptions.displayDate : this.parent.selectedDate,
1252
1261
  min: this.parent.minDate,
1253
1262
  max: this.parent.maxDate,
1254
1263
  firstDayOfWeek: this.parent.activeViewOptions.firstDayOfWeek,
@@ -1287,6 +1296,7 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1287
1296
  var strClass = args.item.cssClass.replace('e-views ', '');
1288
1297
  var data;
1289
1298
  var isSameTime;
1299
+ var currentTime;
1290
1300
  switch (strClass) {
1291
1301
  case 'e-date-range':
1292
1302
  if (!this.headerPopup) {
@@ -1336,8 +1346,13 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1336
1346
  this.parent.changeView('TimelineYear', args.originalEvent, undefined, this.calculateViewIndex(args));
1337
1347
  break;
1338
1348
  case 'e-today':
1339
- if (this.parent.currentView === 'Agenda' || !this.parent.isSelectedDate(resetTime(this.parent.getCurrentTime()))) {
1340
- this.parent.changeDate(resetTime(this.parent.getCurrentTime()), args.originalEvent);
1349
+ currentTime = resetTime(this.parent.getCurrentTime());
1350
+ if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda' || !this.parent.isSelectedDate(currentTime) ||
1351
+ this.parent.currentView === 'Month' && this.parent.activeViewOptions.displayDate && !this.hasSelectedDate() &&
1352
+ resetTime(this.parent.activeViewOptions.displayDate) !== currentTime || this.parent.currentView === 'Month' &&
1353
+ this.parent.activeViewOptions.numberOfWeeks > 0 && !this.hasSelectedDate()
1354
+ && resetTime(firstDateOfMonth(this.parent.selectedDate)) !== currentTime) {
1355
+ this.parent.changeDate(currentTime, args.originalEvent);
1341
1356
  }
1342
1357
  break;
1343
1358
  case 'e-prev':
@@ -1356,8 +1371,8 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1356
1371
  var slotCount = this.parent.activeViewOptions.timeScale.slotCount;
1357
1372
  var msInterval = (interval * MS_PER_MINUTE) / slotCount;
1358
1373
  var startTime = new Date(this.parent.selectedDate.getTime());
1359
- var currentTime = this.parent.getCurrentTime();
1360
- startTime.setHours(currentTime.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);
1374
+ var currentTime_1 = this.parent.getCurrentTime();
1375
+ startTime.setHours(currentTime_1.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);
1361
1376
  var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));
1362
1377
  data = { startTime: startTime, endTime: endTime, isAllDay: false };
1363
1378
  }
@@ -1372,6 +1387,11 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1372
1387
  toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });
1373
1388
  }
1374
1389
  };
1390
+ HeaderRenderer.prototype.hasSelectedDate = function () {
1391
+ var selectedTime = resetTime(this.parent.selectedDate).getTime();
1392
+ return selectedTime >= this.parent.activeView.getStartDate().getTime() &&
1393
+ selectedTime <= this.parent.activeView.getEndDate().getTime();
1394
+ };
1375
1395
  HeaderRenderer.prototype.getHeaderElement = function () {
1376
1396
  return this.toolbarObj.element;
1377
1397
  };
@@ -1416,9 +1436,11 @@ var HeaderRenderer = /** @__PURE__ @class */ (function () {
1416
1436
  lastDate = addDays(firstDate, 7 * this.parent.activeViewOptions.interval);
1417
1437
  }
1418
1438
  if (this.parent.currentView === 'Month') {
1419
- firstDate = firstDateOfMonth(this.parent.selectedDate);
1420
- var lastMonthFirstDate = addMonths(firstDate, this.parent.activeViewOptions.interval - 1);
1421
- lastDate = lastDateOfMonth(lastMonthFirstDate);
1439
+ var isCustomMonth = !isNullOrUndefined(this.parent.activeViewOptions.displayDate) ||
1440
+ this.parent.activeViewOptions.numberOfWeeks > 0;
1441
+ firstDate = isCustomMonth ? this.parent.activeView.getStartDate() : firstDateOfMonth(this.parent.selectedDate);
1442
+ lastDate = isCustomMonth ? this.parent.activeView.getEndDate() :
1443
+ lastDateOfMonth(addMonths(firstDate, this.parent.activeViewOptions.interval - 1));
1422
1444
  }
1423
1445
  if (!isNullOrUndefined(prevNavEle)) {
1424
1446
  this.toolbarObj.enableItems(prevNavEle, firstDate > this.parent.minDate);
@@ -1954,6 +1976,9 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
1954
1976
  }
1955
1977
  var queryStr = '.' + WORK_CELLS_CLASS + ',.' + ALLDAY_CELLS_CLASS + ',.' + HEADER_CELLS_CLASS;
1956
1978
  var target = closest(e.target, queryStr);
1979
+ if (this.parent.currentView === 'TimelineYear' && target.classList.contains(OTHERMONTH_CLASS)) {
1980
+ return;
1981
+ }
1957
1982
  this.parent.activeCellsData = this.getSelectedElements(target);
1958
1983
  var cellData = {};
1959
1984
  if (this.parent.eventWindow) {
@@ -1977,6 +2002,9 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
1977
2002
  || this.isPreventAction(e)) {
1978
2003
  return;
1979
2004
  }
2005
+ if (this.parent.currentView === 'TimelineYear' && e.target.classList.contains(OTHERMONTH_CLASS)) {
2006
+ return;
2007
+ }
1980
2008
  var target = e.target;
1981
2009
  if (closest(target, '.' + POPUP_WRAPPER_CLASS)) {
1982
2010
  if (target.classList.contains(QUICK_POPUP_EVENT_DETAILS_CLASS) ||
@@ -2011,11 +2039,16 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2011
2039
  this.parent.notify(inlineClick, inlineArgs);
2012
2040
  }
2013
2041
  else {
2014
- this.parent.notify(cellClick, args);
2042
+ if (this.parent.currentView === 'Year') {
2043
+ target.click();
2044
+ }
2045
+ else {
2046
+ this.parent.notify(cellClick, args);
2047
+ }
2015
2048
  }
2016
2049
  return;
2017
2050
  }
2018
- if (target.classList.contains(INLINE_SUBJECT_CLASS)) {
2051
+ if (target.classList.contains(INLINE_SUBJECT_CLASS) && this.parent.inlineModule) {
2019
2052
  this.parent.inlineModule.inlineCrudActions(target);
2020
2053
  return;
2021
2054
  }
@@ -2047,7 +2080,9 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2047
2080
  };
2048
2081
  KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {
2049
2082
  var tableEle = this.parent.getContentTable();
2050
- var cells = [].slice.call(tableEle.querySelectorAll('td'));
2083
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2084
+ var query = isTimelineYear && !isInverseTable ? '.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')' : 'td';
2085
+ var cells = [].slice.call(tableEle.querySelectorAll(query));
2051
2086
  var maxRow = tableEle.rows.length;
2052
2087
  var maxColumn = tableEle.rows[0].cells.length;
2053
2088
  if (start && start.classList.contains(ALLDAY_CELLS_CLASS)) {
@@ -2062,7 +2097,11 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2062
2097
  if (isInverseTable) {
2063
2098
  for (var i = 0; i < maxColumn; i++) {
2064
2099
  for (var j = 0; j < maxRow; j++) {
2065
- inverseCells.push(cells[maxColumn * j + i]);
2100
+ var cell = cells[maxColumn * j + i];
2101
+ if (isTimelineYear && cell.classList.contains(OTHERMONTH_CLASS)) {
2102
+ continue;
2103
+ }
2104
+ inverseCells.push(cell);
2066
2105
  }
2067
2106
  }
2068
2107
  startIndex = inverseCells.indexOf(start);
@@ -2084,11 +2123,17 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2084
2123
  return;
2085
2124
  }
2086
2125
  this.parent.eventBase.removeSelectedAppointmentClass();
2087
- if (this.parent.activeView.isTimelineView()) {
2126
+ if (this.parent.activeView.isTimelineView() && this.parent.currentView !== 'TimelineYear') {
2088
2127
  var cell = this.parent.element.querySelector('.' + CONTENT_TABLE_CLASS +
2089
2128
  ' tr:not(.' + HIDDEN_CLASS + ') .' + WORK_CELLS_CLASS + ':not(.' + RESOURCE_GROUP_CELLS_CLASS + ')');
2090
2129
  this.selectCells(false, cell);
2091
2130
  }
2131
+ else if (this.parent.currentView.indexOf('Year') > -1) {
2132
+ var query = '.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')' + ':not(.' + RESOURCE_GROUP_CELLS_CLASS + ')';
2133
+ var isVerticalYear = this.parent.currentView === 'TimelineYear' && this.parent.activeViewOptions.orientation === 'Vertical';
2134
+ query += isVerticalYear ? '[data-date="' + this.parent.activeView.startDate().getTime() + '"]' : '';
2135
+ this.selectCells(false, this.parent.element.querySelector(query));
2136
+ }
2092
2137
  else {
2093
2138
  this.selectCells(false, this.parent.getWorkCellElements()[0]);
2094
2139
  }
@@ -2110,13 +2155,21 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2110
2155
  var target = (targetCell instanceof Array) ? targetCell.slice(-1)[0] : targetCell;
2111
2156
  if (isMultiple) {
2112
2157
  var initialId_1;
2113
- var views_1 = ['Day', 'Week', 'WorkWeek', 'Month', 'TimelineDay', 'TimelineWeek', 'TimelineWorkWeek', 'TimelineMonth'];
2158
+ var views_1 = ['Day', 'Week', 'WorkWeek', 'TimelineDay', 'TimelineWeek', 'TimelineWorkWeek', 'TimelineMonth', 'TimelineYear'];
2114
2159
  var args = { element: targetCell, requestType: 'mousemove', allowMultipleRow: true };
2115
2160
  this.parent.inlineModule.removeInlineAppointmentElement();
2116
2161
  this.parent.trigger(select, args, function (selectArgs) {
2117
2162
  var allowMultipleRow = (!selectArgs.allowMultipleRow) || (!_this.parent.allowMultiRowSelection);
2118
- if (allowMultipleRow && (views_1.indexOf(_this.parent.currentView) > -1)) {
2119
- target = target.parentElement.children[_this.initialTarget.cellIndex];
2163
+ if (allowMultipleRow) {
2164
+ var isTimelineYear = _this.parent.currentView === 'TimelineYear';
2165
+ if (isTimelineYear && _this.parent.activeViewOptions.orientation === 'Horizontal' || _this.parent.currentView === 'Month') {
2166
+ var isGroupYear = isTimelineYear && _this.parent.activeViewOptions.group.resources.length > 0;
2167
+ target = isGroupYear ? _this.initialTarget :
2168
+ _this.initialTarget.parentElement.children[target.cellIndex];
2169
+ }
2170
+ else if (views_1.indexOf(_this.parent.currentView) > -1) {
2171
+ target = target.parentElement.children[_this.initialTarget.cellIndex];
2172
+ }
2120
2173
  }
2121
2174
  var selectedCells = _this.getCells(_this.isInverseTableSelect(), _this.initialTarget, target);
2122
2175
  if (_this.parent.activeViewOptions.group.resources.length > 0) {
@@ -2252,8 +2305,20 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2252
2305
  }
2253
2306
  }
2254
2307
  };
2308
+ KeyboardInteraction.prototype.cancelUpDownAction = function (isTimelineYear) {
2309
+ var isVerticalYear = isTimelineYear && this.parent.activeViewOptions.orientation === 'Vertical';
2310
+ var isGroup = this.parent.activeViewOptions.group.resources.length > 0;
2311
+ if (isVerticalYear && isGroup || isTimelineYear && this.initialTarget.classList.contains(OTHERMONTH_CLASS)) {
2312
+ return true;
2313
+ }
2314
+ if (this.parent.activeView.isTimelineView() && !isTimelineYear || this.parent.currentView === 'MonthAgenda') {
2315
+ return true;
2316
+ }
2317
+ return false;
2318
+ };
2255
2319
  KeyboardInteraction.prototype.processUp = function (e, isMultiple) {
2256
- if ((isMultiple && (this.parent.activeView.isTimelineView() || this.parent.currentView === 'MonthAgenda'))) {
2320
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2321
+ if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {
2257
2322
  return;
2258
2323
  }
2259
2324
  var target = (e.target);
@@ -2276,8 +2341,22 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2276
2341
  if (target.classList.contains(WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + POPUP_OPEN)) {
2277
2342
  var tableRows = this.parent.getTableRows();
2278
2343
  var curRowIndex = tableRows.indexOf(target.parentElement);
2279
- if (curRowIndex > 0 && curRowIndex < tableRows.length) {
2280
- this.selectCells(isMultiple, (tableRows[curRowIndex - 1]).cells[target.cellIndex]);
2344
+ var targetCell = void 0;
2345
+ if (isTimelineYear && isMultiple && this.parent.activeViewOptions.group.resources.length === 0) {
2346
+ targetCell = this.isInverseTableSelect() ? this.getVerticalUpDownCell(tableRows, target, curRowIndex, true) :
2347
+ this.getHorizontalUpDownCell(tableRows, target, curRowIndex, true);
2348
+ }
2349
+ if ((curRowIndex > 0 || targetCell) && curRowIndex < tableRows.length) {
2350
+ targetCell = targetCell ? targetCell : (tableRows[curRowIndex - 1]).cells[target.cellIndex];
2351
+ if (this.parent.currentView === 'Year' && targetCell.classList.contains(OTHERMONTH_CLASS)) {
2352
+ if (this.parent.activeView.getStartDate().getTime() < +targetCell.getAttribute('data-date')) {
2353
+ targetCell = this.getYearUpDownCell(tableRows, curRowIndex - 1, target.cellIndex, true);
2354
+ }
2355
+ else {
2356
+ return;
2357
+ }
2358
+ }
2359
+ this.selectCells(isMultiple, targetCell);
2281
2360
  }
2282
2361
  }
2283
2362
  else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {
@@ -2285,7 +2364,8 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2285
2364
  }
2286
2365
  };
2287
2366
  KeyboardInteraction.prototype.processDown = function (e, isMultiple) {
2288
- if (isMultiple && (this.parent.activeView.isTimelineView() || this.parent.currentView === 'MonthAgenda')) {
2367
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2368
+ if (isMultiple && this.cancelUpDownAction(isTimelineYear)) {
2289
2369
  return;
2290
2370
  }
2291
2371
  var target = (e.target);
@@ -2308,16 +2388,62 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2308
2388
  }
2309
2389
  if (target.classList.contains(WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + POPUP_OPEN)) {
2310
2390
  var curRowIndex = tableRows.indexOf(target.parentElement);
2311
- if (curRowIndex >= 0 && curRowIndex < tableRows.length - 1) {
2312
- this.selectCells(isMultiple, (tableRows[curRowIndex + 1]).cells[target.cellIndex]);
2391
+ var targetCell = void 0;
2392
+ if (isTimelineYear && isMultiple && this.parent.activeViewOptions.group.resources.length === 0) {
2393
+ targetCell = this.isInverseTableSelect() ? this.getVerticalUpDownCell(tableRows, target, curRowIndex, false)
2394
+ : this.getHorizontalUpDownCell(tableRows, target, curRowIndex, false);
2395
+ }
2396
+ if (curRowIndex >= 0 && ((curRowIndex < tableRows.length - 1) || targetCell)) {
2397
+ targetCell = targetCell ? targetCell : (tableRows[curRowIndex + 1]).cells[target.cellIndex];
2398
+ if (this.parent.currentView === 'Year' && targetCell.classList.contains(OTHERMONTH_CLASS)) {
2399
+ if (this.parent.activeView.getEndDate().getTime() > +targetCell.getAttribute('data-date')) {
2400
+ targetCell = this.getYearUpDownCell(tableRows, curRowIndex + 1, target.cellIndex, false);
2401
+ }
2402
+ else {
2403
+ return;
2404
+ }
2405
+ }
2406
+ this.selectCells(isMultiple, targetCell);
2313
2407
  }
2314
2408
  }
2315
2409
  else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {
2316
2410
  this.selectAppointment(false, target);
2317
2411
  }
2318
2412
  };
2413
+ KeyboardInteraction.prototype.getYearUpDownCell = function (tableRows, rowIndex, cellIndex, isUp) {
2414
+ while (tableRows[rowIndex] && tableRows[rowIndex].cells[cellIndex].classList.contains(OTHERMONTH_CLASS)) {
2415
+ rowIndex = rowIndex + (isUp ? -1 : 1);
2416
+ }
2417
+ return tableRows[rowIndex].cells[cellIndex];
2418
+ };
2419
+ // eslint-disable-next-line max-len
2420
+ KeyboardInteraction.prototype.getHorizontalUpDownCell = function (tableRows, target, curRowIndex, isUp) {
2421
+ var row = tableRows[curRowIndex + (isUp ? -1 : 1)];
2422
+ var cell = row ? row.cells[target.cellIndex] : target;
2423
+ if (cell.classList.contains(OTHERMONTH_CLASS)) {
2424
+ var workCell = row.querySelector('.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')');
2425
+ var date = new Date(+workCell.getAttribute('data-date'));
2426
+ var query = '[data-date="' + new Date(date.getFullYear(), date.getMonth() + 1, 0).getTime() + '"]';
2427
+ cell = cell.cellIndex < workCell.cellIndex ? workCell : row.querySelector(query);
2428
+ }
2429
+ return cell;
2430
+ };
2431
+ // eslint-disable-next-line max-len
2432
+ KeyboardInteraction.prototype.getVerticalUpDownCell = function (tableRows, target, curRowIndex, isUp) {
2433
+ var hasRow = isUp && curRowIndex > 0 || !isUp && curRowIndex < tableRows.length - 1;
2434
+ var targetCell = hasRow ? tableRows[curRowIndex + (isUp ? -1 : 1)].cells[target.cellIndex] : undefined;
2435
+ if (!targetCell || targetCell.classList.contains(OTHERMONTH_CLASS)) {
2436
+ var column = tableRows[curRowIndex].cells[target.cellIndex - (isUp ? 1 : -1)];
2437
+ if (column) {
2438
+ var dateAttr = +target.getAttribute('data-date') - (isUp ? MS_PER_DAY : -MS_PER_DAY);
2439
+ return this.parent.getContentTable().querySelector('.' + WORK_CELLS_CLASS + '[data-date="' + dateAttr + '"]');
2440
+ }
2441
+ targetCell = target;
2442
+ }
2443
+ return targetCell;
2444
+ };
2319
2445
  KeyboardInteraction.prototype.processLeftRight = function (target) {
2320
- var tableEle = this.parent.getContentTable();
2446
+ var tableEle = (this.parent.currentView === 'Year' ? target.closest('tbody') : this.parent.getContentTable());
2321
2447
  var curRowIndex = target.parentNode.sectionRowIndex;
2322
2448
  var key = {
2323
2449
  element: tableEle,
@@ -2330,8 +2456,9 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2330
2456
  KeyboardInteraction.prototype.getQuickPopupElement = function () {
2331
2457
  return (this.parent.isAdaptive ? document.body : this.parent.element).querySelector('.' + POPUP_WRAPPER_CLASS);
2332
2458
  };
2333
- KeyboardInteraction.prototype.isCancelLeftRightAction = function (e, isMultiple) {
2334
- if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {
2459
+ KeyboardInteraction.prototype.isCancelLeftRightAction = function (e, isMultiple, isTimelineYear) {
2460
+ var prevent = this.parent.currentView === 'MonthAgenda' || isTimelineYear && this.initialTarget.classList.contains(OTHERMONTH_CLASS);
2461
+ if (this.parent.currentView === 'Agenda' || (isMultiple && prevent)) {
2335
2462
  return true;
2336
2463
  }
2337
2464
  if (this.isPreventAction(e) && isMultiple) {
@@ -2345,7 +2472,8 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2345
2472
  return false;
2346
2473
  };
2347
2474
  KeyboardInteraction.prototype.processRight = function (e, isMultiple) {
2348
- if (this.isCancelLeftRightAction(e, isMultiple)) {
2475
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2476
+ if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {
2349
2477
  return;
2350
2478
  }
2351
2479
  var selectedCells = this.parent.getSelectedElements();
@@ -2366,24 +2494,36 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2366
2494
  if (target.classList.contains(WORK_CELLS_CLASS) &&
2367
2495
  (e.target).classList.contains(WORK_CELLS_CLASS)) {
2368
2496
  var key = this.processLeftRight(target);
2369
- if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {
2497
+ var targetDate = new Date(+target.getAttribute('data-date'));
2498
+ var isMonthEnd = this.parent.currentView === 'Year' && targetDate.getTime() === lastDateOfMonth(targetDate).getTime();
2499
+ if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1 && !isMonthEnd) {
2370
2500
  targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex + 1], 'right');
2501
+ if (isTimelineYear && isMultiple && targetCell.classList.contains(OTHERMONTH_CLASS)) {
2502
+ targetCell = this.getTimelineYearTargetCell(key, target, true);
2503
+ }
2371
2504
  if (!isNullOrUndefined(targetCell)) {
2372
2505
  this.selectCells(isMultiple, targetCell);
2373
2506
  }
2374
2507
  }
2375
- else if (key.columnIndex === key.maxIndex - 1) {
2376
- if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {
2508
+ else if (key.columnIndex === key.maxIndex - 1 || isMonthEnd) {
2509
+ if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1 && !isMonthEnd) {
2377
2510
  targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex + 1].cells[0], 'right');
2511
+ var changeTargetCell = isTimelineYear && isMultiple && targetCell.classList.contains(OTHERMONTH_CLASS);
2512
+ targetCell = changeTargetCell ? this.getHorizontalLeftRightCell(key, target, true) : targetCell;
2378
2513
  if (!isNullOrUndefined(targetCell)) {
2379
2514
  this.selectCells(isMultiple, targetCell);
2380
2515
  }
2381
2516
  }
2382
2517
  else if (!isMultiple) {
2518
+ if (isMonthEnd && targetDate.getTime() !== this.parent.activeView.getEndDate().getTime()) {
2519
+ this.selectCells(isMultiple, this.parent.element.querySelector(':not(.' + OTHERMONTH_CLASS + ')[data-date="' + (targetDate.getTime() + MS_PER_DAY) + '"]'));
2520
+ return;
2521
+ }
2383
2522
  var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;
2384
2523
  this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);
2385
2524
  var tableEle = this.parent.getContentTable();
2386
- this.selectCells(false, tableEle.rows[rowIndex].cells[0]);
2525
+ var cell = isMonthEnd ? tableEle.rows[rowIndex].querySelector('.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')') : tableEle.rows[rowIndex].cells[0];
2526
+ this.selectCells(false, cell);
2387
2527
  }
2388
2528
  }
2389
2529
  }
@@ -2402,7 +2542,8 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2402
2542
  }
2403
2543
  };
2404
2544
  KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {
2405
- if (this.isCancelLeftRightAction(e, isMultiple)) {
2545
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2546
+ if (this.isCancelLeftRightAction(e, isMultiple, isTimelineYear)) {
2406
2547
  return;
2407
2548
  }
2408
2549
  var target = (e.target);
@@ -2423,24 +2564,40 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2423
2564
  if ((e.target).classList.contains(WORK_CELLS_CLASS) &&
2424
2565
  target.classList.contains(WORK_CELLS_CLASS)) {
2425
2566
  var key = this.processLeftRight(target);
2426
- if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {
2567
+ var targetDate = new Date(+target.getAttribute('data-date'));
2568
+ var isMonthStart = this.parent.currentView === 'Year' && targetDate.getTime() === firstDateOfMonth(targetDate).getTime();
2569
+ if (key.columnIndex > 0 && key.columnIndex < key.maxIndex && !isMonthStart) {
2427
2570
  targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex].cells[target.cellIndex - 1], 'left');
2571
+ if (isTimelineYear && isMultiple && targetCell.classList.contains(OTHERMONTH_CLASS)) {
2572
+ targetCell = this.getTimelineYearTargetCell(key, target, false);
2573
+ }
2428
2574
  if (!isNullOrUndefined(targetCell)) {
2429
2575
  this.selectCells(isMultiple, targetCell);
2430
2576
  }
2431
2577
  }
2432
- else if (key.columnIndex === 0) {
2578
+ else if (key.columnIndex === 0 || isMonthStart) {
2433
2579
  if (!this.isInverseTableSelect() && key.rowIndex > 0) {
2434
2580
  targetCell = this.calculateNextPrevDate(target, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1], 'left');
2581
+ var otherMonthCell = isTimelineYear && isMultiple && targetCell.classList.contains(OTHERMONTH_CLASS);
2582
+ targetCell = otherMonthCell ? this.getHorizontalLeftRightCell(key, target, false) : targetCell;
2435
2583
  if (!isNullOrUndefined(targetCell)) {
2436
2584
  this.selectCells(isMultiple, targetCell);
2437
2585
  }
2438
2586
  }
2439
2587
  else if (!isMultiple) {
2588
+ if (isMonthStart && targetDate.getTime() !== this.parent.activeView.getStartDate().getTime()) {
2589
+ this.selectCells(isMultiple, this.parent.element.querySelector('[data-date="' + (targetDate.getTime() - MS_PER_DAY) + '"]'));
2590
+ return;
2591
+ }
2440
2592
  this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);
2441
2593
  var tableEle = this.parent.getContentTable();
2442
2594
  var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;
2443
- this.selectCells(false, tableEle.rows[rowIndex].cells[key.maxIndex - 1]);
2595
+ var cell = tableEle.rows[rowIndex].cells[key.maxIndex - 1];
2596
+ if (isMonthStart) {
2597
+ var tbody = this.parent.element.querySelectorAll('.' + CONTENT_TABLE_CLASS + ' tbody');
2598
+ cell = tbody.item(tbody.length - 1).querySelector(':not(.' + OTHERMONTH_CLASS + ')[data-date="' + this.parent.activeView.getEndDate().getTime() + '"]');
2599
+ }
2600
+ this.selectCells(false, cell);
2444
2601
  }
2445
2602
  }
2446
2603
  }
@@ -2458,6 +2615,29 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2458
2615
  }
2459
2616
  }
2460
2617
  };
2618
+ KeyboardInteraction.prototype.getTimelineYearTargetCell = function (key, target, isRight) {
2619
+ return this.isInverseTableSelect() ? this.getVerticalLeftRightCell(target, isRight) :
2620
+ this.getHorizontalLeftRightCell(key, target, isRight);
2621
+ };
2622
+ KeyboardInteraction.prototype.getHorizontalLeftRightCell = function (key, target, isRight) {
2623
+ var row = key.element.rows[target.parentNode.sectionRowIndex + (isRight ? 1 : -1)];
2624
+ if (row) {
2625
+ var query = isRight ? '.' + WORK_CELLS_CLASS + ':not(.' + OTHERMONTH_CLASS + ')'
2626
+ : '[data-date="' + ((+target.getAttribute('data-date')) - MS_PER_DAY) + '"]';
2627
+ return row.querySelector(query);
2628
+ }
2629
+ return target;
2630
+ };
2631
+ KeyboardInteraction.prototype.getVerticalLeftRightCell = function (target, isRight) {
2632
+ var date = new Date(+target.getAttribute('data-date'));
2633
+ var start = new Date(date.getFullYear(), date.getMonth() + (isRight ? 1 : -1), 1);
2634
+ var tableEle = this.parent.getContentTable();
2635
+ var targetCell = tableEle.querySelector('[data-date="' + start.getTime() + '"]');
2636
+ if (targetCell.parentNode.sectionRowIndex > target.parentNode.sectionRowIndex) {
2637
+ return targetCell;
2638
+ }
2639
+ return tableEle.querySelector('[data-date="' + new Date(start.getFullYear(), start.getMonth() + 1, 0).getTime() + '"]');
2640
+ };
2461
2641
  KeyboardInteraction.prototype.calculateNextPrevDate = function (currentCell, target, type) {
2462
2642
  var initialId = this.initialTarget.getAttribute('data-group-index');
2463
2643
  if (this.parent.activeViewOptions.group.resources.length > 0 && this.parent.currentView === 'Month') {
@@ -2502,6 +2682,16 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2502
2682
  };
2503
2683
  KeyboardInteraction.prototype.processTab = function (e, isReverse) {
2504
2684
  var target = e.target;
2685
+ if (target.classList.contains(INLINE_SUBJECT_CLASS) && this.parent.inlineModule) {
2686
+ target = target.closest('.e-appointment');
2687
+ this.parent.inlineModule.inlineCrudActions(e.target);
2688
+ }
2689
+ if (this.parent.currentView === 'TimelineYear' && target.classList.contains(OTHERMONTH_CLASS)) {
2690
+ if (target.classList.contains(SELECTED_CELL_CLASS)) {
2691
+ this.parent.removeSelectedClass();
2692
+ }
2693
+ return;
2694
+ }
2505
2695
  var popupWrapper = closest(target, '.' + POPUP_WRAPPER_CLASS + ',.' + MORE_POPUP_WRAPPER_CLASS);
2506
2696
  if (popupWrapper && popupWrapper.classList.contains(POPUP_OPEN)) {
2507
2697
  if (popupWrapper.classList.contains(MORE_POPUP_WRAPPER_CLASS)) {
@@ -2543,7 +2733,9 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2543
2733
  }
2544
2734
  if (target.classList.contains(APPOINTMENT_CLASS)) {
2545
2735
  var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CLASS));
2546
- if (this.parent.activeView.isTimelineView() && this.parent.activeViewOptions.group.resources.length > 0) {
2736
+ var isTimelineYear = this.parent.currentView === 'TimelineYear';
2737
+ var isTimeline = this.parent.activeView.isTimelineView() && !isTimelineYear;
2738
+ if ((isTimeline || isTimelineYear && this.parent.activeViewOptions.orientation === 'Vertical') && this.parent.activeViewOptions.group.resources.length > 0) {
2547
2739
  var index = parseInt(target.getAttribute('data-group-index'), 10);
2548
2740
  appElements = [].slice.call(this.parent.element.querySelectorAll("." + APPOINTMENT_CLASS + "[data-group-index=\"" + index + "\"]"));
2549
2741
  var resCellSelector = "." + RESOURCE_CELLS_CLASS + "[data-group-index=\"" + (isReverse ? index : index + 1) + "\"]";
@@ -2592,7 +2784,6 @@ var KeyboardInteraction = /** @__PURE__ @class */ (function () {
2592
2784
  this.processTabOnResourceCells(target, isReverse);
2593
2785
  }
2594
2786
  };
2595
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2596
2787
  KeyboardInteraction.prototype.processDelete = function (e) {
2597
2788
  var activeEle = document.activeElement;
2598
2789
  if (this.parent.currentView === 'MonthAgenda') {
@@ -3576,8 +3767,8 @@ function weeklyType(startDate, endDate, data, ruleObject) {
3576
3767
  var weekstartDate = addDays(tempDate, -startDateDiff);
3577
3768
  var weekendDate = addDays(weekstartDate, 6);
3578
3769
  var compareTempDate = new Date(tempDate.getTime());
3579
- resetTime(weekendDate);
3580
- resetTime(compareTempDate);
3770
+ weekendDate = resetTime(weekendDate);
3771
+ compareTempDate = resetTime(compareTempDate);
3581
3772
  while (weekendDate >= compareTempDate) {
3582
3773
  if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) > -1) {
3583
3774
  weekCollection.push([tempDate.getTime()]);
@@ -3587,7 +3778,7 @@ function weeklyType(startDate, endDate, data, ruleObject) {
3587
3778
  }
3588
3779
  tempDate.setDate(tempDate.getDate() + 1);
3589
3780
  compareTempDate = new Date(tempDate.getTime());
3590
- resetTime(compareTempDate);
3781
+ compareTempDate = resetTime(compareTempDate);
3591
3782
  }
3592
3783
  tempDate.setDate(tempDate.getDate() - 1);
3593
3784
  if (expectedCount && (data.length + ruleObject.recExceptionCount) >= expectedCount) {
@@ -5650,7 +5841,8 @@ var EventBase = /** @__PURE__ @class */ (function () {
5650
5841
  EventBase.prototype.eventClick = function (eventData) {
5651
5842
  var _this = this;
5652
5843
  var target = eventData.target;
5653
- if (target.classList.contains(DRAG_CLONE_CLASS) || target.classList.contains(RESIZE_CLONE_CLASS)) {
5844
+ if (target.classList.contains(DRAG_CLONE_CLASS) || target.classList.contains(RESIZE_CLONE_CLASS) ||
5845
+ target.classList.contains(INLINE_SUBJECT_CLASS)) {
5654
5846
  return;
5655
5847
  }
5656
5848
  if ((eventData.ctrlKey || eventData.metaKey) && eventData.which === 1 && this.parent.keyboardInteractionModule) {
@@ -6120,7 +6312,7 @@ var EventBase = /** @__PURE__ @class */ (function () {
6120
6312
  eventObj[this.parent.eventFields.endTime].getTime() < schedule.endHour.getTime() && start.getTime() === end.getTime();
6121
6313
  return isHourRange || isSameRange;
6122
6314
  };
6123
- EventBase.prototype.allDayExpandScroll = function (dateHeader, heightPropChanged) {
6315
+ EventBase.prototype.allDayExpandScroll = function (dateHeader) {
6124
6316
  var indentHeight = 0;
6125
6317
  var headerRows = [].slice.call(this.parent.element.querySelectorAll('.' + HEADER_ROW_CLASS));
6126
6318
  headerRows.forEach(function (element) {
@@ -6130,14 +6322,28 @@ var EventBase = /** @__PURE__ @class */ (function () {
6130
6322
  });
6131
6323
  indentHeight = dateHeader.offsetHeight - indentHeight;
6132
6324
  this.parent.element.querySelector('.' + ALLDAY_CELLS_CLASS).style.height = (indentHeight / 12) + 'em';
6133
- var content = this.parent.element.querySelector('.' + CONTENT_WRAP_CLASS);
6134
- if (this.parent.uiStateValues.expand && (content.offsetWidth - content.clientWidth > 0 || heightPropChanged)) {
6325
+ if (this.parent.uiStateValues.expand) {
6135
6326
  addClass([dateHeader], ALLDAY_APPOINTMENT_SCROLL);
6136
6327
  }
6137
6328
  else {
6138
6329
  removeClass([dateHeader], ALLDAY_APPOINTMENT_SCROLL);
6139
6330
  }
6140
6331
  };
6332
+ EventBase.prototype.updateEventMinimumDuration = function (startEndHours, startTime, endTime) {
6333
+ var eventDuration = (getUniversalTime(endTime) - getUniversalTime(startTime)) / MS_PER_MINUTE;
6334
+ if (eventDuration < this.parent.eventSettings.minimumEventDuration) {
6335
+ var tempEnd = new Date(startTime);
6336
+ tempEnd.setMinutes(tempEnd.getMinutes() + this.parent.eventSettings.minimumEventDuration);
6337
+ endTime = tempEnd;
6338
+ if (endTime.getTime() > startEndHours.endHour.getTime()) {
6339
+ var tempStart = new Date(startEndHours.endHour.getTime());
6340
+ tempStart.setMinutes(tempStart.getMinutes() - this.parent.eventSettings.minimumEventDuration);
6341
+ startTime = tempStart;
6342
+ endTime = startEndHours.endHour;
6343
+ }
6344
+ }
6345
+ return { startDate: startTime, endDate: endTime };
6346
+ };
6141
6347
  EventBase.prototype.unWireEvents = function () {
6142
6348
  var appElements = [].slice.call(this.parent.element.querySelectorAll('.' + APPOINTMENT_CLASS));
6143
6349
  for (var _i = 0, appElements_1 = appElements; _i < appElements_1.length; _i++) {
@@ -6568,18 +6774,21 @@ var VerticalEvent = /** @__PURE__ @class */ (function (_super) {
6568
6774
  if (currentDay.length === 0) {
6569
6775
  currentDate = resetTime(renderedDate[0]);
6570
6776
  }
6571
- var fieldMapping = this.parent.eventFields;
6572
- var startEndHours = getStartEndHours(currentDate, this.startHour, this.endHour);
6777
+ var field = this.parent.eventFields;
6778
+ var schedule = getStartEndHours(currentDate, this.startHour, this.endHour);
6573
6779
  var event = extend({}, record, null, true);
6574
6780
  event.isSpanned = { isBottom: false, isTop: false };
6575
- if (record[fieldMapping.startTime].getTime() < startEndHours.startHour.getTime()) {
6576
- event[fieldMapping.startTime] = startEndHours.startHour;
6781
+ if (record[field.startTime].getTime() < schedule.startHour.getTime()) {
6782
+ event[field.startTime] = schedule.startHour;
6577
6783
  event.isSpanned.isTop = true;
6578
6784
  }
6579
- if (record[fieldMapping.endTime].getTime() > startEndHours.endHour.getTime()) {
6580
- event[fieldMapping.endTime] = startEndHours.endHour;
6785
+ if (record[field.endTime].getTime() > schedule.endHour.getTime()) {
6786
+ event[field.endTime] = schedule.endHour;
6581
6787
  event.isSpanned.isBottom = true;
6582
6788
  }
6789
+ var eventDates = this.updateEventMinimumDuration(schedule, event[field.startTime], event[field.endTime]);
6790
+ event[field.startTime] = eventDates.startDate;
6791
+ event[field.endTime] = eventDates.endDate;
6583
6792
  return event;
6584
6793
  };
6585
6794
  VerticalEvent.prototype.renderAllDayEvents = function (eventObj, dayIndex, resource, dayCount, inline) {
@@ -7143,12 +7352,13 @@ var MonthEvent = /** @__PURE__ @class */ (function (_super) {
7143
7352
  setStyleAttribute(cell, { 'height': height_1 + 'px' });
7144
7353
  });
7145
7354
  }
7146
- var cellDetail = this.workCells.slice(-1)[0].getBoundingClientRect();
7355
+ var cellDetail = this.workCells[this.parent.activeView.isTimelineView() ?
7356
+ 0 : this.workCells.length - 1].getBoundingClientRect();
7147
7357
  this.cellWidth = cellDetail.width;
7148
7358
  this.cellHeight = cellDetail.height;
7149
7359
  this.dateRender = dateRender;
7150
7360
  var filteredDates = this.getRenderedDates(dateRender);
7151
- this.getSlotDates(workDays);
7361
+ this.getSlotDates(workDays || this.parent.activeViewOptions.workDays);
7152
7362
  this.processBlockEvents(blockList, resIndex, resData);
7153
7363
  for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {
7154
7364
  var event_1 = eventsList_1[_i];
@@ -7806,6 +8016,10 @@ var TimelineEvent = /** @__PURE__ @class */ (function (_super) {
7806
8016
  var eventData = event.data;
7807
8017
  startTime = this.getStartTime(event, eventData);
7808
8018
  endTime = this.getEndTime(event, eventData);
8019
+ var startEndHours = getStartEndHours(event[this.fields.startTime], this.startHour, this.endHour);
8020
+ var eventDates = this.updateEventMinimumDuration(startEndHours, startTime, endTime);
8021
+ startTime = eventDates.startDate;
8022
+ endTime = eventDates.endDate;
7809
8023
  this.day = this.parent.getIndexOfDate(this.dateRender, resetTime(new Date(startTime.getTime())));
7810
8024
  if (this.day < 0) {
7811
8025
  return;
@@ -8195,11 +8409,11 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
8195
8409
  if (this.parent.quickPopup) {
8196
8410
  this.parent.quickPopup.quickPopupHide();
8197
8411
  }
8198
- var moreWrapper = this.parent.element.querySelector('.e-more-popup-wrapper ');
8199
- if (moreWrapper && moreWrapper.classList.contains(POPUP_OPEN)) {
8200
- this.parent.quickPopup.morePopup.hide();
8201
- }
8202
8412
  if (args.type === 'Cell') {
8413
+ var moreWrapper = this.parent.element.querySelector('.' + MORE_POPUP_WRAPPER_CLASS);
8414
+ if (moreWrapper && moreWrapper.classList.contains(POPUP_OPEN)) {
8415
+ this.parent.quickPopup.morePopup.hide();
8416
+ }
8203
8417
  this.removeInlineAppointmentElement();
8204
8418
  this.cellEdit(args);
8205
8419
  }
@@ -8262,8 +8476,8 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
8262
8476
  '.e-inner-wrap' : '.e-appointment-details';
8263
8477
  args.element.querySelector(elementSelector).insertBefore(inlineSubject, timeEle);
8264
8478
  }
8479
+ inlineSubject.focus();
8265
8480
  }
8266
- inlineSubject.focus();
8267
8481
  inlineSubject.setSelectionRange(subject.length, subject.length);
8268
8482
  };
8269
8483
  InlineEdit.prototype.createVerticalViewInline = function (saveObj, dayIndex, resIndex, daysCount) {
@@ -8359,6 +8573,9 @@ var InlineEdit = /** @__PURE__ @class */ (function () {
8359
8573
  if (target && target.value !== '') {
8360
8574
  this.inlineCrudActions(target);
8361
8575
  }
8576
+ else {
8577
+ this.removeInlineAppointmentElement();
8578
+ }
8362
8579
  };
8363
8580
  InlineEdit.prototype.inlineCrudActions = function (target) {
8364
8581
  if (closest(target, '.' + INLINE_APPOINTMENT_CLASS)) {
@@ -9412,6 +9629,9 @@ var QuickPopups = /** @__PURE__ @class */ (function () {
9412
9629
  };
9413
9630
  QuickPopups.prototype.closeClick = function (event) {
9414
9631
  this.dialogEvent = event;
9632
+ if (this.parent.currentView === 'Year' && this.parent.activeCellsData && this.parent.activeCellsData.element) {
9633
+ this.parent.selectCell(this.parent.activeCellsData.element);
9634
+ }
9415
9635
  this.quickPopupHide();
9416
9636
  this.morePopup.hide();
9417
9637
  };
@@ -10014,6 +10234,7 @@ var INTERVALCLASS = 'e-interval';
10014
10234
  var DAYWRAPPER = 'e-days';
10015
10235
  var WEEKWRAPPER = 'e-non-week';
10016
10236
  var WEEKPOSITION = 'e-week-position';
10237
+ var DAYPOSITION = 'e-day-position';
10017
10238
  var YEAREXPANDERWRAPPER = 'e-year-expander';
10018
10239
  var YEAREXPANDERELEMENT = 'e-year-expander-element';
10019
10240
  var MONETHEXPANDERWRAPPER = 'e-month-expander';
@@ -10366,7 +10587,6 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10366
10587
  }
10367
10588
  });
10368
10589
  this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));
10369
- // eslint-disable-next-line @typescript-eslint/ban-types
10370
10590
  var renderDropDownList = function (dropDownData) {
10371
10591
  return new DropDownList({
10372
10592
  dataSource: dropDownData,
@@ -10734,7 +10954,7 @@ var RecurrenceEditor = /** @__PURE__ @class */ (function (_super) {
10734
10954
  '<td><div class="' + INPUTWARAPPER + ' ' + WEEKPOSITION + '" >' +
10735
10955
  '<input type="text" tabindex="0" class="' + MONTHPOS + '"title="' + this.localeObj.getConstant('monthPosition') + '" />' +
10736
10956
  '</div></td>' +
10737
- '<td><div class="' + INPUTWARAPPER + '" style="min-width: 120px;">' +
10957
+ '<td><div class="' + INPUTWARAPPER + ' ' + DAYPOSITION + '">' +
10738
10958
  '<input type="text" tabindex="0" class="' + MONTHWEEK + '"title="' + this.localeObj.getConstant('monthWeek') + '" />' +
10739
10959
  '</div></td></tr></table>' +
10740
10960
  '</div></div>' +
@@ -13159,7 +13379,12 @@ var Render = /** @__PURE__ @class */ (function () {
13159
13379
  };
13160
13380
  Render.prototype.initializeLayout = function (viewName) {
13161
13381
  if (this.parent.activeView) {
13162
- this.parent.resetTemplates();
13382
+ var templates = [
13383
+ 'cellTemplate', 'eventTemplate', 'tooltipTemplate', 'majorSlotTemplate', 'minorSlotTemplate',
13384
+ 'headerTooltipTemplate', 'dateHeaderTemplate', 'dayHeaderTemplate', 'mothHeaderTemplate',
13385
+ 'headerIndentTemplate', 'resourceHeaderTemplate', 'cellHeaderTemplate'
13386
+ ];
13387
+ this.parent.resetTemplates(templates);
13163
13388
  this.parent.activeView.removeEventListener();
13164
13389
  this.parent.activeView.destroy();
13165
13390
  }
@@ -14410,12 +14635,15 @@ var EventSettings = /** @__PURE__ @class */ (function (_super) {
14410
14635
  __decorate$6([
14411
14636
  Property(false)
14412
14637
  ], EventSettings.prototype, "enableTooltip", void 0);
14413
- __decorate$6([
14414
- Property()
14415
- ], EventSettings.prototype, "tooltipTemplate", void 0);
14416
14638
  __decorate$6([
14417
14639
  Property('AllDayRow')
14418
14640
  ], EventSettings.prototype, "spannedEventPlacement", void 0);
14641
+ __decorate$6([
14642
+ Property(1)
14643
+ ], EventSettings.prototype, "minimumEventDuration", void 0);
14644
+ __decorate$6([
14645
+ Property()
14646
+ ], EventSettings.prototype, "tooltipTemplate", void 0);
14419
14647
  __decorate$6([
14420
14648
  Property()
14421
14649
  ], EventSettings.prototype, "resourceColorField", void 0);
@@ -14904,6 +15132,7 @@ var ResourceBase = /** @__PURE__ @class */ (function () {
14904
15132
  targetType: 'relative',
14905
15133
  actionOnScroll: 'none',
14906
15134
  content: this.treeViewObj.element,
15135
+ relateTo: this.parent.element.querySelector('.' + TABLE_CONTAINER_CLASS),
14907
15136
  enableRtl: this.parent.enableRtl,
14908
15137
  hideAnimation: { name: 'SlideLeftOut', duration: 500 },
14909
15138
  showAnimation: { name: 'SlideLeftIn', duration: 500 },
@@ -15873,13 +16102,19 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
15873
16102
  timeFormat: this.internalTimeFormat,
15874
16103
  group: group,
15875
16104
  headerRows: this.headerRows,
15876
- orientation: 'Horizontal'
16105
+ orientation: 'Horizontal',
16106
+ numberOfWeeks: 0,
16107
+ displayDate: null
15877
16108
  };
15878
16109
  var viewOptions = this.viewCollections[this.viewIndex];
15879
16110
  var viewsData = extend(scheduleOptions, viewOptions, undefined, true);
15880
16111
  if (this.firstDayOfWeek !== 0 && viewOptions.firstDayOfWeek && this.firstDayOfWeek !== viewOptions.firstDayOfWeek) {
15881
16112
  viewsData.firstDayOfWeek = this.firstDayOfWeek;
15882
16113
  }
16114
+ if (viewsData.displayDate) {
16115
+ viewsData.displayDate = viewsData.displayDate instanceof Date ? new Date(viewsData.displayDate.getTime()) :
16116
+ new Date(viewsData.displayDate);
16117
+ }
15883
16118
  return viewsData;
15884
16119
  };
15885
16120
  Schedule.prototype.initializeDataModule = function () {
@@ -16192,7 +16427,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16192
16427
  if (this && isNullOrUndefined(this.uiStateValues) || !(this.enablePersistence)) {
16193
16428
  this.uiStateValues = {
16194
16429
  expand: false, isInitial: true, left: 0, top: 0, isGroupAdaptive: false,
16195
- isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false
16430
+ isIgnoreOccurrence: false, groupIndex: 0, action: false, isBlock: false, isCustomMonth: true
16196
16431
  };
16197
16432
  }
16198
16433
  this.activeCellsData = { startTime: this.getCurrentTime(), endTime: this.getCurrentTime(), isAllDay: false };
@@ -16971,7 +17206,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
16971
17206
  if (dateHeader.classList.contains(ALLDAY_APPOINTMENT_AUTO)) {
16972
17207
  removeClass([dateHeader], ALLDAY_APPOINTMENT_AUTO);
16973
17208
  }
16974
- this.eventBase.allDayExpandScroll(dateHeader, true);
17209
+ this.eventBase.allDayExpandScroll(dateHeader);
16975
17210
  }
16976
17211
  if (!this.uiStateValues.expand) {
16977
17212
  allDayRow.style.height = '';
@@ -17161,6 +17396,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
17161
17396
  }
17162
17397
  break;
17163
17398
  case 'spannedEventPlacement':
17399
+ case 'minimumEventDuration':
17164
17400
  case 'enableMaxHeight':
17165
17401
  case 'enableIndicator':
17166
17402
  this.refreshEvents(false);
@@ -17535,7 +17771,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
17535
17771
  */
17536
17772
  Schedule.prototype.exportToExcel = function (excelExportOptions) {
17537
17773
  if (this.excelExportModule) {
17538
- this.excelExportModule.initializeExcelExport(excelExportOptions || {});
17774
+ this.excelExportModule.initializeExcelExport(excelExportOptions);
17539
17775
  }
17540
17776
  else {
17541
17777
  throw Error('Inject ExcelExport module');
@@ -17720,6 +17956,9 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
17720
17956
  this.crudModule.refreshDataManager();
17721
17957
  }
17722
17958
  else {
17959
+ if (this.activeViewOptions && this.activeViewOptions.eventTemplate) {
17960
+ this.resetTemplates(['eventTemplate']);
17961
+ }
17723
17962
  var eventsData = this.eventsData || [];
17724
17963
  var blockData = this.blockData || [];
17725
17964
  var data = eventsData.concat(blockData);
@@ -17977,6 +18216,7 @@ var Schedule = /** @__PURE__ @class */ (function (_super) {
17977
18216
  this.eventTooltip = null;
17978
18217
  }
17979
18218
  this.destroyPopups();
18219
+ this.hideSpinner();
17980
18220
  this.unWireEvents();
17981
18221
  this.destroyHeaderModule();
17982
18222
  if (this.eventTooltip) {
@@ -18820,9 +19060,9 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
18820
19060
  bottom: resizeTarget.classList.contains(BOTTOM_RESIZE_HANDLER)
18821
19061
  };
18822
19062
  _this.actionObj.groupIndex = _this.parent.uiStateValues.isGroupAdaptive ? _this.parent.uiStateValues.groupIndex : 0;
18823
- var workCell = _this.parent.element.querySelector('.' + WORK_CELLS_CLASS);
18824
- _this.actionObj.cellWidth = workCell.offsetWidth;
18825
- _this.actionObj.cellHeight = workCell.offsetHeight;
19063
+ var workCell = _this.parent.element.querySelector('.' + WORK_CELLS_CLASS).getBoundingClientRect();
19064
+ _this.actionObj.cellWidth = workCell.width;
19065
+ _this.actionObj.cellHeight = workCell.height;
18826
19066
  var hRows = _this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });
18827
19067
  if (_this.parent.activeView.isTimelineView() && hRows.length > 0 && ['Date', 'Hour'].indexOf(hRows.slice(-1)[0]) < 0) {
18828
19068
  var tr = _this.parent.getContentTable().querySelector('tr');
@@ -18832,8 +19072,9 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
18832
19072
  var td = tdCollections_1[_i];
18833
19073
  noOfDays += parseInt(td.getAttribute('colspan'), 10);
18834
19074
  }
18835
- _this.actionObj.cellWidth = tr.offsetWidth / noOfDays;
18836
- _this.actionObj.cellHeight = tr.offsetHeight;
19075
+ var trRect = tr.getBoundingClientRect();
19076
+ _this.actionObj.cellWidth = trRect.width / noOfDays;
19077
+ _this.actionObj.cellHeight = trRect.height;
18837
19078
  }
18838
19079
  var pages = _this.getPageCoordinates(e);
18839
19080
  _this.actionObj.X = pages.pageX;
@@ -19084,12 +19325,12 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19084
19325
  var eventEnd = new Date(this.actionObj.event[this.parent.eventFields.endTime].getTime());
19085
19326
  var resizeTime;
19086
19327
  var isDateHeader = false;
19328
+ var headerName = this.parent.currentView;
19087
19329
  var isTimeViews = ['TimelineDay', 'TimelineWeek', 'TimelineWorkWeek'].indexOf(this.parent.currentView) > -1;
19088
19330
  var isTimelineMonth = this.parent.currentView === 'TimelineMonth';
19089
19331
  var isWithoutScale = isTimelineMonth || isTimeViews && !this.parent.activeViewOptions.timeScale.enable;
19090
19332
  if (this.parent.activeView.isTimelineView()) {
19091
19333
  var tr = this.parent.getContentTable().querySelector('tr');
19092
- var headerName = this.parent.currentView;
19093
19334
  if (this.parent.activeViewOptions.headerRows.length > 0) {
19094
19335
  var rows = this.parent.activeViewOptions.headerRows.map(function (row) { return row.option; });
19095
19336
  headerName = rows.slice(-1)[0];
@@ -19101,6 +19342,11 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19101
19342
  var cellIndex = 0;
19102
19343
  var tdCollections = [].slice.call(tr.children);
19103
19344
  var isLastCell = false;
19345
+ var pixelsPerMinute = this.actionObj.cellWidth / (this.parent.activeViewOptions.timeScale.interval /
19346
+ this.parent.activeViewOptions.timeScale.slotCount);
19347
+ var offset = parseFloat(this.parent.enableRtl ? this.actionObj.clone.style.right :
19348
+ this.actionObj.clone.style.left);
19349
+ offset = Math.round(offset / pixelsPerMinute) * pixelsPerMinute;
19104
19350
  if (['Year', 'Month', 'Week', 'Date'].indexOf(headerName) !== -1) {
19105
19351
  var noOfDays = 0;
19106
19352
  for (var _i = 0, tdCollections_2 = tdCollections; _i < tdCollections_2.length; _i++) {
@@ -19109,28 +19355,28 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19109
19355
  }
19110
19356
  var offsetValue = this.parent.enableRtl ? parseInt(this.actionObj.clone.style.right, 10) :
19111
19357
  parseInt(this.actionObj.clone.style.left, 10);
19358
+ offsetValue = Math.round(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth;
19112
19359
  if (!isLeft) {
19113
- offsetValue += (this.actionObj.clone.offsetWidth - this.actionObj.cellWidth);
19360
+ offsetValue += (this.actionObj.clone.getBoundingClientRect().width - this.actionObj.cellWidth);
19114
19361
  }
19115
- cellIndex = Math.floor(offsetValue / Math.floor(tr.offsetWidth / noOfDays));
19362
+ cellIndex = Math.floor(offsetValue / Math.floor(tr.getBoundingClientRect().width / noOfDays));
19116
19363
  isDateHeader = isTimeViews && headerName === 'Date';
19117
- cellIndex = isLeft ? cellIndex : (isTimelineMonth || isDateHeader) ? cellIndex + 1 : cellIndex;
19364
+ cellIndex = isLeft ? cellIndex : isTimelineMonth ? cellIndex + 1 : cellIndex;
19118
19365
  isLastCell = cellIndex === tdCollections.length;
19119
19366
  cellIndex = (cellIndex < 0) ? 0 : (cellIndex >= noOfDays) ? noOfDays - 1 : cellIndex;
19120
19367
  }
19121
19368
  else {
19122
19369
  var cellWidth = this.actionObj.cellWidth;
19123
- cellIndex = isLeft ? Math.floor(this.actionObj.clone.offsetLeft / this.actionObj.cellWidth) :
19124
- Math.ceil((this.actionObj.clone.offsetLeft + (this.actionObj.clone.offsetWidth - cellWidth)) /
19125
- this.actionObj.cellWidth);
19370
+ cellIndex = isLeft ? Math.floor(offset / this.actionObj.cellWidth) :
19371
+ Math.ceil((offset + (this.actionObj.clone.getBoundingClientRect().width - cellWidth)) / this.actionObj.cellWidth);
19126
19372
  if (this.parent.enableRtl) {
19127
19373
  var cellOffsetWidth = 0;
19128
19374
  if (headerName === 'TimelineMonth' || (!this.parent.activeViewOptions.timeScale.enable &&
19129
19375
  !isTimelineMonth)) {
19130
19376
  cellOffsetWidth = this.actionObj.cellWidth;
19131
19377
  }
19132
- var offsetWidth = (Math.floor(parseInt(this.actionObj.clone.style.right, 10) / this.actionObj.cellWidth) *
19133
- this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.offsetWidth - cellOffsetWidth);
19378
+ var offsetWidth = (Math.floor(offset / this.actionObj.cellWidth) *
19379
+ this.actionObj.cellWidth) + (isLeft ? 0 : this.actionObj.clone.getBoundingClientRect().width - cellOffsetWidth);
19134
19380
  cellIndex = Math.floor(offsetWidth / this.actionObj.cellWidth);
19135
19381
  }
19136
19382
  isLastCell = cellIndex === tdCollections.length;
@@ -19148,13 +19394,11 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19148
19394
  resizeTime = new Date(resizeDate.setHours(resizeTime.getHours(), resizeTime.getMinutes(), resizeTime.getSeconds()));
19149
19395
  }
19150
19396
  else {
19151
- var offsetValue = this.parent.enableRtl ? parseFloat(this.actionObj.clone.style.right) :
19152
- parseFloat(this.actionObj.clone.style.left);
19153
19397
  if (!isLeft) {
19154
- offsetValue += this.actionObj.clone.offsetWidth;
19398
+ offset += this.actionObj.clone.getBoundingClientRect().width;
19155
19399
  }
19156
19400
  var spanMinutes = Math.ceil((this.actionObj.slotInterval / this.actionObj.cellWidth) *
19157
- (offsetValue - Math.floor(offsetValue / this.actionObj.cellWidth) * this.actionObj.cellWidth));
19401
+ (offset - Math.floor(offset / this.actionObj.cellWidth) * this.actionObj.cellWidth));
19158
19402
  spanMinutes = (isLastCell || (!isLeft && spanMinutes === 0)) ? this.actionObj.slotInterval : spanMinutes;
19159
19403
  resizeTime = new Date(resizeDate.getTime());
19160
19404
  resizeTime.setMinutes(resizeTime.getMinutes() + spanMinutes);
@@ -19163,9 +19407,10 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19163
19407
  }
19164
19408
  else {
19165
19409
  var cloneIndex = closest(this.actionObj.clone, 'td').cellIndex;
19166
- var originalWidth = Math.ceil((isLeft ? this.actionObj.element.offsetWidth : 0) / this.actionObj.cellWidth) *
19167
- this.actionObj.cellWidth;
19168
- var noOfDays = Math.ceil((this.actionObj.clone.offsetWidth - originalWidth) / this.actionObj.cellWidth);
19410
+ var originalWidth = Math.ceil((isLeft ? this.actionObj.element.getBoundingClientRect().width : 0) /
19411
+ this.actionObj.cellWidth) * this.actionObj.cellWidth;
19412
+ var noOfDays = Math.ceil((this.actionObj.clone.getBoundingClientRect().width - originalWidth) /
19413
+ this.actionObj.cellWidth);
19169
19414
  var tr = closest(this.actionObj.clone, 'tr');
19170
19415
  var dayIndex = isLeft ? cloneIndex - noOfDays : cloneIndex + noOfDays - 1;
19171
19416
  dayIndex = this.getIndex(dayIndex);
@@ -19185,8 +19430,8 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19185
19430
  }
19186
19431
  else {
19187
19432
  var isTimeScaleViews = isTimeViews && this.parent.activeViewOptions.timeScale.enable;
19188
- var resizeEnd = ((!isTimeScaleViews || isDateHeader) && resizeTime.getHours() === 0 && resizeTime.getMinutes() === 0) ?
19189
- addDays(resizeTime, 1) : resizeTime;
19433
+ var resizeEnd = ((!isTimeScaleViews || isDateHeader || isTimeViews && ['Week', 'Month', 'Year'].indexOf(headerName) > -1)
19434
+ && resizeTime.getHours() === 0 && resizeTime.getMinutes() === 0) ? addDays(resizeTime, 1) : resizeTime;
19190
19435
  if (isWithoutScale && (resizeEnd.getTime() - eventStart.getTime()) <= 0) {
19191
19436
  resizeEnd = addDays(resetTime(eventStart), 1);
19192
19437
  }
@@ -19223,29 +19468,30 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19223
19468
  var slotInterval = (this.actionObj.cellWidth / this.actionObj.slotInterval) * this.actionObj.interval;
19224
19469
  var pageWidth = isLeft ? (this.actionObj.X - this.actionObj.pageX) : (this.actionObj.pageX - this.actionObj.X);
19225
19470
  var targetWidth = isTimelineView ?
19226
- (this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth :
19227
- this.parent.currentView === 'Month' ? this.actionObj.element.offsetWidth :
19228
- Math.ceil(this.actionObj.element.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;
19471
+ (this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth :
19472
+ this.parent.currentView === 'Month' ? this.actionObj.element.getBoundingClientRect().width :
19473
+ Math.ceil(this.actionObj.element.getBoundingClientRect().width / this.actionObj.cellWidth) * this.actionObj.cellWidth;
19229
19474
  var offsetWidth = targetWidth + (Math.ceil(pageWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth);
19475
+ var left = (this.parent.enableRtl) ? parseInt(this.actionObj.element.style.right, 10) : this.actionObj.clone.offsetLeft;
19230
19476
  if (isTimeViews) {
19231
- offsetWidth = targetWidth + (isLeft ? (Math.ceil(pageWidth / slotInterval) * slotInterval) :
19232
- (Math.floor(pageWidth / slotInterval) * slotInterval));
19477
+ offsetWidth = targetWidth + (Math.ceil(pageWidth / slotInterval) * slotInterval);
19478
+ offsetWidth = (Math.round((left + offsetWidth) / slotInterval) * slotInterval) - left;
19233
19479
  this.actionObj.event[this.parent.eventFields.isAllDay] = false;
19234
19480
  }
19235
19481
  var width = !isLeft && ((offsetWidth + this.actionObj.clone.offsetLeft > this.scrollArgs.width)) ?
19236
- this.actionObj.clone.offsetWidth : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
19482
+ this.actionObj.clone.getBoundingClientRect().width : (offsetWidth < this.actionObj.cellWidth) ? offsetWidth : offsetWidth;
19237
19483
  if (this.parent.enableRtl) {
19238
19484
  var rightValue = isTimelineView ? parseInt(this.actionObj.element.style.right, 10) :
19239
19485
  -(offsetWidth - this.actionObj.cellWidth);
19240
19486
  rightValue = isTimelineView ? rightValue : isLeft ? 0 : rightValue > 0 ? 0 : rightValue;
19241
19487
  if (isTimelineView && !isLeft) {
19242
- rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.offsetWidth +
19488
+ rightValue = Math.ceil((this.actionObj.element.offsetLeft + (this.actionObj.element.getBoundingClientRect().width +
19243
19489
  (this.actionObj.pageX - this.actionObj.X))) / slotInterval) * slotInterval;
19244
19490
  rightValue = rightValue < 0 ? Math.abs(rightValue) : -rightValue;
19245
19491
  }
19246
19492
  rightValue = rightValue >= this.scrollArgs.width ? this.scrollArgs.width - this.actionObj.cellWidth : rightValue;
19247
19493
  styles.right = formatUnit(rightValue);
19248
- width = width + rightValue > this.scrollArgs.width ? this.actionObj.clone.offsetWidth : width;
19494
+ width = width + rightValue > this.scrollArgs.width ? this.actionObj.clone.getBoundingClientRect().width : width;
19249
19495
  }
19250
19496
  else {
19251
19497
  var offsetLeft = isLeft ? this.actionObj.element.offsetLeft - (this.actionObj.X - this.actionObj.pageX) :
@@ -19253,12 +19499,12 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19253
19499
  if (isTimelineView) {
19254
19500
  offsetLeft = isLeft ? offsetLeft : parseInt(this.actionObj.clone.style.left, 10);
19255
19501
  if (this.parent.enableRtl) {
19256
- offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.actionObj.clone.offsetWidth) ?
19257
- parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;
19502
+ offsetLeft = !isLeft ? (this.actionObj.pageX < this.actionObj.X - this.actionObj.clone.getBoundingClientRect().width)
19503
+ ? parseInt(this.actionObj.clone.style.right, 10) : offsetLeft : offsetLeft;
19258
19504
  }
19259
19505
  else {
19260
- offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.actionObj.clone.offsetWidth &&
19261
- this.actionObj.clone.offsetWidth === this.actionObj.cellWidth) ?
19506
+ offsetLeft = isLeft ? (this.actionObj.pageX > this.actionObj.X + this.actionObj.clone.getBoundingClientRect().width &&
19507
+ this.actionObj.clone.getBoundingClientRect().width === this.actionObj.cellWidth) ?
19262
19508
  parseInt(this.actionObj.clone.style.left, 10) : offsetLeft : offsetLeft;
19263
19509
  }
19264
19510
  }
@@ -19268,9 +19514,10 @@ var Resize = /** @__PURE__ @class */ (function (_super) {
19268
19514
  Math.ceil(Math.abs(offsetLeft) / this.actionObj.cellWidth) * this.actionObj.cellWidth;
19269
19515
  if (offsetLeft < 0) {
19270
19516
  offsetLeft = 0;
19271
- width = this.actionObj.clone.offsetWidth;
19517
+ width = this.actionObj.clone.getBoundingClientRect().width;
19272
19518
  }
19273
- var cloneWidth = Math.ceil(this.actionObj.clone.offsetWidth / this.actionObj.cellWidth) * this.actionObj.cellWidth;
19519
+ var cloneWidth = Math.ceil(this.actionObj.clone.getBoundingClientRect().width / this.actionObj.cellWidth) *
19520
+ this.actionObj.cellWidth;
19274
19521
  if (isLeft) {
19275
19522
  styles.left = formatUnit(isTimelineView ? offsetLeft : isLeft ? leftValue < 0 ? -offsetLeft :
19276
19523
  (Math.ceil((targetWidth - cloneWidth) / this.actionObj.cellWidth) * this.actionObj.cellWidth) : offsetLeft);
@@ -19801,7 +20048,7 @@ var YearEvent = /** @__PURE__ @class */ (function (_super) {
19801
20048
  }
19802
20049
  }
19803
20050
  else {
19804
- if (((resetTime(appStart).getTime() <= dateStart) && (resetTime(appEnd).getTime() > dateStart)) ||
20051
+ if (((resetTime(appStart).getTime() <= dateStart) && (resetTime(appEnd).getTime() >= dateStart)) ||
19805
20052
  (resetTime(appStart).getTime() >= dateStart) && (resetTime(appEnd).getTime() <= dateEnd)) {
19806
20053
  appointmentsList.push(app);
19807
20054
  }
@@ -20001,7 +20248,9 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
20001
20248
  var eventGuid = this.actionObj.element.getAttribute('data-guid');
20002
20249
  this.actionObj.event = this.parent.eventBase.getEventByGuid(eventGuid);
20003
20250
  var eventObj = extend({}, this.actionObj.event, null, true);
20004
- this.startTime = eventObj[this.parent.eventFields.startTime].getTime();
20251
+ if (!isNullOrUndefined(eventObj)) {
20252
+ this.startTime = eventObj[this.parent.eventFields.startTime].getTime();
20253
+ }
20005
20254
  var dragArgs = {
20006
20255
  cancel: false,
20007
20256
  data: eventObj,
@@ -20423,7 +20672,7 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
20423
20672
  return;
20424
20673
  }
20425
20674
  var td = tr.children[colIndex];
20426
- if (this.parent.activeViewOptions.group.resources.length > 0) {
20675
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
20427
20676
  this.actionObj.groupIndex = parseInt(td.getAttribute('data-group-index'), 10);
20428
20677
  }
20429
20678
  var dragStart$$1;
@@ -20692,7 +20941,7 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
20692
20941
  var renderDates = this.getRenderedDates();
20693
20942
  var events = this.parent.eventBase.splitEvent(event, renderDates);
20694
20943
  var query = ".e-all-day-cells[data-date=\"" + events[0][this.parent.eventFields.startTime].getTime() + "\"]";
20695
- if (this.parent.activeViewOptions.group.resources.length > 0) {
20944
+ if (this.parent.activeViewOptions.group.resources.length > 0 && !this.parent.uiStateValues.isGroupAdaptive) {
20696
20945
  query = query.concat('[data-group-index = "' + this.actionObj.groupIndex + '"]');
20697
20946
  }
20698
20947
  var cell = [].slice.call(this.parent.element.querySelectorAll(query));
@@ -20892,7 +21141,13 @@ var DragAndDrop = /** @__PURE__ @class */ (function (_super) {
20892
21141
  if (this.parent.eventDragArea) {
20893
21142
  var targetDate = this.parent.getDateFromElement(e.target);
20894
21143
  if (!isNullOrUndefined(targetDate)) {
20895
- eventStart = targetDate;
21144
+ if (!this.parent.activeViewOptions.timeScale.enable || (this.parent.currentView === 'TimelineMonth')) {
21145
+ var eventSrt = eventObj[this.parent.eventFields.startTime];
21146
+ eventStart = new Date(targetDate.setHours(eventSrt.getHours(), eventSrt.getMinutes(), eventSrt.getSeconds()));
21147
+ }
21148
+ else {
21149
+ eventStart = targetDate;
21150
+ }
20896
21151
  }
20897
21152
  }
20898
21153
  var eventEnd = new Date(eventStart.getTime());
@@ -21327,6 +21582,10 @@ var ViewBase = /** @__PURE__ @class */ (function () {
21327
21582
  return date.setHours(0, 0, 0, 0) === this.parent.getCurrentTime().setHours(0, 0, 0, 0);
21328
21583
  };
21329
21584
  ViewBase.prototype.isCurrentMonth = function (date) {
21585
+ if (this.parent.activeViewOptions.displayDate || this.parent.activeViewOptions.numberOfWeeks > 0) {
21586
+ return this.parent.activeView.getStartDate().getTime() <= this.parent.getCurrentTime().getTime() &&
21587
+ this.parent.activeView.getEndDate().getTime() >= this.parent.getCurrentTime().getTime();
21588
+ }
21330
21589
  return date.getFullYear() ===
21331
21590
  this.parent.getCurrentTime().getFullYear() && date.getMonth() === this.parent.getCurrentTime().getMonth();
21332
21591
  };
@@ -21559,6 +21818,13 @@ var ViewBase = /** @__PURE__ @class */ (function () {
21559
21818
  setStyleAttribute(resourceColumn, { 'height': formatUnit(content.clientHeight) });
21560
21819
  }
21561
21820
  }
21821
+ var cssClass = "." + HEADER_CELLS_CLASS + ",." + TIME_SLOT_CLASS + ",." + HEADER_WEEK_CELLS_CLASS + ",." + HEADER_MONTH_CELLS_CLASS + ",." + HEADER_YEAR_CELLS_CLASS;
21822
+ var headerCellElements = [].slice.call(this.element.querySelectorAll(cssClass));
21823
+ headerCellElements.forEach(function (ele) {
21824
+ var colSpan = isNullOrUndefined(ele.getAttribute('colspan')) ? '1' : ele.getAttribute('colspan');
21825
+ var headerCellColSpan = parseInt(colSpan, 10);
21826
+ setStyleAttribute(ele, { 'width': formatUnit(colWidth_1 * headerCellColSpan) });
21827
+ });
21562
21828
  }
21563
21829
  };
21564
21830
  ViewBase.prototype.resetColWidth = function () {
@@ -22690,10 +22956,11 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22690
22956
  Month.prototype.getDateSlots = function (renderDates, workDays) {
22691
22957
  var count = this.parent.activeViewOptions.showWeekend ? WEEK_LENGTH : workDays.length;
22692
22958
  var dateSlots = [];
22959
+ var isCurrentMonth = this.isCurrentMonth(this.parent.selectedDate);
22693
22960
  for (var col = 0; col < count; col++) {
22694
22961
  var classList$$1 = [HEADER_CELLS_CLASS];
22695
22962
  var currentDateIndex = renderDates.slice(0, count).map(function (date) { return date.getDay(); });
22696
- if (this.isCurrentMonth(this.parent.selectedDate) && currentDateIndex.indexOf(this.parent.getCurrentTime().getDay()) === col) {
22963
+ if (isCurrentMonth && currentDateIndex.indexOf(this.parent.getCurrentTime().getDay()) === col) {
22697
22964
  classList$$1.push(CURRENT_DAY_CLASS);
22698
22965
  }
22699
22966
  dateSlots.push({ date: renderDates[col], type: 'monthDay', className: classList$$1, colSpan: 1, workDays: workDays });
@@ -22732,6 +22999,9 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22732
22999
  this.renderResourceMobileLayout();
22733
23000
  }
22734
23001
  this.parent.notify(contentReady, {});
23002
+ if (this.parent.uiStateValues.isCustomMonth) {
23003
+ this.parent.uiStateValues.isCustomMonth = false;
23004
+ }
22735
23005
  };
22736
23006
  Month.prototype.refreshHeader = function () {
22737
23007
  remove(this.element.querySelector('tbody tr'));
@@ -22917,7 +23187,7 @@ var Month = /** @__PURE__ @class */ (function (_super) {
22917
23187
  return slotDatas;
22918
23188
  };
22919
23189
  Month.prototype.updateClassList = function (data) {
22920
- if (this.isOtherMonth(data.date)) {
23190
+ if (!this.isCustomMonth() && this.isOtherMonth(data.date)) {
22921
23191
  data.className.push(OTHERMONTH_CLASS);
22922
23192
  }
22923
23193
  if (!this.parent.isMinMaxDate(data.date)) {
@@ -23026,15 +23296,34 @@ var Month = /** @__PURE__ @class */ (function (_super) {
23026
23296
  }
23027
23297
  };
23028
23298
  Month.prototype.getMonthStart = function (currentDate) {
23029
- var monthStart = getWeekFirstDate(this.parent.calendarUtil.firstDateOfMonth(currentDate), this.parent.activeViewOptions.firstDayOfWeek);
23030
- var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());
23031
- return start;
23299
+ var useDisplayDate = this.parent.currentView === 'Month' && !isNullOrUndefined(this.parent.activeViewOptions.displayDate) && (this.parent.uiStateValues.isCustomMonth || this.isCustomRange());
23300
+ var date = useDisplayDate ? this.parent.activeViewOptions.displayDate : !(this.parent.uiStateValues.isCustomMonth ||
23301
+ this.isCustomRange()) && this.isCustomMonth() ? currentDate : this.parent.calendarUtil.firstDateOfMonth(currentDate);
23302
+ var monthStart = getWeekFirstDate(date, this.parent.activeViewOptions.firstDayOfWeek);
23303
+ return new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());
23032
23304
  };
23033
23305
  Month.prototype.getMonthEnd = function (currentDate) {
23034
- var endDate = addMonths(currentDate, this.parent.activeViewOptions.interval - 1);
23035
- var lastWeekOfMonth = getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek);
23036
- var monthEnd = addDays(lastWeekOfMonth, WEEK_LENGTH - 1);
23037
- return monthEnd;
23306
+ if (this.isCustomMonth()) {
23307
+ var start = this.getMonthStart(currentDate);
23308
+ var numberOfDays = WEEK_LENGTH * (this.parent.activeViewOptions.numberOfWeeks > 0 ?
23309
+ this.parent.activeViewOptions.numberOfWeeks : DEFAULT_WEEKS);
23310
+ return addDays(start, (numberOfDays - 1));
23311
+ }
23312
+ else {
23313
+ var endDate = addMonths(currentDate, this.parent.activeViewOptions.interval - 1);
23314
+ var lastWeekOfMonth = getWeekFirstDate(this.parent.calendarUtil.lastDateOfMonth(endDate), this.parent.activeViewOptions.firstDayOfWeek);
23315
+ return addDays(lastWeekOfMonth, WEEK_LENGTH - 1);
23316
+ }
23317
+ };
23318
+ Month.prototype.isCustomRange = function () {
23319
+ var dates = this.parent.getCurrentViewDates();
23320
+ if (dates && dates.length > 0) {
23321
+ var selectedTime = resetTime(this.parent.selectedDate).getTime();
23322
+ var weekFirstDate = getWeekFirstDate(dates[dates.length - 1], this.parent.activeViewOptions.firstDayOfWeek);
23323
+ return !(selectedTime >= getWeekFirstDate(dates[0], this.parent.activeViewOptions.firstDayOfWeek).getTime() &&
23324
+ selectedTime <= addDays(weekFirstDate, 6).getTime());
23325
+ }
23326
+ return false;
23038
23327
  };
23039
23328
  Month.prototype.getRenderDates = function (workDays) {
23040
23329
  var renderDates = [];
@@ -23064,34 +23353,57 @@ var Month = /** @__PURE__ @class */ (function (_super) {
23064
23353
  return renderDates;
23065
23354
  };
23066
23355
  Month.prototype.getNextPreviousDate = function (type) {
23067
- if (type === 'next') {
23068
- return addMonths(this.parent.selectedDate, this.parent.activeViewOptions.interval);
23356
+ if (this.isCustomMonth()) {
23357
+ var dates = this.parent.getCurrentViewDates();
23358
+ var date = getWeekFirstDate(type === 'next' ? dates[dates.length - 1]
23359
+ : dates[0], this.parent.activeViewOptions.firstDayOfWeek);
23360
+ return addDays(date, type === 'next' ? WEEK_LENGTH : -(this.parent.activeViewOptions.numberOfWeeks > 0 ?
23361
+ this.parent.activeViewOptions.numberOfWeeks : DEFAULT_WEEKS) * WEEK_LENGTH);
23069
23362
  }
23070
23363
  else {
23071
- return addMonths(this.parent.selectedDate, -(this.parent.activeViewOptions.interval));
23364
+ return addMonths(this.parent.selectedDate, ((type === 'next' ? 1 : -1) * this.parent.activeViewOptions.interval));
23072
23365
  }
23073
23366
  };
23367
+ Month.prototype.getStartDate = function () {
23368
+ return this.getMonthStart(this.parent.selectedDate);
23369
+ };
23370
+ Month.prototype.getEndDate = function () {
23371
+ return this.getMonthEnd(this.parent.selectedDate);
23372
+ };
23074
23373
  Month.prototype.getEndDateFromStartDate = function (start) {
23075
23374
  return addDays(new Date(start.getTime()), 1);
23076
23375
  };
23077
23376
  Month.prototype.getDateRangeText = function () {
23078
23377
  if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {
23079
- if (this.parent.activeViewOptions.interval > 1) {
23080
- var endDate = addMonths(lastDateOfMonth(this.parent.selectedDate), this.parent.activeViewOptions.interval - 1);
23081
- if (this.parent.selectedDate.getFullYear() === endDate.getFullYear()) {
23082
- var monthNames = (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' +
23378
+ var startDate = this.parent.selectedDate;
23379
+ var endDate = void 0;
23380
+ var updateCustomRange = false;
23381
+ if (this.isCustomMonth()) {
23382
+ var dates = this.parent.getCurrentViewDates();
23383
+ updateCustomRange = dates[0].getMonth() !== dates[dates.length - 1].getMonth() ||
23384
+ dates[0].getFullYear() !== dates[dates.length - 1].getFullYear();
23385
+ if (updateCustomRange) {
23386
+ startDate = dates[0];
23387
+ endDate = dates[dates.length - 1];
23388
+ }
23389
+ }
23390
+ var isUpdateDateRange = (this.parent.currentView !== 'Month' || !this.isCustomMonth());
23391
+ if (this.parent.activeViewOptions.interval > 1 && isUpdateDateRange || updateCustomRange) {
23392
+ endDate = endDate ? endDate : addMonths(lastDateOfMonth(startDate), this.parent.activeViewOptions.interval - 1);
23393
+ if (startDate.getFullYear() === endDate.getFullYear()) {
23394
+ var monthNames = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' - ' +
23083
23395
  (this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() })) +
23084
23396
  this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
23085
23397
  return capitalizeFirstWord(monthNames, 'single');
23086
23398
  }
23087
- var text = (this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' +
23088
- this.parent.selectedDate.getFullYear() + ' - ' +
23399
+ var text = (this.parent.globalize.formatDate(startDate, { format: 'MMMM', calendar: this.parent.getCalendarMode() })) + ' ' +
23400
+ startDate.getFullYear() + ' - ' +
23089
23401
  this.parent.globalize.formatDate(endDate, { format: 'MMMM ', calendar: this.parent.getCalendarMode() }) +
23090
23402
  this.parent.globalize.formatDate(endDate, { skeleton: 'y', calendar: this.parent.getCalendarMode() });
23091
23403
  return capitalizeFirstWord(text, 'single');
23092
23404
  }
23093
23405
  var format = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';
23094
- return capitalizeFirstWord(this.parent.globalize.formatDate(this.parent.selectedDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');
23406
+ return capitalizeFirstWord(this.parent.globalize.formatDate(startDate, { format: format, calendar: this.parent.getCalendarMode() }), 'single');
23095
23407
  }
23096
23408
  return this.formatDateRange(this.parent.selectedDate);
23097
23409
  };
@@ -23116,6 +23428,10 @@ var Month = /** @__PURE__ @class */ (function (_super) {
23116
23428
  EventHandler.remove(contentScrollableEle, 'scroll', this.onContentScroll);
23117
23429
  }
23118
23430
  };
23431
+ Month.prototype.isCustomMonth = function () {
23432
+ return this.parent.currentView === 'Month' &&
23433
+ (!isNullOrUndefined(this.parent.activeViewOptions.displayDate) || this.parent.activeViewOptions.numberOfWeeks > 0);
23434
+ };
23119
23435
  Month.prototype.getModuleName = function () {
23120
23436
  return 'month';
23121
23437
  };
@@ -23373,10 +23689,27 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23373
23689
  Year.prototype.onCellClick = function (e) {
23374
23690
  var target = closest(e.target, '.' + WORK_CELLS_CLASS);
23375
23691
  var startDate = this.parent.getDateFromElement(target);
23376
- var endDate = addDays(new Date(startDate.getTime()), 1);
23377
- var filteredEvents = this.parent.eventBase.filterEvents(startDate, endDate);
23378
- var moreEventArgs = { date: startDate, event: filteredEvents, element: e.target };
23379
- this.parent.quickPopup.moreEventClick(moreEventArgs, endDate);
23692
+ this.parent.activeCellsData = this.parent.getCellDetails(target);
23693
+ var isPrevious = startDate.getTime() < this.getStartDate().getTime();
23694
+ if (isPrevious || startDate.getTime() > this.getEndDate().getTime()) {
23695
+ this.parent.changeDate(this.parent.activeView.getNextPreviousDate(isPrevious ? 'previous' : 'next'), e);
23696
+ var activeDate = this.parent.activeCellsData.startTime.getTime();
23697
+ var inRange = activeDate >= this.getStartDate().getTime() && activeDate <= this.getEndDate().getTime();
23698
+ var dateAttr = inRange ? activeDate : (isPrevious ? this.getEndDate() : this.getStartDate()).getTime();
23699
+ var selectedCell = this.parent.element.querySelector(':not(.' + OTHERMONTH_CLASS + ')[data-date="' + dateAttr + '"]');
23700
+ this.parent.selectCell(selectedCell);
23701
+ this.parent.activeCellsData = this.parent.getCellDetails(selectedCell);
23702
+ }
23703
+ else {
23704
+ var endDate = addDays(new Date(startDate.getTime()), 1);
23705
+ var filteredEvents = this.parent.eventBase.filterEvents(startDate, endDate);
23706
+ var moreEventArgs = { date: startDate, event: filteredEvents, element: e.target };
23707
+ if (target.classList.contains(OTHERMONTH_CLASS)) {
23708
+ target = this.parent.element.querySelector(':not(.' + OTHERMONTH_CLASS + ')[data-date="' + target.getAttribute('data-date') + '"]');
23709
+ }
23710
+ this.parent.activeCellsData = this.parent.getCellDetails(target);
23711
+ this.parent.quickPopup.moreEventClick(moreEventArgs, endDate);
23712
+ }
23380
23713
  };
23381
23714
  Year.prototype.onContentScroll = function (e) {
23382
23715
  var target = e.target;
@@ -23428,10 +23761,10 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23428
23761
  return addDays(addMonths(this.getStartDate(), this.parent.monthsCount), -1);
23429
23762
  };
23430
23763
  Year.prototype.startDate = function () {
23431
- return getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek);
23764
+ return this.parent.currentView === 'Year' ? getWeekFirstDate(this.getStartDate(), this.parent.firstDayOfWeek) : this.getStartDate();
23432
23765
  };
23433
23766
  Year.prototype.endDate = function () {
23434
- return addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1);
23767
+ return this.parent.currentView === 'Year' ? addDays(getWeekLastDate(this.getEndDate(), this.parent.firstDayOfWeek), 1) : this.getEndDate();
23435
23768
  };
23436
23769
  Year.prototype.getEndDateFromStartDate = function (start) {
23437
23770
  var date = new Date(start.getTime());
@@ -23474,6 +23807,7 @@ var Year = /** @__PURE__ @class */ (function (_super) {
23474
23807
  EventHandler.add(element, 'click', this.onCellClick, this);
23475
23808
  }
23476
23809
  else {
23810
+ EventHandler.add(element, 'mousedown', this.parent.workCellAction.cellMouseDown, this.parent.workCellAction);
23477
23811
  EventHandler.add(element, 'click', this.parent.workCellAction.cellClick, this.parent.workCellAction);
23478
23812
  if (!this.parent.isAdaptive) {
23479
23813
  EventHandler.add(element, 'dblclick', this.parent.workCellAction.cellDblClick, this.parent.workCellAction);
@@ -23946,7 +24280,8 @@ var Agenda = /** @__PURE__ @class */ (function (_super) {
23946
24280
  var event_1 = _a[_i];
23947
24281
  delete event_1.generatedDates;
23948
24282
  }
23949
- var eventCollection = this.parent.activeViewOptions.allowVirtualScrolling ? args.processedData : this.parent.eventsProcessed;
24283
+ var eventCollection = this.parent.activeViewOptions.allowVirtualScrolling ?
24284
+ args.processedData : this.parent.eventsProcessed;
23950
24285
  if (this.parent.uiStateValues.isGroupAdaptive) {
23951
24286
  var resource = this.parent.resourceBase.lastResourceLevel[this.parent.uiStateValues.groupIndex];
23952
24287
  this.dataSource = this.parent.eventBase.filterEventsByResource(resource, this.dataSource);
@@ -25081,6 +25416,9 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25081
25416
  tr.appendChild(leftHeaderCells);
25082
25417
  leftHeaderCells.appendChild(this.renderResourceHeader(LEFT_INDENT_WRAP_CLASS));
25083
25418
  }
25419
+ var isHorizontal = this.parent.activeViewOptions.orientation === 'Horizontal';
25420
+ var isGroup = this.parent.activeViewOptions.group.resources.length > 0;
25421
+ this.isInverseTableSelect = isHorizontal && !isGroup ? false : true;
25084
25422
  var td = createElement('td');
25085
25423
  tr.appendChild(td);
25086
25424
  var container = createElement('div', { className: DATE_HEADER_CONTAINER_CLASS });
@@ -25113,7 +25451,7 @@ var TimelineYear = /** @__PURE__ @class */ (function (_super) {
25113
25451
  }
25114
25452
  else {
25115
25453
  if (this.parent.monthHeaderTemplate) {
25116
- append(this.renderDayMonthHeaderTemplate(date, months[column], 'mothHeaderTemplate'), innerTd);
25454
+ append(this.renderDayMonthHeaderTemplate(date, months[column], 'monthHeaderTemplate'), innerTd);
25117
25455
  }
25118
25456
  else {
25119
25457
  innerTd.innerHTML = "<span>" + this.getMonthName(date) + "</span>";
@@ -25769,10 +26107,8 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
25769
26107
  this.parent = parent;
25770
26108
  }
25771
26109
  ExcelExport.prototype.initializeExcelExport = function (excelExportOptions) {
25772
- var _this = this;
25773
- var exportFields = excelExportOptions.fields || Object.keys(this.parent.eventFields).map(function (field) {
25774
- return _this.parent.eventFields[field];
25775
- });
26110
+ if (excelExportOptions === void 0) { excelExportOptions = {}; }
26111
+ var exportColumns = this.getExportColumns(excelExportOptions);
25776
26112
  var exportName = excelExportOptions.fileName || 'Schedule';
25777
26113
  var exportType = excelExportOptions.exportType || 'xlsx';
25778
26114
  var isIncludeOccurrences = excelExportOptions.includeOccurrences || false;
@@ -25784,39 +26120,44 @@ var ExcelExport = /** @__PURE__ @class */ (function () {
25784
26120
  else {
25785
26121
  eventCollection = !isIncludeOccurrences ? this.parent.eventsData : this.parent.eventsProcessed;
25786
26122
  }
25787
- this.processWorkbook(exportFields, exportName, exportType, eventCollection);
26123
+ this.processWorkbook(exportColumns, exportName, exportType, eventCollection);
25788
26124
  };
25789
26125
  ExcelExport.prototype.processWorkbook = function (fields, name, type, eventCollection) {
25790
26126
  var _this = this;
25791
26127
  var columns = [];
25792
26128
  var rows = [];
25793
26129
  var columnHeader = [];
25794
- fields.forEach(function (field, i) { return columns.push({ index: i + 1, width: (field === 'Id' ? 20 : 150) }); });
26130
+ fields.forEach(function (field, i) { columns.push({ index: i + 1, width: (field.name === 'Id' ? 50 : 150) }); });
25795
26131
  var style = { fontSize: 12, borders: { color: '#E0E0E0' }, bold: true };
25796
- fields.forEach(function (field, i) { return columnHeader.push({ index: i + 1, value: field, style: style }); });
26132
+ fields.forEach(function (field, i) { columnHeader.push({ index: i + 1, value: field.text, style: style }); });
25797
26133
  rows.push({ index: 1, cells: columnHeader });
25798
- var i = 2;
25799
- var _loop_1 = function (event_1) {
26134
+ eventCollection.forEach(function (event, i) {
25800
26135
  var columnData = [];
25801
26136
  fields.forEach(function (field, n) {
25802
- var columnRule = { index: n + 1, value: event_1[field] || '' };
25803
- if (field === _this.parent.eventFields.startTime || field === _this.parent.eventFields.endTime) {
26137
+ var columnRule = { index: n + 1, value: event[field.name] || '' };
26138
+ if (field.name === _this.parent.eventFields.startTime || field.name === _this.parent.eventFields.endTime) {
25804
26139
  var styleRule = { fontSize: 12, numberFormat: 'm/d/yyyy h:mm AM/PM' };
25805
26140
  columnRule = extend({}, columnRule, { style: styleRule }, true);
25806
26141
  }
25807
26142
  columnData.push(columnRule);
25808
26143
  });
25809
- rows.push({ index: i, cells: columnData });
25810
- i++;
25811
- };
25812
- for (var _i = 0, eventCollection_1 = eventCollection; _i < eventCollection_1.length; _i++) {
25813
- var event_1 = eventCollection_1[_i];
25814
- _loop_1(event_1);
25815
- }
26144
+ rows.push({ index: i + 2, cells: columnData });
26145
+ });
25816
26146
  var workSheet = [{ columns: columns, rows: rows }];
25817
26147
  var book = new Workbook({ worksheets: workSheet }, type, this.parent.locale);
25818
26148
  book.save(name + '.' + type);
25819
26149
  };
26150
+ ExcelExport.prototype.getExportColumns = function (exportOptions) {
26151
+ var _this = this;
26152
+ var exportColumns = exportOptions.fieldsInfo || [];
26153
+ if (exportColumns.length === 0) {
26154
+ var fields = exportOptions.fields || Object.keys(this.parent.eventFields).map(function (field) {
26155
+ return _this.parent.eventFields[field];
26156
+ });
26157
+ fields.forEach(function (field) { exportColumns.push({ name: field, text: field }); });
26158
+ }
26159
+ return exportColumns;
26160
+ };
25820
26161
  ExcelExport.prototype.getModuleName = function () {
25821
26162
  return 'excelExport';
25822
26163
  };
@@ -25966,5 +26307,5 @@ var Print = /** @__PURE__ @class */ (function () {
25966
26307
  * Export Schedule components
25967
26308
  */
25968
26309
 
25969
- export { Schedule, cellClick, cellDoubleClick, moreEventsClick, select, hover, actionBegin, actionComplete, actionFailure, navigating, renderCell, eventClick, eventRendered, dataBinding, dataBound, popupOpen, popupClose, dragStart, drag, dragStop, resizeStart, resizing, resizeStop, inlineClick, initialLoad, initialEnd, print$1 as print, dataReady, eventsLoaded, contentReady, scroll, virtualScroll, scrollUiUpdate, uiUpdate, documentClick, cellMouseDown, WEEK_LENGTH, MS_PER_DAY, MS_PER_MINUTE, getElementHeightFromClass, getTranslateY, getWeekFirstDate, getWeekLastDate, firstDateOfMonth, lastDateOfMonth, getWeekNumber, getWeekMiddleDate, setTime, resetTime, getDateInMs, getDateCount, addDays, addMonths, addYears, getStartEndHours, getMaxDays, getDaysCount, getDateFromString, getScrollBarWidth, findIndexInData, getOuterHeight, removeChildren, isDaylightSavingTime, getUniversalTime, isMobile, isIPadDevice, capitalizeFirstWord, Resize, DragAndDrop, HeaderRenderer, ViewBase, Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda, TimelineViews, TimelineMonth, TimelineYear, Timezone, timezoneData, ICalendarExport, ICalendarImport, ExcelExport, Print, RecurrenceEditor, generateSummary, generate, getDateFromRecurrenceDateString, extractObjectFromRule, getCalendarUtil, getRecurrenceStringFromDate, Gregorian, Islamic };
26310
+ export { Schedule, cellClick, cellDoubleClick, moreEventsClick, select, hover, actionBegin, actionComplete, actionFailure, navigating, renderCell, eventClick, eventRendered, dataBinding, dataBound, popupOpen, popupClose, dragStart, drag, dragStop, resizeStart, resizing, resizeStop, inlineClick, initialLoad, initialEnd, print$1 as print, dataReady, eventsLoaded, contentReady, scroll, virtualScroll, scrollUiUpdate, uiUpdate, documentClick, cellMouseDown, WEEK_LENGTH, DEFAULT_WEEKS, MS_PER_DAY, MS_PER_MINUTE, getElementHeightFromClass, getTranslateY, getWeekFirstDate, getWeekLastDate, firstDateOfMonth, lastDateOfMonth, getWeekNumber, getWeekMiddleDate, setTime, resetTime, getDateInMs, getDateCount, addDays, addMonths, addYears, getStartEndHours, getMaxDays, getDaysCount, getDateFromString, getScrollBarWidth, findIndexInData, getOuterHeight, removeChildren, isDaylightSavingTime, getUniversalTime, isMobile, isIPadDevice, capitalizeFirstWord, Resize, DragAndDrop, HeaderRenderer, ViewBase, Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda, TimelineViews, TimelineMonth, TimelineYear, Timezone, timezoneData, ICalendarExport, ICalendarImport, ExcelExport, Print, RecurrenceEditor, generateSummary, generate, getDateFromRecurrenceDateString, extractObjectFromRule, getCalendarUtil, getRecurrenceStringFromDate, Gregorian, Islamic };
25970
26311
  //# sourceMappingURL=ej2-schedule.es5.js.map