@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';
@@ -925,7 +925,6 @@ class BsContextMenuDirective {
925
925
  this.element.nativeElement.oncontextmenu = (ev) => {
926
926
  ev.preventDefault();
927
927
  this.checkAndCloseExisting(ev);
928
- console.log('d', element.nativeElement);
929
928
  this.overlayRef = this.overlay.create({
930
929
  hasBackdrop: false,
931
930
  scrollStrategy: this.overlay.scrollStrategies.reposition(),
@@ -1804,7 +1803,6 @@ class BsFileUploadComponent {
1804
1803
  this.filesDropped = new EventEmitter();
1805
1804
  }
1806
1805
  onChange(event) {
1807
- console.log('event', event);
1808
1806
  if (!event.target)
1809
1807
  return;
1810
1808
  if (!('files' in event.target))
@@ -1991,6 +1989,529 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
1991
1989
  }]
1992
1990
  }] });
1993
1991
 
1992
+ var EDragOperation;
1993
+ (function (EDragOperation) {
1994
+ EDragOperation[EDragOperation["none"] = 0] = "none";
1995
+ EDragOperation[EDragOperation["createEvent"] = 1] = "createEvent";
1996
+ EDragOperation[EDragOperation["resizeEvent"] = 2] = "resizeEvent";
1997
+ EDragOperation[EDragOperation["moveEvent"] = 3] = "moveEvent";
1998
+ })(EDragOperation || (EDragOperation = {}));
1999
+
2000
+ class BsTimelineService {
2001
+ splitInParts(event) {
2002
+ let startTime = event.start;
2003
+ const result = [];
2004
+ const eventOrNull = 'color' in event ? event : null;
2005
+ while (!this.dateEquals(startTime, event.end)) {
2006
+ const end = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate() + 1, 0, 0, 0);
2007
+ result.push({ start: startTime, end: end, event: eventOrNull });
2008
+ startTime = end;
2009
+ }
2010
+ if (startTime != event.end) {
2011
+ result.push({ start: startTime, end: event.end, event: eventOrNull });
2012
+ }
2013
+ return { event: event, parts: result };
2014
+ }
2015
+ dateEquals(date1, date2) {
2016
+ return (date1.getFullYear() === date2.getFullYear() &&
2017
+ date1.getMonth() === date2.getMonth() &&
2018
+ date1.getDate() === date2.getDate());
2019
+ }
2020
+ getTimeline(events) {
2021
+ const timestamps = this.getTimestamps(events);
2022
+ const tracks = [];
2023
+ timestamps.forEach((timestamp, tIndex) => {
2024
+ const starting = events.filter((e) => e.start === timestamp);
2025
+ // const ending = events.filter((e) => e.end === timestamp);
2026
+ starting.forEach((startedEvent, eIndex) => {
2027
+ const freeTracks = tracks.filter(t => this.trackIsFreeAt(t, startedEvent));
2028
+ if (freeTracks.length === 0) {
2029
+ tracks.push({ index: tracks.length, events: [startedEvent] });
2030
+ }
2031
+ else {
2032
+ freeTracks[0].events.push(startedEvent);
2033
+ }
2034
+ });
2035
+ });
2036
+ return tracks;
2037
+ }
2038
+ getTimestamps(events) {
2039
+ const allTimestamps = events.map(e => [e.start, e.end])
2040
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2041
+ return allTimestamps
2042
+ .filter((t, i) => allTimestamps.indexOf(t) === i)
2043
+ .sort((t1, t2) => t1 - t2);
2044
+ }
2045
+ trackIsFreeAt(track, event) {
2046
+ if (track.events.every((ev) => (ev.end <= event.start) || (event.end <= ev.start))) {
2047
+ return true;
2048
+ }
2049
+ else {
2050
+ return false;
2051
+ }
2052
+ }
2053
+ }
2054
+ BsTimelineService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2055
+ BsTimelineService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, providedIn: 'root' });
2056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTimelineService, decorators: [{
2057
+ type: Injectable,
2058
+ args: [{
2059
+ providedIn: 'root'
2060
+ }]
2061
+ }] });
2062
+
2063
+ class BsSecondsTodayOffsetPipe {
2064
+ transform(value) {
2065
+ const today = new Date(value.start);
2066
+ today.setHours(0);
2067
+ today.setMinutes(0);
2068
+ today.setSeconds(0);
2069
+ return (value.start.getTime() - today.getTime()) / 1000;
2070
+ }
2071
+ }
2072
+ BsSecondsTodayOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2073
+ BsSecondsTodayOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, name: "bsSecondsTodayOffset" });
2074
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{
2075
+ type: Pipe,
2076
+ args: [{
2077
+ name: 'bsSecondsTodayOffset'
2078
+ }]
2079
+ }] });
2080
+
2081
+ class BsSecondsTimespanPipe {
2082
+ transform(value) {
2083
+ return (value.end.getTime() - value.start.getTime()) / 1000;
2084
+ }
2085
+ }
2086
+ BsSecondsTimespanPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2087
+ BsSecondsTimespanPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, name: "bsSecondsTimespan" });
2088
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{
2089
+ type: Pipe,
2090
+ args: [{
2091
+ name: 'bsSecondsTimespan'
2092
+ }]
2093
+ }] });
2094
+
2095
+ class DayOfWeekPipe {
2096
+ transform(value) {
2097
+ const dayOfWeek = value.start.getDay();
2098
+ if (dayOfWeek === 0) {
2099
+ return 7;
2100
+ }
2101
+ else {
2102
+ return dayOfWeek;
2103
+ }
2104
+ }
2105
+ }
2106
+ DayOfWeekPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2107
+ DayOfWeekPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, name: "dayOfWeek" });
2108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DayOfWeekPipe, decorators: [{
2109
+ type: Pipe,
2110
+ args: [{
2111
+ name: 'dayOfWeek'
2112
+ }]
2113
+ }] });
2114
+
2115
+ class BsSchedulerComponent {
2116
+ constructor(calendarMonthService, timelineService) {
2117
+ this.calendarMonthService = calendarMonthService;
2118
+ this.timelineService = timelineService;
2119
+ this.events$ = new BehaviorSubject([]);
2120
+ this.previewEvent$ = new BehaviorSubject(null);
2121
+ this.timeSlotDuration$ = new BehaviorSubject(1800);
2122
+ this.timeSlots$ = new BehaviorSubject([]);
2123
+ // timeSlots$: Observable<TimeSlot[][]>;
2124
+ this.mouseState$ = new BehaviorSubject(false);
2125
+ this.hoveredTimeSlot$ = new BehaviorSubject(null);
2126
+ this.destroyed$ = new Subject();
2127
+ //#region UnitHeight
2128
+ this.unitHeight$ = new BehaviorSubject(40);
2129
+ this.unitHeightChange = new EventEmitter();
2130
+ this.operation = null;
2131
+ this.dragStartTimeslot = null;
2132
+ const monday = this.calendarMonthService.getMondayBefore(new Date());
2133
+ this.currentWeek$ = new BehaviorSubject(monday);
2134
+ this.daysOfWeek$ = this.currentWeek$.pipe(map((weekMonday) => {
2135
+ weekMonday.setHours(0);
2136
+ weekMonday.setMinutes(0);
2137
+ weekMonday.setSeconds(0);
2138
+ weekMonday.setMilliseconds(0);
2139
+ return Array.from(Array(7).keys()).map((x) => this.addDays(weekMonday, x));
2140
+ }));
2141
+ this.daysOfWeekWithTimestamps$ = this.daysOfWeek$
2142
+ .pipe(map((daysOfWeek) => {
2143
+ return { start: daysOfWeek[0].getTime(), end: daysOfWeek[daysOfWeek.length - 1].getTime() + 24 * 60 * 60 * 1000 };
2144
+ }));
2145
+ this.eventParts$ = this.events$.pipe(map((events) => events.map((ev) => this.timelineService.splitInParts(ev))));
2146
+ this.eventPartsForThisWeek$ = combineLatest([
2147
+ this.daysOfWeekWithTimestamps$,
2148
+ this.eventParts$
2149
+ .pipe(map(eventParts => eventParts.map(evp => evp.parts)))
2150
+ .pipe(map(jaggedParts => {
2151
+ return jaggedParts.reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2152
+ }))
2153
+ ])
2154
+ .pipe(map(([startAndEnd, eventParts]) => {
2155
+ return eventParts.filter(eventPart => {
2156
+ return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));
2157
+ });
2158
+ }));
2159
+ this.previewEventParts$ = this.previewEvent$.pipe(map((event) => {
2160
+ if (event) {
2161
+ return this.timelineService.splitInParts(event);
2162
+ }
2163
+ else {
2164
+ return null;
2165
+ }
2166
+ }));
2167
+ this.previewEventPartsForThisWeek$ = combineLatest([this.daysOfWeekWithTimestamps$, this.previewEventParts$])
2168
+ .pipe(map(([startAndEnd, previewEventParts]) => {
2169
+ if (previewEventParts) {
2170
+ return previewEventParts.parts.filter(eventPart => {
2171
+ return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));
2172
+ });
2173
+ }
2174
+ else {
2175
+ return [];
2176
+ }
2177
+ }));
2178
+ this.timelinedEventPartsForThisWeek$ = this.eventPartsForThisWeek$
2179
+ .pipe(map(eventParts => {
2180
+ // We'll only use the events for this week
2181
+ const events = eventParts.map(ep => ep.event)
2182
+ .filter((e, i, list) => list.indexOf(e) === i)
2183
+ .filter((e) => !!e)
2184
+ .map((e) => e);
2185
+ const timeline = this.timelineService.getTimeline(events);
2186
+ const result = timeline.map(track => {
2187
+ return track.events.map(ev => {
2188
+ return { event: ev, index: track.index };
2189
+ });
2190
+ })
2191
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), [])
2192
+ .map((evi) => eventParts.filter(p => p.event === evi.event).map(p => {
2193
+ return { part: p, index: evi.index };
2194
+ }))
2195
+ .reduce((flat, toFlatten) => flat.concat(toFlatten), []);
2196
+ return {
2197
+ total: timeline.length,
2198
+ parts: result
2199
+ };
2200
+ }));
2201
+ // this.timeSlots$ =
2202
+ combineLatest([this.daysOfWeek$, this.timeSlotDuration$])
2203
+ .pipe(map(([daysOfWeek, duration]) => {
2204
+ const timeSlotsPerDay = Math.floor((60 * 60 * 24) / duration);
2205
+ return Array.from(Array(timeSlotsPerDay).keys()).map((index) => {
2206
+ const timeSlotStart = new Date(daysOfWeek[0]);
2207
+ timeSlotStart.setTime(+timeSlotStart.getTime() + index * duration * 1000);
2208
+ const timeSlotEnd = new Date(timeSlotStart);
2209
+ timeSlotEnd.setTime(+timeSlotEnd.getTime() + duration * 1000);
2210
+ return daysOfWeek.map((day) => {
2211
+ const start = new Date(day);
2212
+ start.setHours(timeSlotStart.getHours());
2213
+ start.setMinutes(timeSlotStart.getMinutes());
2214
+ start.setSeconds(timeSlotStart.getSeconds());
2215
+ start.setMilliseconds(timeSlotStart.getMilliseconds());
2216
+ const end = new Date(day);
2217
+ end.setHours(timeSlotEnd.getHours());
2218
+ end.setMinutes(timeSlotEnd.getMinutes());
2219
+ end.setSeconds(timeSlotEnd.getSeconds());
2220
+ end.setMilliseconds(timeSlotEnd.getMilliseconds());
2221
+ end.setDate(end.getDate() + timeSlotEnd.getDate() - timeSlotStart.getDate());
2222
+ return { start, end };
2223
+ });
2224
+ });
2225
+ }))
2226
+ .subscribe((timeslots) => {
2227
+ // For performance reasons, we're not using an observable here, but persist the timeslots in a BehaviorSubject.
2228
+ this.timeSlots$.next(timeslots);
2229
+ });
2230
+ this.unitHeight$
2231
+ .pipe(takeUntil(this.destroyed$))
2232
+ .subscribe((unitHeight) => {
2233
+ this.unitHeightChange.emit(unitHeight);
2234
+ });
2235
+ }
2236
+ get unitHeight() {
2237
+ return this.unitHeight$.value;
2238
+ }
2239
+ set unitHeight(value) {
2240
+ this.unitHeight$.next(value);
2241
+ }
2242
+ //#endregion
2243
+ addDays(date, days) {
2244
+ const result = new Date(date);
2245
+ result.setDate(result.getDate() + days);
2246
+ return result;
2247
+ }
2248
+ onPreviousWeek() {
2249
+ this.currentWeek$
2250
+ .pipe(map((w) => this.addDays(w, -7)), take(1))
2251
+ .subscribe((w) => this.currentWeek$.next(w));
2252
+ }
2253
+ onNextWeek() {
2254
+ this.currentWeek$
2255
+ .pipe(map((w) => this.addDays(w, 7)), take(1))
2256
+ .subscribe((w) => this.currentWeek$.next(w));
2257
+ }
2258
+ onCreateEvent(ev, slot) {
2259
+ ev.preventDefault();
2260
+ this.mouseState$.next(true);
2261
+ this.dragStartTimeslot = slot;
2262
+ this.operation = {
2263
+ operation: EDragOperation.createEvent,
2264
+ event: {
2265
+ start: slot.start,
2266
+ end: slot.end,
2267
+ color: '#F00',
2268
+ description: 'Test event',
2269
+ }
2270
+ };
2271
+ this.previewEvent$.next({ start: slot.start, end: slot.end });
2272
+ }
2273
+ randomColor() {
2274
+ const brightness = 128;
2275
+ return '#' + this.randomChannel(brightness) + this.randomChannel(brightness) + this.randomChannel(brightness);
2276
+ }
2277
+ randomChannel(brightness) {
2278
+ const r = 255 - brightness;
2279
+ const n = 0 | ((Math.random() * r) + brightness);
2280
+ const s = n.toString(16);
2281
+ return (s.length == 1) ? '0' + s : s;
2282
+ }
2283
+ onStartDragEvent(eventPart, ev) {
2284
+ ev.preventDefault();
2285
+ this.hoveredTimeSlot$.pipe(take(1)).subscribe((hoveredTimeSlot) => {
2286
+ if (eventPart.event) {
2287
+ this.dragStartTimeslot = hoveredTimeSlot;
2288
+ this.operation = {
2289
+ operation: EDragOperation.moveEvent,
2290
+ event: eventPart.event,
2291
+ };
2292
+ this.previewEvent$.next({ start: eventPart.event.start, end: eventPart.event.end });
2293
+ }
2294
+ });
2295
+ }
2296
+ //#region hoveredTimeslot$
2297
+ getHoveredTimeslot(ev, timeSlots) {
2298
+ const hoveredSlots = this.timeSlotElements.filter((el) => {
2299
+ const rct = el.nativeElement.getBoundingClientRect();
2300
+ if (rct.left <= ev.x && ev.x <= rct.right && rct.top <= ev.y && ev.y <= rct.bottom) {
2301
+ return true;
2302
+ }
2303
+ else {
2304
+ return false;
2305
+ }
2306
+ });
2307
+ if (!hoveredSlots || hoveredSlots.length === 0) {
2308
+ return null;
2309
+ }
2310
+ const slotElement = hoveredSlots[0].nativeElement;
2311
+ const strRow = slotElement.getAttribute('data-row');
2312
+ if (!strRow) {
2313
+ return null;
2314
+ }
2315
+ const row = parseInt(strRow);
2316
+ const strColumn = slotElement.getAttribute('data-column');
2317
+ if (!strColumn) {
2318
+ return null;
2319
+ }
2320
+ const column = parseInt(strColumn);
2321
+ const slot = timeSlots[row][column];
2322
+ return slot;
2323
+ }
2324
+ onMousemove(ev) {
2325
+ this.timeSlots$.pipe(take(1)).subscribe((timeSlots) => {
2326
+ const hovered = this.getHoveredTimeslot(ev, timeSlots);
2327
+ this.hoveredTimeSlot$.next(hovered);
2328
+ if (this.operation) {
2329
+ switch (this.operation.operation) {
2330
+ case EDragOperation.createEvent:
2331
+ {
2332
+ if (this.operation.event && this.dragStartTimeslot && hovered && (this.operation.event.end.getTime() != hovered.end.getTime())) {
2333
+ if (this.dragStartTimeslot.start.getTime() === hovered.start.getTime()) {
2334
+ // 1 slot
2335
+ }
2336
+ else if (this.dragStartTimeslot.start.getTime() < hovered.start.getTime()) {
2337
+ // Drag down
2338
+ this.previewEvent$
2339
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2340
+ .pipe(map((ev) => {
2341
+ if (ev && this.dragStartTimeslot) {
2342
+ ev.start = this.dragStartTimeslot.start;
2343
+ ev.end = hovered.end;
2344
+ }
2345
+ return ev;
2346
+ }))
2347
+ .pipe(take(1))
2348
+ .subscribe((ev) => this.previewEvent$.next(ev));
2349
+ }
2350
+ else if (this.dragStartTimeslot.start.getTime() > hovered.start.getTime()) {
2351
+ // Drag up
2352
+ this.previewEvent$
2353
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2354
+ .pipe(map((ev) => {
2355
+ if (ev && this.dragStartTimeslot) {
2356
+ ev.start = hovered.start;
2357
+ ev.end = this.dragStartTimeslot.end;
2358
+ }
2359
+ return ev;
2360
+ }))
2361
+ .pipe(take(1))
2362
+ .subscribe((ev) => this.previewEvent$.next(ev));
2363
+ }
2364
+ }
2365
+ }
2366
+ break;
2367
+ case EDragOperation.moveEvent:
2368
+ {
2369
+ if (hovered && this.dragStartTimeslot) {
2370
+ // this.operation.event.start.setTime(this.operation.event.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
2371
+ // this.operation.event.end.setTime(this.operation.event.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime());
2372
+ // this.dragStartTimeslot = hovered;
2373
+ // // this.events$.next(this.events$.value);
2374
+ this.previewEvent$
2375
+ .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))
2376
+ .pipe(map((ev) => {
2377
+ if (ev && this.dragStartTimeslot) {
2378
+ const result = {
2379
+ start: new Date(ev.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime()),
2380
+ end: new Date(ev.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime())
2381
+ };
2382
+ this.dragStartTimeslot = hovered;
2383
+ return result;
2384
+ }
2385
+ else {
2386
+ return ev;
2387
+ }
2388
+ }))
2389
+ .pipe(take(1))
2390
+ .subscribe((ev) => {
2391
+ this.previewEvent$.next(ev);
2392
+ });
2393
+ }
2394
+ }
2395
+ break;
2396
+ }
2397
+ }
2398
+ });
2399
+ }
2400
+ //#endregion
2401
+ onMouseUp(ev) {
2402
+ if (this.operation) {
2403
+ switch (this.operation.operation) {
2404
+ case EDragOperation.createEvent:
2405
+ {
2406
+ combineLatest([this.previewEvent$])
2407
+ .pipe(take(1))
2408
+ .subscribe(([previewEvent]) => {
2409
+ if (previewEvent) {
2410
+ this.operation = null;
2411
+ this.dragStartTimeslot = null;
2412
+ this.events$.next([...this.events$.value, {
2413
+ start: previewEvent.start,
2414
+ end: previewEvent.end,
2415
+ color: this.randomColor(),
2416
+ description: 'New event'
2417
+ }]);
2418
+ this.previewEvent$.next(null);
2419
+ }
2420
+ });
2421
+ }
2422
+ break;
2423
+ case EDragOperation.moveEvent:
2424
+ {
2425
+ this.previewEvent$
2426
+ .pipe(filter((ev) => !!ev))
2427
+ .pipe(take(1))
2428
+ .subscribe((previewEvent) => {
2429
+ if (this.operation && this.operation.event && previewEvent) {
2430
+ this.operation.event.start = previewEvent.start;
2431
+ this.operation.event.end = previewEvent.end;
2432
+ this.operation = null;
2433
+ this.dragStartTimeslot = null;
2434
+ this.events$.next(this.events$.value);
2435
+ this.previewEvent$.next(null);
2436
+ }
2437
+ });
2438
+ }
2439
+ break;
2440
+ }
2441
+ }
2442
+ }
2443
+ ngOnDestroy() {
2444
+ this.destroyed$.next(true);
2445
+ }
2446
+ }
2447
+ 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 });
2448
+ 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 } });
2449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerComponent, decorators: [{
2450
+ type: Component,
2451
+ 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"] }]
2452
+ }], ctorParameters: function () { return [{ type: BsCalendarMonthService }, { type: BsTimelineService }]; }, propDecorators: { timeSlotElements: [{
2453
+ type: ViewChildren,
2454
+ args: ['slot']
2455
+ }], unitHeightChange: [{
2456
+ type: Output
2457
+ }], unitHeight: [{
2458
+ type: Input
2459
+ }], onMousemove: [{
2460
+ type: HostListener,
2461
+ args: ['document:mousemove', ['$event']]
2462
+ }], onMouseUp: [{
2463
+ type: HostListener,
2464
+ args: ['document:mouseup', ['$event']]
2465
+ }] } });
2466
+
2467
+ class DateOffsetPipe {
2468
+ transform(value) {
2469
+ const today = new Date(value.start);
2470
+ today.setHours(0);
2471
+ today.setMinutes(0);
2472
+ today.setSeconds(0);
2473
+ return (value.start.getTime() - today.getTime()) / 1000;
2474
+ }
2475
+ }
2476
+ DateOffsetPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2477
+ DateOffsetPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, name: "dateOffset" });
2478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DateOffsetPipe, decorators: [{
2479
+ type: Pipe,
2480
+ args: [{
2481
+ name: 'dateOffset'
2482
+ }]
2483
+ }] });
2484
+
2485
+ class BsSchedulerModule {
2486
+ }
2487
+ BsSchedulerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2488
+ BsSchedulerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, declarations: [BsSchedulerComponent,
2489
+ BsSecondsTimespanPipe,
2490
+ BsSecondsTodayOffsetPipe,
2491
+ DateOffsetPipe,
2492
+ DayOfWeekPipe], imports: [CommonModule], exports: [BsSchedulerComponent] });
2493
+ BsSchedulerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, imports: [[
2494
+ CommonModule
2495
+ ]] });
2496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSchedulerModule, decorators: [{
2497
+ type: NgModule,
2498
+ args: [{
2499
+ declarations: [
2500
+ BsSchedulerComponent,
2501
+ BsSecondsTimespanPipe,
2502
+ BsSecondsTodayOffsetPipe,
2503
+ DateOffsetPipe,
2504
+ DayOfWeekPipe
2505
+ ],
2506
+ imports: [
2507
+ CommonModule
2508
+ ],
2509
+ exports: [
2510
+ BsSchedulerComponent
2511
+ ]
2512
+ }]
2513
+ }] });
2514
+
1994
2515
  class BsListGroupItemComponent {
1995
2516
  constructor() {
1996
2517
  }
@@ -2177,7 +2698,6 @@ class BsModalService {
2177
2698
  hasBackdrop: true
2178
2699
  });
2179
2700
  const componentInstance = overlayRef.attach(portal);
2180
- console.log('instance', componentInstance);
2181
2701
  componentInstance.instance['instance'] = {
2182
2702
  component: componentInstance,
2183
2703
  overlay: overlayRef
@@ -3572,5 +4092,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
3572
4092
  * Generated bundle index. Do not edit.
3573
4093
  */
3574
4094
 
3575
- 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 };
4095
+ 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 };
3576
4096
  //# sourceMappingURL=mintplayer-ng-bootstrap.mjs.map