@progress/kendo-angular-scheduler 2.2.0-dev.202111260859 → 3.0.1-dev.202202071010

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 (106) hide show
  1. package/dist/cdn/js/kendo-angular-scheduler.js +2 -2
  2. package/dist/cdn/main.js +1 -1
  3. package/dist/es/editing/date-time-picker.component.js +2 -1
  4. package/dist/es/editing/edit-dialog.component.js +1 -1
  5. package/dist/es/editing/recurrence/end-rule-radio-button.directive.js +5 -0
  6. package/dist/es/editing/recurrence/recurrence-monthly-yearly-editor.component.js +1 -1
  7. package/dist/es/editing/recurrence/repeat-on-radio-button.directive.js +5 -0
  8. package/dist/es/events/slot-drag-end-event.js +17 -0
  9. package/dist/es/events/slot-drag-event.js +18 -0
  10. package/dist/es/events/slot-drag-start-event.js +24 -0
  11. package/dist/es/events.js +3 -0
  12. package/dist/es/index.js +1 -0
  13. package/dist/es/package-metadata.js +1 -1
  14. package/dist/es/scheduler.component.js +73 -1
  15. package/dist/es/scheduler.module.js +5 -1
  16. package/dist/es/toolbar/view-selector.component.js +1 -1
  17. package/dist/es/types/slot-selection.js +23 -0
  18. package/dist/es/types.js +1 -0
  19. package/dist/es/views/common/base-view.js +103 -8
  20. package/dist/es/views/common/slot-selectable.directive.js +117 -0
  21. package/dist/es/views/common/view-footer.component.js +1 -1
  22. package/dist/es/views/common/views-shared.module.js +2 -1
  23. package/dist/es/views/day-time/day-time-view.component.js +1 -1
  24. package/dist/es/views/day-time/day-time.module.js +2 -1
  25. package/dist/es/views/month/month-view-renderer.component.js +9 -5
  26. package/dist/es/views/multi-day/multi-day-view-renderer.component.js +3 -3
  27. package/dist/es/views/timeline/timeline-multi-day-view.component.js +1 -1
  28. package/dist/es/views/utils.js +49 -0
  29. package/dist/es/views/view-state.service.js +18 -0
  30. package/dist/es2015/editing/date-time-picker.component.js +7 -1
  31. package/dist/es2015/editing/edit-dialog.component.js +7 -7
  32. package/dist/es2015/editing/recurrence/end-rule-radio-button.directive.d.ts +1 -0
  33. package/dist/es2015/editing/recurrence/end-rule-radio-button.directive.js +5 -0
  34. package/dist/es2015/editing/recurrence/recurrence-monthly-yearly-editor.component.js +14 -5
  35. package/dist/es2015/editing/recurrence/repeat-on-radio-button.directive.d.ts +1 -0
  36. package/dist/es2015/editing/recurrence/repeat-on-radio-button.directive.js +5 -0
  37. package/dist/es2015/events/slot-drag-end-event.d.ts +10 -0
  38. package/dist/es2015/events/slot-drag-end-event.js +10 -0
  39. package/dist/es2015/events/slot-drag-event.d.ts +39 -0
  40. package/dist/es2015/events/slot-drag-event.js +16 -0
  41. package/dist/es2015/events/slot-drag-start-event.d.ts +41 -0
  42. package/dist/es2015/events/slot-drag-start-event.js +19 -0
  43. package/dist/es2015/events.d.ts +3 -0
  44. package/dist/es2015/events.js +3 -0
  45. package/dist/es2015/index.d.ts +2 -0
  46. package/dist/es2015/index.js +1 -0
  47. package/dist/es2015/index.metadata.json +1 -1
  48. package/dist/es2015/package-metadata.js +1 -1
  49. package/dist/es2015/scheduler.component.d.ts +27 -0
  50. package/dist/es2015/scheduler.component.js +73 -1
  51. package/dist/es2015/scheduler.module.js +5 -1
  52. package/dist/es2015/toolbar/view-selector.component.js +1 -1
  53. package/dist/es2015/types/datepicker-options.interface.d.ts +5 -5
  54. package/dist/es2015/types/slot-selection.d.ts +71 -0
  55. package/dist/es2015/types/slot-selection.js +19 -0
  56. package/dist/es2015/types.d.ts +2 -0
  57. package/dist/es2015/types.js +1 -0
  58. package/dist/es2015/views/common/base-view.d.ts +26 -5
  59. package/dist/es2015/views/common/base-view.js +103 -8
  60. package/dist/es2015/views/common/slot-selectable.directive.d.ts +45 -0
  61. package/dist/es2015/views/common/slot-selectable.directive.js +112 -0
  62. package/dist/es2015/views/common/view-footer.component.js +1 -1
  63. package/dist/es2015/views/common/views-shared.module.js +2 -1
  64. package/dist/es2015/views/day-time/day-time-view.component.js +1 -1
  65. package/dist/es2015/views/day-time/day-time.module.js +2 -1
  66. package/dist/es2015/views/month/month-view-renderer.component.d.ts +3 -2
  67. package/dist/es2015/views/month/month-view-renderer.component.js +17 -7
  68. package/dist/es2015/views/multi-day/multi-day-view-renderer.component.d.ts +1 -1
  69. package/dist/es2015/views/multi-day/multi-day-view-renderer.component.js +22 -4
  70. package/dist/es2015/views/timeline/timeline-multi-day-view.component.js +8 -1
  71. package/dist/es2015/views/utils.d.ts +29 -0
  72. package/dist/es2015/views/utils.js +49 -0
  73. package/dist/es2015/views/view-state.service.d.ts +24 -1
  74. package/dist/es2015/views/view-state.service.js +18 -0
  75. package/dist/fesm2015/index.js +1674 -1231
  76. package/dist/fesm5/index.js +1803 -1388
  77. package/dist/npm/editing/date-time-picker.component.js +2 -1
  78. package/dist/npm/editing/edit-dialog.component.js +1 -1
  79. package/dist/npm/editing/recurrence/end-rule-radio-button.directive.js +5 -0
  80. package/dist/npm/editing/recurrence/recurrence-monthly-yearly-editor.component.js +1 -1
  81. package/dist/npm/editing/recurrence/repeat-on-radio-button.directive.js +5 -0
  82. package/dist/npm/events/slot-drag-end-event.js +19 -0
  83. package/dist/npm/events/slot-drag-event.js +20 -0
  84. package/dist/npm/events/slot-drag-start-event.js +26 -0
  85. package/dist/npm/events.js +6 -0
  86. package/dist/npm/index.js +2 -0
  87. package/dist/npm/package-metadata.js +1 -1
  88. package/dist/npm/scheduler.component.js +73 -1
  89. package/dist/npm/scheduler.module.js +4 -0
  90. package/dist/npm/toolbar/view-selector.component.js +1 -1
  91. package/dist/npm/types/slot-selection.js +25 -0
  92. package/dist/npm/types.js +2 -0
  93. package/dist/npm/views/common/base-view.js +102 -7
  94. package/dist/npm/views/common/slot-selectable.directive.js +119 -0
  95. package/dist/npm/views/common/view-footer.component.js +1 -1
  96. package/dist/npm/views/common/views-shared.module.js +2 -1
  97. package/dist/npm/views/day-time/day-time-view.component.js +1 -1
  98. package/dist/npm/views/day-time/day-time.module.js +2 -1
  99. package/dist/npm/views/month/month-view-renderer.component.js +8 -4
  100. package/dist/npm/views/multi-day/multi-day-view-renderer.component.js +3 -3
  101. package/dist/npm/views/timeline/timeline-multi-day-view.component.js +1 -1
  102. package/dist/npm/views/utils.js +53 -0
  103. package/dist/npm/views/view-state.service.js +18 -0
  104. package/dist/systemjs/kendo-angular-scheduler.js +1 -1
  105. package/package.json +27 -24
  106. package/schematics/ngAdd/index.js +1 -1
