@pieninck/ionic2-calendar 3.0.1

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.
@@ -0,0 +1,2214 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Output, Input, ViewChild, Component, ViewEncapsulation, HostBinding, LOCALE_ID, Inject, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/common';
4
+ import { DatePipe, CommonModule } from '@angular/common';
5
+ import * as i2$1 from '@ionic/angular';
6
+ import { IonicSlides, IonicModule } from '@ionic/angular';
7
+ import SwiperCore, { Swiper } from 'swiper';
8
+ import { Subject } from 'rxjs';
9
+
10
+ class CalendarService {
11
+ constructor() {
12
+ this._currentDate = new Date();
13
+ this.currentDateChangedFromParent = new Subject();
14
+ this.currentDateChangedFromChildren = new Subject();
15
+ this.eventSourceChanged = new Subject();
16
+ this.slideChanged = new Subject();
17
+ this.slideUpdated = new Subject();
18
+ this.currentDateChangedFromParent$ = this.currentDateChangedFromParent.asObservable();
19
+ this.currentDateChangedFromChildren$ = this.currentDateChangedFromChildren.asObservable();
20
+ this.eventSourceChanged$ = this.eventSourceChanged.asObservable();
21
+ this.slideChanged$ = this.slideChanged.asObservable();
22
+ this.slideUpdated$ = this.slideUpdated.asObservable();
23
+ }
24
+ setCurrentDate(val, fromParent = false) {
25
+ this._currentDate = new Date(val);
26
+ if (fromParent) {
27
+ this.currentDateChangedFromParent.next(val);
28
+ }
29
+ else {
30
+ this.currentDateChangedFromChildren.next(val);
31
+ }
32
+ }
33
+ get currentDate() {
34
+ return this._currentDate;
35
+ }
36
+ rangeChanged(component) {
37
+ if (this.queryMode === 'local') {
38
+ if (component.eventSource && component.onDataLoaded) {
39
+ component.onDataLoaded();
40
+ }
41
+ }
42
+ else if (this.queryMode === 'remote') {
43
+ let rangeStart = new Date(component.range.startTime.getTime()), rangeEnd = new Date(component.range.endTime.getTime());
44
+ rangeStart.setHours(0);
45
+ if (rangeStart.getHours() === 23) {
46
+ rangeStart.setTime(rangeStart.getTime() + 3600000);
47
+ }
48
+ rangeEnd.setHours(0);
49
+ if (rangeEnd.getHours() === 23) {
50
+ rangeEnd.setTime(rangeEnd.getTime() + 3600000);
51
+ }
52
+ component.onRangeChanged.emit({
53
+ startTime: rangeStart,
54
+ endTime: rangeEnd
55
+ });
56
+ }
57
+ }
58
+ getStep(mode) {
59
+ switch (mode) {
60
+ case 'month':
61
+ return {
62
+ years: 0,
63
+ months: 1,
64
+ days: 0
65
+ };
66
+ case 'week':
67
+ return {
68
+ years: 0,
69
+ months: 0,
70
+ days: 7
71
+ };
72
+ case 'day':
73
+ return {
74
+ years: 0,
75
+ months: 0,
76
+ days: 1
77
+ };
78
+ }
79
+ }
80
+ getAdjacentCalendarDate(mode, direction) {
81
+ let calculateCalendarDate = this.currentDate;
82
+ const step = this.getStep(mode), year = calculateCalendarDate.getFullYear() + direction * step.years, month = calculateCalendarDate.getMonth() + direction * step.months, date = calculateCalendarDate.getDate() + direction * step.days;
83
+ calculateCalendarDate = new Date(year, month, date, 12, 0, 0);
84
+ if (mode === 'month') {
85
+ const firstDayInNextMonth = new Date(year, month + 1, 1, 12, 0, 0);
86
+ if (firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()) {
87
+ calculateCalendarDate = new Date(firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000);
88
+ }
89
+ }
90
+ return calculateCalendarDate;
91
+ }
92
+ getAdjacentViewStartTime(component, direction) {
93
+ let adjacentCalendarDate = this.getAdjacentCalendarDate(component.mode, direction);
94
+ return component.getRange(adjacentCalendarDate).startTime;
95
+ }
96
+ populateAdjacentViews(component) {
97
+ let currentViewStartDate, currentViewData, toUpdateViewIndex, currentViewIndex = component.currentViewIndex;
98
+ if (component.direction === 1) {
99
+ currentViewStartDate = this.getAdjacentViewStartTime(component, 1);
100
+ toUpdateViewIndex = (currentViewIndex + 1) % 3;
101
+ component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);
102
+ }
103
+ else if (component.direction === -1) {
104
+ currentViewStartDate = this.getAdjacentViewStartTime(component, -1);
105
+ toUpdateViewIndex = (currentViewIndex + 2) % 3;
106
+ component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);
107
+ }
108
+ else {
109
+ if (!component.views) {
110
+ currentViewData = [];
111
+ currentViewStartDate = component.range.startTime;
112
+ currentViewData.push(component.getViewData(currentViewStartDate));
113
+ currentViewStartDate = this.getAdjacentViewStartTime(component, 1);
114
+ currentViewData.push(component.getViewData(currentViewStartDate));
115
+ currentViewStartDate = this.getAdjacentViewStartTime(component, -1);
116
+ currentViewData.push(component.getViewData(currentViewStartDate));
117
+ component.views = currentViewData;
118
+ }
119
+ else {
120
+ currentViewStartDate = component.range.startTime;
121
+ component.views[currentViewIndex] = component.getViewData(currentViewStartDate);
122
+ currentViewStartDate = this.getAdjacentViewStartTime(component, -1);
123
+ toUpdateViewIndex = (currentViewIndex + 2) % 3;
124
+ component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);
125
+ currentViewStartDate = this.getAdjacentViewStartTime(component, 1);
126
+ toUpdateViewIndex = (currentViewIndex + 1) % 3;
127
+ component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);
128
+ }
129
+ }
130
+ }
131
+ loadEvents() {
132
+ this.eventSourceChanged.next();
133
+ }
134
+ slide(direction) {
135
+ this.slideChanged.next(direction);
136
+ }
137
+ update() {
138
+ this.slideUpdated.next();
139
+ }
140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalendarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
141
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalendarService }); }
142
+ }
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalendarService, decorators: [{
144
+ type: Injectable
145
+ }], ctorParameters: () => [] });
146
+
147
+ class MonthViewComponent {
148
+ constructor(calendarService, zone) {
149
+ this.calendarService = calendarService;
150
+ this.zone = zone;
151
+ this.showEventDetail = true;
152
+ this.autoSelect = true;
153
+ this.dir = '';
154
+ this.lockSwipeToPrev = false;
155
+ this.lockSwipeToNext = false;
156
+ this.lockSwipes = false;
157
+ this.onRangeChanged = new EventEmitter();
158
+ this.onEventSelected = new EventEmitter();
159
+ this.onTimeSelected = new EventEmitter();
160
+ this.onTitleChanged = new EventEmitter();
161
+ this.views = [];
162
+ this.currentViewIndex = 0;
163
+ this.mode = 'month';
164
+ this.direction = 0;
165
+ this.moveOnSelected = false;
166
+ this.inited = false;
167
+ }
168
+ static getDates(startDate, n) {
169
+ const dates = new Array(n), current = new Date(startDate.getTime());
170
+ let i = 0;
171
+ while (i < n) {
172
+ dates[i++] = new Date(current.getTime());
173
+ current.setDate(current.getDate() + 1);
174
+ }
175
+ return dates;
176
+ }
177
+ ngOnInit() {
178
+ if (!this.sliderOptions) {
179
+ this.sliderOptions = {};
180
+ }
181
+ this.sliderOptions.loop = true;
182
+ this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;
183
+ this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;
184
+ this.sliderOptions.allowTouchMove = !this.lockSwipes;
185
+ if (this.dateFormatter && this.dateFormatter.formatMonthViewDay) {
186
+ this.formatDayLabel = this.dateFormatter.formatMonthViewDay;
187
+ }
188
+ else {
189
+ const dayLabelDatePipe = new DatePipe('en-US');
190
+ this.formatDayLabel = function (date) {
191
+ return dayLabelDatePipe.transform(date, this.formatDay) || '';
192
+ };
193
+ }
194
+ if (this.dateFormatter && this.dateFormatter.formatMonthViewDayHeader) {
195
+ this.formatDayHeaderLabel = this.dateFormatter.formatMonthViewDayHeader;
196
+ }
197
+ else {
198
+ const datePipe = new DatePipe(this.locale);
199
+ this.formatDayHeaderLabel = function (date) {
200
+ return datePipe.transform(date, this.formatDayHeader) || '';
201
+ };
202
+ }
203
+ if (this.dateFormatter && this.dateFormatter.formatMonthViewTitle) {
204
+ this.formatTitle = this.dateFormatter.formatMonthViewTitle;
205
+ }
206
+ else {
207
+ const datePipe = new DatePipe(this.locale);
208
+ this.formatTitle = function (date) {
209
+ return datePipe.transform(date, this.formatMonthTitle) || '';
210
+ };
211
+ }
212
+ this.refreshView();
213
+ this.inited = true;
214
+ this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {
215
+ this.refreshView();
216
+ });
217
+ this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {
218
+ this.onDataLoaded();
219
+ });
220
+ this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {
221
+ if (direction === 1) {
222
+ this.slider.slideNext();
223
+ }
224
+ else if (direction === -1) {
225
+ this.slider.slidePrev();
226
+ }
227
+ });
228
+ this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {
229
+ this.slider.update();
230
+ });
231
+ }
232
+ ngOnDestroy() {
233
+ if (this.currentDateChangedFromParentSubscription) {
234
+ this.currentDateChangedFromParentSubscription.unsubscribe();
235
+ this.currentDateChangedFromParentSubscription = undefined;
236
+ }
237
+ if (this.eventSourceChangedSubscription) {
238
+ this.eventSourceChangedSubscription.unsubscribe();
239
+ this.eventSourceChangedSubscription = undefined;
240
+ }
241
+ if (this.slideChangedSubscription) {
242
+ this.slideChangedSubscription.unsubscribe();
243
+ this.slideChangedSubscription = undefined;
244
+ }
245
+ if (this.slideUpdatedSubscription) {
246
+ this.slideUpdatedSubscription.unsubscribe();
247
+ this.slideUpdatedSubscription = undefined;
248
+ }
249
+ }
250
+ ngOnChanges(changes) {
251
+ if (!this.inited) {
252
+ return;
253
+ }
254
+ const eventSourceChange = changes['eventSource'];
255
+ if (eventSourceChange && eventSourceChange.currentValue) {
256
+ this.onDataLoaded();
257
+ }
258
+ const lockSwipeToPrev = changes['lockSwipeToPrev'];
259
+ if (lockSwipeToPrev) {
260
+ this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;
261
+ }
262
+ const lockSwipeToNext = changes['lockSwipeToNext'];
263
+ if (lockSwipeToNext) {
264
+ this.slider.allowSlideNext = !lockSwipeToNext.currentValue;
265
+ }
266
+ const lockSwipes = changes['lockSwipes'];
267
+ if (lockSwipes) {
268
+ this.slider.allowTouchMove = !lockSwipes.currentValue;
269
+ }
270
+ }
271
+ ngAfterViewInit() {
272
+ this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);
273
+ let me = this;
274
+ this.slider.on('slideNextTransitionEnd', function () {
275
+ me.onSlideChanged(1);
276
+ });
277
+ this.slider.on('slidePrevTransitionEnd', function () {
278
+ me.onSlideChanged(-1);
279
+ });
280
+ if (this.dir == 'rtl') {
281
+ this.slider.changeLanguageDirection('rtl');
282
+ }
283
+ const title = this.getTitle();
284
+ this.onTitleChanged.emit(title);
285
+ }
286
+ setSwiperInstance(swiper) {
287
+ this.slider = swiper;
288
+ }
289
+ onSlideChanged(direction) {
290
+ this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;
291
+ this.move(direction);
292
+ }
293
+ move(direction) {
294
+ if (direction === 0) {
295
+ return;
296
+ }
297
+ this.direction = direction;
298
+ if (!this.moveOnSelected) {
299
+ const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);
300
+ this.calendarService.setCurrentDate(adjacentDate);
301
+ }
302
+ this.refreshView();
303
+ this.direction = 0;
304
+ this.moveOnSelected = false;
305
+ }
306
+ createDateObject(date) {
307
+ let disabled = false;
308
+ if (this.markDisabled) {
309
+ disabled = this.markDisabled(date);
310
+ }
311
+ return {
312
+ date,
313
+ events: [],
314
+ label: this.formatDayLabel(date),
315
+ secondary: false,
316
+ disabled
317
+ };
318
+ }
319
+ getViewData(startTime) {
320
+ const startDate = startTime, date = startDate.getDate(), month = (startDate.getMonth() + (date !== 1 ? 1 : 0)) % 12;
321
+ const dates = MonthViewComponent.getDates(startDate, 42);
322
+ const days = [];
323
+ for (let i = 0; i < 42; i++) {
324
+ const dateObject = this.createDateObject(dates[i]);
325
+ dateObject.secondary = dates[i].getMonth() !== month;
326
+ days[i] = dateObject;
327
+ }
328
+ const dayHeaders = [];
329
+ for (let i = 0; i < 7; i++) {
330
+ dayHeaders.push(this.formatDayHeaderLabel(days[i].date));
331
+ }
332
+ return {
333
+ dates: days,
334
+ dayHeaders
335
+ };
336
+ }
337
+ getHighlightClass(date) {
338
+ let className = '';
339
+ if (date.hasEvent) {
340
+ if (date.secondary) {
341
+ className = 'monthview-secondary-with-event';
342
+ }
343
+ else {
344
+ className = 'monthview-primary-with-event';
345
+ }
346
+ }
347
+ if (date.selected) {
348
+ if (className) {
349
+ className += ' ';
350
+ }
351
+ className += 'monthview-selected';
352
+ }
353
+ if (date.current) {
354
+ if (className) {
355
+ className += ' ';
356
+ }
357
+ className += 'monthview-current';
358
+ }
359
+ if (date.secondary) {
360
+ if (className) {
361
+ className += ' ';
362
+ }
363
+ className += 'text-muted';
364
+ }
365
+ if (date.disabled) {
366
+ if (className) {
367
+ className += ' ';
368
+ }
369
+ className += 'monthview-disabled';
370
+ }
371
+ return className;
372
+ }
373
+ getRange(currentDate) {
374
+ const year = currentDate.getFullYear(), month = currentDate.getMonth(), firstDayOfMonth = new Date(year, month, 1, 12, 0, 0), // set hour to 12 to avoid DST problem
375
+ difference = this.startingDayMonth - firstDayOfMonth.getDay(), numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference, startDate = new Date(firstDayOfMonth.getTime());
376
+ if (numDisplayedFromPreviousMonth > 0) {
377
+ startDate.setDate(-numDisplayedFromPreviousMonth + 1);
378
+ }
379
+ const endDate = new Date(startDate.getTime());
380
+ endDate.setDate(endDate.getDate() + 42);
381
+ return {
382
+ startTime: startDate,
383
+ endTime: endDate
384
+ };
385
+ }
386
+ onDataLoaded() {
387
+ const range = this.range, eventSource = this.eventSource, len = eventSource ? eventSource.length : 0, startTime = range.startTime, endTime = range.endTime, utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()), utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()), currentViewIndex = this.currentViewIndex, dates = this.views[currentViewIndex].dates, oneDay = 86400000, eps = 0.0006;
388
+ for (let r = 0; r < 42; r += 1) {
389
+ if (dates[r].hasEvent) {
390
+ dates[r].hasEvent = false;
391
+ dates[r].events = [];
392
+ }
393
+ }
394
+ for (let i = 0; i < len; i += 1) {
395
+ const event = eventSource[i], eventStartTime = event.startTime, eventEndTime = event.endTime;
396
+ let eventUTCStartTime, eventUTCEndTime;
397
+ if (event.allDay) {
398
+ eventUTCStartTime = eventStartTime.getTime();
399
+ eventUTCEndTime = eventEndTime.getTime();
400
+ }
401
+ else {
402
+ eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());
403
+ eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);
404
+ }
405
+ if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime) {
406
+ continue;
407
+ }
408
+ let timeDifferenceStart, timeDifferenceEnd;
409
+ if (eventUTCStartTime < utcStartTime) {
410
+ timeDifferenceStart = 0;
411
+ }
412
+ else {
413
+ timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneDay;
414
+ }
415
+ if (eventUTCEndTime > utcEndTime) {
416
+ timeDifferenceEnd = (utcEndTime - utcStartTime) / oneDay;
417
+ }
418
+ else {
419
+ timeDifferenceEnd = (eventUTCEndTime - utcStartTime) / oneDay;
420
+ }
421
+ let index = Math.floor(timeDifferenceStart);
422
+ const endIndex = Math.ceil(timeDifferenceEnd - eps);
423
+ while (index < endIndex) {
424
+ dates[index].hasEvent = true;
425
+ let eventSet = dates[index].events;
426
+ if (eventSet) {
427
+ eventSet.push(event);
428
+ }
429
+ else {
430
+ eventSet = [];
431
+ eventSet.push(event);
432
+ dates[index].events = eventSet;
433
+ }
434
+ index += 1;
435
+ }
436
+ }
437
+ for (let r = 0; r < 42; r += 1) {
438
+ if (dates[r].hasEvent) {
439
+ dates[r].events.sort(this.compareEvent);
440
+ }
441
+ }
442
+ if (this.autoSelect) {
443
+ let findSelected = false;
444
+ for (let r = 0; r < 42; r += 1) {
445
+ if (dates[r].selected) {
446
+ this.selectedDate = dates[r];
447
+ findSelected = true;
448
+ break;
449
+ }
450
+ }
451
+ if (findSelected && this.selectedDate) {
452
+ this.onTimeSelected.emit({
453
+ selectedTime: this.selectedDate.date,
454
+ events: this.selectedDate.events,
455
+ disabled: this.selectedDate.disabled
456
+ });
457
+ }
458
+ }
459
+ }
460
+ refreshView() {
461
+ this.range = this.getRange(this.calendarService.currentDate);
462
+ if (this.inited) {
463
+ const title = this.getTitle();
464
+ this.onTitleChanged.emit(title);
465
+ }
466
+ this.calendarService.populateAdjacentViews(this);
467
+ this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);
468
+ this.calendarService.rangeChanged(this);
469
+ }
470
+ getTitle() {
471
+ const currentViewStartDate = this.range.startTime, date = currentViewStartDate.getDate(), month = (currentViewStartDate.getMonth() + (date !== 1 ? 1 : 0)) % 12, year = currentViewStartDate.getFullYear() + (date !== 1 && month === 0 ? 1 : 0), headerDate = new Date(year, month, 1, 12, 0, 0, 0);
472
+ return this.formatTitle(headerDate);
473
+ }
474
+ compareEvent(event1, event2) {
475
+ if (event1.allDay) {
476
+ return 1;
477
+ }
478
+ else if (event2.allDay) {
479
+ return -1;
480
+ }
481
+ else {
482
+ return (event1.startTime.getTime() - event2.startTime.getTime());
483
+ }
484
+ }
485
+ select(viewDate) {
486
+ if (!this.views) {
487
+ return;
488
+ }
489
+ const selectedDate = viewDate.date, events = viewDate.events;
490
+ if (!viewDate.disabled) {
491
+ const dates = this.views[this.currentViewIndex].dates, currentCalendarDate = this.calendarService.currentDate, currentMonth = currentCalendarDate.getMonth(), currentYear = currentCalendarDate.getFullYear(), selectedMonth = selectedDate.getMonth(), selectedYear = selectedDate.getFullYear();
492
+ let direction = 0;
493
+ if (currentYear === selectedYear) {
494
+ if (currentMonth !== selectedMonth) {
495
+ direction = currentMonth < selectedMonth ? 1 : -1;
496
+ }
497
+ }
498
+ else {
499
+ direction = currentYear < selectedYear ? 1 : -1;
500
+ }
501
+ this.calendarService.setCurrentDate(selectedDate);
502
+ if (direction === 0) {
503
+ const currentViewStartDate = this.range.startTime, oneDay = 86400000, selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);
504
+ for (let r = 0; r < 42; r += 1) {
505
+ dates[r].selected = false;
506
+ }
507
+ if (selectedDayDifference >= 0 && selectedDayDifference < 42) {
508
+ dates[selectedDayDifference].selected = true;
509
+ this.selectedDate = dates[selectedDayDifference];
510
+ }
511
+ }
512
+ else {
513
+ this.moveOnSelected = true;
514
+ this.slideView(direction);
515
+ }
516
+ }
517
+ this.onTimeSelected.emit({ selectedTime: selectedDate, events, disabled: viewDate.disabled });
518
+ }
519
+ slideView(direction) {
520
+ if (direction === 1) {
521
+ this.slider.slideNext();
522
+ }
523
+ else if (direction === -1) {
524
+ this.slider.slidePrev();
525
+ }
526
+ }
527
+ updateCurrentView(currentViewStartDate, view) {
528
+ const currentCalendarDate = this.calendarService.currentDate, today = new Date(), oneDay = 86400000, selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay), currentDayDifference = Math.round((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);
529
+ for (let r = 0; r < 42; r += 1) {
530
+ view.dates[r].selected = false;
531
+ }
532
+ if (selectedDayDifference >= 0 && selectedDayDifference < 42 && !view.dates[selectedDayDifference].disabled && (this.autoSelect || this.moveOnSelected)) {
533
+ view.dates[selectedDayDifference].selected = true;
534
+ this.selectedDate = view.dates[selectedDayDifference];
535
+ }
536
+ else {
537
+ this.selectedDate = undefined;
538
+ }
539
+ if (currentDayDifference >= 0 && currentDayDifference < 42) {
540
+ view.dates[currentDayDifference].current = true;
541
+ }
542
+ }
543
+ eventSelected(event) {
544
+ this.onEventSelected.emit(event);
545
+ }
546
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MonthViewComponent, deps: [{ token: CalendarService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
547
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: MonthViewComponent, isStandalone: false, selector: "monthview", inputs: { monthviewDisplayEventTemplate: "monthviewDisplayEventTemplate", monthviewInactiveDisplayEventTemplate: "monthviewInactiveDisplayEventTemplate", monthviewEventDetailTemplate: "monthviewEventDetailTemplate", formatDay: "formatDay", formatDayHeader: "formatDayHeader", formatMonthTitle: "formatMonthTitle", eventSource: "eventSource", startingDayMonth: "startingDayMonth", showEventDetail: "showEventDetail", noEventsLabel: "noEventsLabel", autoSelect: "autoSelect", markDisabled: "markDisabled", locale: "locale", dateFormatter: "dateFormatter", dir: "dir", lockSwipeToPrev: "lockSwipeToPrev", lockSwipeToNext: "lockSwipeToNext", lockSwipes: "lockSwipes", sliderOptions: "sliderOptions" }, outputs: { onRangeChanged: "onRangeChanged", onEventSelected: "onEventSelected", onTimeSelected: "onTimeSelected", onTitleChanged: "onTitleChanged" }, viewQueries: [{ propertyName: "swiperElement", first: true, predicate: ["monthViewSwiper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"swiper monthview-swiper\" #monthViewSwiper>\r\n <div class=\"swiper-wrapper\">\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"0===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[0].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"0!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"1===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[1].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"1!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"2===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[2].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"2!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <ng-template [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\">\r\n </ng-template>\r\n</div>", styles: [".text-muted{color:#999}.table-fixed{table-layout:fixed}.table{width:100%;max-width:100%;background-color:transparent}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.monthview-primary-with-event{background-color:#3a87ad;color:#fff}.monthview-current{background-color:#f0f0f0}.monthview-selected{background-color:#090;color:#fff}.monthview-datetable td.monthview-disabled{color:#d3d3d3;cursor:default}.monthview-datetable th{text-align:center}.monthview-datetable td{cursor:pointer;text-align:center}.monthview-secondary-with-event{background-color:#d9edf7}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
548
+ }
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: MonthViewComponent, decorators: [{
550
+ type: Component,
551
+ args: [{ selector: 'monthview', standalone: false, template: "<div class=\"swiper monthview-swiper\" #monthViewSwiper>\r\n <div class=\"swiper-wrapper\">\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"0===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[0].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"0!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"1===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[1].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"1!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"2===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[2].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"2!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <ng-template [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\">\r\n </ng-template>\r\n</div>", styles: [".text-muted{color:#999}.table-fixed{table-layout:fixed}.table{width:100%;max-width:100%;background-color:transparent}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.monthview-primary-with-event{background-color:#3a87ad;color:#fff}.monthview-current{background-color:#f0f0f0}.monthview-selected{background-color:#090;color:#fff}.monthview-datetable td.monthview-disabled{color:#d3d3d3;cursor:default}.monthview-datetable th{text-align:center}.monthview-datetable td{cursor:pointer;text-align:center}.monthview-secondary-with-event{background-color:#d9edf7}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}\n"] }]
552
+ }], ctorParameters: () => [{ type: CalendarService }, { type: i0.NgZone }], propDecorators: { swiperElement: [{
553
+ type: ViewChild,
554
+ args: ['monthViewSwiper']
555
+ }], monthviewDisplayEventTemplate: [{
556
+ type: Input
557
+ }], monthviewInactiveDisplayEventTemplate: [{
558
+ type: Input
559
+ }], monthviewEventDetailTemplate: [{
560
+ type: Input
561
+ }], formatDay: [{
562
+ type: Input
563
+ }], formatDayHeader: [{
564
+ type: Input
565
+ }], formatMonthTitle: [{
566
+ type: Input
567
+ }], eventSource: [{
568
+ type: Input
569
+ }], startingDayMonth: [{
570
+ type: Input
571
+ }], showEventDetail: [{
572
+ type: Input
573
+ }], noEventsLabel: [{
574
+ type: Input
575
+ }], autoSelect: [{
576
+ type: Input
577
+ }], markDisabled: [{
578
+ type: Input
579
+ }], locale: [{
580
+ type: Input
581
+ }], dateFormatter: [{
582
+ type: Input
583
+ }], dir: [{
584
+ type: Input
585
+ }], lockSwipeToPrev: [{
586
+ type: Input
587
+ }], lockSwipeToNext: [{
588
+ type: Input
589
+ }], lockSwipes: [{
590
+ type: Input
591
+ }], sliderOptions: [{
592
+ type: Input
593
+ }], onRangeChanged: [{
594
+ type: Output
595
+ }], onEventSelected: [{
596
+ type: Output
597
+ }], onTimeSelected: [{
598
+ type: Output
599
+ }], onTitleChanged: [{
600
+ type: Output
601
+ }] } });
602
+
603
+ class initPositionScrollComponent {
604
+ constructor(el, ngZone) {
605
+ this.ngZone = ngZone;
606
+ this.onScroll = new EventEmitter();
607
+ this.listenerAttached = false;
608
+ this.element = el;
609
+ }
610
+ ngOnChanges(changes) {
611
+ let initPosition = changes['initPosition'];
612
+ if (initPosition && initPosition.currentValue !== undefined && this.scrollContent && initPosition.currentValue != this.scrollContent.scrollTop) {
613
+ const me = this;
614
+ this.ngZone.run(() => {
615
+ me.scrollContent.scrollTop = initPosition.currentValue;
616
+ });
617
+ }
618
+ }
619
+ ngAfterViewInit() {
620
+ const scrollContent = this.scrollContent = this.element.nativeElement.querySelector('.scroll-content');
621
+ if (this.initPosition !== undefined) {
622
+ scrollContent.scrollTop = this.initPosition;
623
+ }
624
+ if (this.emitEvent && !this.listenerAttached) {
625
+ let onScroll = this.onScroll;
626
+ let me = this;
627
+ this.handler = function () {
628
+ if (me.initPosition != scrollContent.scrollTop) {
629
+ onScroll.emit(scrollContent.scrollTop);
630
+ }
631
+ };
632
+ this.listenerAttached = true;
633
+ scrollContent.addEventListener('scroll', this.handler);
634
+ }
635
+ }
636
+ ngOnDestroy() {
637
+ if (this.listenerAttached) {
638
+ this.scrollContent.removeEventListener('scroll', this.handler);
639
+ this.listenerAttached = false;
640
+ }
641
+ }
642
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: initPositionScrollComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
643
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: initPositionScrollComponent, isStandalone: false, selector: "init-position-scroll", inputs: { initPosition: "initPosition", emitEvent: "emitEvent" }, outputs: { onScroll: "onScroll" }, usesOnChanges: true, ngImport: i0, template: `
644
+ <div class="scroll-content" style="height:100%">
645
+ <ng-content></ng-content>
646
+ </div>
647
+ `, isInline: true, styles: [".scroll-content{overflow-y:auto;overflow-x:hidden}\n"], encapsulation: i0.ViewEncapsulation.None }); }
648
+ }
649
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: initPositionScrollComponent, decorators: [{
650
+ type: Component,
651
+ args: [{ selector: 'init-position-scroll', template: `
652
+ <div class="scroll-content" style="height:100%">
653
+ <ng-content></ng-content>
654
+ </div>
655
+ `, encapsulation: ViewEncapsulation.None, standalone: false, styles: [".scroll-content{overflow-y:auto;overflow-x:hidden}\n"] }]
656
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { initPosition: [{
657
+ type: Input
658
+ }], emitEvent: [{
659
+ type: Input
660
+ }], onScroll: [{
661
+ type: Output
662
+ }] } });
663
+
664
+ class WeekViewComponent {
665
+ constructor(calendarService, elm, zone) {
666
+ this.calendarService = calendarService;
667
+ this.elm = elm;
668
+ this.zone = zone;
669
+ this.class = true;
670
+ this.autoSelect = true;
671
+ this.dir = '';
672
+ this.scrollToHour = 0;
673
+ this.onRangeChanged = new EventEmitter();
674
+ this.onEventSelected = new EventEmitter();
675
+ this.onTimeSelected = new EventEmitter();
676
+ this.onDayHeaderSelected = new EventEmitter();
677
+ this.onTitleChanged = new EventEmitter();
678
+ this.sliderIndexList = [0, 1, 2];
679
+ this.views = [];
680
+ this.currentViewIndex = 0;
681
+ this.direction = 0;
682
+ this.mode = 'week';
683
+ this.inited = false;
684
+ }
685
+ static createDateObjects(startTime, startHour, endHour, timeInterval) {
686
+ const times = [], currentHour = 0, currentDate = startTime.getDate();
687
+ let hourStep, minStep;
688
+ if (timeInterval < 1) {
689
+ hourStep = Math.floor(1 / timeInterval);
690
+ minStep = 60;
691
+ }
692
+ else {
693
+ hourStep = 1;
694
+ minStep = Math.floor(60 / timeInterval);
695
+ }
696
+ for (let hour = startHour; hour < endHour; hour += hourStep) {
697
+ for (let interval = 0; interval < 60; interval += minStep) {
698
+ const row = [];
699
+ for (let day = 0; day < 7; day += 1) {
700
+ const time = new Date(startTime.getTime());
701
+ time.setHours(currentHour + hour, interval);
702
+ time.setDate(currentDate + day);
703
+ row.push({
704
+ events: [],
705
+ time
706
+ });
707
+ }
708
+ times.push(row);
709
+ }
710
+ }
711
+ return times;
712
+ }
713
+ static getDates(startTime, n) {
714
+ const dates = new Array(n), current = new Date(startTime.getTime());
715
+ let i = 0;
716
+ while (i < n) {
717
+ dates[i++] = {
718
+ date: new Date(current.getTime()),
719
+ events: [],
720
+ dayHeader: ''
721
+ };
722
+ current.setDate(current.getDate() + 1);
723
+ }
724
+ return dates;
725
+ }
726
+ static compareEventByStartOffset(eventA, eventB) {
727
+ return eventA.startOffset - eventB.startOffset;
728
+ }
729
+ static calculateWidth(orderedEvents, size, hourParts) {
730
+ const totalSize = size * hourParts, cells = new Array(totalSize);
731
+ // sort by position in descending order, the right most columns should be calculated first
732
+ orderedEvents.sort((eventA, eventB) => {
733
+ return eventB.position - eventA.position;
734
+ });
735
+ for (let i = 0; i < totalSize; i += 1) {
736
+ cells[i] = {
737
+ calculated: false,
738
+ events: []
739
+ };
740
+ }
741
+ const len = orderedEvents.length;
742
+ for (let i = 0; i < len; i += 1) {
743
+ const event = orderedEvents[i];
744
+ let index = event.startIndex * hourParts + event.startOffset;
745
+ while (index < event.endIndex * hourParts - event.endOffset) {
746
+ cells[index].events.push(event);
747
+ index += 1;
748
+ }
749
+ }
750
+ let i = 0;
751
+ while (i < len) {
752
+ let event = orderedEvents[i];
753
+ if (!event.overlapNumber) {
754
+ const overlapNumber = event.position + 1;
755
+ event.overlapNumber = overlapNumber;
756
+ const eventQueue = [event];
757
+ while (event = eventQueue.shift()) {
758
+ let index = event.startIndex * hourParts + event.startOffset;
759
+ while (index < event.endIndex * hourParts - event.endOffset) {
760
+ if (!cells[index].calculated) {
761
+ cells[index].calculated = true;
762
+ if (cells[index].events) {
763
+ const eventCountInCell = cells[index].events.length;
764
+ for (let j = 0; j < eventCountInCell; j += 1) {
765
+ const currentEventInCell = cells[index].events[j];
766
+ if (!currentEventInCell.overlapNumber) {
767
+ currentEventInCell.overlapNumber = overlapNumber;
768
+ eventQueue.push(currentEventInCell);
769
+ }
770
+ }
771
+ }
772
+ }
773
+ index += 1;
774
+ }
775
+ }
776
+ }
777
+ i += 1;
778
+ }
779
+ }
780
+ ngOnInit() {
781
+ if (!this.sliderOptions) {
782
+ this.sliderOptions = {};
783
+ }
784
+ this.sliderOptions.loop = true;
785
+ this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;
786
+ this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;
787
+ this.sliderOptions.allowTouchMove = !this.lockSwipes;
788
+ this.hourRange = (this.endHour - this.startHour) * this.hourSegments;
789
+ if (this.dateFormatter && this.dateFormatter.formatWeekViewDayHeader) {
790
+ this.formatDayHeader = this.dateFormatter.formatWeekViewDayHeader;
791
+ }
792
+ else {
793
+ const datePipe = new DatePipe(this.locale);
794
+ this.formatDayHeader = function (date) {
795
+ return datePipe.transform(date, this.formatWeekViewDayHeader) || '';
796
+ };
797
+ }
798
+ if (this.dateFormatter && this.dateFormatter.formatWeekViewTitle) {
799
+ this.formatTitle = this.dateFormatter.formatWeekViewTitle;
800
+ }
801
+ else {
802
+ const datePipe = new DatePipe(this.locale);
803
+ this.formatTitle = function (date) {
804
+ return datePipe.transform(date, this.formatWeekTitle) || '';
805
+ };
806
+ }
807
+ if (this.dateFormatter && this.dateFormatter.formatWeekViewHourColumn) {
808
+ this.formatHourColumnLabel = this.dateFormatter.formatWeekViewHourColumn;
809
+ }
810
+ else {
811
+ const datePipe = new DatePipe(this.locale);
812
+ this.formatHourColumnLabel = function (date) {
813
+ return datePipe.transform(date, this.formatHourColumn) || '';
814
+ };
815
+ }
816
+ this.refreshView();
817
+ this.hourColumnLabels = this.getHourColumnLabels();
818
+ this.inited = true;
819
+ this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {
820
+ this.refreshView();
821
+ });
822
+ this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {
823
+ this.onDataLoaded();
824
+ });
825
+ this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {
826
+ if (direction === 1) {
827
+ this.slider.slideNext();
828
+ }
829
+ else if (direction === -1) {
830
+ this.slider.slidePrev();
831
+ }
832
+ });
833
+ this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {
834
+ this.slider.update();
835
+ });
836
+ }
837
+ ngAfterViewInit() {
838
+ this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);
839
+ let me = this;
840
+ this.slider.on('slideNextTransitionEnd', function () {
841
+ me.onSlideChanged(1);
842
+ });
843
+ this.slider.on('slidePrevTransitionEnd', function () {
844
+ me.onSlideChanged(-1);
845
+ });
846
+ if (this.dir === 'rtl') {
847
+ this.slider.changeLanguageDirection('rtl');
848
+ }
849
+ const title = this.getTitle();
850
+ this.onTitleChanged.emit(title);
851
+ if (this.scrollToHour > 0) {
852
+ const hourColumns = this.elm.nativeElement.querySelector('.weekview-normal-event-container').querySelectorAll('.calendar-hour-column');
853
+ const me = this;
854
+ setTimeout(() => {
855
+ me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;
856
+ }, 50);
857
+ }
858
+ }
859
+ ngOnChanges(changes) {
860
+ if (!this.inited) {
861
+ return;
862
+ }
863
+ if ((changes['startHour'] || changes['endHour']) && (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {
864
+ this.views = [];
865
+ this.hourRange = (this.endHour - this.startHour) * this.hourSegments;
866
+ this.direction = 0;
867
+ this.refreshView();
868
+ this.hourColumnLabels = this.getHourColumnLabels();
869
+ }
870
+ const eventSourceChange = changes['eventSource'];
871
+ if (eventSourceChange && eventSourceChange.currentValue) {
872
+ this.onDataLoaded();
873
+ }
874
+ const lockSwipeToPrev = changes['lockSwipeToPrev'];
875
+ if (lockSwipeToPrev) {
876
+ this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;
877
+ }
878
+ const lockSwipeToNext = changes['lockSwipeToNext'];
879
+ if (lockSwipeToPrev) {
880
+ this.slider.allowSlideNext = !lockSwipeToNext.currentValue;
881
+ }
882
+ const lockSwipes = changes['lockSwipes'];
883
+ if (lockSwipes) {
884
+ this.slider.allowTouchMove = !lockSwipes.currentValue;
885
+ }
886
+ }
887
+ ngOnDestroy() {
888
+ if (this.currentDateChangedFromParentSubscription) {
889
+ this.currentDateChangedFromParentSubscription.unsubscribe();
890
+ this.currentDateChangedFromParentSubscription = undefined;
891
+ }
892
+ if (this.eventSourceChangedSubscription) {
893
+ this.eventSourceChangedSubscription.unsubscribe();
894
+ this.eventSourceChangedSubscription = undefined;
895
+ }
896
+ if (this.slideChangedSubscription) {
897
+ this.slideChangedSubscription.unsubscribe();
898
+ this.slideChangedSubscription = undefined;
899
+ }
900
+ if (this.slideUpdatedSubscription) {
901
+ this.slideUpdatedSubscription.unsubscribe();
902
+ this.slideUpdatedSubscription = undefined;
903
+ }
904
+ }
905
+ onSlideChanged(direction) {
906
+ this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;
907
+ this.move(direction);
908
+ }
909
+ move(direction) {
910
+ if (direction === 0) {
911
+ return;
912
+ }
913
+ this.direction = direction;
914
+ const adjacent = this.calendarService.getAdjacentCalendarDate(this.mode, direction);
915
+ this.calendarService.setCurrentDate(adjacent);
916
+ this.refreshView();
917
+ this.direction = 0;
918
+ }
919
+ getHourColumnLabels() {
920
+ const hourColumnLabels = [];
921
+ for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {
922
+ // handle edge case for DST
923
+ if (hour === 0 && this.views[0].rows[hour][0].time.getHours() !== this.startHour) {
924
+ const time = new Date(this.views[0].rows[hour][0].time);
925
+ time.setDate(time.getDate() + 1);
926
+ time.setHours(this.startHour);
927
+ hourColumnLabels.push(this.formatHourColumnLabel(time));
928
+ }
929
+ else {
930
+ hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour][0].time));
931
+ }
932
+ }
933
+ return hourColumnLabels;
934
+ }
935
+ getViewData(startTime) {
936
+ const dates = WeekViewComponent.getDates(startTime, 7);
937
+ for (let i = 0; i < 7; i++) {
938
+ dates[i].dayHeader = this.formatDayHeader(dates[i].date);
939
+ }
940
+ return {
941
+ rows: WeekViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),
942
+ dates
943
+ };
944
+ }
945
+ getRange(currentDate) {
946
+ const year = currentDate.getFullYear(), month = currentDate.getMonth(), date = currentDate.getDate(), day = currentDate.getDay();
947
+ let difference = day - this.startingDayWeek;
948
+ if (difference < 0) {
949
+ difference += 7;
950
+ }
951
+ // set hour to 12 to avoid DST problem
952
+ const firstDayOfWeek = new Date(year, month, date - difference, 12, 0, 0), endTime = new Date(year, month, date - difference + 7, 12, 0, 0);
953
+ return {
954
+ startTime: firstDayOfWeek,
955
+ endTime
956
+ };
957
+ }
958
+ onDataLoaded() {
959
+ const eventSource = this.eventSource, len = eventSource ? eventSource.length : 0, startTime = this.range.startTime, endTime = this.range.endTime, utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()), utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()), currentViewIndex = this.currentViewIndex, rows = this.views[currentViewIndex].rows, dates = this.views[currentViewIndex].dates, oneHour = 3600000, oneDay = 86400000,
960
+ // add allday eps
961
+ eps = 0.016, rangeStartRowIndex = this.startHour * this.hourSegments, rangeEndRowIndex = this.endHour * this.hourSegments, allRows = 24 * this.hourSegments;
962
+ let allDayEventInRange = false, normalEventInRange = false;
963
+ for (let i = 0; i < 7; i += 1) {
964
+ dates[i].events = [];
965
+ dates[i].hasEvent = false;
966
+ }
967
+ for (let day = 0; day < 7; day += 1) {
968
+ for (let hour = 0; hour < this.hourRange; hour += 1) {
969
+ rows[hour][day].events = [];
970
+ }
971
+ }
972
+ for (let i = 0; i < len; i += 1) {
973
+ const event = eventSource[i];
974
+ const eventStartTime = event.startTime;
975
+ const eventEndTime = event.endTime;
976
+ let eventUTCStartTime, eventUTCEndTime;
977
+ if (event.allDay) {
978
+ eventUTCStartTime = eventStartTime.getTime();
979
+ eventUTCEndTime = eventEndTime.getTime();
980
+ }
981
+ else {
982
+ eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());
983
+ eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);
984
+ }
985
+ if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {
986
+ continue;
987
+ }
988
+ if (event.allDay) {
989
+ allDayEventInRange = true;
990
+ let allDayStartIndex;
991
+ if (eventUTCStartTime <= utcStartTime) {
992
+ allDayStartIndex = 0;
993
+ }
994
+ else {
995
+ allDayStartIndex = Math.round((eventUTCStartTime - utcStartTime) / oneDay);
996
+ }
997
+ let allDayEndIndex;
998
+ if (eventUTCEndTime >= utcEndTime) {
999
+ allDayEndIndex = Math.round((utcEndTime - utcStartTime) / oneDay);
1000
+ }
1001
+ else {
1002
+ allDayEndIndex = Math.round((eventUTCEndTime - utcStartTime) / oneDay);
1003
+ }
1004
+ const displayAllDayEvent = {
1005
+ event,
1006
+ startIndex: allDayStartIndex,
1007
+ endIndex: allDayEndIndex,
1008
+ startOffset: 0,
1009
+ endOffset: 0,
1010
+ position: 0
1011
+ };
1012
+ let eventSet = dates[allDayStartIndex].events;
1013
+ if (eventSet) {
1014
+ eventSet.push(displayAllDayEvent);
1015
+ }
1016
+ else {
1017
+ eventSet = [];
1018
+ eventSet.push(displayAllDayEvent);
1019
+ dates[allDayStartIndex].events = eventSet;
1020
+ }
1021
+ dates[allDayStartIndex].hasEvent = true;
1022
+ }
1023
+ else {
1024
+ normalEventInRange = true;
1025
+ let timeDifferenceStart;
1026
+ if (eventUTCStartTime < utcStartTime) {
1027
+ timeDifferenceStart = 0;
1028
+ }
1029
+ else {
1030
+ timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneHour * this.hourSegments + (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;
1031
+ }
1032
+ let timeDifferenceEnd;
1033
+ if (eventUTCEndTime > utcEndTime) {
1034
+ timeDifferenceEnd = (utcEndTime - utcStartTime) / oneHour * this.hourSegments;
1035
+ }
1036
+ else {
1037
+ timeDifferenceEnd = (eventUTCEndTime - oneDay - utcStartTime) / oneHour * this.hourSegments + (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;
1038
+ }
1039
+ const startIndex = Math.floor(timeDifferenceStart), endIndex = Math.ceil(timeDifferenceEnd - eps);
1040
+ let startRowIndex = startIndex % allRows, dayIndex = Math.floor(startIndex / allRows), endOfDay = dayIndex * allRows, startOffset = 0, endOffset = 0;
1041
+ if (this.hourParts !== 1) {
1042
+ if (startRowIndex < rangeStartRowIndex) {
1043
+ startOffset = 0;
1044
+ }
1045
+ else {
1046
+ startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);
1047
+ }
1048
+ }
1049
+ do {
1050
+ endOfDay += allRows;
1051
+ let endRowIndex;
1052
+ if (endOfDay < endIndex) {
1053
+ endRowIndex = allRows;
1054
+ }
1055
+ else {
1056
+ if (endOfDay === endIndex) {
1057
+ endRowIndex = allRows;
1058
+ }
1059
+ else {
1060
+ endRowIndex = endIndex % allRows;
1061
+ }
1062
+ if (this.hourParts !== 1) {
1063
+ if (endRowIndex > rangeEndRowIndex) {
1064
+ endOffset = 0;
1065
+ }
1066
+ else {
1067
+ endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);
1068
+ }
1069
+ }
1070
+ }
1071
+ if (startRowIndex < rangeStartRowIndex) {
1072
+ startRowIndex = 0;
1073
+ }
1074
+ else {
1075
+ startRowIndex -= rangeStartRowIndex;
1076
+ }
1077
+ if (endRowIndex > rangeEndRowIndex) {
1078
+ endRowIndex = rangeEndRowIndex;
1079
+ }
1080
+ endRowIndex -= rangeStartRowIndex;
1081
+ if (startRowIndex < endRowIndex) {
1082
+ const displayEvent = {
1083
+ event,
1084
+ startIndex: startRowIndex,
1085
+ endIndex: endRowIndex,
1086
+ startOffset,
1087
+ endOffset,
1088
+ position: 0
1089
+ };
1090
+ let eventSet = rows[startRowIndex][dayIndex].events;
1091
+ if (eventSet) {
1092
+ eventSet.push(displayEvent);
1093
+ }
1094
+ else {
1095
+ eventSet = [];
1096
+ eventSet.push(displayEvent);
1097
+ rows[startRowIndex][dayIndex].events = eventSet;
1098
+ }
1099
+ dates[dayIndex].hasEvent = true;
1100
+ }
1101
+ startRowIndex = 0;
1102
+ startOffset = 0;
1103
+ dayIndex += 1;
1104
+ } while (endOfDay < endIndex);
1105
+ }
1106
+ }
1107
+ if (normalEventInRange) {
1108
+ for (let day = 0; day < 7; day += 1) {
1109
+ let orderedEvents = [];
1110
+ for (let hour = 0; hour < this.hourRange; hour += 1) {
1111
+ if (rows[hour][day].events) {
1112
+ rows[hour][day].events.sort(WeekViewComponent.compareEventByStartOffset);
1113
+ orderedEvents = orderedEvents.concat(rows[hour][day].events);
1114
+ }
1115
+ }
1116
+ if (orderedEvents.length > 0) {
1117
+ this.placeEvents(orderedEvents);
1118
+ }
1119
+ }
1120
+ }
1121
+ if (allDayEventInRange) {
1122
+ let orderedAllDayEvents = [];
1123
+ for (let day = 0; day < 7; day += 1) {
1124
+ if (dates[day].events) {
1125
+ orderedAllDayEvents = orderedAllDayEvents.concat(dates[day].events);
1126
+ }
1127
+ }
1128
+ if (orderedAllDayEvents.length > 0) {
1129
+ this.placeAllDayEvents(orderedAllDayEvents);
1130
+ }
1131
+ }
1132
+ if (this.autoSelect) {
1133
+ let selectedDate;
1134
+ for (let r = 0; r < 7; r += 1) {
1135
+ if (dates[r].selected) {
1136
+ selectedDate = dates[r];
1137
+ break;
1138
+ }
1139
+ }
1140
+ if (selectedDate) {
1141
+ let disabled = false;
1142
+ if (this.markDisabled) {
1143
+ disabled = this.markDisabled(selectedDate.date);
1144
+ }
1145
+ this.onTimeSelected.emit({
1146
+ selectedTime: selectedDate.date,
1147
+ events: selectedDate.events.map(e => e.event),
1148
+ disabled
1149
+ });
1150
+ }
1151
+ }
1152
+ }
1153
+ refreshView() {
1154
+ this.range = this.getRange(this.calendarService.currentDate);
1155
+ if (this.inited) {
1156
+ const title = this.getTitle();
1157
+ this.onTitleChanged.emit(title);
1158
+ }
1159
+ this.calendarService.populateAdjacentViews(this);
1160
+ this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);
1161
+ this.calendarService.rangeChanged(this);
1162
+ }
1163
+ getTitle() {
1164
+ const firstDayOfWeek = new Date(this.range.startTime.getTime());
1165
+ firstDayOfWeek.setHours(12, 0, 0, 0);
1166
+ return this.formatTitle(firstDayOfWeek);
1167
+ }
1168
+ getHighlightClass(date) {
1169
+ let className = '';
1170
+ if (date.hasEvent) {
1171
+ if (className) {
1172
+ className += ' ';
1173
+ }
1174
+ className = 'weekview-with-event';
1175
+ }
1176
+ if (date.selected) {
1177
+ if (className) {
1178
+ className += ' ';
1179
+ }
1180
+ className += 'weekview-selected';
1181
+ }
1182
+ if (date.current) {
1183
+ if (className) {
1184
+ className += ' ';
1185
+ }
1186
+ className += 'weekview-current';
1187
+ }
1188
+ return className;
1189
+ }
1190
+ select(selectedTime, events) {
1191
+ let disabled = false;
1192
+ if (this.markDisabled) {
1193
+ disabled = this.markDisabled(selectedTime);
1194
+ }
1195
+ this.onTimeSelected.emit({
1196
+ selectedTime,
1197
+ events: events.map(e => e.event),
1198
+ disabled
1199
+ });
1200
+ }
1201
+ placeEvents(orderedEvents) {
1202
+ this.calculatePosition(orderedEvents);
1203
+ WeekViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);
1204
+ }
1205
+ placeAllDayEvents(orderedEvents) {
1206
+ this.calculatePosition(orderedEvents);
1207
+ }
1208
+ overlap(event1, event2) {
1209
+ let earlyEvent = event1, lateEvent = event2;
1210
+ if (event1.startIndex > event2.startIndex || (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {
1211
+ earlyEvent = event2;
1212
+ lateEvent = event1;
1213
+ }
1214
+ if (earlyEvent.endIndex <= lateEvent.startIndex) {
1215
+ return false;
1216
+ }
1217
+ else {
1218
+ return !(earlyEvent.endIndex - lateEvent.startIndex === 1 && earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);
1219
+ }
1220
+ }
1221
+ calculatePosition(events) {
1222
+ const len = events.length, isForbidden = new Array(len);
1223
+ let maxColumn = 0;
1224
+ for (let i = 0; i < len; i += 1) {
1225
+ let col;
1226
+ for (col = 0; col < maxColumn; col += 1) {
1227
+ isForbidden[col] = false;
1228
+ }
1229
+ for (let j = 0; j < i; j += 1) {
1230
+ if (this.overlap(events[i], events[j])) {
1231
+ isForbidden[events[j].position] = true;
1232
+ }
1233
+ }
1234
+ for (col = 0; col < maxColumn; col += 1) {
1235
+ if (!isForbidden[col]) {
1236
+ break;
1237
+ }
1238
+ }
1239
+ if (col < maxColumn) {
1240
+ events[i].position = col;
1241
+ }
1242
+ else {
1243
+ events[i].position = maxColumn++;
1244
+ }
1245
+ }
1246
+ if (this.dir === 'rtl') {
1247
+ for (let i = 0; i < len; i += 1) {
1248
+ events[i].position = maxColumn - 1 - events[i].position;
1249
+ }
1250
+ }
1251
+ }
1252
+ updateCurrentView(currentViewStartDate, view) {
1253
+ const currentCalendarDate = this.calendarService.currentDate, today = new Date(), oneDay = 86400000, selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay), currentDayDifference = Math.floor((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);
1254
+ for (let r = 0; r < 7; r += 1) {
1255
+ view.dates[r].selected = false;
1256
+ }
1257
+ if (selectedDayDifference >= 0 && selectedDayDifference < 7 && this.autoSelect) {
1258
+ view.dates[selectedDayDifference].selected = true;
1259
+ }
1260
+ if (currentDayDifference >= 0 && currentDayDifference < 7) {
1261
+ view.dates[currentDayDifference].current = true;
1262
+ }
1263
+ }
1264
+ daySelected(viewDate) {
1265
+ const selectedDate = viewDate.date, dates = this.views[this.currentViewIndex].dates, currentViewStartDate = this.range.startTime, oneDay = 86400000, selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);
1266
+ this.calendarService.setCurrentDate(selectedDate);
1267
+ for (let r = 0; r < 7; r += 1) {
1268
+ dates[r].selected = false;
1269
+ }
1270
+ if (selectedDayDifference >= 0 && selectedDayDifference < 7) {
1271
+ dates[selectedDayDifference].selected = true;
1272
+ }
1273
+ let disabled = false;
1274
+ if (this.markDisabled) {
1275
+ disabled = this.markDisabled(selectedDate);
1276
+ }
1277
+ this.onDayHeaderSelected.emit({ selectedTime: selectedDate, events: viewDate.events.map(e => e.event), disabled });
1278
+ }
1279
+ setScrollPosition(scrollPosition) {
1280
+ this.initScrollPosition = scrollPosition;
1281
+ }
1282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: WeekViewComponent, deps: [{ token: CalendarService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
1283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: WeekViewComponent, isStandalone: false, selector: "weekview", inputs: { weekviewHeaderTemplate: "weekviewHeaderTemplate", weekviewAllDayEventTemplate: "weekviewAllDayEventTemplate", weekviewNormalEventTemplate: "weekviewNormalEventTemplate", weekviewAllDayEventSectionTemplate: "weekviewAllDayEventSectionTemplate", weekviewNormalEventSectionTemplate: "weekviewNormalEventSectionTemplate", weekviewInactiveAllDayEventSectionTemplate: "weekviewInactiveAllDayEventSectionTemplate", weekviewInactiveNormalEventSectionTemplate: "weekviewInactiveNormalEventSectionTemplate", formatWeekTitle: "formatWeekTitle", formatWeekViewDayHeader: "formatWeekViewDayHeader", formatHourColumn: "formatHourColumn", startingDayWeek: "startingDayWeek", allDayLabel: "allDayLabel", hourParts: "hourParts", eventSource: "eventSource", autoSelect: "autoSelect", markDisabled: "markDisabled", locale: "locale", dateFormatter: "dateFormatter", dir: "dir", scrollToHour: "scrollToHour", preserveScrollPosition: "preserveScrollPosition", lockSwipeToPrev: "lockSwipeToPrev", lockSwipeToNext: "lockSwipeToNext", lockSwipes: "lockSwipes", startHour: "startHour", endHour: "endHour", sliderOptions: "sliderOptions", hourSegments: "hourSegments" }, outputs: { onRangeChanged: "onRangeChanged", onEventSelected: "onEventSelected", onTimeSelected: "onTimeSelected", onDayHeaderSelected: "onDayHeaderSelected", onTitleChanged: "onTitleChanged" }, host: { properties: { "class.weekview": "this.class" } }, viewQueries: [{ propertyName: "swiperElement", first: true, predicate: ["weekViewSwiper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"swiper weekview-swiper\" #weekViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container weekview-slide-container\">\r\n <table class=\"table table-bordered table-fixed weekview-header\">\r\n <thead>\r\n <tr>\r\n <th class=\"calendar-hour-column\"></th>\r\n <th class=\"weekview-header text-center\" *ngFor=\"let date of views[sliderIndex].dates\"\r\n [ngClass]=\"getHighlightClass(date)\" (click)=\"daySelected(date)\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{viewDate:date}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n <div *ngIf=\"sliderIndex===currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\r\n [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\r\n (click)=\"select(tm.time, tm.events)\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n <div *ngIf=\"sliderIndex!==currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".weekview-slide-container .table-fixed{table-layout:fixed}.weekview-slide-container .table{width:100%;max-width:100%;background-color:transparent}.weekview-slide-container .table>thead>tr>th,.weekview-slide-container .table>tbody>tr>th,.weekview-slide-container .table>tfoot>tr>th,.weekview-slide-container .table>thead>tr>td,.weekview-slide-container .table>tbody>tr>td,.weekview-slide-container .table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.weekview-slide-container .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.weekview-slide-container .table>thead:first-child>tr:first-child>th,.weekview-slide-container .table>thead:first-child>tr:first-child>td{border-top:0}.weekview-slide-container .table>tbody+tbody{border-top:2px solid #ddd}.weekview-slide-container .table-bordered{border:1px solid #ddd}.weekview-slide-container .table-bordered>thead>tr>th,.weekview-slide-container .table-bordered>tbody>tr>th,.weekview-slide-container .table-bordered>tfoot>tr>th,.weekview-slide-container .table-bordered>thead>tr>td,.weekview-slide-container .table-bordered>tbody>tr>td,.weekview-slide-container .table-bordered>tfoot>tr>td{border:1px solid #ddd}.weekview-slide-container .table-bordered>thead>tr>th,.weekview-slide-container .table-bordered>thead>tr>td{border-bottom-width:2px}.weekview-slide-container .table-striped>tbody>tr:nth-child(odd)>td,.weekview-slide-container .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.calendar-hour-column{width:50px;white-space:nowrap}.calendar-event-wrap{position:relative;width:100%;height:100%}.calendar-event{position:absolute;padding:2px;cursor:pointer;z-index:10000}.calendar-cell{padding:0!important;height:37px}.weekview-swiper{height:100%}.weekview-slide-container{display:block!important}.weekview-allday-label{float:left;height:100%;line-height:50px;text-align:center;width:50px;border-left:1px solid #ddd}[dir=rtl] .weekview-allday-label{float:right;border-right:1px solid #ddd}.weekview-allday-content-wrapper{margin-left:50px;overflow:hidden;height:51px}[dir=rtl] .weekview-allday-content-wrapper{margin-left:0;margin-right:50px}.weekview-allday-content-table{min-height:50px}.weekview-allday-content-table td{border-left:1px solid #ddd;border-right:1px solid #ddd}.weekview-header th{overflow:hidden;white-space:nowrap;font-size:14px}.weekview-allday-table{height:50px;position:relative;border-bottom:1px solid #ddd;font-size:14px}.weekview-normal-event-container{margin-top:87px;overflow:hidden;inset:0;position:absolute;font-size:14px}.scroll-content{overflow-y:auto;overflow-x:hidden}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}.weekview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle}@media(max-width:750px){.weekview-allday-label,.calendar-hour-column{width:31px;font-size:12px}.weekview-allday-label{padding-top:4px}.weekview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle;line-height:12px}.weekview-slide-container .table>thead>tr>th.weekview-header{padding-left:0;padding-right:0;font-size:12px}.weekview-allday-label{line-height:20px}.weekview-allday-content-wrapper{margin-left:31px}[dir=rtl] .weekview-allday-content-wrapper{margin-left:0;margin-right:31px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: initPositionScrollComponent, selector: "init-position-scroll", inputs: ["initPosition", "emitEvent"], outputs: ["onScroll"] }], encapsulation: i0.ViewEncapsulation.None }); }
1284
+ }
1285
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: WeekViewComponent, decorators: [{
1286
+ type: Component,
1287
+ args: [{ selector: 'weekview', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"swiper weekview-swiper\" #weekViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container weekview-slide-container\">\r\n <table class=\"table table-bordered table-fixed weekview-header\">\r\n <thead>\r\n <tr>\r\n <th class=\"calendar-hour-column\"></th>\r\n <th class=\"weekview-header text-center\" *ngFor=\"let date of views[sliderIndex].dates\"\r\n [ngClass]=\"getHighlightClass(date)\" (click)=\"daySelected(date)\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{viewDate:date}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n <div *ngIf=\"sliderIndex===currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\r\n [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\r\n (click)=\"select(tm.time, tm.events)\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n <div *ngIf=\"sliderIndex!==currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".weekview-slide-container .table-fixed{table-layout:fixed}.weekview-slide-container .table{width:100%;max-width:100%;background-color:transparent}.weekview-slide-container .table>thead>tr>th,.weekview-slide-container .table>tbody>tr>th,.weekview-slide-container .table>tfoot>tr>th,.weekview-slide-container .table>thead>tr>td,.weekview-slide-container .table>tbody>tr>td,.weekview-slide-container .table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.weekview-slide-container .table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.weekview-slide-container .table>thead:first-child>tr:first-child>th,.weekview-slide-container .table>thead:first-child>tr:first-child>td{border-top:0}.weekview-slide-container .table>tbody+tbody{border-top:2px solid #ddd}.weekview-slide-container .table-bordered{border:1px solid #ddd}.weekview-slide-container .table-bordered>thead>tr>th,.weekview-slide-container .table-bordered>tbody>tr>th,.weekview-slide-container .table-bordered>tfoot>tr>th,.weekview-slide-container .table-bordered>thead>tr>td,.weekview-slide-container .table-bordered>tbody>tr>td,.weekview-slide-container .table-bordered>tfoot>tr>td{border:1px solid #ddd}.weekview-slide-container .table-bordered>thead>tr>th,.weekview-slide-container .table-bordered>thead>tr>td{border-bottom-width:2px}.weekview-slide-container .table-striped>tbody>tr:nth-child(odd)>td,.weekview-slide-container .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.calendar-hour-column{width:50px;white-space:nowrap}.calendar-event-wrap{position:relative;width:100%;height:100%}.calendar-event{position:absolute;padding:2px;cursor:pointer;z-index:10000}.calendar-cell{padding:0!important;height:37px}.weekview-swiper{height:100%}.weekview-slide-container{display:block!important}.weekview-allday-label{float:left;height:100%;line-height:50px;text-align:center;width:50px;border-left:1px solid #ddd}[dir=rtl] .weekview-allday-label{float:right;border-right:1px solid #ddd}.weekview-allday-content-wrapper{margin-left:50px;overflow:hidden;height:51px}[dir=rtl] .weekview-allday-content-wrapper{margin-left:0;margin-right:50px}.weekview-allday-content-table{min-height:50px}.weekview-allday-content-table td{border-left:1px solid #ddd;border-right:1px solid #ddd}.weekview-header th{overflow:hidden;white-space:nowrap;font-size:14px}.weekview-allday-table{height:50px;position:relative;border-bottom:1px solid #ddd;font-size:14px}.weekview-normal-event-container{margin-top:87px;overflow:hidden;inset:0;position:absolute;font-size:14px}.scroll-content{overflow-y:auto;overflow-x:hidden}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}.weekview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle}@media(max-width:750px){.weekview-allday-label,.calendar-hour-column{width:31px;font-size:12px}.weekview-allday-label{padding-top:4px}.weekview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle;line-height:12px}.weekview-slide-container .table>thead>tr>th.weekview-header{padding-left:0;padding-right:0;font-size:12px}.weekview-allday-label{line-height:20px}.weekview-allday-content-wrapper{margin-left:31px}[dir=rtl] .weekview-allday-content-wrapper{margin-left:0;margin-right:31px}}\n"] }]
1288
+ }], ctorParameters: () => [{ type: CalendarService }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { swiperElement: [{
1289
+ type: ViewChild,
1290
+ args: ['weekViewSwiper']
1291
+ }], class: [{
1292
+ type: HostBinding,
1293
+ args: ['class.weekview']
1294
+ }], weekviewHeaderTemplate: [{
1295
+ type: Input
1296
+ }], weekviewAllDayEventTemplate: [{
1297
+ type: Input
1298
+ }], weekviewNormalEventTemplate: [{
1299
+ type: Input
1300
+ }], weekviewAllDayEventSectionTemplate: [{
1301
+ type: Input
1302
+ }], weekviewNormalEventSectionTemplate: [{
1303
+ type: Input
1304
+ }], weekviewInactiveAllDayEventSectionTemplate: [{
1305
+ type: Input
1306
+ }], weekviewInactiveNormalEventSectionTemplate: [{
1307
+ type: Input
1308
+ }], formatWeekTitle: [{
1309
+ type: Input
1310
+ }], formatWeekViewDayHeader: [{
1311
+ type: Input
1312
+ }], formatHourColumn: [{
1313
+ type: Input
1314
+ }], startingDayWeek: [{
1315
+ type: Input
1316
+ }], allDayLabel: [{
1317
+ type: Input
1318
+ }], hourParts: [{
1319
+ type: Input
1320
+ }], eventSource: [{
1321
+ type: Input
1322
+ }], autoSelect: [{
1323
+ type: Input
1324
+ }], markDisabled: [{
1325
+ type: Input
1326
+ }], locale: [{
1327
+ type: Input
1328
+ }], dateFormatter: [{
1329
+ type: Input
1330
+ }], dir: [{
1331
+ type: Input
1332
+ }], scrollToHour: [{
1333
+ type: Input
1334
+ }], preserveScrollPosition: [{
1335
+ type: Input
1336
+ }], lockSwipeToPrev: [{
1337
+ type: Input
1338
+ }], lockSwipeToNext: [{
1339
+ type: Input
1340
+ }], lockSwipes: [{
1341
+ type: Input
1342
+ }], startHour: [{
1343
+ type: Input
1344
+ }], endHour: [{
1345
+ type: Input
1346
+ }], sliderOptions: [{
1347
+ type: Input
1348
+ }], hourSegments: [{
1349
+ type: Input
1350
+ }], onRangeChanged: [{
1351
+ type: Output
1352
+ }], onEventSelected: [{
1353
+ type: Output
1354
+ }], onTimeSelected: [{
1355
+ type: Output
1356
+ }], onDayHeaderSelected: [{
1357
+ type: Output
1358
+ }], onTitleChanged: [{
1359
+ type: Output
1360
+ }] } });
1361
+
1362
+ class DayViewComponent {
1363
+ constructor(calendarService, elm, zone) {
1364
+ this.calendarService = calendarService;
1365
+ this.elm = elm;
1366
+ this.zone = zone;
1367
+ this.class = true;
1368
+ this.dir = '';
1369
+ this.scrollToHour = 0;
1370
+ this.lockSwipeToPrev = false;
1371
+ this.lockSwipeToNext = false;
1372
+ this.lockSwipes = false;
1373
+ this.onRangeChanged = new EventEmitter();
1374
+ this.onEventSelected = new EventEmitter();
1375
+ this.onTimeSelected = new EventEmitter();
1376
+ this.onTitleChanged = new EventEmitter(true);
1377
+ this.sliderIndexList = [0, 1, 2];
1378
+ this.views = [];
1379
+ this.currentViewIndex = 0;
1380
+ this.direction = 0;
1381
+ this.mode = 'day';
1382
+ this.inited = false;
1383
+ this.callbackOnInit = true;
1384
+ }
1385
+ static createDateObjects(startTime, startHour, endHour, timeInterval) {
1386
+ const rows = [], currentHour = 0, currentDate = startTime.getDate();
1387
+ let time, hourStep, minStep;
1388
+ if (timeInterval < 1) {
1389
+ hourStep = Math.floor(1 / timeInterval);
1390
+ minStep = 60;
1391
+ }
1392
+ else {
1393
+ hourStep = 1;
1394
+ minStep = Math.floor(60 / timeInterval);
1395
+ }
1396
+ for (let hour = startHour; hour < endHour; hour += hourStep) {
1397
+ for (let interval = 0; interval < 60; interval += minStep) {
1398
+ time = new Date(startTime.getTime());
1399
+ time.setHours(currentHour + hour, interval);
1400
+ time.setDate(currentDate);
1401
+ rows.push({
1402
+ time,
1403
+ events: [],
1404
+ eventsGroupByCategory: new Map()
1405
+ });
1406
+ }
1407
+ }
1408
+ return rows;
1409
+ }
1410
+ static compareEventByStartOffset(eventA, eventB) {
1411
+ return eventA.startOffset - eventB.startOffset;
1412
+ }
1413
+ static calculateWidth(orderedEvents, size, hourParts) {
1414
+ const totalSize = size * hourParts, cells = new Array(totalSize);
1415
+ // sort by position in descending order, the right most columns should be calculated first
1416
+ orderedEvents.sort((eventA, eventB) => {
1417
+ return eventB.position - eventA.position;
1418
+ });
1419
+ for (let i = 0; i < totalSize; i += 1) {
1420
+ cells[i] = {
1421
+ calculated: false,
1422
+ events: []
1423
+ };
1424
+ }
1425
+ const len = orderedEvents.length;
1426
+ for (let i = 0; i < len; i += 1) {
1427
+ const event = orderedEvents[i];
1428
+ let index = event.startIndex * hourParts + event.startOffset;
1429
+ while (index < event.endIndex * hourParts - event.endOffset) {
1430
+ cells[index].events.push(event);
1431
+ index += 1;
1432
+ }
1433
+ }
1434
+ let i = 0;
1435
+ while (i < len) {
1436
+ let event = orderedEvents[i];
1437
+ if (!event.overlapNumber) {
1438
+ const overlapNumber = event.position + 1;
1439
+ event.overlapNumber = overlapNumber;
1440
+ const eventQueue = [event];
1441
+ while ((event = eventQueue.shift())) {
1442
+ let index = event.startIndex * hourParts + event.startOffset;
1443
+ while (index < event.endIndex * hourParts - event.endOffset) {
1444
+ if (!cells[index].calculated) {
1445
+ cells[index].calculated = true;
1446
+ if (cells[index].events) {
1447
+ const eventCountInCell = cells[index].events.length;
1448
+ for (let j = 0; j < eventCountInCell; j += 1) {
1449
+ const currentEventInCell = cells[index].events[j];
1450
+ if (!currentEventInCell.overlapNumber) {
1451
+ currentEventInCell.overlapNumber = overlapNumber;
1452
+ eventQueue.push(currentEventInCell);
1453
+ }
1454
+ }
1455
+ }
1456
+ }
1457
+ index += 1;
1458
+ }
1459
+ }
1460
+ }
1461
+ i += 1;
1462
+ }
1463
+ }
1464
+ ngOnInit() {
1465
+ if (!this.sliderOptions) {
1466
+ this.sliderOptions = {};
1467
+ }
1468
+ this.sliderOptions.loop = true;
1469
+ this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;
1470
+ this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;
1471
+ this.sliderOptions.allowTouchMove = !this.lockSwipes;
1472
+ this.hourRange = (this.endHour - this.startHour) * this.hourSegments;
1473
+ if (this.dateFormatter && this.dateFormatter.formatDayViewTitle) {
1474
+ this.formatTitle = this.dateFormatter.formatDayViewTitle;
1475
+ }
1476
+ else {
1477
+ const datePipe = new DatePipe(this.locale);
1478
+ this.formatTitle = function (date) {
1479
+ return datePipe.transform(date, this.formatDayTitle) || '';
1480
+ };
1481
+ }
1482
+ if (this.dateFormatter && this.dateFormatter.formatDayViewHourColumn) {
1483
+ this.formatHourColumnLabel = this.dateFormatter.formatDayViewHourColumn;
1484
+ }
1485
+ else {
1486
+ const datePipe = new DatePipe(this.locale);
1487
+ this.formatHourColumnLabel = function (date) {
1488
+ return datePipe.transform(date, this.formatHourColumn) || '';
1489
+ };
1490
+ }
1491
+ this.refreshView();
1492
+ this.hourColumnLabels = this.getHourColumnLabels();
1493
+ this.inited = true;
1494
+ this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {
1495
+ this.refreshView();
1496
+ });
1497
+ this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {
1498
+ this.onDataLoaded();
1499
+ });
1500
+ this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {
1501
+ if (direction === 1) {
1502
+ this.slider.slideNext();
1503
+ }
1504
+ else if (direction === -1) {
1505
+ this.slider.slidePrev();
1506
+ }
1507
+ });
1508
+ this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {
1509
+ this.slider.update();
1510
+ });
1511
+ }
1512
+ ngAfterViewInit() {
1513
+ this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);
1514
+ let me = this;
1515
+ this.slider.on('slideNextTransitionEnd', function () {
1516
+ me.onSlideChanged(1);
1517
+ });
1518
+ this.slider.on('slidePrevTransitionEnd', function () {
1519
+ me.onSlideChanged(-1);
1520
+ });
1521
+ if (this.dir === 'rtl') {
1522
+ this.slider.changeLanguageDirection('rtl');
1523
+ }
1524
+ const title = this.getTitle();
1525
+ this.onTitleChanged.emit(title);
1526
+ if (this.scrollToHour > 0) {
1527
+ const hourColumns = this.elm.nativeElement
1528
+ .querySelector('.dayview-normal-event-container')
1529
+ .querySelectorAll('.calendar-hour-column');
1530
+ const me = this;
1531
+ setTimeout(() => {
1532
+ me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;
1533
+ }, 50);
1534
+ }
1535
+ }
1536
+ ngOnChanges(changes) {
1537
+ if (!this.inited) {
1538
+ return;
1539
+ }
1540
+ if ((changes['startHour'] || changes['endHour']) &&
1541
+ (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {
1542
+ this.views = [];
1543
+ this.hourRange = (this.endHour - this.startHour) * this.hourSegments;
1544
+ this.direction = 0;
1545
+ this.refreshView();
1546
+ this.hourColumnLabels = this.getHourColumnLabels();
1547
+ }
1548
+ const eventSourceChange = changes['eventSource'];
1549
+ if (eventSourceChange && eventSourceChange.currentValue) {
1550
+ this.onDataLoaded();
1551
+ }
1552
+ const lockSwipeToPrev = changes['lockSwipeToPrev'];
1553
+ if (lockSwipeToPrev) {
1554
+ this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;
1555
+ }
1556
+ const lockSwipeToNext = changes['lockSwipeToNext'];
1557
+ if (lockSwipeToPrev) {
1558
+ this.slider.allowSlideNext = !lockSwipeToNext.currentValue;
1559
+ }
1560
+ const lockSwipes = changes['lockSwipes'];
1561
+ if (lockSwipes) {
1562
+ this.slider.allowTouchMove = !lockSwipes.currentValue;
1563
+ }
1564
+ }
1565
+ ngOnDestroy() {
1566
+ if (this.currentDateChangedFromParentSubscription) {
1567
+ this.currentDateChangedFromParentSubscription.unsubscribe();
1568
+ this.currentDateChangedFromParentSubscription = undefined;
1569
+ }
1570
+ if (this.eventSourceChangedSubscription) {
1571
+ this.eventSourceChangedSubscription.unsubscribe();
1572
+ this.eventSourceChangedSubscription = undefined;
1573
+ }
1574
+ if (this.slideChangedSubscription) {
1575
+ this.slideChangedSubscription.unsubscribe();
1576
+ this.slideChangedSubscription = undefined;
1577
+ }
1578
+ if (this.slideUpdatedSubscription) {
1579
+ this.slideUpdatedSubscription.unsubscribe();
1580
+ this.slideUpdatedSubscription = undefined;
1581
+ }
1582
+ }
1583
+ onSlideChanged(direction) {
1584
+ this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;
1585
+ this.move(direction);
1586
+ }
1587
+ move(direction) {
1588
+ if (direction === 0) {
1589
+ return;
1590
+ }
1591
+ this.direction = direction;
1592
+ const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);
1593
+ this.calendarService.setCurrentDate(adjacentDate);
1594
+ this.refreshView();
1595
+ this.direction = 0;
1596
+ }
1597
+ getHourColumnLabels() {
1598
+ const hourColumnLabels = [];
1599
+ for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {
1600
+ // handle edge case for DST
1601
+ if (hour === 0 && this.views[0].rows[hour].time.getHours() !== this.startHour) {
1602
+ const time = new Date(this.views[0].rows[hour].time);
1603
+ time.setDate(time.getDate() + 1);
1604
+ time.setHours(this.startHour);
1605
+ hourColumnLabels.push(this.formatHourColumnLabel(time));
1606
+ }
1607
+ else {
1608
+ hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour].time));
1609
+ }
1610
+ }
1611
+ return hourColumnLabels;
1612
+ }
1613
+ getViewData(startTime) {
1614
+ return {
1615
+ rows: DayViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),
1616
+ allDayEvents: [],
1617
+ categorizedAllDayEventsMap: new Map()
1618
+ };
1619
+ }
1620
+ getRange(currentDate) {
1621
+ const year = currentDate.getFullYear(), month = currentDate.getMonth(), date = currentDate.getDate(), startTime = new Date(year, month, date, 12, 0, 0), endTime = new Date(year, month, date + 1, 12, 0, 0);
1622
+ return {
1623
+ startTime,
1624
+ endTime
1625
+ };
1626
+ }
1627
+ onDataLoaded() {
1628
+ const eventSource = this.eventSource, len = eventSource ? eventSource.length : 0, startTime = this.range.startTime, endTime = this.range.endTime, utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()), utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()), currentViewIndex = this.currentViewIndex, rows = this.views[currentViewIndex].rows, allDayEvents = (this.views[currentViewIndex].allDayEvents = []), oneHour = 3600000, eps = 0.016, rangeStartRowIndex = this.startHour * this.hourSegments, rangeEndRowIndex = this.endHour * this.hourSegments;
1629
+ let normalEventInRange = false;
1630
+ for (let hour = 0; hour < this.hourRange; hour += 1) {
1631
+ rows[hour].events = [];
1632
+ rows[hour].eventsGroupByCategory = undefined;
1633
+ }
1634
+ for (let i = 0; i < len; i += 1) {
1635
+ const event = eventSource[i];
1636
+ const eventStartTime = event.startTime;
1637
+ const eventEndTime = event.endTime;
1638
+ let eventUTCStartTime, eventUTCEndTime;
1639
+ if (event.allDay) {
1640
+ eventUTCStartTime = eventStartTime.getTime();
1641
+ eventUTCEndTime = eventEndTime.getTime();
1642
+ }
1643
+ else {
1644
+ eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());
1645
+ eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);
1646
+ }
1647
+ if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {
1648
+ continue;
1649
+ }
1650
+ if (event.allDay) {
1651
+ allDayEvents.push({
1652
+ event
1653
+ });
1654
+ }
1655
+ else {
1656
+ normalEventInRange = true;
1657
+ let timeDifferenceStart;
1658
+ if (eventUTCStartTime < utcStartTime) {
1659
+ timeDifferenceStart = 0;
1660
+ }
1661
+ else {
1662
+ timeDifferenceStart =
1663
+ (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;
1664
+ }
1665
+ let timeDifferenceEnd;
1666
+ if (eventUTCEndTime > utcEndTime) {
1667
+ timeDifferenceEnd = ((utcEndTime - utcStartTime) / oneHour) * this.hourSegments;
1668
+ }
1669
+ else {
1670
+ timeDifferenceEnd = (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;
1671
+ }
1672
+ let startIndex = Math.floor(timeDifferenceStart);
1673
+ let endIndex = Math.ceil(timeDifferenceEnd - eps);
1674
+ let startOffset = 0;
1675
+ let endOffset = 0;
1676
+ if (this.hourParts !== 1) {
1677
+ if (startIndex < rangeStartRowIndex) {
1678
+ startOffset = 0;
1679
+ }
1680
+ else {
1681
+ startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);
1682
+ }
1683
+ if (endIndex > rangeEndRowIndex) {
1684
+ endOffset = 0;
1685
+ }
1686
+ else {
1687
+ endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);
1688
+ }
1689
+ }
1690
+ if (startIndex < rangeStartRowIndex) {
1691
+ startIndex = 0;
1692
+ }
1693
+ else {
1694
+ startIndex -= rangeStartRowIndex;
1695
+ }
1696
+ if (endIndex > rangeEndRowIndex) {
1697
+ endIndex = rangeEndRowIndex;
1698
+ }
1699
+ endIndex -= rangeStartRowIndex;
1700
+ if (startIndex < endIndex) {
1701
+ const displayEvent = {
1702
+ event,
1703
+ startIndex,
1704
+ endIndex,
1705
+ startOffset,
1706
+ endOffset,
1707
+ position: 0
1708
+ };
1709
+ let eventSet = rows[startIndex].events;
1710
+ if (eventSet) {
1711
+ eventSet.push(displayEvent);
1712
+ }
1713
+ else {
1714
+ eventSet = [];
1715
+ eventSet.push(displayEvent);
1716
+ rows[startIndex].events = eventSet;
1717
+ }
1718
+ // setup eventsGroupedByCategory
1719
+ if (this.dayviewShowCategoryView && this.dayviewCategorySource && event.category) {
1720
+ let groupedEvents = rows[startIndex].eventsGroupByCategory;
1721
+ if (groupedEvents) {
1722
+ if (Array.isArray(groupedEvents.get(event.category))) {
1723
+ groupedEvents.get(event.category)?.push(displayEvent);
1724
+ }
1725
+ else {
1726
+ groupedEvents.set(event.category, [displayEvent]);
1727
+ }
1728
+ }
1729
+ else {
1730
+ groupedEvents = new Map();
1731
+ groupedEvents.set(event.category, [displayEvent]);
1732
+ rows[startIndex].eventsGroupByCategory = groupedEvents;
1733
+ }
1734
+ }
1735
+ }
1736
+ }
1737
+ }
1738
+ if (normalEventInRange) {
1739
+ if (this.dayviewShowCategoryView && this.dayviewCategorySource) {
1740
+ for (const category of this.dayviewCategorySource) {
1741
+ let displayEvents = [];
1742
+ for (let hour = 0; hour < this.hourRange; hour += 1) {
1743
+ let groupedEvents = rows[hour].eventsGroupByCategory?.get(category);
1744
+ if (groupedEvents) {
1745
+ groupedEvents.sort(DayViewComponent.compareEventByStartOffset);
1746
+ displayEvents = displayEvents.concat(groupedEvents);
1747
+ }
1748
+ }
1749
+ if (displayEvents.length > 0) {
1750
+ this.placeEvents(displayEvents);
1751
+ }
1752
+ }
1753
+ }
1754
+ else {
1755
+ let orderedEvents = [];
1756
+ for (let hour = 0; hour < this.hourRange; hour += 1) {
1757
+ if (rows[hour].events) {
1758
+ rows[hour].events.sort(DayViewComponent.compareEventByStartOffset);
1759
+ orderedEvents = orderedEvents.concat(rows[hour].events);
1760
+ }
1761
+ }
1762
+ if (orderedEvents.length > 0) {
1763
+ this.placeEvents(orderedEvents);
1764
+ }
1765
+ }
1766
+ }
1767
+ if (this.dayviewShowCategoryView && this.dayviewCategorySource) {
1768
+ this.categorizeAllDayEvents(allDayEvents);
1769
+ }
1770
+ }
1771
+ categorizeAllDayEvents(allDayEvents) {
1772
+ const categoryIdAllDayEventsMap = (this.views[this.currentViewIndex].categorizedAllDayEventsMap = new Map());
1773
+ for (const displayAllDayEvent of allDayEvents) {
1774
+ if (displayAllDayEvent.event.category) {
1775
+ if (categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)) {
1776
+ categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)?.push(displayAllDayEvent);
1777
+ }
1778
+ else {
1779
+ categoryIdAllDayEventsMap.set(displayAllDayEvent.event.category, [displayAllDayEvent]);
1780
+ }
1781
+ }
1782
+ }
1783
+ }
1784
+ refreshView() {
1785
+ this.range = this.getRange(this.calendarService.currentDate);
1786
+ if (this.inited) {
1787
+ const title = this.getTitle();
1788
+ this.onTitleChanged.emit(title);
1789
+ }
1790
+ this.calendarService.populateAdjacentViews(this);
1791
+ this.calendarService.rangeChanged(this);
1792
+ }
1793
+ getTitle() {
1794
+ const startingDate = new Date(this.range.startTime.getTime());
1795
+ startingDate.setHours(12, 0, 0, 0);
1796
+ return this.formatTitle(startingDate);
1797
+ }
1798
+ select(row, category) {
1799
+ const selectedTime = row.time;
1800
+ let events = row.events;
1801
+ if (category) {
1802
+ events = row.eventsGroupByCategory?.get(category) || [];
1803
+ }
1804
+ let disabled = false;
1805
+ if (this.markDisabled) {
1806
+ disabled = this.markDisabled(selectedTime);
1807
+ }
1808
+ this.onTimeSelected.emit({
1809
+ selectedTime,
1810
+ category,
1811
+ events: events.map(e => e.event),
1812
+ disabled
1813
+ });
1814
+ }
1815
+ placeEvents(orderedEvents) {
1816
+ this.calculatePosition(orderedEvents);
1817
+ DayViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);
1818
+ }
1819
+ placeAllDayEvents(orderedEvents) {
1820
+ this.calculatePosition(orderedEvents);
1821
+ }
1822
+ overlap(event1, event2) {
1823
+ let earlyEvent = event1, lateEvent = event2;
1824
+ if (event1.startIndex > event2.startIndex ||
1825
+ (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {
1826
+ earlyEvent = event2;
1827
+ lateEvent = event1;
1828
+ }
1829
+ if (earlyEvent.endIndex <= lateEvent.startIndex) {
1830
+ return false;
1831
+ }
1832
+ else {
1833
+ return !(earlyEvent.endIndex - lateEvent.startIndex === 1 &&
1834
+ earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);
1835
+ }
1836
+ }
1837
+ calculatePosition(events) {
1838
+ const len = events.length, isForbidden = new Array(len);
1839
+ let maxColumn = 0, col;
1840
+ for (let i = 0; i < len; i += 1) {
1841
+ for (col = 0; col < maxColumn; col += 1) {
1842
+ isForbidden[col] = false;
1843
+ }
1844
+ for (let j = 0; j < i; j += 1) {
1845
+ if (this.overlap(events[i], events[j])) {
1846
+ isForbidden[events[j].position] = true;
1847
+ }
1848
+ }
1849
+ for (col = 0; col < maxColumn; col += 1) {
1850
+ if (!isForbidden[col]) {
1851
+ break;
1852
+ }
1853
+ }
1854
+ if (col < maxColumn) {
1855
+ events[i].position = col;
1856
+ }
1857
+ else {
1858
+ events[i].position = maxColumn++;
1859
+ }
1860
+ }
1861
+ if (this.dir === 'rtl') {
1862
+ for (let i = 0; i < len; i += 1) {
1863
+ events[i].position = maxColumn - 1 - events[i].position;
1864
+ }
1865
+ }
1866
+ }
1867
+ eventSelected(event) {
1868
+ this.onEventSelected.emit(event);
1869
+ }
1870
+ setScrollPosition(scrollPosition) {
1871
+ this.initScrollPosition = scrollPosition;
1872
+ }
1873
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: DayViewComponent, deps: [{ token: CalendarService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
1874
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: DayViewComponent, isStandalone: false, selector: "dayview", inputs: { dayviewCategoryItemTemplate: "dayviewCategoryItemTemplate", dayviewAllDayEventTemplate: "dayviewAllDayEventTemplate", dayviewNormalEventTemplate: "dayviewNormalEventTemplate", dayviewAllDayEventSectionTemplate: "dayviewAllDayEventSectionTemplate", dayviewNormalEventSectionTemplate: "dayviewNormalEventSectionTemplate", dayviewInactiveAllDayEventSectionTemplate: "dayviewInactiveAllDayEventSectionTemplate", dayviewInactiveNormalEventSectionTemplate: "dayviewInactiveNormalEventSectionTemplate", formatHourColumn: "formatHourColumn", formatDayTitle: "formatDayTitle", allDayLabel: "allDayLabel", hourParts: "hourParts", eventSource: "eventSource", markDisabled: "markDisabled", locale: "locale", dateFormatter: "dateFormatter", dir: "dir", scrollToHour: "scrollToHour", preserveScrollPosition: "preserveScrollPosition", lockSwipeToPrev: "lockSwipeToPrev", lockSwipeToNext: "lockSwipeToNext", lockSwipes: "lockSwipes", startHour: "startHour", endHour: "endHour", sliderOptions: "sliderOptions", hourSegments: "hourSegments", dayviewCategorySource: "dayviewCategorySource", dayviewShowCategoryView: "dayviewShowCategoryView" }, outputs: { onRangeChanged: "onRangeChanged", onEventSelected: "onEventSelected", onTimeSelected: "onTimeSelected", onTitleChanged: "onTitleChanged" }, host: { properties: { "class.dayview": "this.class" } }, viewQueries: [{ propertyName: "swiperElement", first: true, predicate: ["dayViewSwiper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"swiper dayview-swiper\" #dayViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container dayview-slide-container\">\r\n <ng-container *ngIf=\"!dayviewShowCategoryView\">\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"dayview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngIf=\"sliderIndex===currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"sliderIndex!==currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex===currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\" tappable (click)=\"select(tm)\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n <init-position-scroll *ngIf=\"sliderIndex!==currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dayviewShowCategoryView\">\r\n <div class=\"dayview-category-header\">\r\n <table class=\"table table-fixed table-bordered dayview-category-header-table\">\r\n <thead>\r\n <tr>\r\n <th class=\"dayview-category-header-item calendar-hour-column\"></th>\r\n <th *ngFor=\"let category of dayviewCategorySource\" class=\"dayview-category-header-item\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\" [ngTemplateOutletContext]=\"{category}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\r\n <div class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\">\r\n <table class=\"table table-fixed table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td class=\"calendar-cell\" *ngFor=\"let category of dayviewCategorySource\">\r\n <div class=\"calendar-event-wrap\">\r\n <ng-template *ngIf=\"sliderIndex === currentViewIndex\"\r\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n <ng-template *ngIf=\"sliderIndex !== currentViewIndex \"\r\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex === currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n\r\n <init-position-scroll *ngIf=\"sliderIndex !== currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>", styles: [".dayview-slide-container .table-fixed{table-layout:fixed}.dayview-slide-container .table{width:100%;max-width:100%;background-color:transparent}.dayview-slide-container .table>thead>tr>th,.dayview-slide-container .table>tbody>tr>th,.dayview-slide-container .table>tfoot>tr>th,.dayview-slide-container .table>thead>tr>td,.dayview-slide-container .table>tbody>tr>td,.dayview-slide-container .table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.dayview-slide-container .table>thead>tr>th{vertical-align:bottom}.dayview-slide-container .table>thead:first-child>tr:first-child>th,.dayview-slide-container .table>thead:first-child>tr:first-child>td{border-top:0}.dayview-slide-container .table>tbody+tbody{border-top:2px solid #ddd}.dayview-slide-container .table-bordered{border:1px solid #ddd}.dayview-slide-container .table-bordered>thead>tr>th,.dayview-slide-container .table-bordered>tbody>tr>th,.dayview-slide-container .table-bordered>tfoot>tr>th,.dayview-slide-container .table-bordered>thead>tr>td,.dayview-slide-container .table-bordered>tbody>tr>td,.dayview-slide-container .table-bordered>tfoot>tr>td{border:1px solid #ddd}.dayview-slide-container .table-bordered>thead>tr>th,.dayview-slide-container .table-bordered>thead>tr>td{border-bottom-width:2px}.dayview-slide-container .table-striped>tbody>tr:nth-child(odd)>td,.dayview-slide-container .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.calendar-hour-column{width:50px;white-space:nowrap}.calendar-event-wrap{position:relative;width:100%;height:100%}.calendar-event{position:absolute;padding:2px;cursor:pointer;z-index:10000}.dayview-swiper{height:100%}.calendar-cell{padding:0!important;height:37px}.dayview-slide-container{display:block!important}.dayview-category-header{position:relative;font-size:14px}.dayview-category-header-item{font-weight:400;height:37px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dayview-allday-label{float:left;height:100%;line-height:50px;text-align:center;width:50px;border-top:1px solid #ddd;border-left:1px solid #ddd}[dir=rtl] .dayview-allday-label{border-left:none;border-right:1px solid #ddd;float:right}.dayview-allday-content-wrapper{margin-left:50px;overflow:hidden;height:51px}[dir=rtl] .dayview-allday-content-wrapper{margin-left:0;margin-right:50px}.dayview-allday-category-wrapper{height:50px;margin-top:-1px}.dayview-allday-content-table{min-height:50px}.dayview-allday-table{height:50px;position:relative;border-bottom:1px solid #ddd;font-size:14px}.dayview-normal-event-container{margin-top:50px;overflow:hidden;inset:0;position:absolute;font-size:14px}.dayview-categorized-normal-event-container{margin-top:87px}.scroll-content{overflow-y:auto;overflow-x:hidden}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}.dayview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle}@media(max-width:750px){.dayview-allday-label,.calendar-hour-column{width:31px;font-size:12px}.dayview-allday-label{padding-top:4px}.dayview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle;line-height:12px}.dayview-allday-label{line-height:20px}.dayview-allday-content-wrapper{margin-left:31px}[dir=rtl] .dayview-allday-content-wrapper{margin-left:0;margin-right:31px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: initPositionScrollComponent, selector: "init-position-scroll", inputs: ["initPosition", "emitEvent"], outputs: ["onScroll"] }], encapsulation: i0.ViewEncapsulation.None }); }
1875
+ }
1876
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: DayViewComponent, decorators: [{
1877
+ type: Component,
1878
+ args: [{ selector: 'dayview', encapsulation: ViewEncapsulation.None, standalone: false, template: "<div class=\"swiper dayview-swiper\" #dayViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container dayview-slide-container\">\r\n <ng-container *ngIf=\"!dayviewShowCategoryView\">\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"dayview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngIf=\"sliderIndex===currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"sliderIndex!==currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex===currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\" tappable (click)=\"select(tm)\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n <init-position-scroll *ngIf=\"sliderIndex!==currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dayviewShowCategoryView\">\r\n <div class=\"dayview-category-header\">\r\n <table class=\"table table-fixed table-bordered dayview-category-header-table\">\r\n <thead>\r\n <tr>\r\n <th class=\"dayview-category-header-item calendar-hour-column\"></th>\r\n <th *ngFor=\"let category of dayviewCategorySource\" class=\"dayview-category-header-item\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\" [ngTemplateOutletContext]=\"{category}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\r\n <div class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\">\r\n <table class=\"table table-fixed table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td class=\"calendar-cell\" *ngFor=\"let category of dayviewCategorySource\">\r\n <div class=\"calendar-event-wrap\">\r\n <ng-template *ngIf=\"sliderIndex === currentViewIndex\"\r\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n <ng-template *ngIf=\"sliderIndex !== currentViewIndex \"\r\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex === currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n\r\n <init-position-scroll *ngIf=\"sliderIndex !== currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>", styles: [".dayview-slide-container .table-fixed{table-layout:fixed}.dayview-slide-container .table{width:100%;max-width:100%;background-color:transparent}.dayview-slide-container .table>thead>tr>th,.dayview-slide-container .table>tbody>tr>th,.dayview-slide-container .table>tfoot>tr>th,.dayview-slide-container .table>thead>tr>td,.dayview-slide-container .table>tbody>tr>td,.dayview-slide-container .table>tfoot>tr>td{padding:8px;line-height:20px;vertical-align:top}.dayview-slide-container .table>thead>tr>th{vertical-align:bottom}.dayview-slide-container .table>thead:first-child>tr:first-child>th,.dayview-slide-container .table>thead:first-child>tr:first-child>td{border-top:0}.dayview-slide-container .table>tbody+tbody{border-top:2px solid #ddd}.dayview-slide-container .table-bordered{border:1px solid #ddd}.dayview-slide-container .table-bordered>thead>tr>th,.dayview-slide-container .table-bordered>tbody>tr>th,.dayview-slide-container .table-bordered>tfoot>tr>th,.dayview-slide-container .table-bordered>thead>tr>td,.dayview-slide-container .table-bordered>tbody>tr>td,.dayview-slide-container .table-bordered>tfoot>tr>td{border:1px solid #ddd}.dayview-slide-container .table-bordered>thead>tr>th,.dayview-slide-container .table-bordered>thead>tr>td{border-bottom-width:2px}.dayview-slide-container .table-striped>tbody>tr:nth-child(odd)>td,.dayview-slide-container .table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.calendar-hour-column{width:50px;white-space:nowrap}.calendar-event-wrap{position:relative;width:100%;height:100%}.calendar-event{position:absolute;padding:2px;cursor:pointer;z-index:10000}.dayview-swiper{height:100%}.calendar-cell{padding:0!important;height:37px}.dayview-slide-container{display:block!important}.dayview-category-header{position:relative;font-size:14px}.dayview-category-header-item{font-weight:400;height:37px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dayview-allday-label{float:left;height:100%;line-height:50px;text-align:center;width:50px;border-top:1px solid #ddd;border-left:1px solid #ddd}[dir=rtl] .dayview-allday-label{border-left:none;border-right:1px solid #ddd;float:right}.dayview-allday-content-wrapper{margin-left:50px;overflow:hidden;height:51px}[dir=rtl] .dayview-allday-content-wrapper{margin-left:0;margin-right:50px}.dayview-allday-category-wrapper{height:50px;margin-top:-1px}.dayview-allday-content-table{min-height:50px}.dayview-allday-table{height:50px;position:relative;border-bottom:1px solid #ddd;font-size:14px}.dayview-normal-event-container{margin-top:50px;overflow:hidden;inset:0;position:absolute;font-size:14px}.dayview-categorized-normal-event-container{margin-top:87px}.scroll-content{overflow-y:auto;overflow-x:hidden}::-webkit-scrollbar,*::-webkit-scrollbar{display:none}.dayview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle}@media(max-width:750px){.dayview-allday-label,.calendar-hour-column{width:31px;font-size:12px}.dayview-allday-label{padding-top:4px}.dayview-slide-container .table>tbody>tr>td.calendar-hour-column{padding-left:0;padding-right:0;vertical-align:middle;line-height:12px}.dayview-allday-label{line-height:20px}.dayview-allday-content-wrapper{margin-left:31px}[dir=rtl] .dayview-allday-content-wrapper{margin-left:0;margin-right:31px}}\n"] }]
1879
+ }], ctorParameters: () => [{ type: CalendarService }, { type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { swiperElement: [{
1880
+ type: ViewChild,
1881
+ args: ['dayViewSwiper']
1882
+ }], class: [{
1883
+ type: HostBinding,
1884
+ args: ['class.dayview']
1885
+ }], dayviewCategoryItemTemplate: [{
1886
+ type: Input
1887
+ }], dayviewAllDayEventTemplate: [{
1888
+ type: Input
1889
+ }], dayviewNormalEventTemplate: [{
1890
+ type: Input
1891
+ }], dayviewAllDayEventSectionTemplate: [{
1892
+ type: Input
1893
+ }], dayviewNormalEventSectionTemplate: [{
1894
+ type: Input
1895
+ }], dayviewInactiveAllDayEventSectionTemplate: [{
1896
+ type: Input
1897
+ }], dayviewInactiveNormalEventSectionTemplate: [{
1898
+ type: Input
1899
+ }], formatHourColumn: [{
1900
+ type: Input
1901
+ }], formatDayTitle: [{
1902
+ type: Input
1903
+ }], allDayLabel: [{
1904
+ type: Input
1905
+ }], hourParts: [{
1906
+ type: Input
1907
+ }], eventSource: [{
1908
+ type: Input
1909
+ }], markDisabled: [{
1910
+ type: Input
1911
+ }], locale: [{
1912
+ type: Input
1913
+ }], dateFormatter: [{
1914
+ type: Input
1915
+ }], dir: [{
1916
+ type: Input
1917
+ }], scrollToHour: [{
1918
+ type: Input
1919
+ }], preserveScrollPosition: [{
1920
+ type: Input
1921
+ }], lockSwipeToPrev: [{
1922
+ type: Input
1923
+ }], lockSwipeToNext: [{
1924
+ type: Input
1925
+ }], lockSwipes: [{
1926
+ type: Input
1927
+ }], startHour: [{
1928
+ type: Input
1929
+ }], endHour: [{
1930
+ type: Input
1931
+ }], sliderOptions: [{
1932
+ type: Input
1933
+ }], hourSegments: [{
1934
+ type: Input
1935
+ }], dayviewCategorySource: [{
1936
+ type: Input
1937
+ }], dayviewShowCategoryView: [{
1938
+ type: Input
1939
+ }], onRangeChanged: [{
1940
+ type: Output
1941
+ }], onEventSelected: [{
1942
+ type: Output
1943
+ }], onTimeSelected: [{
1944
+ type: Output
1945
+ }], onTitleChanged: [{
1946
+ type: Output
1947
+ }] } });
1948
+
1949
+ var Step;
1950
+ (function (Step) {
1951
+ Step[Step["QuarterHour"] = 15] = "QuarterHour";
1952
+ Step[Step["HalfHour"] = 30] = "HalfHour";
1953
+ Step[Step["Hour"] = 60] = "Hour";
1954
+ })(Step || (Step = {}));
1955
+
1956
+ SwiperCore.use([IonicSlides]);
1957
+ class CalendarComponent {
1958
+ get currentDate() {
1959
+ return this._currentDate;
1960
+ }
1961
+ set currentDate(val) {
1962
+ if (!val) {
1963
+ val = new Date();
1964
+ }
1965
+ this._currentDate = val;
1966
+ this.calendarService.setCurrentDate(val, true);
1967
+ this.onCurrentDateChanged.emit(this._currentDate);
1968
+ }
1969
+ constructor(calendarService, appLocale, ngZone) {
1970
+ this.calendarService = calendarService;
1971
+ this.appLocale = appLocale;
1972
+ this.ngZone = ngZone;
1973
+ this.eventSource = [];
1974
+ this.calendarMode = 'month';
1975
+ this.formatDay = 'd';
1976
+ this.formatDayHeader = 'EEE';
1977
+ this.formatDayTitle = 'MMMM dd, yyyy';
1978
+ this.formatWeekTitle = 'MMMM yyyy, \'Week\' w';
1979
+ this.formatMonthTitle = 'MMMM yyyy';
1980
+ this.formatWeekViewDayHeader = 'EEE d';
1981
+ this.formatHourColumn = 'ha';
1982
+ this.showEventDetail = true;
1983
+ this.startingDayMonth = 0;
1984
+ this.startingDayWeek = 0;
1985
+ this.allDayLabel = 'all day';
1986
+ this.noEventsLabel = 'No Events';
1987
+ this.queryMode = 'local';
1988
+ this.step = Step.Hour;
1989
+ this.timeInterval = 60;
1990
+ this.autoSelect = true;
1991
+ this.dir = "";
1992
+ this.scrollToHour = 0;
1993
+ this.preserveScrollPosition = false;
1994
+ this.lockSwipeToPrev = false;
1995
+ this.lockSwipeToNext = false;
1996
+ this.lockSwipes = false;
1997
+ this.locale = "";
1998
+ this.startHour = 0;
1999
+ this.endHour = 24;
2000
+ this.dayviewShowCategoryView = false;
2001
+ this.onCurrentDateChanged = new EventEmitter();
2002
+ this.onRangeChanged = new EventEmitter();
2003
+ this.onEventSelected = new EventEmitter();
2004
+ this.onTimeSelected = new EventEmitter();
2005
+ this.onDayHeaderSelected = new EventEmitter();
2006
+ this.onTitleChanged = new EventEmitter(true);
2007
+ this._currentDate = new Date();
2008
+ this.hourParts = 1;
2009
+ this.hourSegments = 1;
2010
+ this.locale = appLocale;
2011
+ }
2012
+ ngOnInit() {
2013
+ if (this.autoSelect) {
2014
+ if (this.autoSelect.toString() === 'false') {
2015
+ this.autoSelect = false;
2016
+ }
2017
+ else {
2018
+ this.autoSelect = true;
2019
+ }
2020
+ }
2021
+ this.hourSegments = 60 / this.timeInterval;
2022
+ this.hourParts = 60 / this.step;
2023
+ if (this.hourParts <= this.hourSegments) {
2024
+ this.hourParts = 1;
2025
+ }
2026
+ else {
2027
+ this.hourParts = this.hourParts / this.hourSegments;
2028
+ }
2029
+ this.startHour = parseInt(this.startHour.toString());
2030
+ this.endHour = parseInt(this.endHour.toString());
2031
+ this.calendarService.queryMode = this.queryMode;
2032
+ this.currentDateChangedFromChildrenSubscription = this.calendarService.currentDateChangedFromChildren$.subscribe(currentDate => {
2033
+ this._currentDate = currentDate;
2034
+ this.onCurrentDateChanged.emit(currentDate);
2035
+ });
2036
+ }
2037
+ ngOnDestroy() {
2038
+ if (this.currentDateChangedFromChildrenSubscription) {
2039
+ this.currentDateChangedFromChildrenSubscription.unsubscribe();
2040
+ this.currentDateChangedFromChildrenSubscription = undefined;
2041
+ }
2042
+ }
2043
+ rangeChanged(range) {
2044
+ this.onRangeChanged.emit(range);
2045
+ }
2046
+ eventSelected(event) {
2047
+ this.onEventSelected.emit(event);
2048
+ }
2049
+ timeSelected(timeSelected) {
2050
+ this.onTimeSelected.emit(timeSelected);
2051
+ }
2052
+ daySelected(daySelected) {
2053
+ this.onDayHeaderSelected.emit(daySelected);
2054
+ }
2055
+ titleChanged(title) {
2056
+ this.onTitleChanged.emit(title);
2057
+ }
2058
+ loadEvents() {
2059
+ this.calendarService.loadEvents();
2060
+ }
2061
+ slideNext() {
2062
+ this.calendarService.slide(1);
2063
+ }
2064
+ slidePrev() {
2065
+ this.calendarService.slide(-1);
2066
+ }
2067
+ update() {
2068
+ this.calendarService.update();
2069
+ }
2070
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalendarComponent, deps: [{ token: CalendarService }, { token: LOCALE_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
2071
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.5", type: CalendarComponent, isStandalone: false, selector: "calendar", inputs: { currentDate: "currentDate", eventSource: "eventSource", calendarMode: "calendarMode", formatDay: "formatDay", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatWeekTitle: "formatWeekTitle", formatMonthTitle: "formatMonthTitle", formatWeekViewDayHeader: "formatWeekViewDayHeader", formatHourColumn: "formatHourColumn", showEventDetail: "showEventDetail", startingDayMonth: "startingDayMonth", startingDayWeek: "startingDayWeek", allDayLabel: "allDayLabel", noEventsLabel: "noEventsLabel", queryMode: "queryMode", step: "step", timeInterval: "timeInterval", autoSelect: "autoSelect", markDisabled: "markDisabled", monthviewDisplayEventTemplate: "monthviewDisplayEventTemplate", monthviewInactiveDisplayEventTemplate: "monthviewInactiveDisplayEventTemplate", monthviewEventDetailTemplate: "monthviewEventDetailTemplate", weekviewHeaderTemplate: "weekviewHeaderTemplate", weekviewAllDayEventTemplate: "weekviewAllDayEventTemplate", weekviewNormalEventTemplate: "weekviewNormalEventTemplate", dayviewCategoryItemTemplate: "dayviewCategoryItemTemplate", dayviewAllDayEventTemplate: "dayviewAllDayEventTemplate", dayviewNormalEventTemplate: "dayviewNormalEventTemplate", weekviewAllDayEventSectionTemplate: "weekviewAllDayEventSectionTemplate", weekviewNormalEventSectionTemplate: "weekviewNormalEventSectionTemplate", dayviewAllDayEventSectionTemplate: "dayviewAllDayEventSectionTemplate", dayviewNormalEventSectionTemplate: "dayviewNormalEventSectionTemplate", weekviewInactiveAllDayEventSectionTemplate: "weekviewInactiveAllDayEventSectionTemplate", weekviewInactiveNormalEventSectionTemplate: "weekviewInactiveNormalEventSectionTemplate", dayviewInactiveAllDayEventSectionTemplate: "dayviewInactiveAllDayEventSectionTemplate", dayviewInactiveNormalEventSectionTemplate: "dayviewInactiveNormalEventSectionTemplate", dateFormatter: "dateFormatter", dir: "dir", scrollToHour: "scrollToHour", preserveScrollPosition: "preserveScrollPosition", lockSwipeToPrev: "lockSwipeToPrev", lockSwipeToNext: "lockSwipeToNext", lockSwipes: "lockSwipes", locale: "locale", startHour: "startHour", endHour: "endHour", sliderOptions: "sliderOptions", dayviewCategorySource: "dayviewCategorySource", dayviewShowCategoryView: "dayviewShowCategoryView" }, outputs: { onCurrentDateChanged: "onCurrentDateChanged", onRangeChanged: "onRangeChanged", onEventSelected: "onEventSelected", onTimeSelected: "onTimeSelected", onDayHeaderSelected: "onDayHeaderSelected", onTitleChanged: "onTitleChanged" }, providers: [CalendarService], ngImport: i0, template: "<ng-template #monthviewDefaultDisplayEventTemplate let-view=\"view\" let-row=\"row\" let-col=\"col\">\r\n {{view.dates[row*7+col].label}}\r\n</ng-template>\r\n<ng-template #monthviewDefaultEventDetailTemplate let-showEventDetail=\"showEventDetail\" let-selectedDate=\"selectedDate\"\r\n let-noEventsLabel=\"noEventsLabel\">\r\n <ion-list class=\"event-detail-container\" has-bouncing=\"false\" *ngIf=\"showEventDetail\" overflow-scroll=\"false\">\r\n <ion-item *ngFor=\"let event of selectedDate?.events\" (click)=\"eventSelected(event)\">\r\n <span *ngIf=\"!event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{event.startTime|date: 'HH:mm'}}\r\n -\r\n {{event.endTime|date: 'HH:mm'}}\r\n </span>\r\n <span *ngIf=\"event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{allDayLabel}}</span>\r\n <span class=\"event-detail\"> | {{event.title}} </span>\r\n <span class=\"event-detail event-category-detail\" *ngIf=\"event.categoryId\">[{{event.categoryName}}]</span>\r\n </ion-item>\r\n <ion-item *ngIf=\"selectedDate?.events.length==0\">\r\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\r\n </ion-item>\r\n </ion-list>\r\n</ng-template>\r\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\r\n {{ viewDate.dayHeader }}\r\n</ng-template>\r\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\r\n {{ category }}\r\n</ng-template>\r\n<ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultWeekViewAllDayEventSectionTemplate let-day=\"day\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': day.events}\" *ngIf=\"day.events\"\r\n [ngStyle]=\"{height: 25*day.events.length+'px'}\">\r\n <div *ngFor=\"let displayEvent of day.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayViewAllDayEventSectionTemplate let-allDayEvents=\"allDayEvents\"\r\n let-eventTemplate=\"eventTemplate\">\r\n <div *ngFor=\"let displayEvent of allDayEvents; let eventIndex=index\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\" [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventSectionTemplate let-tm=\"tm\" let-hourParts=\"hourParts\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <div *ngFor=\"let displayEvent of tm.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultInactiveAllDayEventSectionTemplate>\r\n</ng-template>\r\n<ng-template #defaultInactiveNormalEventSectionTemplate>\r\n</ng-template>\r\n\r\n<div [ngSwitch]=\"calendarMode\" class=\"{{calendarMode}}view-container\">\r\n <monthview *ngSwitchCase=\"'month'\" [formatDay]=\"formatDay\" [formatDayHeader]=\"formatDayHeader\"\r\n [formatMonthTitle]=\"formatMonthTitle\" [startingDayMonth]=\"startingDayMonth\" [showEventDetail]=\"showEventDetail\"\r\n [noEventsLabel]=\"noEventsLabel\" [autoSelect]=\"autoSelect\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [sliderOptions]=\"sliderOptions\"\r\n (onRangeChanged)=\"rangeChanged($event)\" (onEventSelected)=\"eventSelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </monthview>\r\n <weekview *ngSwitchCase=\"'week'\" [formatWeekTitle]=\"formatWeekTitle\"\r\n [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\" [formatHourColumn]=\"formatHourColumn\"\r\n [startingDayWeek]=\"startingDayWeek\" [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\"\r\n [autoSelect]=\"autoSelect\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\" [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\r\n [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\r\n [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n (onEventSelected)=\"eventSelected($event)\" (onDayHeaderSelected)=\"daySelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </weekview>\r\n <dayview *ngSwitchCase=\"'day'\" [formatDayTitle]=\"formatDayTitle\" [formatHourColumn]=\"formatHourColumn\"\r\n [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\r\n [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\r\n [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n [dayviewCategorySource]=\"dayviewCategorySource\"\r\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\r\n (onEventSelected)=\"eventSelected($event)\" (onTimeSelected)=\"timeSelected($event)\"\r\n (onTitleChanged)=\"titleChanged($event)\">\r\n </dayview>\r\n</div>", styles: [":host>div{height:100%}.event-detail-container{border-top:2px darkgrey solid}.no-events-label{font-weight:700;color:#a9a9a9;text-align:center}.event-detail{cursor:pointer;white-space:nowrap;text-overflow:ellipsis}.event-category-detail{margin-left:10px}.monthview-eventdetail-timecolumn{width:110px;overflow:hidden}.calendar-event-inner{overflow:hidden;background-color:#3a87ad;color:#fff;height:100%;width:100%;padding:2px;line-height:15px;text-align:initial}@media(max-width:750px){.calendar-event-inner{font-size:12px}}\n"], dependencies: [{ kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2$1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: MonthViewComponent, selector: "monthview", inputs: ["monthviewDisplayEventTemplate", "monthviewInactiveDisplayEventTemplate", "monthviewEventDetailTemplate", "formatDay", "formatDayHeader", "formatMonthTitle", "eventSource", "startingDayMonth", "showEventDetail", "noEventsLabel", "autoSelect", "markDisabled", "locale", "dateFormatter", "dir", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "sliderOptions"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onTitleChanged"] }, { kind: "component", type: WeekViewComponent, selector: "weekview", inputs: ["weekviewHeaderTemplate", "weekviewAllDayEventTemplate", "weekviewNormalEventTemplate", "weekviewAllDayEventSectionTemplate", "weekviewNormalEventSectionTemplate", "weekviewInactiveAllDayEventSectionTemplate", "weekviewInactiveNormalEventSectionTemplate", "formatWeekTitle", "formatWeekViewDayHeader", "formatHourColumn", "startingDayWeek", "allDayLabel", "hourParts", "eventSource", "autoSelect", "markDisabled", "locale", "dateFormatter", "dir", "scrollToHour", "preserveScrollPosition", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "startHour", "endHour", "sliderOptions", "hourSegments"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onDayHeaderSelected", "onTitleChanged"] }, { kind: "component", type: DayViewComponent, selector: "dayview", inputs: ["dayviewCategoryItemTemplate", "dayviewAllDayEventTemplate", "dayviewNormalEventTemplate", "dayviewAllDayEventSectionTemplate", "dayviewNormalEventSectionTemplate", "dayviewInactiveAllDayEventSectionTemplate", "dayviewInactiveNormalEventSectionTemplate", "formatHourColumn", "formatDayTitle", "allDayLabel", "hourParts", "eventSource", "markDisabled", "locale", "dateFormatter", "dir", "scrollToHour", "preserveScrollPosition", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "startHour", "endHour", "sliderOptions", "hourSegments", "dayviewCategorySource", "dayviewShowCategoryView"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onTitleChanged"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] }); }
2072
+ }
2073
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalendarComponent, decorators: [{
2074
+ type: Component,
2075
+ args: [{ selector: 'calendar', providers: [CalendarService], standalone: false, template: "<ng-template #monthviewDefaultDisplayEventTemplate let-view=\"view\" let-row=\"row\" let-col=\"col\">\r\n {{view.dates[row*7+col].label}}\r\n</ng-template>\r\n<ng-template #monthviewDefaultEventDetailTemplate let-showEventDetail=\"showEventDetail\" let-selectedDate=\"selectedDate\"\r\n let-noEventsLabel=\"noEventsLabel\">\r\n <ion-list class=\"event-detail-container\" has-bouncing=\"false\" *ngIf=\"showEventDetail\" overflow-scroll=\"false\">\r\n <ion-item *ngFor=\"let event of selectedDate?.events\" (click)=\"eventSelected(event)\">\r\n <span *ngIf=\"!event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{event.startTime|date: 'HH:mm'}}\r\n -\r\n {{event.endTime|date: 'HH:mm'}}\r\n </span>\r\n <span *ngIf=\"event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{allDayLabel}}</span>\r\n <span class=\"event-detail\"> | {{event.title}} </span>\r\n <span class=\"event-detail event-category-detail\" *ngIf=\"event.categoryId\">[{{event.categoryName}}]</span>\r\n </ion-item>\r\n <ion-item *ngIf=\"selectedDate?.events.length==0\">\r\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\r\n </ion-item>\r\n </ion-list>\r\n</ng-template>\r\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\r\n {{ viewDate.dayHeader }}\r\n</ng-template>\r\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\r\n {{ category }}\r\n</ng-template>\r\n<ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultWeekViewAllDayEventSectionTemplate let-day=\"day\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': day.events}\" *ngIf=\"day.events\"\r\n [ngStyle]=\"{height: 25*day.events.length+'px'}\">\r\n <div *ngFor=\"let displayEvent of day.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayViewAllDayEventSectionTemplate let-allDayEvents=\"allDayEvents\"\r\n let-eventTemplate=\"eventTemplate\">\r\n <div *ngFor=\"let displayEvent of allDayEvents; let eventIndex=index\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\" [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventSectionTemplate let-tm=\"tm\" let-hourParts=\"hourParts\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <div *ngFor=\"let displayEvent of tm.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultInactiveAllDayEventSectionTemplate>\r\n</ng-template>\r\n<ng-template #defaultInactiveNormalEventSectionTemplate>\r\n</ng-template>\r\n\r\n<div [ngSwitch]=\"calendarMode\" class=\"{{calendarMode}}view-container\">\r\n <monthview *ngSwitchCase=\"'month'\" [formatDay]=\"formatDay\" [formatDayHeader]=\"formatDayHeader\"\r\n [formatMonthTitle]=\"formatMonthTitle\" [startingDayMonth]=\"startingDayMonth\" [showEventDetail]=\"showEventDetail\"\r\n [noEventsLabel]=\"noEventsLabel\" [autoSelect]=\"autoSelect\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [sliderOptions]=\"sliderOptions\"\r\n (onRangeChanged)=\"rangeChanged($event)\" (onEventSelected)=\"eventSelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </monthview>\r\n <weekview *ngSwitchCase=\"'week'\" [formatWeekTitle]=\"formatWeekTitle\"\r\n [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\" [formatHourColumn]=\"formatHourColumn\"\r\n [startingDayWeek]=\"startingDayWeek\" [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\"\r\n [autoSelect]=\"autoSelect\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\" [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\r\n [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\r\n [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n (onEventSelected)=\"eventSelected($event)\" (onDayHeaderSelected)=\"daySelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </weekview>\r\n <dayview *ngSwitchCase=\"'day'\" [formatDayTitle]=\"formatDayTitle\" [formatHourColumn]=\"formatHourColumn\"\r\n [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\r\n [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\r\n [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n [dayviewCategorySource]=\"dayviewCategorySource\"\r\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\r\n (onEventSelected)=\"eventSelected($event)\" (onTimeSelected)=\"timeSelected($event)\"\r\n (onTitleChanged)=\"titleChanged($event)\">\r\n </dayview>\r\n</div>", styles: [":host>div{height:100%}.event-detail-container{border-top:2px darkgrey solid}.no-events-label{font-weight:700;color:#a9a9a9;text-align:center}.event-detail{cursor:pointer;white-space:nowrap;text-overflow:ellipsis}.event-category-detail{margin-left:10px}.monthview-eventdetail-timecolumn{width:110px;overflow:hidden}.calendar-event-inner{overflow:hidden;background-color:#3a87ad;color:#fff;height:100%;width:100%;padding:2px;line-height:15px;text-align:initial}@media(max-width:750px){.calendar-event-inner{font-size:12px}}\n"] }]
2076
+ }], ctorParameters: () => [{ type: CalendarService }, { type: undefined, decorators: [{
2077
+ type: Inject,
2078
+ args: [LOCALE_ID]
2079
+ }] }, { type: i0.NgZone }], propDecorators: { currentDate: [{
2080
+ type: Input
2081
+ }], eventSource: [{
2082
+ type: Input
2083
+ }], calendarMode: [{
2084
+ type: Input
2085
+ }], formatDay: [{
2086
+ type: Input
2087
+ }], formatDayHeader: [{
2088
+ type: Input
2089
+ }], formatDayTitle: [{
2090
+ type: Input
2091
+ }], formatWeekTitle: [{
2092
+ type: Input
2093
+ }], formatMonthTitle: [{
2094
+ type: Input
2095
+ }], formatWeekViewDayHeader: [{
2096
+ type: Input
2097
+ }], formatHourColumn: [{
2098
+ type: Input
2099
+ }], showEventDetail: [{
2100
+ type: Input
2101
+ }], startingDayMonth: [{
2102
+ type: Input
2103
+ }], startingDayWeek: [{
2104
+ type: Input
2105
+ }], allDayLabel: [{
2106
+ type: Input
2107
+ }], noEventsLabel: [{
2108
+ type: Input
2109
+ }], queryMode: [{
2110
+ type: Input
2111
+ }], step: [{
2112
+ type: Input
2113
+ }], timeInterval: [{
2114
+ type: Input
2115
+ }], autoSelect: [{
2116
+ type: Input
2117
+ }], markDisabled: [{
2118
+ type: Input
2119
+ }], monthviewDisplayEventTemplate: [{
2120
+ type: Input
2121
+ }], monthviewInactiveDisplayEventTemplate: [{
2122
+ type: Input
2123
+ }], monthviewEventDetailTemplate: [{
2124
+ type: Input
2125
+ }], weekviewHeaderTemplate: [{
2126
+ type: Input
2127
+ }], weekviewAllDayEventTemplate: [{
2128
+ type: Input
2129
+ }], weekviewNormalEventTemplate: [{
2130
+ type: Input
2131
+ }], dayviewCategoryItemTemplate: [{
2132
+ type: Input
2133
+ }], dayviewAllDayEventTemplate: [{
2134
+ type: Input
2135
+ }], dayviewNormalEventTemplate: [{
2136
+ type: Input
2137
+ }], weekviewAllDayEventSectionTemplate: [{
2138
+ type: Input
2139
+ }], weekviewNormalEventSectionTemplate: [{
2140
+ type: Input
2141
+ }], dayviewAllDayEventSectionTemplate: [{
2142
+ type: Input
2143
+ }], dayviewNormalEventSectionTemplate: [{
2144
+ type: Input
2145
+ }], weekviewInactiveAllDayEventSectionTemplate: [{
2146
+ type: Input
2147
+ }], weekviewInactiveNormalEventSectionTemplate: [{
2148
+ type: Input
2149
+ }], dayviewInactiveAllDayEventSectionTemplate: [{
2150
+ type: Input
2151
+ }], dayviewInactiveNormalEventSectionTemplate: [{
2152
+ type: Input
2153
+ }], dateFormatter: [{
2154
+ type: Input
2155
+ }], dir: [{
2156
+ type: Input
2157
+ }], scrollToHour: [{
2158
+ type: Input
2159
+ }], preserveScrollPosition: [{
2160
+ type: Input
2161
+ }], lockSwipeToPrev: [{
2162
+ type: Input
2163
+ }], lockSwipeToNext: [{
2164
+ type: Input
2165
+ }], lockSwipes: [{
2166
+ type: Input
2167
+ }], locale: [{
2168
+ type: Input
2169
+ }], startHour: [{
2170
+ type: Input
2171
+ }], endHour: [{
2172
+ type: Input
2173
+ }], sliderOptions: [{
2174
+ type: Input
2175
+ }], dayviewCategorySource: [{
2176
+ type: Input
2177
+ }], dayviewShowCategoryView: [{
2178
+ type: Input
2179
+ }], onCurrentDateChanged: [{
2180
+ type: Output
2181
+ }], onRangeChanged: [{
2182
+ type: Output
2183
+ }], onEventSelected: [{
2184
+ type: Output
2185
+ }], onTimeSelected: [{
2186
+ type: Output
2187
+ }], onDayHeaderSelected: [{
2188
+ type: Output
2189
+ }], onTitleChanged: [{
2190
+ type: Output
2191
+ }] } });
2192
+
2193
+ class NgCalendarModule {
2194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: NgCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2195
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.5", ngImport: i0, type: NgCalendarModule, declarations: [MonthViewComponent, WeekViewComponent, DayViewComponent, CalendarComponent, initPositionScrollComponent], imports: [IonicModule, CommonModule], exports: [CalendarComponent] }); }
2196
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: NgCalendarModule, imports: [IonicModule, CommonModule] }); }
2197
+ }
2198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: NgCalendarModule, decorators: [{
2199
+ type: NgModule,
2200
+ args: [{
2201
+ declarations: [
2202
+ MonthViewComponent, WeekViewComponent, DayViewComponent, CalendarComponent, initPositionScrollComponent
2203
+ ],
2204
+ imports: [IonicModule, CommonModule],
2205
+ exports: [CalendarComponent]
2206
+ }]
2207
+ }] });
2208
+
2209
+ /**
2210
+ * Generated bundle index. Do not edit.
2211
+ */
2212
+
2213
+ export { CalendarComponent, NgCalendarModule, Step };
2214
+ //# sourceMappingURL=pieninck-ionic2-calendar.mjs.map