@mintplayer/ng-bootstrap 13.1.23 → 13.1.27

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 (46) hide show
  1. package/_bootstrap.scss +0 -1
  2. package/esm2020/lib/components/context-menu/context-menu.directive.mjs +1 -2
  3. package/esm2020/lib/components/file-upload/component/file-upload.component.mjs +1 -2
  4. package/esm2020/lib/components/index.mjs +2 -1
  5. package/esm2020/lib/components/modal/service/modal.service.mjs +1 -2
  6. package/esm2020/lib/components/scheduler/components/index.mjs +2 -0
  7. package/esm2020/lib/components/scheduler/components/scheduler/scheduler.component.mjs +364 -0
  8. package/esm2020/lib/components/scheduler/enums/drag-operation.mjs +8 -0
  9. package/esm2020/lib/components/scheduler/index.mjs +3 -0
  10. package/esm2020/lib/components/scheduler/interfaces/drag-operation.mjs +2 -0
  11. package/esm2020/lib/components/scheduler/interfaces/preview-event.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/interfaces/timeline-track.mjs +2 -0
  17. package/esm2020/lib/components/scheduler/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.mjs +16 -0
  18. package/esm2020/lib/components/scheduler/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.mjs +20 -0
  19. package/esm2020/lib/components/scheduler/pipes/date-offset/date-offset.pipe.mjs +20 -0
  20. package/esm2020/lib/components/scheduler/pipes/day-of-week/day-of-week.pipe.mjs +22 -0
  21. package/esm2020/lib/components/scheduler/scheduler.module.mjs +38 -0
  22. package/esm2020/lib/components/scheduler/services/timeline/timeline.service.mjs +65 -0
  23. package/esm2020/lib/services/calendar-month/calendar-month.service.mjs +1 -1
  24. package/fesm2015/mintplayer-ng-bootstrap.mjs +525 -5
  25. package/fesm2015/mintplayer-ng-bootstrap.mjs.map +1 -1
  26. package/fesm2020/mintplayer-ng-bootstrap.mjs +525 -5
  27. package/fesm2020/mintplayer-ng-bootstrap.mjs.map +1 -1
  28. package/lib/components/index.d.ts +1 -0
  29. package/lib/components/scheduler/components/index.d.ts +1 -0
  30. package/lib/components/scheduler/components/scheduler/scheduler.component.d.ts +60 -0
  31. package/lib/components/scheduler/enums/drag-operation.d.ts +6 -0
  32. package/lib/components/scheduler/index.d.ts +2 -0
  33. package/lib/components/scheduler/interfaces/drag-operation.d.ts +6 -0
  34. package/lib/components/scheduler/interfaces/preview-event.d.ts +4 -0
  35. package/lib/components/scheduler/interfaces/scheduler-event-part.d.ts +6 -0
  36. package/lib/components/scheduler/interfaces/scheduler-event-with-parts.d.ts +6 -0
  37. package/lib/components/scheduler/interfaces/scheduler-event.d.ts +6 -0
  38. package/lib/components/scheduler/interfaces/time-slot.d.ts +4 -0
  39. package/lib/components/scheduler/interfaces/timeline-track.d.ts +5 -0
  40. package/lib/components/scheduler/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.d.ts +9 -0
  41. package/lib/components/scheduler/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.d.ts +9 -0
  42. package/lib/components/scheduler/pipes/date-offset/date-offset.pipe.d.ts +8 -0
  43. package/lib/components/scheduler/pipes/day-of-week/day-of-week.pipe.d.ts +9 -0
  44. package/lib/components/scheduler/scheduler.module.d.ts +12 -0
  45. package/lib/components/scheduler/services/timeline/timeline.service.d.ts +14 -0
  46. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, ContentChildren, NgModule, Input, Injectable, Pipe, EventEmitter, Output, Directive, HostBinding, InjectionToken, Inject, HostListener, Injector, ViewChild, Host, SkipSelf, forwardRef, PLATFORM_ID, ContentChild, Optional, ViewChildren, TemplateRef } from '@angular/core';
2
+ import { Component, ContentChildren, NgModule, Input, Injectable, Pipe, EventEmitter, Output, Directive, HostBinding, InjectionToken, Inject, HostListener, Injector, ViewChild, Host, SkipSelf, forwardRef, PLATFORM_ID, ContentChild, ViewChildren, Optional, TemplateRef } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
5
  import { SlideUpDownAnimation, FadeInOutAnimation, CarouselSlideAnimation, ColorTransitionAnimation } from '@mintplayer/ng-animations';