@@ -10,17 +10,19 @@ import { Subscription, BehaviorSubject, combineLatest, fromEvent, merge } from '
10
10
  import { switchMap, take, map, filter, tap } from 'rxjs/operators';
11
11
  import { closestInScope, hasClasses, preventLockedScroll, scrollbarWidth, wheelDeltaY, hasScrollbar } from '../../common/dom-queries';
12
12
  import { groupResources, getField, setField, fromClick, fromDoubleClick } from '../../common/util';
13
- import { assignTasksResources, toPx, elementOffset, pointDistance, ignoreContentChild, resourceItemByValue, convertNgClassBindings } from '../utils';
13
+ import { assignTasksResources, toPx, elementOffset, pointDistance, ignoreContentChild, resourceItemByValue, convertNgClassBindings, toUTCDateTime, dateWithTime, normaliseRangeStartAndEnd } from '../utils';
14
14
  import { BORDER_WIDTH } from '../constants';
15
15
  import Draggable from '@telerik/kendo-draggable';
16
16
  import { HintContainerComponent } from '../common/hint-container.component';
17
+ import { slotDragEventName } from '../../types/slot-selection';
18
+ import { SlotDragStartEvent } from '../../events/slot-drag-start-event';
17
19
  var SCROLL_CHANGE = 15;
18
20
  var MIN_DISTANCE = 60;
19
21
  var SCROLL_INTERVAL = 50;
20
22
  var MIN_MOVE_DISTANCE = 10;
21
23
  /** @hidden */
