@mintplayer/ng-bootstrap 13.1.19 → 13.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/_bootstrap.scss +0 -1
  2. package/esm2020/lib/components/index.mjs +2 -1
  3. package/esm2020/lib/components/navbar/navbar/navbar.component.mjs +7 -4
  4. package/esm2020/lib/components/navbar/navbar-item/navbar-item.component.mjs +12 -6
  5. package/esm2020/lib/components/navbar/navbar-nav/navbar-nav.component.mjs +4 -2
  6. package/esm2020/lib/components/navbar/navbar-toggler/navbar-toggler.component.mjs +8 -5
  7. package/esm2020/lib/components/scheduler/components/index.mjs +2 -0
  8. package/esm2020/lib/components/scheduler/components/scheduler/scheduler.component.mjs +261 -0
  9. package/esm2020/lib/components/scheduler/enums/drag-operation.mjs +8 -0
  10. package/esm2020/lib/components/scheduler/index.mjs +3 -0
  11. package/esm2020/lib/components/scheduler/interfaces/drag-operation.mjs +2 -0
  12. package/esm2020/lib/components/scheduler/interfaces/scheduler-event-part.mjs +2 -0
  13. package/esm2020/lib/components/scheduler/interfaces/scheduler-event-with-parts.mjs +2 -0
  14. package/esm2020/lib/components/scheduler/interfaces/scheduler-event.mjs +2 -0
  15. package/esm2020/lib/components/scheduler/interfaces/time-slot.mjs +2 -0
  16. package/esm2020/lib/components/scheduler/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.mjs +16 -0
  17. package/esm2020/lib/components/scheduler/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.mjs +20 -0
  18. package/esm2020/lib/components/scheduler/pipes/date-offset/date-offset.pipe.mjs +20 -0
  19. package/esm2020/lib/components/scheduler/pipes/day-of-week/day-of-week.pipe.mjs +22 -0
  20. package/esm2020/lib/components/scheduler/scheduler.module.mjs +38 -0
  21. package/esm2020/lib/components/scrollspy/component/scrollspy.component.mjs +8 -6
  22. package/esm2020/lib/components/select2/component/select2.component.mjs +4 -2
  23. package/esm2020/lib/components/typeahead/typeahead.component.mjs +4 -2
  24. package/esm2020/lib/services/calendar-month/calendar-month.service.mjs +1 -1
  25. package/fesm2015/mintplayer-ng-bootstrap.mjs +396 -19
  26. package/fesm2015/mintplayer-ng-bootstrap.mjs.map +1 -1
  27. package/fesm2020/mintplayer-ng-bootstrap.mjs +396 -19
  28. package/fesm2020/mintplayer-ng-bootstrap.mjs.map +1 -1
  29. package/lib/components/index.d.ts +1 -0
  30. package/lib/components/navbar/navbar/navbar.component.d.ts +2 -1
  31. package/lib/components/navbar/navbar-item/navbar-item.component.d.ts +4 -2
  32. package/lib/components/navbar/navbar-toggler/navbar-toggler.component.d.ts +1 -1
  33. package/lib/components/scheduler/components/index.d.ts +1 -0
  34. package/lib/components/scheduler/components/scheduler/scheduler.component.d.ts +42 -0
  35. package/lib/components/scheduler/enums/drag-operation.d.ts +6 -0
  36. package/lib/components/scheduler/index.d.ts +2 -0
  37. package/lib/components/scheduler/interfaces/drag-operation.d.ts +6 -0
  38. package/lib/components/scheduler/interfaces/scheduler-event-part.d.ts +6 -0
  39. package/lib/components/scheduler/interfaces/scheduler-event-with-parts.d.ts +6 -0
  40. package/lib/components/scheduler/interfaces/scheduler-event.d.ts +6 -0
  41. package/lib/components/scheduler/interfaces/time-slot.d.ts +4 -0
  42. package/lib/components/scheduler/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.d.ts +9 -0
  43. package/lib/components/scheduler/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.d.ts +9 -0
  44. package/lib/components/scheduler/pipes/date-offset/date-offset.pipe.d.ts +8 -0
  45. package/lib/components/scheduler/pipes/day-of-week/day-of-week.pipe.d.ts +9 -0
  46. package/lib/components/scheduler/scheduler.module.d.ts +12 -0
  47. package/package.json +1 -1