@@ -931,7 +931,6 @@ class BsContextMenuDirective {
931
931
  this.element.nativeElement.oncontextmenu = (ev) => {
932
932
  ev.preventDefault();
933
933
  this.checkAndCloseExisting(ev);
934
- console.log('d', element.nativeElement);
935
934
  this.overlayRef = this.overlay.create({
936
935
  hasBackdrop: false,
937
936
  scrollStrategy: this.overlay.scrollStrategies.reposition(),
@@ -1815,7 +1814,6 @@ class BsFileUploadComponent {
1815
1814
  this.filesDropped = new EventEmitter();
1816
1815
  }
1817
1816
  onChange(event) {
1818
- console.log('event', event);
1819
1817
  if (!event.target)
1820
1818
  return;
1821
1819
  if (!('files' in event.target))
@@ -2002,6 +2000,529 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
2002
2000
  }]
2003
2001
  }] });
2004
2002
 
2003
+ var EDragOperation;
2004
+ (function (EDragOperation) {
2005
+ EDragOperation[EDragOperation["none"] = 0] = "none";
2006
+ EDragOperation[EDragOperation["createEvent"] = 1] = "createEvent";
2007
+ EDragOperation[EDragOperation["resizeEvent"] = 2] = "resizeEvent";
2008
+ EDragOperation[EDragOperation["moveEvent"] = 3] = "moveEvent";
2009
+ })(EDragOperation || (EDragOperation = {}));
2010
+
2011
+ class BsTimelineService {
2012
+ splitInParts(event) {
2013
+ let startTime = event.start;
2014
+ const result = [];
2015
+ const eventOrNull = 'color' in event ? event : null;
2016
+ while (!this.dateEquals(startTime, event.end)) {
2017
+ const end = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate() + 1, 0, 0, 0);
2018
+ result.push({ start: startTime, end: end, event: eventOrNull });
2019
+ startTime = end;
2020
+ }
2021
+ if (startTime != event.end) {
2022
+ result.push({ start: startTime, end: event.end, event: eventOrNull });
2023
+ }
2024
+ return { event: event, parts: result };
2025
+ }
2026
+ dateEquals(date1, date2) {
2027
+ return (date1.getFullYear() === date2.getFullYear() &&
2028
+ date1.getMonth() === date2.getMonth() &&
2029
+ date1.getDate() === date2.getDate());
2030
+ }
2031
+ getTimeline(events) {
2032
+ const timestamps = this.getTimestamps(events);
2033
+ const tracks = [];
2034
+ timestamps.forEach((timestamp, tIndex) => {
2035
+ const starting = events.filter((e) => e.start === timestamp);
2036
+ // const ending = events.filter((e) => e.end === timestamp);
2037
+ starting.forEach((startedEvent, eIndex) => {
2038
+ const freeTracks = tracks.filter(t => this.trackIsFreeAt(t, startedEvent));
2039
+ if (freeTracks.length === 0) {
2040
+ tracks.push({ index: tracks.length, events: [startedEvent] });
2041
+ }
2042
+ else {
2043
+ freeTracks[0].events.push(startedEvent);
2044
+ }
2045
+ });
2046
+ });
2047
+ return tracks;
2048
+ }
2049
+ getTimestamps(events) {
2050
+ const allTimestamps = events.map(e => [e.start, e.end])
2051
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2052
+ return allTimestamps
2053
+ .filter((t, i) => allTimestamps.indexOf(t) === i)
2054
+ .sort((t1, t2) => t1 - t2);
2055
+ }
2056
+ trackIsFreeAt(track, event) {
2057
+ if (track.events.every((ev) => (ev.end <= event.start) || (event.end <= ev.start))) {
2058
+ return true;
2059
+ }
2060
+ else {
2061
+ return false;
2062
+ }
2063
+ }
2064
+ }
2065
+ BsTimelineService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2066
+ BsTimelineService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, providedIn: 'root' });
2067
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, decorators: [{
2068
+ type: Injectable,
2069
+ args: [{
2070
+ providedIn: 'root'
2071
+ }]
2072
+ }] });
2073
+
2074
+ class BsSecondsTodayOffsetPipe {
2075
+ transform(value) {
2076
+ const today = new Date(value.start);
2077
+ today.setHours(0);
2078
+ today.setMinutes(0);
2079
+ today.setSeconds(0);
2080
+ return (value.start.getTime() - today.getTime()) / 1000;
2081
+ }
2082
+ }
2083
+ BsSecondsTodayOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2084
+ BsSecondsTodayOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" });
2085
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{
2086
+ type: Pipe,
2087
+ args: [{
2088
+ name: 'bsSecondsTodayOffset'
2089
+ }]
2090
+ }] });
2091
+
2092
+ class BsSecondsTimespanPipe {
2093
+ transform(value) {
2094
+ return (value.end.getTime() - value.start.getTime()) / 1000;
2095
+ }
2096
+ }
2097
+ BsSecondsTimespanPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2098
+ BsSecondsTimespanPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, name: "bsSecondsTimespan" });
2099
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{
2100
+ type: Pipe,
2101
+ args: [{
2102
+ name: 'bsSecondsTimespan'
2103
+ }]
2104
+ }] });
2105
+
2106
+ class DayOfWeekPipe {
2107
+ transform(value) {
2108
+ const dayOfWeek = value.start.getDay();
2109
+ if (dayOfWeek === 0) {
2110
+ return 7;
2111
+ }
2112
+ else {
2113
+ return dayOfWeek;
2114
+ }
2115
+ }
2116
+ }
2117
+ DayOfWeekPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2118
+ DayOfWeekPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, name: "dayOfWeek" });
2119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, decorators: [{
2120
+ type: Pipe,
2121
+ args: [{
2122
+ name: 'dayOfWeek'
2123
+ }]
2124
+ }] });
2125
+
2126
+ class BsSchedulerComponent {
2127
+ constructor(calendarMonthService, timelineService) {
2128
+ this.calendarMonthService = calendarMonthService;
2129
+ this.timelineService = timelineService;
2130
+ this.events$ = new BehaviorSubject([]);
2131
+ this.previewEvent$ = new BehaviorSubject(null);
2132
+ this.timeSlotDuration$ = new BehaviorSubject(1800);
2133
+ this.timeSlots$ = new BehaviorSubject([]);
2134
+ // timeSlots$: Observable<TimeSlot[][]>;
2135
+ this.mouseState$ = new BehaviorSubject(false);
2136
+ this.hoveredTimeSlot$ = new BehaviorSubject(null);
2137
+ this.destroyed$ = new Subject();
2138
+ //#region UnitHeight
2139
+ this.unitHeight$ = new BehaviorSubject(40);
2140
+ this.unitHeightChange = new EventEmitter();
2141
+ this.operation = null;
2142
+ this.dragStartTimeslot = null;
2143
+ const monday = this.calendarMonthService.getMondayBefore(new Date());
2144
+ this.currentWeek$ = new BehaviorSubject(monday);
2145
+ this.daysOfWeek$ = this.currentWeek$.pipe(map((weekMonday) => {
2146
+ weekMonday.setHours(0);
2147
+ weekMonday.setMinutes(0);
2148
+ weekMonday.setSeconds(0);
2149
+ weekMonday.setMilliseconds(0);
2150
+ return Array.from(Array(7).keys()).map((x) => this.addDays(weekMonday, x));
2151
+ }));
2152
+ this.daysOfWeekWithTimestamps$ = this.daysOfWeek$
2153
+ .pipe(map((daysOfWeek) => {
2154
+ return { start: daysOfWeek[0].getTime(), end: daysOfWeek[daysOfWeek.length - 1].getTime() + 24 * 60 * 60 * 1000 };
2155
+ }));
2156
+ this.eventParts$ = this.events$.pipe(map((events) => events.map((ev) => this.timelineService.splitInParts(ev))));
2157
+ this.eventPartsForThisWeek$ = combineLatest([
2158
+ this.daysOfWeekWithTimestamps$,
2159
+ this.eventParts$
2160
+ .pipe(map(eventParts => eventParts.map(evp => evp.parts)))
2161
+ .pipe(map(jaggedParts => {
2162
+ return jaggedParts.reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2163
+ }))
2164
+ ])
2165
+ .pipe(map(([startAndEnd, eventParts]) => {
2166
+ return eventParts.filter(eventPart => {
2167
+ return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));
2168
+ });
2169
+ }));
2170
+ this.previewEventParts$ = this.previewEvent$.pipe(map((event) => {
2171
+ if (event) {
2172
+ return this.timelineService.splitInParts(event);
2173
+ }
2174
+ else {
2175
+ return null;
2176
+ }
2177
+ }));
2178
+ this.previewEventPartsForThisWeek$ = combineLatest([this.daysOfWeekWithTimestamps$, this.previewEventParts$])
2179
+ .pipe(map(([startAndEnd, previewEventParts]) => {
2180
+ if (previewEventParts) {
2181
+ return previewEventParts.parts.filter(eventPart => {
2182
+ return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));
2183
+ });
2184
+ }
2185
+ else {
2186
+ return [];
2187
+ }
2188
+ }));
2189
+ this.timelinedEventPartsForThisWeek$ = this.eventPartsForThisWeek$
2190
+ .pipe(map(eventParts => {
2191
+ // We'll only use the events for this week
2192
+ const events = eventParts.map(ep => ep.event)
2193
+ .filter((e, i, list) => list.indexOf(e) === i)
2194
+ .filter((e) => !!e)
2195
+ .map((e) => e);
2196
+ const timeline = this.timelineService.getTimeline(events);
2197
+ const result = timeline.map(track => {
2198
+ return track.events.map(ev => {
2199
+ return { event: ev, index: track.index };
2200
+ });
2201
+ })
2202
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), [])
2203
+ .map((evi) => eventParts.filter(p => p.event === evi.event).map(p => {
2204
+ return { part: p, index: evi.index };
2205
+ }))
2206
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2207
+ return {
2208
+ total: timeline.length,
2209
+ parts: result
2210
+ };
2211
+ }));
2212
+ // this.timeSlots$ =
2213
+ combineLatest([this.daysOfWeek$, this.timeSlotDuration$])
2214
+ .pipe(map(([daysOfWeek, duration]) => {
2215
+ const timeSlotsPerDay = Math.floor((60 * 60 * 24) / duration);
2216
+ return Array.from(Array(timeSlotsPerDay).keys()).map((index) => {
2217
+ const timeSlotStart = new Date(daysOfWeek[0]);
2218
+ timeSlotStart.setTime(+timeSlotStart.getTime() + index * duration * 1000);
2219
+ const timeSlotEnd = new Date(timeSlotStart);
2220
+ timeSlotEnd.setTime(+timeSlotEnd.getTime() + duration * 1000);
2221
+ return daysOfWeek.map((day) => {
2222
+ const start = new Date(day);
2223
+ start.setHours(timeSlotStart.getHours());
2224
+ start.setMinutes(timeSlotStart.getMinutes());
2225
+ start.setSeconds(timeSlotStart.getSeconds());
2226
+ start.setMilliseconds(timeSlotStart.getMilliseconds());
2227
+ const end = new Date(day);
2228
+ end.setHours(timeSlotEnd.getHours());
2229
+ end.setMinutes(timeSlotEnd.getMinutes());
2230
+ end.setSeconds(timeSlotEnd.getSeconds());
2231
+ end.setMilliseconds(timeSlotEnd.getMilliseconds());
2232
+ end.setDate(end.getDate() + timeSlotEnd.getDate() - timeSlotStart.getDate());
2233
+ return { start, end };
2234
+ });
2235
+ });
2236
+ }))
2237
+ .subscribe((timeslots) => {
2238
+ // For performance reasons, we're not using an observable here, but persist the timeslots in a BehaviorSubject.
2239
+ this.timeSlots$.next(timeslots);
2240
+ });
2241
+ this.unitHeight$
2242
+ .pipe(takeUntil(this.destroyed$))
2243
+ .subscribe((unitHeight) => {
2244
+ this.unitHeightChange.emit(unitHeight);
2245
+ });
2246
+ }
2247
+ get unitHeight() {
2248
+ return this.unitHeight$.value;
2249
+ }
2250
+ set unitHeight(value) {
2251
+ this.unitHeight$.next(value);
2252
+ }
2253
+ //#endregion
2254
+ addDays(date, days) {
2255
+ const result = new Date(date);
2256
+ result.setDate(result.getDate() + days);
2257
+ return result;
2258
+ }
2259
+ onPreviousWeek() {
2260
+ this.currentWeek$
2261
+ .pipe(map((w) => this.addDays(w, -7)), take(1))
2262
+ .subscribe((w) => this.currentWeek$.next(w));
2263
+ }
2264
+ onNextWeek() {
2265
+ this.currentWeek$
2266
+ .pipe(map((w) => this.addDays(w, 7)), take(1))
2267
+ .subscribe((w) => this.currentWeek$.next(w));
2268
+ }
2269
+ onCreateEvent(ev, slot) {
2270
+ ev.preventDefault();
2271
+ this.mouseState$.next(true);
2272
+ this.dragStartTimeslot = slot;
2273
+ this.operation = {
2274
+ operation: EDragOperation.createEvent,
2275
+ event: {
2276
+ start: slot.start,
2277
+ end: slot.end,
2278
+ color: '#F00',
2279
+ description: 'Test event',
2280
+ }
2281
+ };
2282
+ this.previewEvent$.next({ start: slot.start, end: slot.end });
2283
+ }
2284
+ randomColor() {
2285
+ const brightness = 128;
2286
+ return '#' + this.randomChannel(brightness) + this.randomChannel(brightness) + this.randomChannel(brightness);
2287
+ }
2288
+ randomChannel(brightness) {
2289
+ const r = 255 - brightness;
2290
+ const n = 0 | ((Math.random() * r) + brightness);
2291
+ const s = n.toString(16);
2292
+ return (s.length == 1) ? '0' + s : s;
2293
+ }
2294
+ onStartDragEvent(eventPart, ev) {
2295
+ ev.preventDefault();
2296
+ this.hoveredTimeSlot$.pipe(take(1)).subscribe((hoveredTimeSlot) => {
2297
+ if (eventPart.event) {
2298
+ this.dragStartTimeslot = hoveredTimeSlot;
2299
+ this.operation = {
2300
+ operation: EDragOperation.moveEvent,
2301
+ event: eventPart.event,
2302
+ };
2303
+ this.previewEvent$.next({ start: eventPart.event.start, end: eventPart.event.end });
2304
+ }
2305
+ });
2306
+ }
2307
+ //#region hoveredTimeslot$
2308
+ getHoveredTimeslot(ev, timeSlots) {
2309
+ const hoveredSlots = this.timeSlotElements.filter((el) => {
2310
+ const rct = el.nativeElement.getBoundingClientRect();
2311
+ if (rct.left <= ev.x && ev.x <= rct.right && rct.top <= ev.y && ev.y <= rct.bottom) {
2312
+ return true;
2313
+ }
2314
+ else {
2315
+ return false;
2316
+ }
2317
+ });
2318
+ if (!hoveredSlots || hoveredSlots.length === 0) {
2319
+ return null;
2320
+ }
2321
+ const slotElement = hoveredSlots[0].nativeElement;
2322
+ const strRow = slotElement.getAttribute('data-row');
2323
+ if (!strRow) {
2324
+ return null;
2325
+ }
2326
+ const row = parseInt(strRow);
2327
+ const strColumn = slotElement.getAttribute('data-column');
2328
+ if (!strColumn) {
2329
+ return null;
2330
+ }
2331
+ const column = parseInt(strColumn);
2332
+ const slot = timeSlots[row][column];
2333
+ return slot;
2334
+ }
2335
+ onMousemove(ev) {
2336
+ this.timeSlots$.pipe(take(1)).subscribe((timeSlots) => {
2337
+ const hovered = this.getHoveredTimeslot(ev, timeSlots);
2338
+ this.hoveredTimeSlot$.next(hovered);
2339
+ if (this.operation) {
2340
+ switch (this.operation.operation) {
2341
+ case EDragOperation.createEvent:
2342
+ {
2343
+ if (this.operation.event && this.dragStartTimeslot && hovered && (this.operation.event.end.getTime() != hovered.end.getTime())) {
2344
+ if (this.dragStartTimeslot.start.getTime() === hovered.start.getTime()) {
2345
+ // 1 slot
2346
+ }
2347
+ else if (this.dragStartTimeslot.start.getTime() < hovered.start.getTime()) {
2348
+ // Drag down
2349
+ this.previewEvent$
2350
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2351
+ .pipe(map((ev) => {
2352
+ if (ev && this.dragStartTimeslot) {
2353
+ ev.start = this.dragStartTimeslot.start;
2354
+ ev.end = hovered.end;
2355
+ }
2356
+ return ev;
2357
+ }))
2358
+ .pipe(take(1))
2359
+ .subscribe((ev) => this.previewEvent$.next(ev));
2360
+ }
2361
+ else if (this.dragStartTimeslot.start.getTime() > hovered.start.getTime()) {
2362
+ // Drag up
2363
+ this.previewEvent$
2364
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2365
+ .pipe(map((ev) => {
2366
+ if (ev && this.dragStartTimeslot) {
2367
+ ev.start = hovered.start;
2368
+ ev.end = this.dragStartTimeslot.end;
2369
+ }
2370
+ return ev;
2371
+ }))
2372
+ .pipe(take(1))
2373
+ .subscribe((ev) => this.previewEvent$.next(ev));
2374
+ }
2375
+ }
2376
+ }
2377
+ break;
2378
+ case EDragOperation.moveEvent:
2379
+ {
2380
+ if (hovered && this.dragStartTimeslot) {
2381
+ // this.operation.event.start.setTime(this.operation.event.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
2382
+ // this.operation.event.end.setTime(this.operation.event.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
2383
+ // this.dragStartTimeslot = hovered;
2384
+ // // this.events$.next(this.events$.value);
2385
+ this.previewEvent$
2386
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2387
+ .pipe(map((ev) => {
2388
+ if (ev && this.dragStartTimeslot) {
2389
+ const result = {
2390
+ start: new Date(ev.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime()),
2391
+ end: new Date(ev.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime())
2392
+ };
2393
+ this.dragStartTimeslot = hovered;
2394
+ return result;
2395
+ }
2396
+ else {
2397
+ return ev;
2398
+ }
2399
+ }))
2400
+ .pipe(take(1))
2401
+ .subscribe((ev) => {
2402
+ this.previewEvent$.next(ev);
2403
+ });
2404
+ }
2405
+ }
2406
+ break;
2407
+ }
2408
+ }
2409
+ });
2410
+ }
2411
+ //#endregion
2412
+ onMouseUp(ev) {
2413
+ if (this.operation) {
2414
+ switch (this.operation.operation) {
2415
+ case EDragOperation.createEvent:
2416
+ {
2417
+ combineLatest([this.previewEvent$])
2418
+ .pipe(take(1))
2419
+ .subscribe(([previewEvent]) => {
2420
+ if (previewEvent) {
2421
+ this.operation = null;
2422
+ this.dragStartTimeslot = null;
2423
+ this.events$.next([...this.events$.value, {
2424
+ start: previewEvent.start,
2425
+ end: previewEvent.end,
2426
+ color: this.randomColor(),
2427
+ description: 'New event'
2428
+ }]);
2429
+ this.previewEvent$.next(null);
2430
+ }
2431
+ });
2432
+ }
2433
+ break;
2434
+ case EDragOperation.moveEvent:
2435
+ {
2436
+ this.previewEvent$
2437
+ .pipe(filter((ev) => !!ev))
2438
+ .pipe(take(1))
2439
+ .subscribe((previewEvent) => {
2440
+ if (this.operation && this.operation.event && previewEvent) {
2441
+ this.operation.event.start = previewEvent.start;
2442
+ this.operation.event.end = previewEvent.end;
2443
+ this.operation = null;
2444
+ this.dragStartTimeslot = null;
2445
+ this.events$.next(this.events$.value);
2446
+ this.previewEvent$.next(null);
2447
+ }
2448
+ });
2449
+ }
2450
+ break;
2451
+ }
2452
+ }
2453
+ }
2454
+ ngOnDestroy() {
2455
+ this.destroyed$.next(true);
2456
+ }
2457
+ }
2458
+ BsSchedulerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerComponent, deps: [{ token: BsCalendarMonthService }, { token: BsTimelineService }], target: i0.ɵɵFactoryTarget.Component });
2459
+ 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: "<div class=\"table d-flex w-100 overflow-y-auto\" [style.max-height.px]=\"null\">\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 <ng-container *ngIf=\"(unitHeight$ | async) as unitHeight\">\n <ng-container *ngIf=\"(timelinedEventPartsForThisWeek$ | async) as partData\">\n <div *ngFor=\"let eventPart of partData.parts\" class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\">\n <div class=\"event-border\"></div>\n <ng-container *ngIf=\"eventPart.part.event\">\n <div class=\"event-bg\" [style.background-color]=\"eventPart.part.event.color\"></div>\n <div class=\"event-label\">{{ eventPart.part.event.description }}</div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(previewEventPartsForThisWeek$ | async) as previewPartData\">\n <div *ngFor=\"let eventPart of previewPartData\" class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\" [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * unitHeight\"></div>\n </div>\n </ng-container>\n </ng-container>\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:absolute;-webkit-user-select:none;user-select:none;pointer-events:none}.event.preview{background:#666;opacity:.6}.event .event-border{background:black;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.event .event-inner{position:relative;left:0px;right:5px;top:0px;bottom:5px;cursor:move;pointer-events:all;overflow-x:hidden}.event .event-inner .event-bg{opacity:.5;width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px);transition:opacity .15s ease-in-out}.event .event-inner .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.event .event-inner:hover .event-bg{opacity:.7}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i1.AsyncPipe, "date": i1.DatePipe, "bsSecondsTodayOffset": BsSecondsTodayOffsetPipe, "bsSecondsTimespan": BsSecondsTimespanPipe, "dayOfWeek": DayOfWeekPipe } });
2460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerComponent, decorators: [{
2461
+ type: Component,
2462
+ args: [{ selector: 'bs-scheduler', template: "<div class=\"table d-flex w-100 overflow-y-auto\" [style.max-height.px]=\"null\">\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 <ng-container *ngIf=\"(unitHeight$ | async) as unitHeight\">\n <ng-container *ngIf=\"(timelinedEventPartsForThisWeek$ | async) as partData\">\n <div *ngFor=\"let eventPart of partData.parts\" class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\">\n <div class=\"event-border\"></div>\n <ng-container *ngIf=\"eventPart.part.event\">\n <div class=\"event-bg\" [style.background-color]=\"eventPart.part.event.color\"></div>\n <div class=\"event-label\">{{ eventPart.part.event.description }}</div>\n </ng-container>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"(previewEventPartsForThisWeek$ | async) as previewPartData\">\n <div *ngFor=\"let eventPart of previewPartData\" class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\" [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * unitHeight\"></div>\n </div>\n </ng-container>\n </ng-container>\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:absolute;-webkit-user-select:none;user-select:none;pointer-events:none}.event.preview{background:#666;opacity:.6}.event .event-border{background:black;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.event .event-inner{position:relative;left:0px;right:5px;top:0px;bottom:5px;cursor:move;pointer-events:all;overflow-x:hidden}.event .event-inner .event-bg{opacity:.5;width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px);transition:opacity .15s ease-in-out}.event .event-inner .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.event .event-inner:hover .event-bg{opacity:.7}\n"] }]
2463
+ }], ctorParameters: function () { return [{ type: BsCalendarMonthService }, { type: BsTimelineService }]; }, propDecorators: { timeSlotElements: [{
2464
+ type: ViewChildren,
2465
+ args: ['slot']
2466
+ }], unitHeightChange: [{
2467
+ type: Output
2468
+ }], unitHeight: [{
2469
+ type: Input
2470
+ }], onMousemove: [{
2471
+ type: HostListener,
2472
+ args: ['document:mousemove', ['$event']]
2473
+ }], onMouseUp: [{
2474
+ type: HostListener,
2475
+ args: ['document:mouseup', ['$event']]
2476
+ }] } });
2477
+
2478
+ class DateOffsetPipe {
2479
+ transform(value) {
2480
+ const today = new Date(value.start);
2481
+ today.setHours(0);
2482
+ today.setMinutes(0);
2483
+ today.setSeconds(0);
2484
+ return (value.start.getTime() - today.getTime()) / 1000;
2485
+ }
2486
+ }
2487
+ DateOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2488
+ DateOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, name: "dateOffset" });
2489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, decorators: [{
2490
+ type: Pipe,
2491
+ args: [{
2492
+ name: 'dateOffset'
2493
+ }]
2494
+ }] });
2495
+
2496
+ class BsSchedulerModule {
2497
+ }
2498
+ BsSchedulerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2499
+ BsSchedulerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, declarations: [BsSchedulerComponent,
2500
+ BsSecondsTimespanPipe,
2501
+ BsSecondsTodayOffsetPipe,
2502
+ DateOffsetPipe,
2503
+ DayOfWeekPipe], imports: [CommonModule], exports: [BsSchedulerComponent] });
2504
+ BsSchedulerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, imports: [[
2505
+ CommonModule
2506
+ ]] });
2507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, decorators: [{
2508
+ type: NgModule,
2509
+ args: [{
2510
+ declarations: [
2511
+ BsSchedulerComponent,
2512
+ BsSecondsTimespanPipe,
2513
+ BsSecondsTodayOffsetPipe,
2514
+ DateOffsetPipe,
2515
+ DayOfWeekPipe
2516
+ ],
2517
+ imports: [
2518
+ CommonModule
2519
+ ],
2520
+ exports: [
2521
+ BsSchedulerComponent
2522
+ ]
2523
+ }]
2524
+ }] });
2525
+
2005
2526
  class BsListGroupItemComponent {
2006
2527
  constructor() {
2007
2528
  }
@@ -2190,7 +2711,6 @@ class BsModalService {
2190
2711
  hasBackdrop: true
2191
2712
  });