22
24
  var BaseView = /** @class */ (function () {
23
- function BaseView(viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization) {
25
+ function BaseView(viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization, cdr) {
24
26
  this.viewContext = viewContext;
25
27
  this.viewState = viewState;
26
28
  this.intl = intl;
@@ -30,6 +32,7 @@ var BaseView = /** @class */ (function () {
30
32
  this.element = element;
31
33
  this.pdfService = pdfService;
32
34
  this.localization = localization;
35
+ this.cdr = cdr;
33
36
  this.items = new BehaviorSubject(null);
34
37
  this.horizontalResources = [];
35
38
  this.verticalResources = [];
@@ -43,8 +46,17 @@ var BaseView = /** @class */ (function () {
43
46
  this.spans = [];
44
47
  this.domEvents = [];
45
48
  this.resourcesCache = {};
49
+ /**
50
+ * The slot which is currently being dragged over while selecting a range of slots.
51
+ */
52
+ this.dragSelecting = null;
53
+ /**
54
+ * The slot where the drag-selecting originated. Used for flipping the start and end of the emitted range.
55
+ */
56
+ this.dragSelectOrigin = null;
46
57
  this.autoHeight = false;
47
58
  this.rtl = false;
59
+ this.isSlotSelected = function () { return false; };
48
60
  this.setSlotClass = this.setSlotClass.bind(this);
49
61
  this.setHintClass = this.setHintClass.bind(this);
50
62
  this.weekStart = intl.firstDay();
@@ -175,6 +187,20 @@ var BaseView = /** @class */ (function () {
175
187
  }
176
188
  return result;
177
189
  };
190
+ // Similar to https://tc39.es/proposal-temporal/docs/plaindate.html
191
+ // Stores a "plain date" in the UTC parts of a regular `Date`.
192
+ BaseView.prototype.toPlainDate = function (date) {
193
+ var result = toUTCDateTime(this.convertDate(date));
194
+ return result;
195
+ };
196
+ // Similar to https://tc39.es/proposal-temporal/docs/plaindatetime.html
197
+ // Stores a "plain date-time" in the UTC parts of a regular `Date`.
198
+ BaseView.prototype.toPlainDateTime = function (date, time) {
199
+ if (!date || !time) {
200
+ return null;
201
+ }
202
+ return this.toPlainDate(dateWithTime(date, time));
203
+ };
178
204
  BaseView.prototype.optionsChange = function (options) {
179
205
  this.schedulerEventTemplate = options.eventTemplate;
180
206
  this.schedulerGroupHeaderTemplate = options.groupHeaderTemplate;
@@ -182,6 +208,8 @@ var BaseView = /** @class */ (function () {
182
208
  this.max = options.max;
183
209
  this.editable = options.editable;
184
210
  this.timezone = options.timezone;
211
+ this.selectable = options.selectable;
212
+ this.isSlotSelected = options.isSlotSelected;
185
213
  if (!options.changes || anyChanged(['group', 'resources'], options.changes, false) ||
186
214
  options.group !== this.group || options.resources !== this.resources) {
187
215
  this.group = options.group;
@@ -208,6 +236,7 @@ var BaseView = /** @class */ (function () {
208
236
  this.toggleElement(true);
209
237
  this.reflow();
210
238
  this.viewState.notifyLayoutEnd();
239
+ this.viewState.emitEvent(slotDragEventName.refreshSlotSelection);
211
240
  };
212
241
  BaseView.prototype.assignResources = function () {
213
242
  assignTasksResources(this.tasks, {
@@ -249,16 +278,16 @@ var BaseView = /** @class */ (function () {
249
278
  });
250
279
  };
251
280
  BaseView.prototype.onPress = function (args) {
252
- var resizable = this.editable && this.editable.resize !== false;
253
- var draggable = this.editable && this.editable.drag !== false;
281
+ var editResizable = this.editable && this.editable.resize !== false;
282
+ var editDraggable = this.editable && this.editable.drag !== false;
254
283
  var target = args.originalEvent.target;
255
284
  if (hasClasses(target, 'k-resize-handle')) {
256
- if (!resizable) {
285
+ if (!editResizable) {
257
286
  return;
258
287
  }
259
288
  this.initResize(args);
260
289
  }
261
- else if (draggable) {
290
+ else if (editDraggable) {
262
291
  var task = this.targetTask(target);
263
292
  if (task) {
264
293
  if (!args.isTouch) {
@@ -268,6 +297,10 @@ var BaseView = /** @class */ (function () {
268
297
  this.pressTarget = task;
269
298
  }
270
299
  }
300
+ var notDraggingEvent = !this.pressTarget;
301
+ if (notDraggingEvent && this.selectable) {
302
+ this.initDragSelect(args);
303
+ }
271
304
  this.dragArgs = args;
272
305
  };
273
306
  BaseView.prototype.onDrag = function (args) {
@@ -282,12 +315,15 @@ var BaseView = /** @class */ (function () {
282
315
  args.originalEvent.preventDefault();
283
316
  this.scrollContainer(this.drag, args);
284
317
  }
318
+ if (this.dragSelecting) {
319
+ this.dragSelect(args);
320
+ }
285
321
  }
286
322
  this.dragArgs = args;
287
323
  };
288
- BaseView.prototype.onRelease = function () {
324
+ BaseView.prototype.onRelease = function (args) {
289
325
  clearInterval(this.scrollInterval);
290
- var _a = this, resizing = _a.resizing, dragging = _a.dragging;
326
+ var _a = this, resizing = _a.resizing, dragging = _a.dragging, dragSelecting = _a.dragSelecting;
291
327
  if (resizing) {
292
328
  this.emitEvent('resizeEnd', {
293
329
  event: resizing.task.event,
@@ -314,6 +350,20 @@ var BaseView = /** @class */ (function () {
314
350
  this.resizing = null;
315
351
  this.dragging = null;
316
352
  }
353
+ if (dragSelecting) {
354
+ var _b = normaliseRangeStartAndEnd(this.dragSelectOrigin, this.dragSelecting), start = _b.start, end = _b.end;
355
+ var range = {
356
+ start: this.convertDate(start),
357
+ end: this.convertDate(end),
358
+ isAllDay: this.dragSelecting.isDaySlot,
359
+ resources: this.resourcesByIndex(this.dragSelecting.id.resourceIndex),
360
+ originalEvent: args.originalEvent
361
+ };
362
+ this.viewState.notifySlotSelectionEnd(range);
363
+ this.dragSelectOrigin = null;
364
+ this.dragSelecting = null;
365
+ this.cdr.markForCheck();
366
+ }
317
367
  this.container = null;
318
368
  this.dragArgs = null;
319
369
  this.pressLocation = null;
@@ -465,6 +515,51 @@ var BaseView = /** @class */ (function () {
465
515
  this.updateHintContainer();
466
516
  }
467
517
  };
518
+ BaseView.prototype.initDragSelect = function (args) {
519
+ this.updateDragContainer(args);
520
+ if (!this.containerOffset) {
521
+ return;
522
+ }
523
+ var _a = this.coordinatesOffset(args.pageX, args.pageY), x = _a.x, y = _a.y;
524
+ var slot = this.slotByPosition(x, y, this.container);
525
+ if (!slot) {
526
+ return;
527
+ }
528
+ var range = {
529
+ start: this.convertDate(slot.start),
530
+ end: this.convertDate(slot.end),
531
+ isAllDay: slot.isDaySlot,
532
+ resources: this.resourcesByIndex(slot.id.resourceIndex),
533
+ originalEvent: args.originalEvent
534
+ };
535
+ var slotDragStartEvent = new SlotDragStartEvent(null, range);
536
+ this.viewState.notifySlotSelectionStart(slotDragStartEvent);
537
+ if (!slotDragStartEvent.isDefaultPrevented()) {
538
+ this.dragSelecting = slot;
539
+ this.dragSelectOrigin = slot;
540
+ this.cdr.markForCheck();
541
+ }
542
+ };
543
+ BaseView.prototype.dragSelect = function (args) {
544
+ var _a = this.coordinatesOffset(args.pageX, args.pageY), x = _a.x, y = _a.y;
545
+ var slot = this.slotByPosition(x, y, this.container);
546
+ if (!slot) {
547
+ return;
548
+ }
549
+ if (this.dragSelecting !== slot) {
550
+ this.dragSelecting = slot;
551
+ var _b = normaliseRangeStartAndEnd(this.dragSelectOrigin, this.dragSelecting), start = _b.start, end = _b.end;
552
+ var range = {
553
+ start: this.convertDate(start),
554
+ end: this.convertDate(end),
555
+ isAllDay: slot.isDaySlot,
556
+ resources: this.resourcesByIndex(slot.id.resourceIndex),
557
+ originalEvent: args.originalEvent
558
+ };
559
+ this.viewState.notifySlotSelectionDrag(range);
560
+ this.cdr.markForCheck();
561
+ }
562
+ };
468
563
  BaseView.prototype.dragHintClasses = function () {
469
564
  var hintClass = this.dragging.hintClass;
470
565
  var result = [];
@@ -0,0 +1,117 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import * as tslib_1 from "tslib";
6
+ import { Directive, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
7
+ import { Subscription } from 'rxjs';
8
+ import { intersects, isSameRange, resourcesMatch } from '../utils';
9
+ import { SchedulerComponent } from '../../scheduler.component';
10
+ import { distinctUntilChanged, filter } from 'rxjs/operators';
11
+ import { isChanged } from '@progress/kendo-angular-common';
12
+ /**
13
+ * A directive which manages the in-memory selection state of the Scheduler slots
14
+ * ([see example]({% slug slotselection_scheduler %}#toc-built-in-directive)).
15
+ */
16
+ var SlotSelectableDirective = /** @class */ (function () {
17
+ function SlotSelectableDirective(scheduler, cdr) {
18
+ var _this = this;
19
+ this.scheduler = scheduler;
20
+ this.cdr = cdr;
21
+ /**
22
+ * Fires when the currently selected slot range has changed through user interaction.
23
+ */
24
+ this.slotSelectionChange = new EventEmitter();
25
+ this.selectedRange = null;
26
+ this.slotSelectionChangeSource = new EventEmitter();
27
+ this.subscriptions = new Subscription();
28
+ this.scheduler.selectable = true;
29
+ this.subscriptions.add(this.slotSelectionChangeSource
30
+ .pipe(distinctUntilChanged(isSameRange)).subscribe(function (v) {
31
+ _this.slotSelectionChange.emit(v);
32
+ }));
33
+ var start$ = this.scheduler.slotDragStart;
34
+ var drag$ = this.scheduler.slotDrag;
35
+ var end$ = this.scheduler.slotDragEnd;
36
+ var startSource = start$.pipe(filter(function (e) { return !e.isDefaultPrevented(); }));
37
+ this.subscriptions.add(startSource.subscribe(function (e) { return _this.initDragSelect(e); }));
38
+ this.subscriptions.add(drag$.subscribe(function (e) { return _this.onDrag(e); }));
39
+ this.subscriptions.add(end$.subscribe(function () { return _this.onRelease(); }));
40
+ }
41
+ SlotSelectableDirective.prototype.ngOnInit = function () {
42
+ this.scheduler.isSlotSelected = this.isSlotSelected.bind(this);
43
+ };
44
+ SlotSelectableDirective.prototype.ngOnChanges = function (changes) {
45
+ if (isChanged("slotSelection", changes, false)) {
46
+ /**
47
+ * The default values for resources below are necessarry because this is not fixed yet: https://github.com/telerik/kendo-angular-scheduler/pull/338
48
+ */
49
+ var resources = this.scheduler.resources ? [this.scheduler.resources[0].data[0]] : [undefined];
50
+ this.selectedRange = Object.assign({}, { isAllDay: false, resources: resources }, changes.slotSelection.currentValue);
51
+ this.cdr.markForCheck();
52
+ }
53
+ };
54
+ SlotSelectableDirective.prototype.ngOnDestroy = function () {
55
+ this.subscriptions.unsubscribe();
56
+ };
57
+ SlotSelectableDirective.prototype.isSlotSelected = function (_a) {
58
+ var start = _a.start, end = _a.end, isAllDay = _a.isAllDay, resources = _a.resources;
59
+ if (!start || !end || !this.selectedRange) {
60
+ return false;
61
+ }
62
+ var match = resourcesMatch(this.selectedRange.resources, resources);
63
+ if (!match) {
64
+ return false; // Limit selection to the grouped resource where the drag started.
65
+ }
66
+ return this.selectedRange && isAllDay === this.selectedRange.isAllDay && this.isInRange(start, end);
67
+ };
68
+ SlotSelectableDirective.prototype.initDragSelect = function (_a) {
69
+ var start = _a.start, end = _a.end, isAllDay = _a.isAllDay, resources = _a.resources;
70
+ this.selectionOriginResources = resources.slice();
71
+ this.selectedRange = { start: start, end: end, isAllDay: isAllDay, resources: resources.slice() };
72
+ this.cdr.markForCheck();
73
+ };
74
+ SlotSelectableDirective.prototype.onDrag = function (_a) {
75
+ var start = _a.start, end = _a.end, resources = _a.resources;
76
+ var match = resourcesMatch(this.selectionOriginResources, resources);
77
+ if (!match) {
78
+ return; // Don't change selection when dragging over a different grouped resource's cells.
79
+ }
80
+ this.selectedRange.start = start;
81
+ this.selectedRange.end = end;
82
+ this.cdr.markForCheck();
83
+ };
84
+ SlotSelectableDirective.prototype.onRelease = function () {
85
+ this.selectionOriginResources = null;
86
+ if (this.selectedRange) {
87
+ this.slotSelectionChangeSource.emit(this.selectedRange);
88
+ }
89
+ };
90
+ /**
91
+ * @hidden
92
+ * Checks if the selected range contains a local date range.
93
+ */
94
+ SlotSelectableDirective.prototype.isInRange = function (start, end) {
95
+ if (!this.selectedRange) {
96
+ return;
97
+ }
98
+ return intersects(start, end, this.selectedRange.start, this.selectedRange.end);
99
+ };
100
+ tslib_1.__decorate([
101
+ Input(),
102
+ tslib_1.__metadata("design:type", Object)
103
+ ], SlotSelectableDirective.prototype, "slotSelection", void 0);
104
+ tslib_1.__decorate([
105
+ Output(),
106
+ tslib_1.__metadata("design:type", EventEmitter)
107
+ ], SlotSelectableDirective.prototype, "slotSelectionChange", void 0);
108
+ SlotSelectableDirective = tslib_1.__decorate([
109
+ Directive({
110
+ selector: '[kendoSchedulerSlotSelectable]'
111
+ }),
112
+ tslib_1.__metadata("design:paramtypes", [SchedulerComponent,
113
+ ChangeDetectorRef])
114
+ ], SlotSelectableDirective);
115
+ return SlotSelectableDirective;
116
+ }());
117
+ export { SlotSelectableDirective };
@@ -42,7 +42,7 @@ var ViewFooterComponent = /** @class */ (function () {
42
42
  Component({
43
43
  // tslint:disable-next-line:component-selector
44
44
  selector: '[viewFooter]',
45
- template: "\n <button type=\"button\" class=\"k-button\" *ngFor=\"let item of items\" [ngClass]=\"item.cssClass\" (click)=\"onItemClick($event, item)\">\n <span class=\"k-button-icon k-icon\" [ngClass]=\"item.iconClass\"></span>\n <span class=\"k-button-text\">{{ item.text }}</span>\n </button>\n "
45
+ template: "\n <button type=\"button\" kendoButton *ngFor=\"let item of items\" [ngClass]=\"item.cssClass\" (click)=\"onItemClick($event, item)\">\n <span class=\"k-button-icon k-icon\" [ngClass]=\"item.iconClass\"></span>\n <span class=\"k-button-text\">{{ item.text }}</span>\n </button>\n "
46
46
  })
47
47
  ], ViewFooterComponent);
48
48
  return ViewFooterComponent;
@@ -13,6 +13,7 @@ import { ResourceIteratorPipe } from './resource-iterator.pipe';
13
13
  import { HintContainerComponent } from './hint-container.component';
14
14
  import { ResizeHintComponent } from './resize-hint.component';
15
15
  import { SharedModule } from '../../shared.module';
16
+ import { ButtonsModule } from '@progress/kendo-angular-buttons';
16
17
  var DECLARATIONS = [
17
18
  ViewFooterComponent,
18
19
  WorkHoursFooterDirective,
@@ -29,7 +30,7 @@ var ViewsSharedModule = /** @class */ (function () {
29
30
  }
30
31
  ViewsSharedModule = tslib_1.__decorate([
31
32
  NgModule({
32
- imports: [CommonModule, IntlModule, SharedModule],
33
+ imports: [CommonModule, IntlModule, SharedModule, ButtonsModule],
33
34
  exports: [
34
35
  DECLARATIONS,
35
36
  IntlModule,
@@ -25,7 +25,7 @@ var ɵ2 = getNextDate;
25
25
  var DayTimeViewComponent = /** @class */ (function (_super) {
26
26
  tslib_1.__extends(DayTimeViewComponent, _super);
27
27
  function DayTimeViewComponent(changeDetector, viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization) {
28
- var _this = _super.call(this, viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization) || this;
28
+ var _this = _super.call(this, viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization, changeDetector) || this;
29
29
  _this.changeDetector = changeDetector;
30
30
  _this.numberOfDays = 1;
31
31
  _this.startTime = '00:00';
@@ -8,6 +8,7 @@ import { CommonModule } from '@angular/common';
8
8
  import { SharedModule } from '../../shared.module';
9
9
  import { TimeSlotDirective, DaySlotDirective } from './event-slot.directive';
10
10
  import { DayTimeViewItemComponent } from './day-time-view-item.component';
11
+ import { ViewsSharedModule } from '../common/views-shared.module';
11
12
  var DIRECTIVES = [TimeSlotDirective, DaySlotDirective, DayTimeViewItemComponent];
12
13
  /**
13
14
  * @hidden
@@ -17,7 +18,7 @@ var DayTimeModule = /** @class */ (function () {
17
18
  }
18
19
  DayTimeModule = tslib_1.__decorate([
19
20
  NgModule({
20
- imports: [CommonModule, SharedModule],
21
+ imports: [CommonModule, SharedModule, ViewsSharedModule],
21
22
  exports: [
22
23
  DIRECTIVES
23
24
  ],
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as tslib_1 from "tslib";
6
- import { Component, Input, NgZone, ElementRef, Renderer2, TemplateRef } from '@angular/core';
6
+ import { Component, Input, NgZone, ElementRef, Renderer2, TemplateRef, ChangeDetectorRef } from '@angular/core';
7
7
  import { IntlService } from '@progress/kendo-angular-intl';
8
8
  import { isChanged } from '@progress/kendo-angular-common';
9
9
  import { addDays, addMonths, firstDayInWeek, firstDayOfMonth, getDate, toLocalDate } from '@progress/kendo-date-math';
@@ -23,8 +23,8 @@ var WEEKS_COUNT = 6;
23
23
  */
24
24
  var MonthViewRendererComponent = /** @class */ (function (_super) {
25
25
  tslib_1.__extends(MonthViewRendererComponent, _super);
26
- function MonthViewRendererComponent(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization) {
27
- var _this = _super.call(this, viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization) || this;
26
+ function MonthViewRendererComponent(viewContext, viewState, intl, slotService, zone, element, renderer, pdfService, localization, changeDetector) {
27
+ var _this = _super.call(this, viewContext, viewState, intl, slotService, zone, renderer, element, pdfService, localization, changeDetector) || this;
28
28
  _this.resizeHintFormat = { skeleton: 'Md' };
29
29
  _this.weeks = [];
30
30
  return _this;
@@ -80,6 +80,9 @@ var MonthViewRendererComponent = /** @class */ (function (_super) {
80
80
  MonthViewRendererComponent.prototype.cellTitle = function (value) {
81
81
  return this.intl.formatDate(value, 'D');
82
82
  };
83
+ MonthViewRendererComponent.prototype.addDay = function (dayStart) {
84
+ return addDays(dayStart, 1);
85
+ };
83
86
  MonthViewRendererComponent.prototype.optionsChange = function (changes) {
84
87
  this.schedulerMonthDaySlotTemplate = changes.monthDaySlotTemplate;
85
88
  _super.prototype.optionsChange.call(this, changes);
@@ -194,7 +197,7 @@ var MonthViewRendererComponent = /** @class */ (function (_super) {
194
197
  providers: [
195
198
  MonthSlotService
196
199
  ],
197
- template: "\n <div class=\"k-scheduler-layout k-scheduler-monthview k-scheduler-flex-layout\">\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #timesHeader *ngIf=\"verticalResources.length\">\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr>\n <th></th>\n </tr>\n </table>\n </div>\n <div class=\"k-scheduler-header k-state-default\" #header>\n <div class=\"k-scheduler-header-wrap\" #headerWrap>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; let resourceIndex = index; trackBy: itemIndex\">\n <th *ngFor=\"let item of horizontalResources | resourceIterator : resourceIndex; trackBy: itemIndex\"\n class=\"k-slot-cell\" [attr.colspan]=\"horizontalColspan(resourceIndex)\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(item, resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ resource: item }\"></ng-container>\n </th>\n </tr>\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; trackBy: itemIndex\">\n <th *ngFor=\"let day of weeks[0]; trackBy: itemIndex\">\n {{ day | kendoDate: 'EEEE' }}\n </th>\n </ng-container>\n </tr>\n </table>\n </div>\n </div>\n </div>\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times k-scheduler-resources\" #times *ngIf=\"verticalResources.length\">\n <table class=\"k-scheduler-table\" #timesTable aria-hidden=\"true\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let leafIndex = index; trackBy: itemIndex\">\n <tr>\n <ng-container *ngFor=\"let resource of verticalResources; let resourceIndex = index; trackBy: itemIndex\">\n <th *ngIf=\"verticalItem(leafIndex, resourceIndex)\" [attr.rowspan]=\"verticalRowspan(resourceIndex)\" class=\"k-slot-cell\" [ngClass]=\"{ 'k-last-resource': resourceIndex === verticalResources.length - 1 }\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(verticalItem(leafIndex, resourceIndex), resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\"\n [ngTemplateOutletContext]=\"{ resource: verticalItem(leafIndex, resourceIndex) }\"></ng-container>\n </th>\n </ng-container>\n <th class=\"k-slot-cell k-empty-slot\">\n </th>\n </tr>\n <tr *ngFor=\"let index of 5 | repeat; trackBy: itemIndex\">\n <th class=\"k-slot-cell k-empty-slot\"></th>\n </tr>\n </ng-container>\n </table>\n </div>\n <div class=\"k-scheduler-content\" #content>\n <table class=\"k-scheduler-table\" #contentTable role=\"presentation\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex\">\n <tr *ngFor=\"let week of weeks; let rangeIndex = index; trackBy: itemIndex\">\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex\">\n <td *ngFor=\"let day of week; let index = index; trackBy: itemIndex\"\n monthSlot\n [ngClass]=\"daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)\"\n [start]=\"day\"\n [id]=\"{ resourceIndex: verticalResources.length ? verticalIndex : horizontalIndex, rangeIndex: rangeIndex, index: index }\"\n [title]=\"cellTitle(day)\"\n >\n <span aria-hidden=\"true\" class=\"k-link k-nav-day\" *ngIf=\"!monthDaySlotTemplateRef\" >{{ day | kendoDate: 'dd' }}</span>\n <ng-container *ngIf=\"monthDaySlotTemplateRef\" [ngTemplateOutlet]=\"monthDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: day, resources: resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex) }\"></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n <ng-container *ngFor=\"let item of items | async; trackBy: itemIndex\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex\"\n [ngClass]=\"getEventClasses(item, itemResource.resources)\"\n [ngStyle]=\"getEventStyles(item, itemResource)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n monthViewItem\n [editable]=\"editable\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [eventTemplate]=\"eventTemplateRef\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <kendo-hint-container #hintContainer>\n <ng-template>\n <div *ngFor=\"let hint of dragHints; trackBy: itemIndex;\"\n class=\"k-event-drag-hint\"\n monthViewItem\n [ngStyle]=\"hint.style\"\n [ngClass]=\"hint.class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"hint.item\"\n [resources]=\"hint.resources\">\n </div>\n\n <div *ngFor=\"let hint of resizeHints; trackBy: itemIndex;\"\n kendoResizeHint\n [hint]=\"hint\"\n [ngClass]=\"hint.class\"\n [format]=\"resizeHintFormat\">\n </div>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n "
200
+ template: "\n <div class=\"k-scheduler-layout k-scheduler-monthview k-scheduler-flex-layout\">\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #timesHeader *ngIf=\"verticalResources.length\">\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr>\n <th></th>\n </tr>\n </table>\n </div>\n <div class=\"k-scheduler-header k-state-default\" #header>\n <div class=\"k-scheduler-header-wrap\" #headerWrap>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; let resourceIndex = index; trackBy: itemIndex\">\n <th *ngFor=\"let item of horizontalResources | resourceIterator : resourceIndex; trackBy: itemIndex\"\n class=\"k-slot-cell\" [attr.colspan]=\"horizontalColspan(resourceIndex)\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(item, resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ resource: item }\"></ng-container>\n </th>\n </tr>\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; trackBy: itemIndex\">\n <th *ngFor=\"let day of weeks[0]; trackBy: itemIndex\">\n {{ day | kendoDate: 'EEEE' }}\n </th>\n </ng-container>\n </tr>\n </table>\n </div>\n </div>\n </div>\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times k-scheduler-resources\" #times *ngIf=\"verticalResources.length\">\n <table class=\"k-scheduler-table\" #timesTable aria-hidden=\"true\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let leafIndex = index; trackBy: itemIndex\">\n <tr>\n <ng-container *ngFor=\"let resource of verticalResources; let resourceIndex = index; trackBy: itemIndex\">\n <th *ngIf=\"verticalItem(leafIndex, resourceIndex)\" [attr.rowspan]=\"verticalRowspan(resourceIndex)\" class=\"k-slot-cell\" [ngClass]=\"{ 'k-last-resource': resourceIndex === verticalResources.length - 1 }\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(verticalItem(leafIndex, resourceIndex), resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\"\n [ngTemplateOutletContext]=\"{ resource: verticalItem(leafIndex, resourceIndex) }\"></ng-container>\n </th>\n </ng-container>\n <th class=\"k-slot-cell k-empty-slot\">\n </th>\n </tr>\n <tr *ngFor=\"let index of 5 | repeat; trackBy: itemIndex\">\n <th class=\"k-slot-cell k-empty-slot\"></th>\n </tr>\n </ng-container>\n </table>\n </div>\n <div class=\"k-scheduler-content\" #content>\n <table class=\"k-scheduler-table k-user-select-none\" #contentTable role=\"presentation\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex\">\n <tr *ngFor=\"let week of weeks; let rangeIndex = index; trackBy: itemIndex\">\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex\">\n <td *ngFor=\"let day of week; let index = index; trackBy: itemIndex\"\n monthSlot\n [ngClass]=\"daySlotClass(day, verticalResources.length ? verticalIndex : horizontalIndex)\"\n [start]=\"day\"\n [id]=\"{ resourceIndex: verticalResources.length ? verticalIndex : horizontalIndex, rangeIndex: rangeIndex, index: index }\"\n [title]=\"cellTitle(day)\"\n [class.k-state-selected]=\"isSlotSelected({\n start: toPlainDate(day),\n end: addDay(toPlainDate(day)),\n isAllDay: true,\n resources: resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)\n })\"\n >\n <span aria-hidden=\"true\" class=\"k-link k-nav-day\" *ngIf=\"!monthDaySlotTemplateRef\">{{ day | kendoDate: 'dd' }}</span>\n <ng-container *ngIf=\"monthDaySlotTemplateRef\" [ngTemplateOutlet]=\"monthDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: day, resources: resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex) }\"></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n <ng-container *ngFor=\"let item of items | async; trackBy: itemIndex\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex\"\n [ngClass]=\"getEventClasses(item, itemResource.resources)\"\n [ngStyle]=\"getEventStyles(item, itemResource)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n monthViewItem\n [editable]=\"editable\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [eventTemplate]=\"eventTemplateRef\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <kendo-hint-container #hintContainer>\n <ng-template>\n <div *ngFor=\"let hint of dragHints; trackBy: itemIndex;\"\n class=\"k-event-drag-hint\"\n monthViewItem\n [ngStyle]=\"hint.style\"\n [ngClass]=\"hint.class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"hint.item\"\n [resources]=\"hint.resources\">\n </div>\n\n <div *ngFor=\"let hint of resizeHints; trackBy: itemIndex;\"\n kendoResizeHint\n [hint]=\"hint\"\n [ngClass]=\"hint.class\"\n [format]=\"resizeHintFormat\">\n </div>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n "
198
201
  }),
199
202
  tslib_1.__metadata("design:paramtypes", [ViewContextService,
200
203
  ViewStateService,
@@ -204,7 +207,8 @@ var MonthViewRendererComponent = /** @class */ (function (_super) {
204
207
  ElementRef,
205
208
  Renderer2,
206
209
  PDFService,
207
- LocalizationService])
210
+ LocalizationService,
211
+ ChangeDetectorRef])
208
212
  ], MonthViewRendererComponent);
209
213
  return MonthViewRendererComponent;
210
214
  }(BaseView));
@@ -175,8 +175,8 @@ var MultiDayViewRendererComponent = /** @class */ (function (_super) {
175
175
  }
176
176
  _super.prototype.updateHintContainer.call(this);
177
177
  };
178
- MultiDayViewRendererComponent.prototype.onRelease = function () {
179
- _super.prototype.onRelease.call(this);
178
+ MultiDayViewRendererComponent.prototype.onRelease = function (args) {
179
+ _super.prototype.onRelease.call(this, args);
180
180
  this.dragContainers = null;
181
181
  };
182
182
  MultiDayViewRendererComponent.prototype.updateDragContainer = function (args) {
@@ -305,7 +305,7 @@ var MultiDayViewRendererComponent = /** @class */ (function (_super) {
305
305
  providers: [
306
306
  DayTimeSlotService
307
307
  ],
308
- template: "\n <div class=\"k-scheduler-layout k-scheduler-flex-layout\" [ngClass]=\"classNames\">\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #timesHeader>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; trackBy: itemIndex;\">\n <th></th>\n </tr>\n <tr>\n <th>\u200B</th>\n </tr>\n <tr *ngIf=\"!verticalResources.length\">\n <th class=\"k-scheduler-times-all-day\" #allDayCell>{{ allDayMessage }}</th>\n </tr>\n </table>\n </div>\n <div class=\"k-scheduler-header k-state-default\" #header>\n <div class=\"k-scheduler-header-wrap\" #headerWrap>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; let resourceIndex = index; trackBy: itemIndex;\">\n <th *ngFor=\"let item of horizontalResources | resourceIterator : resourceIndex; trackBy: itemIndex;\"\n class=\"k-slot-cell\" [attr.colspan]=\"horizontalColspan(resourceIndex)\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(item, resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ resource: item }\"></ng-container>\n </th>\n </tr>\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; trackBy: itemIndex;\">\n <th *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\">\n <span *ngIf=\"!dateHeaderTemplateRef\" class=\"k-link k-nav-day\" [attr.data-dayslot-index]=\"index\">{{ slot.start | kendoDate: dateFormat }}</span>\n <ng-container *ngIf=\"dateHeaderTemplateRef\" [ngTemplateOutlet]=\"dateHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\"></ng-container>\n </th>\n </ng-container>\n </tr>\n </table>\n <div style=\"position: relative;\" *ngIf=\"!verticalResources.length\">\n <table class=\"k-scheduler-table k-scheduler-header-all-day\" aria-hidden=\"true\">\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let resourceIndex = index; trackBy: itemIndex;\">\n <td *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\"\n daySlot\n [start]=\"slot.start\"\n [end]=\"slot.end\"\n [id]=\"{ resourceIndex: resourceIndex, rangeIndex: 0, index: index }\"\n [ngClass]=\"allDaySlotClass(slot, resourceIndex)\">\n <ng-container *ngIf=\"allDaySlotTemplateRef\" [ngTemplateOutlet]=\"allDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: slot.start, resources: resourcesByIndex(resourceIndex) }\"></ng-container>\n </td>\n </ng-container>\n </tr>\n </table>\n <ng-container *ngFor=\"let item of allDayItems | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources, true)\"\n [ngStyle]=\"getEventStyles(item, itemResource, true)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [editable]=\"editable\"\n [eventTemplate]=\"allDayEventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <kendo-hint-container #headerHintContainer>\n <ng-template>\n <div *ngIf=\"dragHints.length && allDayDragHint\"\n class=\"k-event-drag-hint\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [ngStyle]=\"dragHints[0].style\"\n [ngClass]=\"dragHints[0].class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"dragHints[0].item\"\n [resources]=\"dragHints[0].resources\">\n </div>\n\n <div *ngIf=\"resizeHints.length && allDayResizeHint\"\n kendoResizeHint\n [hint]=\"resizeHints[0]\"\n [ngClass]=\"resizeHints[0].class\"\n [format]=\"allDayResizeHintFormat\">\n </div>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #times>\n <ng-container *ngIf=\"showCurrentTime\">\n <div *ngFor=\"let resource of verticalResources | resourceIterator; trackBy: itemIndex;\"\n #currentTimeArrow class=\"k-current-time k-current-time-arrow-right\">\n </div>\n </ng-container>\n <table class=\"k-scheduler-table\" #timesTable aria-hidden=\"true\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let leafIndex = index; trackBy: itemIndex;\">\n <tr *ngIf=\"verticalResources.length\">\n <ng-container *ngFor=\"let resource of verticalResources; let resourceIndex = index; trackBy: itemIndex;\">\n <th *ngIf=\"verticalItem(leafIndex, resourceIndex)\" [attr.rowspan]=\"verticalRowspan(resourceIndex)\" class=\"k-slot-cell\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(verticalItem(leafIndex, resourceIndex), resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\"\n [ngTemplateOutletContext]=\"{ resource: verticalItem(leafIndex, resourceIndex) }\"></ng-container>\n </th>\n </ng-container>\n <th class=\"k-scheduler-times-all-day\" #allDayCell>{{ allDayMessage }}</th>\n </tr>\n <tr *ngFor=\"let slot of timeSlots; let timeSlotIndex = index;trackBy: itemIndex\">\n <th *ngIf=\"slot.isMajor\" [ngClass]=\"{ 'k-slot-cell': slotDivisions === 1 }\">\n <ng-container *ngIf=\"!majorTimeHeaderTemplateRef\">{{ slot.start | kendoDate: 't' }}</ng-container>\n <ng-container *ngIf=\"majorTimeHeaderTemplateRef\" [ngTemplateOutlet]=\"majorTimeHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\"></ng-container>\n </th>\n <th *ngIf=\"!slot.isMajor\" [ngClass]=\"{ 'k-slot-cell': timeSlotIndex % slotDivisions === slotDivisions - 1 }\">\n <ng-container *ngIf=\"minorTimeHeaderTemplateRef\" [ngTemplateOutlet]=\"minorTimeHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\">\n </ng-container>\n </th>\n </tr>\n </ng-container>\n </table>\n </div>\n <div class=\"k-scheduler-content\" #content>\n <ng-container *ngIf=\"showCurrentTime\">\n <div *ngFor=\"let resource of verticalResources | resourceIterator; trackBy: itemIndex;\"\n #currentTimeMarker class=\"k-current-time\">\n </div>\n </ng-container>\n <table class=\"k-scheduler-table\" #contentTable role=\"presentation\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex;\">\n <tr class=\"k-scheduler-header-all-day\" *ngIf=\"verticalResources.length\">\n <td *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\"\n daySlot\n [start]=\"slot.start\"\n [end]=\"slot.end\"\n [id]=\"{ resourceIndex: verticalIndex, rangeIndex: 0, index: index }\">\n <ng-container *ngIf=\"allDaySlotTemplateRef\" [ngTemplateOutlet]=\"allDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: slot.start, resources: resourcesByIndex(verticalIndex) }\"></ng-container>\n </td>\n </tr>\n <tr *ngFor=\"let slot of timeSlots; index as index; trackBy: itemIndex\" [class.k-middle-row]=\"slot.isMajor\">\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex;\">\n <td *ngFor=\"let daySlot of daySlots; index as rangeIndex; trackBy: itemIndex\"\n [ngClass]=\"timeSlotClass(slot, daySlot.start, verticalResources.length ? verticalIndex : horizontalIndex)\"\n timeSlot #timeSlot=\"timeSlot\"\n [date]=\"daySlot.start\"\n [invariantStart]=\"slot.start\"\n [invariantEnd]=\"slot.end\"\n [workDayStart]=\"workDayStartTime\"\n [workDayEnd]=\"workDayEndTime\"\n [workWeekStart]=\"workWeekStart\"\n [workWeekEnd]=\"workWeekEnd\"\n [id]=\"{ resourceIndex: verticalResources.length ? verticalIndex : horizontalIndex, rangeIndex: rangeIndex, index: index }\"\n >\n <ng-container *ngIf=\"timeSlotTemplateRef\" [ngTemplateOutlet]=\"timeSlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: timeSlot.startLocalTime, resources: resourcesByIndex(timeSlot.id.resourceIndex) }\">\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n <ng-container *ngFor=\"let item of items | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources)\"\n [ngStyle]=\"getEventStyles(item, itemResource)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [editable]=\"editable\"\n [vertical]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"verticalResources.length\">\n <ng-container *ngFor=\"let item of allDayItems | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources, true)\"\n [ngStyle]=\"getEventStyles(item, itemResource, true)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [editable]=\"editable\"\n [eventTemplate]=\"allDayEventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n </ng-container>\n <kendo-hint-container #hintContainer>\n <ng-template>\n <div *ngIf=\"dragHints.length && (!allDayDragHint || verticalResources.length)\"\n class=\"k-event-drag-hint\"\n dayTimeViewItem\n [isAllDay]=\"allDayDragHint\"\n [ngStyle]=\"dragHints[0].style\"\n [ngClass]=\"dragHints[0].class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [resources]=\"dragHints[0].resources\"\n [item]=\"dragHints[0].item\">\n </div>\n\n <ng-container *ngIf=\"resizeHints.length && (!allDayResizeHint || verticalResources.length)\">\n <div *ngFor=\"let hint of resizeHints; trackBy: itemIndex;\"\n kendoResizeHint\n [hint]=\"hint\"\n [ngClass]=\"hint.class\"\n [format]=\"allDayResizeHint ? allDayResizeHintFormat : resizeHintFormat\">\n </div>\n </ng-container>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n "
308
+ template: "\n <div class=\"k-scheduler-layout k-scheduler-flex-layout\" [ngClass]=\"classNames\">\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #timesHeader>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; trackBy: itemIndex;\">\n <th></th>\n </tr>\n <tr>\n <th>\u200B</th>\n </tr>\n <tr *ngIf=\"!verticalResources.length\">\n <th class=\"k-scheduler-times-all-day\" #allDayCell>{{ allDayMessage }}</th>\n </tr>\n </table>\n </div>\n <div class=\"k-scheduler-header k-state-default\" #header>\n <div class=\"k-scheduler-header-wrap\" #headerWrap>\n <table class=\"k-scheduler-table\" aria-hidden=\"true\">\n <tr *ngFor=\"let resource of horizontalResources; let resourceIndex = index; trackBy: itemIndex;\">\n <th *ngFor=\"let item of horizontalResources | resourceIterator : resourceIndex; trackBy: itemIndex;\"\n class=\"k-slot-cell\" [attr.colspan]=\"horizontalColspan(resourceIndex)\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(item, resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ resource: item }\"></ng-container>\n </th>\n </tr>\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; trackBy: itemIndex;\">\n <th *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\">\n <span *ngIf=\"!dateHeaderTemplateRef\" class=\"k-link k-nav-day\" [attr.data-dayslot-index]=\"index\">{{ slot.start | kendoDate: dateFormat }}</span>\n <ng-container *ngIf=\"dateHeaderTemplateRef\" [ngTemplateOutlet]=\"dateHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\"></ng-container>\n </th>\n </ng-container>\n </tr>\n </table>\n <div style=\"position: relative;\" *ngIf=\"!verticalResources.length\">\n <table class=\"k-scheduler-table k-scheduler-header-all-day k-user-select-none\" aria-hidden=\"true\">\n <tr>\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let resourceIndex = index; trackBy: itemIndex;\">\n <td *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\"\n daySlot\n [start]=\"slot.start\"\n [end]=\"slot.end\"\n [id]=\"{ resourceIndex: resourceIndex, rangeIndex: 0, index: index }\"\n [class.k-state-selected]=\"isSlotSelected({\n start: toPlainDate(slot.start),\n end: toPlainDate(slot.end),\n isAllDay: true,\n resources: resourcesByIndex(resourceIndex)\n })\"\n [ngClass]=\"allDaySlotClass(slot, resourceIndex)\">\n <ng-container *ngIf=\"allDaySlotTemplateRef\" [ngTemplateOutlet]=\"allDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: slot.start, resources: resourcesByIndex(resourceIndex) }\"></ng-container>\n </td>\n </ng-container>\n </tr>\n </table>\n <ng-container *ngFor=\"let item of allDayItems | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources, true)\"\n [ngStyle]=\"getEventStyles(item, itemResource, true)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [editable]=\"editable\"\n [eventTemplate]=\"allDayEventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <kendo-hint-container #headerHintContainer>\n <ng-template>\n <div *ngIf=\"dragHints.length && allDayDragHint\"\n class=\"k-event-drag-hint\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [ngStyle]=\"dragHints[0].style\"\n [ngClass]=\"dragHints[0].class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"dragHints[0].item\"\n [resources]=\"dragHints[0].resources\">\n </div>\n\n <div *ngIf=\"resizeHints.length && allDayResizeHint\"\n kendoResizeHint\n [hint]=\"resizeHints[0]\"\n [ngClass]=\"resizeHints[0].class\"\n [format]=\"allDayResizeHintFormat\">\n </div>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n </div>\n <div class=\"k-scheduler-pane\">\n <div class=\"k-scheduler-times\" #times>\n <ng-container *ngIf=\"showCurrentTime\">\n <div *ngFor=\"let resource of verticalResources | resourceIterator; trackBy: itemIndex;\"\n #currentTimeArrow class=\"k-current-time k-current-time-arrow-right\">\n </div>\n </ng-container>\n <table class=\"k-scheduler-table\" #timesTable aria-hidden=\"true\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let leafIndex = index; trackBy: itemIndex;\">\n <tr *ngIf=\"verticalResources.length\">\n <ng-container *ngFor=\"let resource of verticalResources; let resourceIndex = index; trackBy: itemIndex;\">\n <th *ngIf=\"verticalItem(leafIndex, resourceIndex)\" [attr.rowspan]=\"verticalRowspan(resourceIndex)\" class=\"k-slot-cell\">\n <ng-container *ngIf=\"!groupHeaderTemplateRef\">{{ getField(verticalItem(leafIndex, resourceIndex), resource.textField) }}</ng-container>\n <ng-container *ngIf=\"groupHeaderTemplateRef\" [ngTemplateOutlet]=\"groupHeaderTemplateRef\"\n [ngTemplateOutletContext]=\"{ resource: verticalItem(leafIndex, resourceIndex) }\"></ng-container>\n </th>\n </ng-container>\n <th class=\"k-scheduler-times-all-day\" #allDayCell>{{ allDayMessage }}</th>\n </tr>\n <tr *ngFor=\"let slot of timeSlots; let timeSlotIndex = index;trackBy: itemIndex\">\n <th *ngIf=\"slot.isMajor\" [ngClass]=\"{ 'k-slot-cell': slotDivisions === 1 }\">\n <ng-container *ngIf=\"!majorTimeHeaderTemplateRef\">{{ slot.start | kendoDate: 't' }}</ng-container>\n <ng-container *ngIf=\"majorTimeHeaderTemplateRef\" [ngTemplateOutlet]=\"majorTimeHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\"></ng-container>\n </th>\n <th *ngIf=\"!slot.isMajor\" [ngClass]=\"{ 'k-slot-cell': timeSlotIndex % slotDivisions === slotDivisions - 1 }\">\n <ng-container *ngIf=\"minorTimeHeaderTemplateRef\" [ngTemplateOutlet]=\"minorTimeHeaderTemplateRef\" [ngTemplateOutletContext]=\"{ date: slot.start }\">\n </ng-container>\n </th>\n </tr>\n </ng-container>\n </table>\n </div>\n <div class=\"k-scheduler-content k-user-select-none\" #content>\n <ng-container *ngIf=\"showCurrentTime\">\n <div *ngFor=\"let resource of verticalResources | resourceIterator; trackBy: itemIndex;\"\n #currentTimeMarker class=\"k-current-time\">\n </div>\n </ng-container>\n <table class=\"k-scheduler-table\" #contentTable role=\"presentation\">\n <ng-container *ngFor=\"let resourceItem of verticalResources | resourceIterator; let verticalIndex = index; trackBy: itemIndex;\">\n <tr class=\"k-scheduler-header-all-day\" *ngIf=\"verticalResources.length\">\n <td *ngFor=\"let slot of daySlots; let index = index; trackBy: itemIndex\"\n daySlot\n [start]=\"slot.start\"\n [end]=\"slot.end\"\n [class.k-state-selected]=\"isSlotSelected({\n start: toPlainDate(slot.start),\n end: toPlainDate(slot.end),\n isAllDay: true,\n resources: resourcesByIndex(verticalIndex)\n })\"\n [id]=\"{ resourceIndex: verticalIndex, rangeIndex: 0, index: index }\">\n <ng-container *ngIf=\"allDaySlotTemplateRef\" [ngTemplateOutlet]=\"allDaySlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: slot.start, resources: resourcesByIndex(verticalIndex) }\"></ng-container>\n </td>\n </tr>\n <tr *ngFor=\"let slot of timeSlots; index as index; trackBy: itemIndex\" [class.k-middle-row]=\"slot.isMajor\">\n <ng-container *ngFor=\"let resource of horizontalResources | resourceIterator; let horizontalIndex = index; trackBy: itemIndex;\">\n <td *ngFor=\"let daySlot of daySlots; index as rangeIndex; trackBy: itemIndex\"\n [ngClass]=\"timeSlotClass(slot, daySlot.start, verticalResources.length ? verticalIndex : horizontalIndex)\"\n timeSlot #timeSlot=\"timeSlot\"\n [date]=\"daySlot.start\"\n [invariantStart]=\"slot.start\"\n [invariantEnd]=\"slot.end\"\n [workDayStart]=\"workDayStartTime\"\n [workDayEnd]=\"workDayEndTime\"\n [workWeekStart]=\"workWeekStart\"\n [workWeekEnd]=\"workWeekEnd\"\n [id]=\"{ resourceIndex: verticalResources.length ? verticalIndex : horizontalIndex, rangeIndex: rangeIndex, index: index }\"\n [class.k-state-selected]=\"isSlotSelected({\n start: toPlainDateTime(daySlot.start, slot.start),\n end: toPlainDateTime(daySlot.start, slot.end),\n isAllDay: false,\n resources: resourcesByIndex(verticalResources.length ? verticalIndex : horizontalIndex)\n })\"\n >\n <ng-container *ngIf=\"timeSlotTemplateRef\" [ngTemplateOutlet]=\"timeSlotTemplateRef\"\n [ngTemplateOutletContext]=\"{ date: timeSlot.startLocalTime, resources: resourcesByIndex(timeSlot.id.resourceIndex) }\">\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </table>\n <ng-container *ngFor=\"let item of items | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources)\"\n [ngStyle]=\"getEventStyles(item, itemResource)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [editable]=\"editable\"\n [vertical]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"verticalResources.length\">\n <ng-container *ngFor=\"let item of allDayItems | async; trackBy: itemIndex;\">\n <div *ngFor=\"let itemResource of item.resources; trackBy: itemIndex;\"\n [ngClass]=\"getEventClasses(item, itemResource.resources, true)\"\n [ngStyle]=\"getEventStyles(item, itemResource, true)\"\n [kendoSchedulerFocusIndex]=\"itemResource.leafIdx\"\n dayTimeViewItem\n [isAllDay]=\"true\"\n [editable]=\"editable\"\n [eventTemplate]=\"allDayEventTemplateRef\"\n [item]=\"item\"\n [index]=\"item.index\"\n [rangeIndex]=\"item.rangeIndex\"\n [resources]=\"itemResource.resources\"\n [resourceIndex]=\"itemResource.leafIdx\">\n </div>\n </ng-container>\n </ng-container>\n <kendo-hint-container #hintContainer>\n <ng-template>\n <div *ngIf=\"dragHints.length && (!allDayDragHint || verticalResources.length)\"\n class=\"k-event-drag-hint\"\n dayTimeViewItem\n [isAllDay]=\"allDayDragHint\"\n [ngStyle]=\"dragHints[0].style\"\n [ngClass]=\"dragHints[0].class\"\n [dragHint]=\"true\"\n [eventTemplate]=\"eventTemplateRef\"\n [resources]=\"dragHints[0].resources\"\n [item]=\"dragHints[0].item\">\n </div>\n\n <ng-container *ngIf=\"resizeHints.length && (!allDayResizeHint || verticalResources.length)\">\n <div *ngFor=\"let hint of resizeHints; trackBy: itemIndex;\"\n kendoResizeHint\n [hint]=\"hint\"\n [ngClass]=\"hint.class\"\n [format]=\"allDayResizeHint ? allDayResizeHintFormat : resizeHintFormat\">\n </div>\n </ng-container>\n </ng-template>\n </kendo-hint-container>\n </div>\n </div>\n </div>\n "
309
309
  }),
310
310
  tslib_1.__metadata("design:paramtypes", [LocalizationService,
311
311
  ViewContextService,