@@ -0,0 +1,261 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output, QueryList, ViewChildren } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, map, Subject, take, takeUntil } from 'rxjs';
3
+ import { BsCalendarMonthService } from '../../../../services/calendar-month/calendar-month.service';
4
+ import { EDragOperation } from '../../enums/drag-operation';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../../../services/calendar-month/calendar-month.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "../../pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe";
9
+ import * as i4 from "../../pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe";
10
+ import * as i5 from "../../pipes/day-of-week/day-of-week.pipe";
11
+ export class BsSchedulerComponent {
12
+ constructor(calendarMonthService) {
13
+ this.calendarMonthService = calendarMonthService;
14
+ this.eventPartsForThisWeek$ = new BehaviorSubject([]);
15
+ this.timeSlotDuration$ = new BehaviorSubject(1800);
16
+ this.mouseState$ = new BehaviorSubject(false);
17
+ this.hoveredTimeSlot$ = new BehaviorSubject(null);
18
+ this.destroyed$ = new Subject();
19
+ //#region UnitHeight
20
+ this.unitHeight$ = new BehaviorSubject(40);
21
+ this.unitHeightChange = new EventEmitter();
22
+ this.operation = null;
23
+ this.dragStartTimeslot = null;
24
+ const monday = this.calendarMonthService.getMondayBefore(new Date());
25
+ this.currentWeek$ = new BehaviorSubject(monday);
26
+ this.daysOfWeek$ = this.currentWeek$.pipe(map((weekMonday) => {
27
+ weekMonday.setHours(0);
28
+ weekMonday.setMinutes(0);
29
+ weekMonday.setSeconds(0);
30
+ return Array.from(Array(7).keys()).map((x) => this.addDays(weekMonday, x));
31
+ }));
32
+ this.events$ = new BehaviorSubject([]);
33
+ this.eventParts$ = this.events$.pipe(map((events) => {
34
+ return events.map((ev) => {
35
+ let startTime = ev.start;
36
+ const result = [];
37
+ while (!this.dateEquals(startTime, ev.end)) {
38
+ const end = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate() + 1, 0, 0, 0);
39
+ result.push({ start: startTime, end: end, event: ev });
40
+ startTime = end;
41
+ }
42
+ if (startTime != ev.end) {
43
+ result.push({ start: startTime, end: ev.end, event: ev });
44
+ }
45
+ return { event: ev, parts: result };
46
+ });
47
+ }));
48
+ combineLatest([
49
+ this.daysOfWeek$
50
+ .pipe(map((daysOfWeek) => {
51
+ return { start: daysOfWeek[0].getTime(), end: daysOfWeek[daysOfWeek.length - 1].getTime() + 24 * 60 * 60 * 1000 };
52
+ })),
53
+ this.eventParts$
54
+ .pipe(map(eventParts => eventParts.map(evp => evp.parts)))
55
+ .pipe(map(jaggedParts => {
56
+ return jaggedParts.reduce((flat, toFlatten) => flat.concat(toFlatten), []);
57
+ })),
58
+ this.eventParts$
59
+ ])
60
+ .pipe(map(([startAndEnd, eventParts, originalEventParts]) => {
61
+ return eventParts.filter(eventPart => {
62
+ return !((eventPart.end.getTime() < startAndEnd.start) || (eventPart.start.getTime() > startAndEnd.end));
63
+ });
64
+ }))
65
+ .pipe(takeUntil(this.destroyed$))
66
+ .subscribe((eventPartsForThisWeek) => {
67
+ this.eventPartsForThisWeek$.next(eventPartsForThisWeek);
68
+ });
69
+ this.timeSlots$ = combineLatest([this.daysOfWeek$, this.timeSlotDuration$])
70
+ .pipe(map(([daysOfWeek, duration]) => {
71
+ const timeSlotsPerDay = Math.floor((60 * 60 * 24) / duration);
72
+ return Array.from(Array(timeSlotsPerDay).keys()).map((index) => {
73
+ const timeSlotStart = new Date(daysOfWeek[0]);
74
+ timeSlotStart.setSeconds(timeSlotStart.getSeconds() + index * duration);
75
+ const timeSlotEnd = new Date(timeSlotStart);
76
+ timeSlotEnd.setSeconds(timeSlotEnd.getSeconds() + duration);
77
+ return daysOfWeek.map((day) => {
78
+ const start = new Date(day);
79
+ start.setHours(timeSlotStart.getHours());
80
+ start.setMinutes(timeSlotStart.getMinutes());
81
+ start.setSeconds(timeSlotStart.getSeconds());
82
+ const end = new Date(day);
83
+ end.setHours(timeSlotEnd.getHours());
84
+ end.setMinutes(timeSlotEnd.getMinutes());
85
+ end.setSeconds(timeSlotEnd.getSeconds());
86
+ return { start, end };
87
+ });
88
+ });
89
+ }));
90
+ this.unitHeight$
91
+ .pipe(takeUntil(this.destroyed$))
92
+ .subscribe((unitHeight) => {
93
+ this.unitHeightChange.emit(unitHeight);
94
+ });
95
+ }
96
+ get unitHeight() {
97
+ return this.unitHeight$.value;
98
+ }
99
+ set unitHeight(value) {
100
+ this.unitHeight$.next(value);
101
+ }
102
+ //#endregion
103
+ dateEquals(date1, date2) {
104
+ return (date1.getFullYear() === date2.getFullYear() &&
105
+ date1.getMonth() === date2.getMonth() &&
106
+ date1.getDate() === date2.getDate());
107
+ }
108
+ addDays(date, days) {
109
+ const result = new Date(date);
110
+ result.setDate(result.getDate() + days);
111
+ return result;
112
+ }
113
+ onPreviousWeek() {
114
+ this.currentWeek$
115
+ .pipe(map((w) => this.addDays(w, -7)), take(1))
116
+ .subscribe((w) => this.currentWeek$.next(w));
117
+ }
118
+ onNextWeek() {
119
+ this.currentWeek$
120
+ .pipe(map((w) => this.addDays(w, 7)), take(1))
121
+ .subscribe((w) => this.currentWeek$.next(w));
122
+ }
123
+ onCreateEvent(ev, slot) {
124
+ ev.preventDefault();
125
+ this.mouseState$.next(true);
126
+ this.dragStartTimeslot = slot;
127
+ this.operation = {
128
+ operation: EDragOperation.createEvent,
129
+ event: {
130
+ start: slot.start,
131
+ end: slot.end,
132
+ color: '#F00',
133
+ description: 'Test event',
134
+ }
135
+ };
136
+ this.events$.next([...this.events$.value, this.operation.event]);
137
+ }
138
+ onStartDragEvent(eventPart, ev) {
139
+ ev.preventDefault();
140
+ this.hoveredTimeSlot$.pipe(take(1)).subscribe((hoveredTimeSlot) => {
141
+ this.dragStartTimeslot = hoveredTimeSlot;
142
+ this.operation = {
143
+ operation: EDragOperation.moveEvent,
144
+ event: eventPart.event
145
+ };
146
+ });
147
+ }
148
+ //#region hoveredTimeslot$
149
+ getHoveredTimeslot(ev, timeSlots) {
150
+ const hoveredSlots = this.timeSlotElements.filter((el) => {
151
+ const rct = el.nativeElement.getBoundingClientRect();
152
+ if (rct.left <= ev.x && ev.x <= rct.right && rct.top <= ev.y && ev.y <= rct.bottom) {
153
+ return true;
154
+ }
155
+ else {
156
+ return false;
157
+ }
158
+ });
159
+ if (!hoveredSlots || hoveredSlots.length === 0) {
160
+ return null;
161
+ }
162
+ const slotElement = hoveredSlots[0].nativeElement;
163
+ const strRow = slotElement.getAttribute('data-row');
164
+ if (!strRow) {
165
+ return null;
166
+ }
167
+ const row = parseInt(strRow);
168
+ const strColumn = slotElement.getAttribute('data-column');
169
+ if (!strColumn) {
170
+ return null;
171
+ }
172
+ const column = parseInt(strColumn);
173
+ const slot = timeSlots[row][column];
174
+ return slot;
175
+ }
176
+ onMousemove(ev) {
177
+ this.timeSlots$.pipe(take(1)).subscribe((timeSlots) => {
178
+ const hovered = this.getHoveredTimeslot(ev, timeSlots);
179
+ this.hoveredTimeSlot$.next(hovered);
180
+ if (this.operation) {
181
+ switch (this.operation.operation) {
182
+ case EDragOperation.createEvent:
183
+ {
184
+ if (this.operation.event && this.dragStartTimeslot && hovered && (this.operation.event.end.getTime() != hovered.end.getTime())) {
185
+ if (this.dragStartTimeslot.start.getTime() === hovered.start.getTime()) {
186
+ // 1 slot
187
+ }
188
+ else if (this.dragStartTimeslot.start.getTime() < hovered.start.getTime()) {
189
+ // Drag down
190
+ this.operation.event.start = this.dragStartTimeslot.start;
191
+ this.operation.event.end = hovered.end;
192
+ this.events$.next(this.events$.value);
193
+ }
194
+ else if (this.dragStartTimeslot.start.getTime() > hovered.start.getTime()) {
195
+ // Drag up
196
+ this.operation.event.start = hovered.start;
197
+ this.operation.event.end = this.dragStartTimeslot.end;
198
+ this.events$.next(this.events$.value);
199
+ }
200
+ }
201
+ }
202
+ break;
203
+ case EDragOperation.moveEvent:
204
+ {
205
+ if (hovered && this.dragStartTimeslot) {
206
+ this.operation.event.start.setTime(this.operation.event.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
207
+ this.operation.event.end.setTime(this.operation.event.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
208
+ this.dragStartTimeslot = hovered;
209
+ this.events$.next(this.events$.value);
210
+ }
211
+ }
212
+ break;
213
+ }
214
+ }
215
+ });
216
+ }
217
+ //#endregion
218
+ onMouseUp(ev) {
219
+ if (this.operation) {
220
+ switch (this.operation.operation) {
221
+ case EDragOperation.createEvent:
222
+ {
223
+ if (this.operation.event) {
224
+ this.operation = null;
225
+ this.dragStartTimeslot = null;
226
+ }
227
+ }
228
+ break;
229
+ case EDragOperation.moveEvent:
230
+ {
231
+ this.operation = null;
232
+ this.dragStartTimeslot = null;
233
+ }
234
+ break;
235
+ }
236
+ }
237
+ }
238
+ ngOnDestroy() {
239
+ this.destroyed$.next(true);
240
+ }
241
+ }
242
+ BsSchedulerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerComponent, deps: [{ token: i1.BsCalendarMonthService }], target: i0.ɵɵFactoryTarget.Component });
243
+ BsSchedulerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsSchedulerComponent, selector: "bs-scheduler", inputs: { unitHeight: "unitHeight" }, outputs: { unitHeightChange: "unitHeightChange" }, host: { listeners: { "document:mousemove": "onMousemove($event)", "document:mouseup": "onMouseUp($event)" } }, viewQueries: [{ propertyName: "timeSlotElements", predicate: ["slot"], descendants: true }], ngImport: i0, template: "{{ unitHeight$ | async }}\n<div class=\"table d-flex w-100 overflow-y-auto\" [style.max-height.px]=\"400\">\n <div class=\"calendar-head\">\n <div class=\"w-100 d-flex flex-row\">\n <div class=\"d-flex calendar-left justify-content-between\">\n <button class=\"btn btn-default flex-start\" (click)=\"onPreviousWeek()\">&lt;</button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeek()\">&gt;</button>\n </div>\n <div class=\"flex-grow-1\" *ngFor=\"let day of (daysOfWeek$ | async)\">\n <span class=\"d-block col-form-label text-center\">\n {{ day | date: 'dd-MM-yyyy' }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"calendar-body\">\n <div class=\"position-relative\">\n <!-- Timeslots -->\n <div *ngFor=\"let timeslots of (timeSlots$ | async); let i = index\" class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"unitHeight$ | async\">\n <div class=\"calendar-cell calendar-left align-top py-0\">{{ timeslots[0].start | date: 'HH:mm:ss' }}</div>\n <div class=\"calendar-cell flex-grow-1\" *ngFor=\"let slot of timeslots; let j = index\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n </div>\n \n <!-- Events -->\n <ng-container *ngIf=\"(timeSlotDuration$ | async) as timeSlotDuration\">\n\n <div *ngFor=\"let eventPart of (eventPartsForThisWeek$ | async)\" class=\"position-absolute event\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * (unitHeight$ | async)!\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * (unitHeight$ | async)!\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [style.background-color]=\"eventPart.event.color\" (mousedown)=\"onStartDragEvent(eventPart, $event)\">\n {{ eventPart.event.description }}\n <br>\n {{ eventPart.start | date: 'HH:mm:ss' }}\n <br>\n {{ eventPart.end | date: 'HH:mm:ss' }}\n </div>\n </div>\n \n <!-- <ng-container *ngFor=\"let eventWithParts of (eventParts$ | async)\">\n <div *ngFor=\"let eventPart of eventWithParts.parts\" class=\"position-absolute event\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * 40\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * 40\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\">\n {{ eventPart.start | date: 'HH:mm:ss' }} - {{ eventPart.end | date: 'HH:mm:ss' }}\n </div>\n </div>\n </ng-container> -->\n \n </ng-container>\n </div>\n </div>\n</div>", styles: [":host{display:block}.table{flex-flow:column}.table .calendar-head{flex:0 0 auto}.table .calendar-head>div{padding-right:18px}.table .calendar-body{flex:1 1 auto;display:block;overflow-y:visible;overflow-x:hidden}.table .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.table .calendar-body .calendar-cell.hover{border-top-width:3px}.table .calendar-left{width:90px}.event{z-index:5;width:calc((100% - 90px) / 7);height:100px;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none}.event .event-inner{position:absolute;left:4px;right:5px;top:4px;bottom:5px;cursor:move}\n"], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i2.AsyncPipe, "date": i2.DatePipe, "bsSecondsTodayOffset": i3.BsSecondsTodayOffsetPipe, "bsSecondsTimespan": i4.BsSecondsTimespanPipe, "dayOfWeek": i5.DayOfWeekPipe } });
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerComponent, decorators: [{
245
+ type: Component,
246
+ args: [{ selector: 'bs-scheduler', template: "{{ unitHeight$ | async }}\n<div class=\"table d-flex w-100 overflow-y-auto\" [style.max-height.px]=\"400\">\n <div class=\"calendar-head\">\n <div class=\"w-100 d-flex flex-row\">\n <div class=\"d-flex calendar-left justify-content-between\">\n <button class=\"btn btn-default flex-start\" (click)=\"onPreviousWeek()\">&lt;</button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeek()\">&gt;</button>\n </div>\n <div class=\"flex-grow-1\" *ngFor=\"let day of (daysOfWeek$ | async)\">\n <span class=\"d-block col-form-label text-center\">\n {{ day | date: 'dd-MM-yyyy' }}\n </span>\n </div>\n </div>\n </div>\n <div class=\"calendar-body\">\n <div class=\"position-relative\">\n <!-- Timeslots -->\n <div *ngFor=\"let timeslots of (timeSlots$ | async); let i = index\" class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"unitHeight$ | async\">\n <div class=\"calendar-cell calendar-left align-top py-0\">{{ timeslots[0].start | date: 'HH:mm:ss' }}</div>\n <div class=\"calendar-cell flex-grow-1\" *ngFor=\"let slot of timeslots; let j = index\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n </div>\n \n <!-- Events -->\n <ng-container *ngIf=\"(timeSlotDuration$ | async) as timeSlotDuration\">\n\n <div *ngFor=\"let eventPart of (eventPartsForThisWeek$ | async)\" class=\"position-absolute event\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * (unitHeight$ | async)!\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * (unitHeight$ | async)!\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [style.background-color]=\"eventPart.event.color\" (mousedown)=\"onStartDragEvent(eventPart, $event)\">\n {{ eventPart.event.description }}\n <br>\n {{ eventPart.start | date: 'HH:mm:ss' }}\n <br>\n {{ eventPart.end | date: 'HH:mm:ss' }}\n </div>\n </div>\n \n <!-- <ng-container *ngFor=\"let eventWithParts of (eventParts$ | async)\">\n <div *ngFor=\"let eventPart of eventWithParts.parts\" class=\"position-absolute event\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * 40\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * 40\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\">\n {{ eventPart.start | date: 'HH:mm:ss' }} - {{ eventPart.end | date: 'HH:mm:ss' }}\n </div>\n </div>\n </ng-container> -->\n \n </ng-container>\n </div>\n </div>\n</div>", styles: [":host{display:block}.table{flex-flow:column}.table .calendar-head{flex:0 0 auto}.table .calendar-head>div{padding-right:18px}.table .calendar-body{flex:1 1 auto;display:block;overflow-y:visible;overflow-x:hidden}.table .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.table .calendar-body .calendar-cell.hover{border-top-width:3px}.table .calendar-left{width:90px}.event{z-index:5;width:calc((100% - 90px) / 7);height:100px;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none}.event .event-inner{position:absolute;left:4px;right:5px;top:4px;bottom:5px;cursor:move}\n"] }]
247
+ }], ctorParameters: function () { return [{ type: i1.BsCalendarMonthService }]; }, propDecorators: { timeSlotElements: [{
248
+ type: ViewChildren,
249
+ args: ['slot']
250
+ }], unitHeightChange: [{
251
+ type: Output
252
+ }], unitHeight: [{
253
+ type: Input
254
+ }], onMousemove: [{
255
+ type: HostListener,
256
+ args: ['document:mousemove', ['$event']]
257
+ }], onMouseUp: [{
258
+ type: HostListener,
259
+ args: ['document:mouseup', ['$event']]
260
+ }] } });
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlci9jb21wb25lbnRzL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGVyL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFZNUQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFvQixvQkFBNEM7UUFBNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QjtRQTJGaEUsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBR3ZFLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBRXRELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCLElB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LElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFO2dCQUNoQyxLQUFLLGNBQWMsQ0FBQyxXQUFXO29CQUFFO3dCQUMvQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFOzRCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzt5QkFDL0I7cUJBQ0Y7b0JBQUMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxTQUFTO29CQUFFO3dCQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztxQkFDL0I7b0JBQUMsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7O2lIQXZRVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix5VkNmakMseXdHQXFETTsyRkR0Q08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7NkdBeUdGLGdCQUFnQjtzQkFBckMsWUFBWTt1QkFBQyxNQUFNO2dCQUlILGdCQUFnQjtzQkFBaEMsTUFBTTtnQkFJYSxVQUFVO3NCQUE3QixLQUFLO2dCQThGTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEM5QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc0NhbGVuZGFyTW9udGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY2FsZW5kYXItbW9udGgvY2FsZW5kYXItbW9udGguc2VydmljZSc7XG5pbXBvcnQgeyBFRHJhZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2RyYWctb3BlcmF0aW9uJztcbmltcG9ydCB7IERyYWdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RyYWctb3BlcmF0aW9uJztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFdpdGhQYXJ0cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXdpdGgtcGFydHMnO1xuaW1wb3J0IHsgVGltZVNsb3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RpbWUtc2xvdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLXNjaGVkdWxlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY2hlZHVsZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQnNTY2hlZHVsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhbGVuZGFyTW9udGhTZXJ2aWNlOiBCc0NhbGVuZGFyTW9udGhTZXJ2aWNlKSB7XG4gICAgY29uc3QgbW9uZGF5ID0gdGhpcy5jYWxlbmRhck1vbnRoU2VydmljZS5nZXRNb25kYXlCZWZvcmUobmV3IERhdGUoKSk7XG4gICAgdGhpcy5jdXJyZW50V2VlayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGU+KG1vbmRheSk7XG5cbiAgICB0aGlzLmRheXNPZldlZWskID0gdGhpcy5jdXJyZW50V2VlayQucGlwZShcbiAgICAgIG1hcCgod2Vla01vbmRheSkgPT4ge1xuICAgICAgICB3ZWVrTW9uZGF5LnNldEhvdXJzKDApO1xuICAgICAgICB3ZWVrTW9uZGF5LnNldE1pbnV0ZXMoMCk7XG4gICAgICAgIHdlZWtNb25kYXkuc2V0U2Vjb25kcygwKTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oQXJyYXkoNykua2V5cygpKS5tYXAoKHgpID0+IHRoaXMuYWRkRGF5cyh3ZWVrTW9uZGF5LCB4KSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmV2ZW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlckV2ZW50W10+KFtdKTtcbiAgICB0aGlzLmV2ZW50UGFydHMkID0gdGhpcy5ldmVudHMkLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gZXZlbnRzLm1hcCgoZXYpID0+IHtcbiAgICAgICAgICBsZXQgc3RhcnRUaW1lID0gZXYuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBTY2hlZHVsZXJFdmVudFBhcnRbXSA9IFtdO1xuICAgICAgICAgIHdoaWxlICghdGhpcy5kYXRlRXF1YWxzKHN0YXJ0VGltZSwgZXYuZW5kKSkge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoc3RhcnRUaW1lLmdldEZ1bGxZZWFyKCksIHN0YXJ0VGltZS5nZXRNb250aCgpLCBzdGFydFRpbWUuZ2V0RGF0ZSgpICsgMSwgMCwgMCwgMCk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IHN0YXJ0OiBzdGFydFRpbWUsIGVuZDogZW5kLCBldmVudDogZXYgfSk7XG4gICAgICAgICAgICBzdGFydFRpbWUgPSBlbmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFydFRpbWUgIT0gZXYuZW5kKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IHN0YXJ0OiBzdGFydFRpbWUsIGVuZDogZXYuZW5kLCBldmVudDogZXYgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIDxTY2hlZHVsZXJFdmVudFdpdGhQYXJ0cz57IGV2ZW50OiBldiwgcGFydHM6IHJlc3VsdCB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRheXNPZldlZWskXG4gICAgICAgICAgLnBpcGUobWFwKChkYXlzT2ZXZWVrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogZGF5c09mV2Vla1swXS5nZXRUaW1lKCksIGVuZDogZGF5c09mV2Vla1tkYXlzT2ZXZWVrLmxlbmd0aCAtIDFdLmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDAgfTtcbiAgICAgICAgICB9KSksXG4gICAgICAgIHRoaXMuZXZlbnRQYXJ0cyRcbiAgICAgICAgICAucGlwZShtYXAoZXZlbnRQYXJ0cyA9PiBldmVudFBhcnRzLm1hcChldnAgPT4gZXZwLnBhcnRzKSkpXG4gICAgICAgICAgLnBpcGUobWFwKGphZ2dlZFBhcnRzID0+IHtcbiAgICAgICAgICAgIHJldHVybiBqYWdnZWRQYXJ0cy5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pO1xuICAgICAgICAgIH0pKSxcbiAgICAgICAgdGhpcy5ldmVudFBhcnRzJFxuICAgICAgXSlcbiAgICAgIC5waXBlKG1hcCgoW3N0YXJ0QW5kRW5kLCBldmVudFBhcnRzLCBvcmlnaW5hbEV2ZW50UGFydHNdKSA9PiB7XG4gICAgICAgIHJldHVybiBldmVudFBhcnRzLmZpbHRlcihldmVudFBhcnQgPT4ge1xuICAgICAgICAgIHJldHVybiAhKChldmVudFBhcnQuZW5kLmdldFRpbWUoKSA8IHN0YXJ0QW5kRW5kLnN0YXJ0KSB8fCAoZXZlbnRQYXJ0LnN0YXJ0LmdldFRpbWUoKSA+IHN0YXJ0QW5kRW5kLmVuZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudFBhcnRzRm9yVGhpc1dlZWspID0+IHtcbiAgICAgICAgdGhpcy5ldmVudFBhcnRzRm9yVGhpc1dlZWskLm5leHQoZXZlbnRQYXJ0c0ZvclRoaXNXZWVrKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy50aW1lU2xvdHMkID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXlzT2ZXZWVrJCwgdGhpcy50aW1lU2xvdER1cmF0aW9uJF0pXG4gICAgICAucGlwZShtYXAoKFtkYXlzT2ZXZWVrLCBkdXJhdGlvbl0pID0+IHtcbiAgICAgICAgY29uc3QgdGltZVNsb3RzUGVyRGF5ID0gTWF0aC5mbG9vcigoNjAgKiA2MCAqIDI0KSAvIGR1cmF0aW9uKTtcblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0aW1lU2xvdHNQZXJEYXkpLmtleXMoKSkubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRpbWVTbG90U3RhcnQgPSBuZXcgRGF0ZShkYXlzT2ZXZWVrWzBdKTtcbiAgICAgICAgICB0aW1lU2xvdFN0YXJ0LnNldFNlY29uZHModGltZVNsb3RTdGFydC5nZXRTZWNvbmRzKCkgKyBpbmRleCAqIGR1cmF0aW9uKTtcbiAgICAgICAgICBjb25zdCB0aW1lU2xvdEVuZCA9IG5ldyBEYXRlKHRpbWVTbG90U3RhcnQpO1xuICAgICAgICAgIHRpbWVTbG90RW5kLnNldFNlY29uZHModGltZVNsb3RFbmQuZ2V0U2Vjb25kcygpICsgZHVyYXRpb24pO1xuXG4gICAgICAgICAgcmV0dXJuIGRheXNPZldlZWsubWFwKChkYXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoZGF5KTtcbiAgICAgICAgICAgIHN0YXJ0LnNldEhvdXJzKHRpbWVTbG90U3RhcnQuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICBzdGFydC5zZXRNaW51dGVzKHRpbWVTbG90U3RhcnQuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIHN0YXJ0LnNldFNlY29uZHModGltZVNsb3RTdGFydC5nZXRTZWNvbmRzKCkpO1xuXG4gICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZShkYXkpO1xuICAgICAgICAgICAgZW5kLnNldEhvdXJzKHRpbWVTbG90RW5kLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgZW5kLnNldE1pbnV0ZXModGltZVNsb3RFbmQuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIGVuZC5zZXRTZWNvbmRzKHRpbWVTbG90RW5kLmdldFNlY29uZHMoKSk7XG5cbiAgICAgICAgICAgIHJldHVybiA8VGltZVNsb3Q+eyBzdGFydCwgZW5kIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9KSk7XG4gICAgXG4gICAgdGhpcy51bml0SGVpZ2h0JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKCh1bml0SGVpZ2h0KSA9PiB7XG4gICAgICAgIHRoaXMudW5pdEhlaWdodENoYW5nZS5lbWl0KHVuaXRIZWlnaHQpO1xuICAgICAgfSlcbiAgfVxuXG4gIGV2ZW50cyQ6IEJlaGF2aW9yU3ViamVjdDxTY2hlZHVsZXJFdmVudFtdPjtcbiAgZXZlbnRQYXJ0cyQ6IE9ic2VydmFibGU8U2NoZWR1bGVyRXZlbnRXaXRoUGFydHNbXT47XG4gIGV2ZW50UGFydHNGb3JUaGlzV2VlayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlckV2ZW50UGFydFtdPihbXSk7XG4gIGN1cnJlbnRXZWVrJDogQmVoYXZpb3JTdWJqZWN0PERhdGU+O1xuICBkYXlzT2ZXZWVrJDogT2JzZXJ2YWJsZTxEYXRlW10+O1xuICB0aW1lU2xvdER1cmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxODAwKTtcbiAgdGltZVNsb3RzJDogT2JzZXJ2YWJsZTxUaW1lU2xvdFtdW10+O1xuICBtb3VzZVN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBob3ZlcmVkVGltZVNsb3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lU2xvdCB8IG51bGw+KG51bGwpO1xuICBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcblxuICBAVmlld0NoaWxkcmVuKCdzbG90JykgdGltZVNsb3RFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj47XG5cbiAgLy8jcmVnaW9uIFVuaXRIZWlnaHRcbiAgdW5pdEhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oNDApO1xuICBAT3V0cHV0KCkgcHVibGljIHVuaXRIZWlnaHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcHVibGljIGdldCB1bml0SGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLnVuaXRIZWlnaHQkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdW5pdEhlaWdodCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy51bml0SGVpZ2h0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBwcml2YXRlIGRhdGVFcXVhbHMoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGRhdGUxLmdldE1vbnRoKCkgPT09IGRhdGUyLmdldE1vbnRoKCkgJiZcbiAgICAgIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICByZXN1bHQuc2V0RGF0ZShyZXN1bHQuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uUHJldmlvdXNXZWVrKCkge1xuICAgIHRoaXMuY3VycmVudFdlZWskXG4gICAgICAucGlwZShtYXAoKHcpID0+IHRoaXMuYWRkRGF5cyh3LCAtNykpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgodykgPT4gdGhpcy5jdXJyZW50V2VlayQubmV4dCh3KSk7XG4gIH1cblxuICBvbk5leHRXZWVrKCkge1xuICAgIHRoaXMuY3VycmVudFdlZWskXG4gICAgICAucGlwZShtYXAoKHcpID0+IHRoaXMuYWRkRGF5cyh3LCA3KSksIHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCh3KSA9PiB0aGlzLmN1cnJlbnRXZWVrJC5uZXh0KHcpKTtcbiAgfVxuXG4gIG9wZXJhdGlvbjogRHJhZ09wZXJhdGlvbiB8IG51bGwgPSBudWxsO1xuICBkcmFnU3RhcnRUaW1lc2xvdDogVGltZVNsb3QgfCBudWxsID0gbnVsbDtcbiAgb25DcmVhdGVFdmVudChldjogTW91c2VFdmVudCwgc2xvdDogVGltZVNsb3QpIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMubW91c2VTdGF0ZSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gc2xvdDtcbiAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgIG9wZXJhdGlvbjogRURyYWdPcGVyYXRpb24uY3JlYXRlRXZlbnQsXG4gICAgICBldmVudDoge1xuICAgICAgICBzdGFydDogc2xvdC5zdGFydCxcbiAgICAgICAgZW5kOiBzbG90LmVuZCxcbiAgICAgICAgY29sb3I6ICcjRjAwJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUZXN0IGV2ZW50JyxcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZXZlbnRzJC5uZXh0KFsuLi50aGlzLmV2ZW50cyQudmFsdWUsIHRoaXMub3BlcmF0aW9uLmV2ZW50XSk7XG4gIH1cblxuICBvblN0YXJ0RHJhZ0V2ZW50KGV2ZW50UGFydDogU2NoZWR1bGVyRXZlbnRQYXJ0LCBldjogTW91c2VFdmVudCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5ob3ZlcmVkVGltZVNsb3QkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChob3ZlcmVkVGltZVNsb3QpID0+IHtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBob3ZlcmVkVGltZVNsb3Q7XG4gICAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQsXG4gICAgICAgIGV2ZW50OiBldmVudFBhcnQuZXZlbnRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBob3ZlcmVkVGltZXNsb3QkXG4gIHByaXZhdGUgZ2V0SG92ZXJlZFRpbWVzbG90KGV2OiBNb3VzZUV2ZW50LCB0aW1lU2xvdHM6IFRpbWVTbG90W11bXSkge1xuICAgIGNvbnN0IGhvdmVyZWRTbG90cyA9IHRoaXMudGltZVNsb3RFbGVtZW50cy5maWx0ZXIoKGVsKSA9PiB7XG4gICAgICBjb25zdCByY3QgPSBlbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJjdC5sZWZ0IDw9IGV2LnggJiYgZXYueCA8PSByY3QucmlnaHQgJiYgcmN0LnRvcCA8PSBldi55ICYmIGV2LnkgPD0gcmN0LmJvdHRvbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaG92ZXJlZFNsb3RzIHx8IGhvdmVyZWRTbG90cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNsb3RFbGVtZW50ID0gaG92ZXJlZFNsb3RzWzBdLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBzdHJSb3cgPSBzbG90RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm93Jyk7XG4gICAgaWYgKCFzdHJSb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCByb3cgPSBwYXJzZUludChzdHJSb3cpO1xuXG4gICAgY29uc3Qgc3RyQ29sdW1uID0gc2xvdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbHVtbicpO1xuICAgIGlmICghc3RyQ29sdW1uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gcGFyc2VJbnQoc3RyQ29sdW1uKTtcblxuICAgIGNvbnN0IHNsb3QgPSB0aW1lU2xvdHNbcm93XVtjb2x1bW5dO1xuICAgIHJldHVybiBzbG90O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZW1vdmUoZXY6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnRpbWVTbG90cyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHRpbWVTbG90cykgPT4ge1xuICAgICAgY29uc3QgaG92ZXJlZCA9IHRoaXMuZ2V0SG92ZXJlZFRpbWVzbG90KGV2LCB0aW1lU2xvdHMpO1xuICAgICAgdGhpcy5ob3ZlcmVkVGltZVNsb3QkLm5leHQoaG92ZXJlZCk7XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uLm9wZXJhdGlvbikge1xuICAgICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24uY3JlYXRlRXZlbnQ6IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5ldmVudCAmJiB0aGlzLmRyYWdTdGFydFRpbWVzbG90ICYmIGhvdmVyZWQgJiYgKHRoaXMub3BlcmF0aW9uLmV2ZW50LmVuZC5nZXRUaW1lKCkgIT0gaG92ZXJlZC5lbmQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPT09IGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gMSBzbG90XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPCBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIC8vIERyYWcgZG93blxuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLmV2ZW50LnN0YXJ0ID0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydDtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQgPSBob3ZlcmVkLmVuZDtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cyQubmV4dCh0aGlzLmV2ZW50cyQudmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpID4gaG92ZXJlZC5zdGFydC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBEcmFnIHVwXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24uZXZlbnQuc3RhcnQgPSBob3ZlcmVkLnN0YXJ0O1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLmV2ZW50LmVuZCA9IHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QuZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzJC5uZXh0KHRoaXMuZXZlbnRzJC52YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLm1vdmVFdmVudDoge1xuICAgICAgICAgICAgaWYgKGhvdmVyZWQgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkge1xuICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbi5ldmVudC5zdGFydC5zZXRUaW1lKHRoaXMub3BlcmF0aW9uLmV2ZW50LnN0YXJ0LmdldFRpbWUoKSArIGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpIC0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICB0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQuc2V0VGltZSh0aGlzLm9wZXJhdGlvbi5ldmVudC5lbmQuZ2V0VGltZSgpICsgaG92ZXJlZC5zdGFydC5nZXRUaW1lKCkgLSB0aGlzLmRyYWdTdGFydFRpbWVzbG90LnN0YXJ0LmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBob3ZlcmVkO1xuICAgICAgICAgICAgICB0aGlzLmV2ZW50cyQubmV4dCh0aGlzLmV2ZW50cyQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnLCBbJyRldmVudCddKVxuICBvbk1vdXNlVXAoZXY6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5vcGVyYXRpb24pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5vcGVyYXRpb24ub3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24uY3JlYXRlRXZlbnQ6IHtcbiAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQ6IHtcbiAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IG51bGw7XG4gICAgICAgIH0gYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQodHJ1ZSk7XG4gIH1cbn1cbiIsInt7IHVuaXRIZWlnaHQkIHwgYXN5bmMgfX1cbjxkaXYgY2xhc3M9XCJ0YWJsZSBkLWZsZXggdy0xMDAgb3ZlcmZsb3cteS1hdXRvXCIgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiNDAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjYWxlbmRhci1sZWZ0IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBmbGV4LXN0YXJ0XCIgKGNsaWNrKT1cIm9uUHJldmlvdXNXZWVrKClcIj4mbHQ7PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBmbGV4LWVuZFwiIChjbGljayk9XCJvbk5leHRXZWVrKClcIj4mZ3Q7PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiICpuZ0Zvcj1cImxldCBkYXkgb2YgKGRheXNPZldlZWskIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIGNvbC1mb3JtLWxhYmVsIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRheSB8IGRhdGU6ICdkZC1NTS15eXl5JyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDwhLS0gVGltZXNsb3RzIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGltZXNsb3RzIG9mICh0aW1lU2xvdHMkIHwgYXN5bmMpOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgcC0wIHRpbWVzbG90XCIgW3N0eWxlLmhlaWdodC5weF09XCJ1bml0SGVpZ2h0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNlbGwgY2FsZW5kYXItbGVmdCBhbGlnbi10b3AgcHktMFwiPnt7IHRpbWVzbG90c1swXS5zdGFydCB8IGRhdGU6ICdISDptbTpzcycgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY2VsbCBmbGV4LWdyb3ctMVwiICpuZ0Zvcj1cImxldCBzbG90IG9mIHRpbWVzbG90czsgbGV0IGogPSBpbmRleFwiICNzbG90IChtb3VzZWRvd24pPVwib25DcmVhdGVFdmVudCgkZXZlbnQsIHNsb3QpXCIgW2F0dHIuZGF0YS1yb3ddPVwiaVwiIFthdHRyLmRhdGEtY29sdW1uXT1cImpcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIEV2ZW50cyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIodGltZVNsb3REdXJhdGlvbiQgfCBhc3luYykgYXMgdGltZVNsb3REdXJhdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXZlbnRQYXJ0IG9mIChldmVudFBhcnRzRm9yVGhpc1dlZWskIHwgYXN5bmMpXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiKGV2ZW50UGFydCB8IGJzU2Vjb25kc1RvZGF5T2Zmc2V0KSAvIHRpbWVTbG90RHVyYXRpb24gKiAodW5pdEhlaWdodCQgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZXZlbnRQYXJ0IHwgYnNTZWNvbmRzVGltZXNwYW4pIC8gdGltZVNsb3REdXJhdGlvbiAqICh1bml0SGVpZ2h0JCB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg5MHB4ICsgKCgxMDAlIC0gOTBweCkgLyA3ICogJyArICgoZXZlbnRQYXJ0IHwgZGF5T2ZXZWVrKSAtIDEpICsgJykpJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtaW5uZXJcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJldmVudFBhcnQuZXZlbnQuY29sb3JcIiAobW91c2Vkb3duKT1cIm9uU3RhcnREcmFnRXZlbnQoZXZlbnRQYXJ0LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBldmVudFBhcnQuZXZlbnQuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV2ZW50UGFydC5zdGFydCB8IGRhdGU6ICdISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGV2ZW50UGFydC5lbmQgfCBkYXRlOiAnSEg6bW06c3MnIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZXZlbnRXaXRoUGFydHMgb2YgKGV2ZW50UGFydHMkIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGV2ZW50UGFydCBvZiBldmVudFdpdGhQYXJ0cy5wYXJ0c1wiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCIoZXZlbnRQYXJ0IHwgYnNTZWNvbmRzVG9kYXlPZmZzZXQpIC8gdGltZVNsb3REdXJhdGlvbiAqIDQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiKGV2ZW50UGFydCB8IGJzU2Vjb25kc1RpbWVzcGFuKSAvIHRpbWVTbG90RHVyYXRpb24gKiA0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg5MHB4ICsgKCgxMDAlIC0gOTBweCkgLyA3ICogJyArICgoZXZlbnRQYXJ0IHwgZGF5T2ZXZWVrKSAtIDEpICsgJykpJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXZlbnRQYXJ0LnN0YXJ0IHwgZGF0ZTogJ0hIOm1tOnNzJyB9fSAtIHt7IGV2ZW50UGFydC5lbmQgfCBkYXRlOiAnSEg6bW06c3MnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,8 @@
1
+ export var EDragOperation;
2
+ (function (EDragOperation) {
3
+ EDragOperation[EDragOperation["none"] = 0] = "none";
4
+ EDragOperation[EDragOperation["createEvent"] = 1] = "createEvent";
5
+ EDragOperation[EDragOperation["resizeEvent"] = 2] = "resizeEvent";
6
+ EDragOperation[EDragOperation["moveEvent"] = 3] = "moveEvent";
7
+ })(EDragOperation || (EDragOperation = {}));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1vcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZXIvZW51bXMvZHJhZy1vcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN0QixtREFBSSxDQUFBO0lBQ0osaUVBQVcsQ0FBQTtJQUNYLGlFQUFXLENBQUE7SUFDWCw2REFBUyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsS0FBZCxjQUFjLFFBS3pCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRURyYWdPcGVyYXRpb24ge1xuICAgIG5vbmUsXG4gICAgY3JlYXRlRXZlbnQsXG4gICAgcmVzaXplRXZlbnQsXG4gICAgbW92ZUV2ZW50LFxufSJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './components';
2
+ export * from './scheduler.module';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVkdWxlci5tb2R1bGUnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1vcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZXIvaW50ZXJmYWNlcy9kcmFnLW9wZXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRURyYWdPcGVyYXRpb24gfSBmcm9tIFwiLi4vZW51bXMvZHJhZy1vcGVyYXRpb25cIjtcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSBcIi4vc2NoZWR1bGVyLWV2ZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ09wZXJhdGlvbiB7XG4gICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbjtcbiAgICBldmVudDogU2NoZWR1bGVyRXZlbnQ7XG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWV2ZW50LXBhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZXIvaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tIFwiLi9zY2hlZHVsZXItZXZlbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJFdmVudFBhcnQge1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGVuZDogRGF0ZTtcbiAgICBldmVudDogU2NoZWR1bGVyRXZlbnQ7XG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWV2ZW50LXdpdGgtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NyYy9saWIvY29tcG9uZW50cy9zY2hlZHVsZXIvaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtd2l0aC1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tIFwiLi9zY2hlZHVsZXItZXZlbnRcIjtcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gXCIuL3NjaGVkdWxlci1ldmVudC1wYXJ0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVyRXZlbnRXaXRoUGFydHMge1xuICAgIGV2ZW50OiBTY2hlZHVsZXJFdmVudDtcbiAgICBwYXJ0czogU2NoZWR1bGVyRXZlbnRQYXJ0W107XG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGVyL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlckV2ZW50IHtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBlbmQ6IERhdGU7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xufSJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zbG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGVyL2ludGVyZmFjZXMvdGltZS1zbG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRpbWVTbG90IHtcbiAgICBzdGFydDogRGF0ZTtcbiAgICBlbmQ6IERhdGU7XG59Il19
@@ -0,0 +1,16 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BsSecondsTimespanPipe {
4
+ transform(value) {
5
+ return (value.end.getTime() - value.start.getTime()) / 1000;
6
+ }
7
+ }
8
+ BsSecondsTimespanPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ BsSecondsTimespanPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, name: "bsSecondsTimespan" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{
13
+ name: 'bsSecondsTimespan'
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10aW1lc3Bhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zcmMvbGliL2NvbXBvbmVudHMvc2NoZWR1bGVyL3BpcGVzL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZS9icy1zZWNvbmRzLXRpbWVzcGFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBT3BELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsU0FBUyxDQUFDLEtBQTBDO1FBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDOUQsQ0FBQzs7a0hBSlUscUJBQXFCO2dIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsbUJBQW1CO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2JzU2Vjb25kc1RpbWVzcGFuJ1xufSlcbmV4cG9ydCBjbGFzcyBCc1NlY29uZHNUaW1lc3BhblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IFNjaGVkdWxlckV2ZW50UGFydCB8IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgcmV0dXJuICh2YWx1ZS5lbmQuZ2V0VGltZSgpIC0gdmFsdWUuc3RhcnQuZ2V0VGltZSgpKSAvIDEwMDA7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class BsSecondsTodayOffsetPipe {
4
+ transform(value) {
5
+ const today = new Date(value.start);
6
+ today.setHours(0);
7
+ today.setMinutes(0);
8
+ today.setSeconds(0);
9
+ return (value.start.getTime() - today.getTime()) / 1000;
10
+ }
11
+ }
12
+ BsSecondsTodayOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
13
+ BsSecondsTodayOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{
15
+ type: Pipe,
16
+ args: [{
17
+ name: 'bsSecondsTodayOffset'
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10b2RheS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlci9waXBlcy9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLFNBQVMsQ0FBQyxLQUEwQztRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRCxDQUFDOztxSEFQVSx3QkFBd0I7bUhBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQUhwQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxzQkFBc0I7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFBhcnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudC1wYXJ0JztcblxuQFBpcGUoe1xuICBuYW1lOiAnYnNTZWNvbmRzVG9kYXlPZmZzZXQnXG59KVxuZXhwb3J0IGNsYXNzIEJzU2Vjb25kc1RvZGF5T2Zmc2V0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogU2NoZWR1bGVyRXZlbnRQYXJ0IHwgU2NoZWR1bGVyRXZlbnQpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICB0b2RheS5zZXRIb3VycygwKTsgdG9kYXkuc2V0TWludXRlcygwKTsgdG9kYXkuc2V0U2Vjb25kcygwKTtcblxuICAgIHJldHVybiAodmFsdWUuc3RhcnQuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDEwMDA7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DateOffsetPipe {
4
+ transform(value) {
5
+ const today = new Date(value.start);
6
+ today.setHours(0);
7
+ today.setMinutes(0);
8
+ today.setSeconds(0);
9
+ return (value.start.getTime() - today.getTime()) / 1000;
10
+ }
11
+ }
12
+ DateOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
13
+ DateOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, name: "dateOffset" });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, decorators: [{
15
+ type: Pipe,
16
+ args: [{
17
+ name: 'dateOffset'
18
+ }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlci9waXBlcy9kYXRlLW9mZnNldC9kYXRlLW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sY0FBYztJQUV6QixTQUFTLENBQUMsS0FBeUI7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUQsQ0FBQzs7MkdBUFUsY0FBYzt5R0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBSDFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2RhdGVPZmZzZXQnXG59KVxuZXhwb3J0IGNsYXNzIERhdGVPZmZzZXRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBTY2hlZHVsZXJFdmVudFBhcnQpIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICB0b2RheS5zZXRIb3VycygwKTsgdG9kYXkuc2V0TWludXRlcygwKTsgdG9kYXkuc2V0U2Vjb25kcygwKTtcblxuICAgIHJldHVybiAodmFsdWUuc3RhcnQuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDEwMDA7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DayOfWeekPipe {
4
+ transform(value) {
5
+ const dayOfWeek = value.start.getDay();
6
+ if (dayOfWeek === 0) {
7
+ return 7;
8
+ }
9
+ else {
10
+ return dayOfWeek;
11
+ }
12
+ }
13
+ }
14
+ DayOfWeekPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
15
+ DayOfWeekPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, name: "dayOfWeek" });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, decorators: [{
17
+ type: Pipe,
18
+ args: [{
19
+ name: 'dayOfWeek'
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LW9mLXdlZWsucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlci9waXBlcy9kYXktb2Ytd2Vlay9kYXktb2Ytd2Vlay5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sYUFBYTtJQUV4QixTQUFTLENBQUMsS0FBMEM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxDQUFDLENBQUM7U0FDVjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDOzswR0FUVSxhQUFhO3dHQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFIekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdkYXlPZldlZWsnXG59KVxuZXhwb3J0IGNsYXNzIERheU9mV2Vla1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICB0cmFuc2Zvcm0odmFsdWU6IFNjaGVkdWxlckV2ZW50UGFydCB8IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gdmFsdWUuc3RhcnQuZ2V0RGF5KCk7XG4gICAgaWYgKGRheU9mV2VlayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXlPZldlZWs7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { BsSecondsTimespanPipe } from './pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe';
4
+ import { BsSecondsTodayOffsetPipe } from './pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe';
5
+ import { DateOffsetPipe } from './pipes/date-offset/date-offset.pipe';
6
+ import { DayOfWeekPipe } from './pipes/day-of-week/day-of-week.pipe';
7
+ import { BsSchedulerComponent } from './components/scheduler/scheduler.component';
8
+ import * as i0 from "@angular/core";
9
+ export class BsSchedulerModule {
10
+ }
11
+ BsSchedulerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ BsSchedulerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, declarations: [BsSchedulerComponent,
13
+ BsSecondsTimespanPipe,
14
+ BsSecondsTodayOffsetPipe,
15
+ DateOffsetPipe,
16
+ DayOfWeekPipe], imports: [CommonModule], exports: [BsSchedulerComponent] });
17
+ BsSchedulerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, imports: [[
18
+ CommonModule
19
+ ]] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, decorators: [{
21
+ type: NgModule,
22
+ args: [{
23
+ declarations: [
24
+ BsSchedulerComponent,
25
+ BsSecondsTimespanPipe,
26
+ BsSecondsTodayOffsetPipe,
27
+ DateOffsetPipe,
28
+ DayOfWeekPipe
29
+ ],
30
+ imports: [
31
+ CommonModule
32
+ ],
33
+ exports: [
34
+ BsSchedulerComponent
35
+ ]
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlci9zY2hlZHVsZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBaUJsRixNQUFNLE9BQU8saUJBQWlCOzs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUIsaUJBYjFCLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsd0JBQXdCO1FBQ3hCLGNBQWM7UUFDZCxhQUFhLGFBR2IsWUFBWSxhQUdaLG9CQUFvQjsrR0FHWCxpQkFBaUIsWUFQbkI7WUFDUCxZQUFZO1NBQ2I7MkZBS1UsaUJBQWlCO2tCQWY3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixjQUFjO3dCQUNkLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJzU2Vjb25kc1RpbWVzcGFuUGlwZSB9IGZyb20gJy4vcGlwZXMvYnMtc2Vjb25kcy10aW1lc3Bhbi5waXBlL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZSc7XG5pbXBvcnQgeyBCc1NlY29uZHNUb2RheU9mZnNldFBpcGUgfSBmcm9tICcuL3BpcGVzL2JzLXNlY29uZHMtdG9kYXktb2Zmc2V0L2JzLXNlY29uZHMtdG9kYXktb2Zmc2V0LnBpcGUnO1xuaW1wb3J0IHsgRGF0ZU9mZnNldFBpcGUgfSBmcm9tICcuL3BpcGVzL2RhdGUtb2Zmc2V0L2RhdGUtb2Zmc2V0LnBpcGUnO1xuaW1wb3J0IHsgRGF5T2ZXZWVrUGlwZSB9IGZyb20gJy4vcGlwZXMvZGF5LW9mLXdlZWsvZGF5LW9mLXdlZWsucGlwZSc7XG5pbXBvcnQgeyBCc1NjaGVkdWxlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zY2hlZHVsZXIvc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJzU2NoZWR1bGVyQ29tcG9uZW50LFxuICAgIEJzU2Vjb25kc1RpbWVzcGFuUGlwZSxcbiAgICBCc1NlY29uZHNUb2RheU9mZnNldFBpcGUsXG4gICAgRGF0ZU9mZnNldFBpcGUsXG4gICAgRGF5T2ZXZWVrUGlwZVxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBCc1NjaGVkdWxlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJzU2NoZWR1bGVyTW9kdWxlIHsgfVxuIl19
@@ -50,7 +50,7 @@ export class BsScrollspyComponent {
50
50
  }
51
51
  }
52
52
  scrollToCurrentInSpy() {
53
- if (window && (window.innerWidth >= 768)) {
53
+ if ((typeof window !== 'undefined') && (window.innerWidth >= 768)) {
54
54
  if (this.activeDirective) {
55
55
  const index = this.directives.toArray().findIndex((v, i) => v === this.activeDirective);
56
56
  const anchor = this.anchors.get(index);
@@ -61,10 +61,12 @@ export class BsScrollspyComponent {
61
61
  }
62
62
  }
63
63
  scrollToHeader(directive) {
64
- const header = directive.element.nativeElement;
65
- const offsetY = this.scrollOffsetService.getScrollOffset()[1];
66
- const y = header.getBoundingClientRect().top + window.scrollY - offsetY + 1;
67
- window.scrollTo({ top: y, behavior: 'smooth' });
64
+ if (typeof window !== 'undefined') {
65
+ const header = directive.element.nativeElement;
66
+ const offsetY = this.scrollOffsetService.getScrollOffset()[1];
67
+ const y = header.getBoundingClientRect().top + window.scrollY - offsetY + 1;
68
+ window.scrollTo({ top: y, behavior: 'smooth' });
69
+ }
68
70
  }
69
71
  }
70
72
  BsScrollspyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyComponent, deps: [{ token: i1.BsScrollOffsetService }, { token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
@@ -85,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
85
87
  type: HostListener,
86
88
  args: ['window:scroll', ['$event']]
87
89
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsc3B5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbHNweS9jb21wb25lbnQvc2Nyb2xsc3B5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbHNweS9jb21wb25lbnQvc2Nyb2xsc3B5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQW1DLFNBQVMsRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFPekUsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUNVLG1CQUEwQyxFQUNoQyxRQUFhLEVBQ3ZCLElBQVk7UUFGWix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBRTFDLFNBQUksR0FBSixJQUFJLENBQVE7UUFXZCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENB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YUFBYSxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7O2lIQTFFVSxvQkFBb0IsdURBSXJCLFFBQVE7cUdBSlAsb0JBQW9CLG1KQW9CZCxvQkFBb0Isc0lDL0J2QywwakJBV007MkZEQU8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7OzBCQVFyQixNQUFNOzJCQUFDLFFBQVE7aUVBZ0I0QyxVQUFVO3NCQUF2RSxlQUFlO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFDcEMsT0FBTztzQkFBOUIsWUFBWTt1QkFBQyxRQUFRO2dCQWtCdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgTmdab25lLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgU3ViamVjdCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc1Njcm9sbE9mZnNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY3JvbGwtb2Zmc2V0L3Njcm9sbC1vZmZzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBCc1Njcm9sbHNweURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Nyb2xsc3B5LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLXNjcm9sbHNweScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGxzcHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY3JvbGxzcHkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCc1Njcm9sbHNweUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY3JvbGxPZmZzZXRTZXJ2aWNlOiBCc1Njcm9sbE9mZnNldFNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuZG9jID0gPERvY3VtZW50PmRvY3VtZW50O1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmlld0luaXQkLCB0aGlzLmNvbnRlbnRJbml0JF0pXG4gICAgICAucGlwZShmaWx0ZXIoKFt2aWV3SW5pdCwgY29udGVudEluaXRdKSA9PiB2aWV3SW5pdCAmJiBjb250ZW50SW5pdCksIHRha2UoMSkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLnNldEFjdGl2ZURpcmVjdGl2ZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvQ3VycmVudEluU3B5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgdmlld0luaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY29udGVudEluaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCc1Njcm9sbHNweURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBkaXJlY3RpdmVzITogUXVlcnlMaXN0PEJzU2Nyb2xsc3B5RGlyZWN0aXZlPjtcbiAgQFZpZXdDaGlsZHJlbignYW5jaG9yJykgYW5jaG9ycyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD4+O1xuXG4gIGRvYzogRG9jdW1lbnQ7XG4gIGFjdGl2ZURpcmVjdGl2ZTogQnNTY3JvbGxzcHlEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy52aWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmNvbnRlbnRJbml0JC5uZXh0KHRydWUpO1xuICB9XG4gIFxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCh0cnVlKTtcbiAgfVxuICBcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIHRoaXMuc2V0QWN0aXZlRGlyZWN0aXZlKCk7XG4gICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRJblNweSgpO1xuICB9XG5cbiAgc2V0QWN0aXZlRGlyZWN0aXZlKCkge1xuICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLnNjcm9sbE9mZnNldFNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KClbMV07XG4gICAgY29uc3QgZGlycyA9IHRoaXMuZGlyZWN0aXZlcy5maWx0ZXIoKGQpID0+IGQuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkgPCBvZmZzZXRZKTtcblxuICAgIGlmICh0aGlzLmRpcmVjdGl2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmFjdGl2ZURpcmVjdGl2ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hY3RpdmVEaXJlY3RpdmUgPSB0aGlzLmRpcmVjdGl2ZXMuZ2V0KDApID8/IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRGlyZWN0aXZlID0gZGlyc1tkaXJzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvQ3VycmVudEluU3B5KCkge1xuICAgIGlmICh3aW5kb3cgJiYgKHdpbmRvdy5pbm5lcldpZHRoID49IDc2OCkpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURpcmVjdGl2ZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlyZWN0aXZlcy50b0FycmF5KCkuZmluZEluZGV4KCh2LCBpKSA9PiB2ID09PSB0aGlzLmFjdGl2ZURpcmVjdGl2ZSk7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuYW5jaG9ycy5nZXQoaW5kZXgpO1xuICAgICAgICBpZiAoYW5jaG9yICYmIGFuY2hvci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBzY3JvbGxUb0hlYWRlcihkaXJlY3RpdmU6IEJzU2Nyb2xsc3B5RGlyZWN0aXZlKSB7XG4gICAgY29uc3QgaGVhZGVyID0gZGlyZWN0aXZlLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBvZmZzZXRZID0gdGhpcy5zY3JvbGxPZmZzZXRTZXJ2aWNlLmdldFNjcm9sbE9mZnNldCgpWzFdO1xuICAgIGNvbnN0IHkgPSBoZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFkgLSBvZmZzZXRZICsgMTtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogeSwgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInNweVwiPlxuICAgIDx1bCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkaXIgb2YgZGlyZWN0aXZlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS1pbmRleF09XCJpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtuZ0NsYXNzXT1cIiduYXYnICsgZGlyLmVsZW1lbnQubmF0aXZlRWxlbWVudC50YWdOYW1lXCIgW2NsYXNzLmZ3LWJvbGRdPVwiYWN0aXZlRGlyZWN0aXZlPy5lbGVtZW50ID09PSBkaXIuZWxlbWVudFwiIChjbGljayk9XCJzY3JvbGxUb0hlYWRlcihkaXIpXCIgW3RpdGxlXT1cImRpci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnRcIiAjYW5jaG9yPlxuICAgICAgICAgICAgICAgIHt7IGRpci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PiJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsc3B5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbHNweS9jb21wb25lbnQvc2Nyb2xsc3B5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc3JjL2xpYi9jb21wb25lbnRzL3Njcm9sbHNweS9jb21wb25lbnQvc2Nyb2xsc3B5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQW1DLFNBQVMsRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7QUFPekUsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUNVLG1CQUEwQyxFQUNoQyxRQUFhLEVBQ3ZCLElBQVk7UUFGWix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBRTFDLFNBQUksR0FBSixJQUFJLENBQVE7UUFXZCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQixjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEQsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENB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TUFBTSxLQUFLLFdBQVcsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7O2lIQTVFVSxvQkFBb0IsdURBSXJCLFFBQVE7cUdBSlAsb0JBQW9CLG1KQW9CZCxvQkFBb0Isc0lDL0J2QywwakJBV007MkZEQU8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7OzBCQVFyQixNQUFNOzJCQUFDLFFBQVE7aUVBZ0I0QyxVQUFVO3NCQUF2RSxlQUFlO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFDcEMsT0FBTztzQkFBOUIsWUFBWTt1QkFBQyxRQUFRO2dCQWtCdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgTmdab25lLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgU3ViamVjdCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCc1Njcm9sbE9mZnNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY3JvbGwtb2Zmc2V0L3Njcm9sbC1vZmZzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBCc1Njcm9sbHNweURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Nyb2xsc3B5LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JzLXNjcm9sbHNweScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY3JvbGxzcHkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY3JvbGxzcHkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCc1Njcm9sbHNweUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY3JvbGxPZmZzZXRTZXJ2aWNlOiBCc1Njcm9sbE9mZnNldFNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuZG9jID0gPERvY3VtZW50PmRvY3VtZW50O1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMudmlld0luaXQkLCB0aGlzLmNvbnRlbnRJbml0JF0pXG4gICAgICAucGlwZShmaWx0ZXIoKFt2aWV3SW5pdCwgY29udGVudEluaXRdKSA9PiB2aWV3SW5pdCAmJiBjb250ZW50SW5pdCksIHRha2UoMSkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLnNldEFjdGl2ZURpcmVjdGl2ZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvQ3VycmVudEluU3B5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgdmlld0luaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY29udGVudEluaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCc1Njcm9sbHNweURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBkaXJlY3RpdmVzITogUXVlcnlMaXN0PEJzU2Nyb2xsc3B5RGlyZWN0aXZlPjtcbiAgQFZpZXdDaGlsZHJlbignYW5jaG9yJykgYW5jaG9ycyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD4+O1xuXG4gIGRvYzogRG9jdW1lbnQ7XG4gIGFjdGl2ZURpcmVjdGl2ZTogQnNTY3JvbGxzcHlEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy52aWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmNvbnRlbnRJbml0JC5uZXh0KHRydWUpO1xuICB9XG4gIFxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCh0cnVlKTtcbiAgfVxuICBcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93U2Nyb2xsKCkge1xuICAgIHRoaXMuc2V0QWN0aXZlRGlyZWN0aXZlKCk7XG4gICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRJblNweSgpO1xuICB9XG5cbiAgc2V0QWN0aXZlRGlyZWN0aXZlKCkge1xuICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLnNjcm9sbE9mZnNldFNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KClbMV07XG4gICAgY29uc3QgZGlycyA9IHRoaXMuZGlyZWN0aXZlcy5maWx0ZXIoKGQpID0+IGQuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkgPCBvZmZzZXRZKTtcblxuICAgIGlmICh0aGlzLmRpcmVjdGl2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmFjdGl2ZURpcmVjdGl2ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkaXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hY3RpdmVEaXJlY3RpdmUgPSB0aGlzLmRpcmVjdGl2ZXMuZ2V0KDApID8/IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRGlyZWN0aXZlID0gZGlyc1tkaXJzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvQ3VycmVudEluU3B5KCkge1xuICAgIGlmICgodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpICYmICh3aW5kb3cuaW5uZXJXaWR0aCA+PSA3NjgpKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVEaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpcmVjdGl2ZXMudG9BcnJheSgpLmZpbmRJbmRleCgodiwgaSkgPT4gdiA9PT0gdGhpcy5hY3RpdmVEaXJlY3RpdmUpO1xuICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvcnMuZ2V0KGluZGV4KTtcbiAgICAgICAgaWYgKGFuY2hvciAmJiBhbmNob3IubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBpbmxpbmU6ICduZWFyZXN0JyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgc2Nyb2xsVG9IZWFkZXIoZGlyZWN0aXZlOiBCc1Njcm9sbHNweURpcmVjdGl2ZSkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaGVhZGVyID0gZGlyZWN0aXZlLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLnNjcm9sbE9mZnNldFNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KClbMV07XG4gICAgICBjb25zdCB5ID0gaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gb2Zmc2V0WSArIDE7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogeSwgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzcHlcIj5cbiAgICA8dWwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGlyIG9mIGRpcmVjdGl2ZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtaW5kZXhdPVwiaVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbbmdDbGFzc109XCInbmF2JyArIGRpci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFnTmFtZVwiIFtjbGFzcy5mdy1ib2xkXT1cImFjdGl2ZURpcmVjdGl2ZT8uZWxlbWVudCA9PT0gZGlyLmVsZW1lbnRcIiAoY2xpY2spPVwic2Nyb2xsVG9IZWFkZXIoZGlyKVwiIFt0aXRsZV09XCJkaXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50XCIgI2FuY2hvcj5cbiAgICAgICAgICAgICAgICB7eyBkaXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgPC91bD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj4iXX0=