2192
2713
  const componentInstance = overlayRef.attach(portal);
2193
- console.log('instance', componentInstance);
2194
2714
  componentInstance.instance['instance'] = {
2195
2715
  component: componentInstance,
2196
2716
  overlay: overlayRef
@@ -3603,5 +4123,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
3603
4123
  * Generated bundle index. Do not edit.
3604
4124
  */
3605
4125
 
3606
- export { BsAccordionComponent, BsAccordionModule, BsAccordionTabComponent, BsAccordionTabHeaderComponent, BsAlertCloseComponent, BsAlertComponent, BsAlertModule, BsButtonTemplateDirective, BsCalendarComponent, BsCalendarModule, BsCardComponent, BsCardHeaderComponent, BsCardModule, BsCarouselComponent, BsCarouselImageDirective, BsCarouselModule, BsCodeSnippetComponent, BsCodeSnippetModule, BsContextMenuDirective, BsContextMenuModule, BsCopyDirective, BsCopyModule, BsDatatableColumnDirective, BsDatatableComponent, BsDatatableModule, BsDatepickerComponent, BsDatepickerModule, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownModule, BsDropdownToggleDirective, BsExpandButtonDirective, BsFileUploadComponent, BsFileUploadModule, BsFileUploadTemplateDirective, BsFontColorPipe, BsFontColorPipeModule, BsFooterTemplateDirective, BsForDirective, BsForModule, BsFormatBytesModule, BsFormatBytesPipe, BsHeaderTemplateDirective, BsItemTemplateDirective, BsListGroupComponent, BsListGroupItemComponent, BsListGroupModule, BsModalBodyDirective, BsModalComponent, BsModalContentComponent, BsModalFooterDirective, BsModalHeaderDirective, BsModalModule, BsModalService, BsMultiselectComponent, BsMultiselectModule, BsNavbarBrandComponent, BsNavbarComponent, BsNavbarDropdownComponent, BsNavbarItemComponent, BsNavbarModule, BsNavbarNavComponent, BsNavbarTogglerComponent, BsPaginationComponent, BsPaginationModule, BsProgressBarComponent, BsProgressBarModule, BsProgressComponent, BsRatingComponent, BsRatingModule, BsRowTemplateDirective, BsScrollspyComponent, BsScrollspyDirective, BsScrollspyModule, BsSelect2Component, BsSelect2Module, BsSnackbarCloseDirective, BsSnackbarComponent, BsSnackbarModule, BsSnackbarService, BsTabControlComponent, BsTabControlModule, BsTabPageComponent, BsToggleButtonComponent, BsToggleButtonModule, BsTooltipDirective, BsTooltipModule, BsTypeaheadComponent, BsTypeaheadModule, Color, DatatableSettings, DropdownToggleDirective, NavLinkDirective, NavbarContentDirective, Position };
4126
+ export { BsAccordionComponent, BsAccordionModule, BsAccordionTabComponent, BsAccordionTabHeaderComponent, BsAlertCloseComponent, BsAlertComponent, BsAlertModule, BsButtonTemplateDirective, BsCalendarComponent, BsCalendarModule, BsCardComponent, BsCardHeaderComponent, BsCardModule, BsCarouselComponent, BsCarouselImageDirective, BsCarouselModule, BsCodeSnippetComponent, BsCodeSnippetModule, BsContextMenuDirective, BsContextMenuModule, BsCopyDirective, BsCopyModule, BsDatatableColumnDirective, BsDatatableComponent, BsDatatableModule, BsDatepickerComponent, BsDatepickerModule, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownModule, BsDropdownToggleDirective, BsExpandButtonDirective, BsFileUploadComponent, BsFileUploadModule, BsFileUploadTemplateDirective, BsFontColorPipe, BsFontColorPipeModule, BsFooterTemplateDirective, BsForDirective, BsForModule, BsFormatBytesModule, BsFormatBytesPipe, BsHeaderTemplateDirective, BsItemTemplateDirective, BsListGroupComponent, BsListGroupItemComponent, BsListGroupModule, BsModalBodyDirective, BsModalComponent, BsModalContentComponent, BsModalFooterDirective, BsModalHeaderDirective, BsModalModule, BsModalService, BsMultiselectComponent, BsMultiselectModule, BsNavbarBrandComponent, BsNavbarComponent, BsNavbarDropdownComponent, BsNavbarItemComponent, BsNavbarModule, BsNavbarNavComponent, BsNavbarTogglerComponent, BsPaginationComponent, BsPaginationModule, BsProgressBarComponent, BsProgressBarModule, BsProgressComponent, BsRatingComponent, BsRatingModule, BsRowTemplateDirective, BsSchedulerComponent, BsSchedulerModule, BsScrollspyComponent, BsScrollspyDirective, BsScrollspyModule, BsSelect2Component, BsSelect2Module, BsSnackbarCloseDirective, BsSnackbarComponent, BsSnackbarModule, BsSnackbarService, BsTabControlComponent, BsTabControlModule, BsTabPageComponent, BsToggleButtonComponent, BsToggleButtonModule, BsTooltipDirective, BsTooltipModule, BsTypeaheadComponent, BsTypeaheadModule, Color, DatatableSettings, DropdownToggleDirective, NavLinkDirective, NavbarContentDirective, Position };
3607
4127
  //# sourceMappingURL=mintplayer-ng-bootstrap.mjs.map