@mintplayer/ng-bootstrap 20.6.1 → 20.6.3
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.
- package/dock/index.d.ts +19 -0
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-accordion.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-alert.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-badge.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-breadcrumb.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-button-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-button-type.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs +9 -9
- package/fesm2022/mintplayer-ng-bootstrap-calendar-month.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-calendar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-card.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-card.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-close.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-code-snippet.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +28 -28
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-container.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-context-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-copy.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-copy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs +769 -15
- package/fesm2022/mintplayer-ng-bootstrap-dock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-divider.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-dropdown-menu.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-dropdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-enhanced-paste.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-enum.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-enum.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-floating-labels.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-font-color.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-for.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-for.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-form.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-form.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs +19 -19
- package/fesm2022/mintplayer-ng-bootstrap-grid.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-id.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-has-overlay.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-has-property.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-in-list.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-input-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-instance-of.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-let.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-linify.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-linify.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-list-group.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs +12 -12
- package/fesm2022/mintplayer-ng-bootstrap-markdown.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-marquee.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs +25 -25
- package/fesm2022/mintplayer-ng-bootstrap-modal.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-multiselect.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-navbar-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +31 -31
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-navigation-lock.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-no-noscript.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs +157 -203
- package/fesm2022/mintplayer-ng-bootstrap-offcanvas.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-ordinal-number.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-pagination.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-parallax.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-placeholder.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-playlist-toggler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-popover.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-range.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-rating.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-resizable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs +25 -25
- package/fesm2022/mintplayer-ng-bootstrap-scheduler.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-scrollspy.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs +16 -16
- package/fesm2022/mintplayer-ng-bootstrap-searchbox.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-select.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-shell.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-slugify.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-split-string.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-splitter.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-sticky-footer.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-tab-control.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-table.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs +25 -25
- package/fesm2022/mintplayer-ng-bootstrap-toast.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs +13 -13
- package/fesm2022/mintplayer-ng-bootstrap-toggle-button.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-tooltip.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs +10 -10
- package/fesm2022/mintplayer-ng-bootstrap-treeview.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-trust-html.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-uc-first.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-user-agent.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs +3 -3
- package/fesm2022/mintplayer-ng-bootstrap-word-count.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap.mjs.map +1 -1
- package/offcanvas/index.d.ts +41 -59
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-scheduler.mjs","sources":["../tmp-esm2022/scheduler/src/enums/scheduler-mode.js","../tmp-esm2022/scheduler/src/enums/drag-operation.js","../tmp-esm2022/scheduler/src/services/timeline/timeline.service.js","../tmp-esm2022/scheduler/src/components/resource-group-presenter/resource-group-presenter.component.js","../tmp-esm2022/scheduler/src/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.js","../tmp-esm2022/scheduler/src/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.js","../tmp-esm2022/scheduler/src/pipes/day-of-week/day-of-week.pipe.js","../tmp-esm2022/scheduler/src/components/scheduler/scheduler.component.js","../tmp-esm2022/scheduler/src/constants/available-scales.js","../tmp-esm2022/scheduler/src/pipes/date-offset/date-offset.pipe.js","../tmp-esm2022/scheduler/src/scheduler.module.js","../tmp-esm2022/scheduler/mintplayer-ng-bootstrap-scheduler.js"],"sourcesContent":["export var ESchedulerMode;\n(function (ESchedulerMode) {\n ESchedulerMode[ESchedulerMode[\"week\"] = 0] = \"week\";\n ESchedulerMode[ESchedulerMode[\"timeline\"] = 1] = \"timeline\";\n})(ESchedulerMode || (ESchedulerMode = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLW1vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NjaGVkdWxlci9zcmMvZW51bXMvc2NoZWR1bGVyLW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN0QixtREFBSSxDQUFBO0lBQ0osMkRBQVEsQ0FBQTtBQUNaLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVTY2hlZHVsZXJNb2RlIHtcbiAgICB3ZWVrLFxuICAgIHRpbWVsaW5lXG59Il19","export var EDragOperation;\n(function (EDragOperation) {\n EDragOperation[EDragOperation[\"none\"] = 0] = \"none\";\n EDragOperation[EDragOperation[\"createEvent\"] = 1] = \"createEvent\";\n EDragOperation[EDragOperation[\"resizeEvent\"] = 2] = \"resizeEvent\";\n EDragOperation[EDragOperation[\"moveEvent\"] = 3] = \"moveEvent\";\n})(EDragOperation || (EDragOperation = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1vcGVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21pbnRwbGF5ZXItbmctYm9vdHN0cmFwL3NjaGVkdWxlci9zcmMvZW51bXMvZHJhZy1vcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN0QixtREFBSSxDQUFBO0lBQ0osaUVBQVcsQ0FBQTtJQUNYLGlFQUFXLENBQUE7SUFDWCw2REFBUyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsS0FBZCxjQUFjLFFBS3pCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gRURyYWdPcGVyYXRpb24ge1xuICAgIG5vbmUsXG4gICAgY3JlYXRlRXZlbnQsXG4gICAgcmVzaXplRXZlbnQsXG4gICAgbW92ZUV2ZW50LFxufSJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BsTimelineService {\n splitInParts(event) {\n let startTime = event.start;\n const result = [];\n const eventOrNull = 'color' in event ? event : null;\n while (!this.dateEquals(startTime, event.end)) {\n const end = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate() + 1, 0, 0, 0);\n result.push({ start: startTime, end: end, event: eventOrNull });\n startTime = end;\n }\n if (startTime != event.end) {\n result.push({ start: startTime, end: event.end, event: eventOrNull });\n }\n return { event: event, parts: result };\n }\n dateEquals(date1, date2) {\n return (date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate());\n }\n getTimeline(events) {\n const timestamps = this.getTimestamps(events);\n const tracks = [];\n timestamps.forEach((timestamp, tIndex) => {\n const starting = events.filter((e) => e.start === timestamp);\n // const ending = events.filter((e) => e.end === timestamp);\n starting.forEach((startedEvent, eIndex) => {\n const freeTracks = tracks.filter(t => this.trackIsFreeAt(t, startedEvent));\n if (freeTracks.length === 0) {\n tracks.push({ index: tracks.length, events: [startedEvent] });\n }\n else {\n freeTracks[0].events.push(startedEvent);\n }\n });\n });\n return tracks;\n }\n getTimestamps(events) {\n const allTimestamps = events.map(e => [e.start, e.end])\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n return allTimestamps\n .filter((t, i) => allTimestamps.indexOf(t) === i)\n .sort((t1, t2) => t1 - t2);\n }\n trackIsFreeAt(track, event) {\n if (track.events.every((ev) => (ev.end <= event.start) || (event.end <= ev.start))) {\n return true;\n }\n else {\n return false;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsTimelineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsTimelineService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsTimelineService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9zZXJ2aWNlcy90aW1lbGluZS90aW1lbGluZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFFckIsWUFBWSxDQUFDLEtBQW9DO1FBQ3RELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQXlCLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNoRSxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFT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QzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOzhHQTlEVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJldmlld0V2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wcmV2aWV3LWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudFdpdGhQYXJ0cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXdpdGgtcGFydHMnO1xuaW1wb3J0IHsgVGltZWxpbmVUcmFjayB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGltZWxpbmUtdHJhY2snO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCc1RpbWVsaW5lU2VydmljZSB7XG5cbiAgcHVibGljIHNwbGl0SW5QYXJ0cyhldmVudDogU2NoZWR1bGVyRXZlbnQgfCBQcmV2aWV3RXZlbnQpIHtcbiAgICBsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQ7XG4gICAgY29uc3QgcmVzdWx0OiBTY2hlZHVsZXJFdmVudFBhcnRbXSA9IFtdO1xuICAgIGNvbnN0IGV2ZW50T3JOdWxsID0gJ2NvbG9yJyBpbiBldmVudCA/IGV2ZW50IDogbnVsbDtcbiAgICB3aGlsZSAoIXRoaXMuZGF0ZUVxdWFscyhzdGFydFRpbWUsIGV2ZW50LmVuZCkpIHtcbiAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHN0YXJ0VGltZS5nZXRGdWxsWWVhcigpLCBzdGFydFRpbWUuZ2V0TW9udGgoKSwgc3RhcnRUaW1lLmdldERhdGUoKSArIDEsIDAsIDAsIDApO1xuICAgICAgcmVzdWx0LnB1c2goeyBzdGFydDogc3RhcnRUaW1lLCBlbmQ6IGVuZCwgZXZlbnQ6IGV2ZW50T3JOdWxsIH0pO1xuICAgICAgc3RhcnRUaW1lID0gZW5kO1xuICAgIH1cbiAgICBpZiAoc3RhcnRUaW1lICE9IGV2ZW50LmVuZCkge1xuICAgICAgcmVzdWx0LnB1c2goeyBzdGFydDogc3RhcnRUaW1lLCBlbmQ6IGV2ZW50LmVuZCwgZXZlbnQ6IGV2ZW50T3JOdWxsIH0pO1xuICAgIH1cblxuICAgIHJldHVybiA8U2NoZWR1bGVyRXZlbnRXaXRoUGFydHM+eyBldmVudDogZXZlbnQsIHBhcnRzOiByZXN1bHQgfTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBkYXRlRXF1YWxzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICBkYXRlMS5nZXRGdWxsWWVhcigpID09PSBkYXRlMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpICYmXG4gICAgICBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZWxpbmUoZXZlbnRzOiBTY2hlZHVsZXJFdmVudFtdKSB7XG4gICAgY29uc3QgdGltZXN0YW1wcyA9IHRoaXMuZ2V0VGltZXN0YW1wcyhldmVudHMpO1xuICAgIGNvbnN0IHRyYWNrczogVGltZWxpbmVUcmFja1tdID0gW107XG5cbiAgICB0aW1lc3RhbXBzLmZvckVhY2goKHRpbWVzdGFtcCwgdEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGFydGluZyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuc3RhcnQgPT09IHRpbWVzdGFtcCk7XG4gICAgICAvLyBjb25zdCBlbmRpbmcgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZCA9PT0gdGltZXN0YW1wKTtcblxuICAgICAgc3RhcnRpbmcuZm9yRWFjaCgoc3RhcnRlZEV2ZW50LCBlSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZnJlZVRyYWNrcyA9IHRyYWNrcy5maWx0ZXIodCA9PiB0aGlzLnRyYWNrSXNGcmVlQXQodCwgc3RhcnRlZEV2ZW50KSk7XG4gICAgICAgIGlmIChmcmVlVHJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRyYWNrcy5wdXNoKHsgaW5kZXg6IHRyYWNrcy5sZW5ndGgsIGV2ZW50czogW3N0YXJ0ZWRFdmVudF0gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZnJlZVRyYWNrc1swXS5ldmVudHMucHVzaChzdGFydGVkRXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cmFja3M7XG4gIH1cblxuICBwcml2YXRlIGdldFRpbWVzdGFtcHMoZXZlbnRzOiBTY2hlZHVsZXJFdmVudFtdKSB7XG4gICAgY29uc3QgYWxsVGltZXN0YW1wcyA9IGV2ZW50cy5tYXAoZSA9PiBbZS5zdGFydCwgZS5lbmRdKVxuICAgICAgLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSk7XG4gICAgXG4gICAgcmV0dXJuIGFsbFRpbWVzdGFtcHNcbiAgICAgIC5maWx0ZXIoKHQsIGkpID0+IGFsbFRpbWVzdGFtcHMuaW5kZXhPZih0KSA9PT0gaSlcbiAgICAgIC5zb3J0KCh0MSwgdDIpID0+IDxhbnk+dDEgLSA8YW55PnQyKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhY2tJc0ZyZWVBdCh0cmFjazogVGltZWxpbmVUcmFjaywgZXZlbnQ6IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgaWYgKHRyYWNrLmV2ZW50cy5ldmVyeSgoZXYpID0+IChldi5lbmQgPD0gZXZlbnQuc3RhcnQpIHx8IChldmVudC5lbmQgPD0gZXYuc3RhcnQpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxufVxuIl19","import { Component, Input } from '@angular/core';\nimport { BehaviorSubject, filter, map } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/platform-browser\";\nimport * as i2 from \"@angular/common\";\nexport class ResourceGroupPresenterComponent {\n constructor(sanitizer) {\n this.sanitizer = sanitizer;\n this.level = 0;\n this.resourceOrGroup$ = new BehaviorSubject(null);\n this.timeSlots$ = new BehaviorSubject([]);\n this.isExpanded$ = new BehaviorSubject(false);\n this.data$ = this.resourceOrGroup$\n .pipe(map((resourceOrGroup) => {\n if (!resourceOrGroup) {\n return null;\n }\n else if ('children' in resourceOrGroup) {\n return {\n resource: null,\n resourceGroup: resourceOrGroup\n };\n }\n else {\n return {\n resource: resourceOrGroup,\n resourceGroup: null\n };\n }\n }))\n .pipe(filter((resourceOrGroup) => !!resourceOrGroup))\n .pipe(map((resourceOrGroup) => resourceOrGroup));\n this.colSpan$ = this.timeSlots$\n .pipe(map(timeSlots => timeSlots\n .map(timeslot => timeslot.slots.length)\n .reduce((sum, current) => sum + current, 0)));\n import('bootstrap-icons/icons/chevron-down.svg').then((icon) => {\n this.chevronDown = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n import('bootstrap-icons/icons/chevron-right.svg').then((icon) => {\n this.chevronRight = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n }\n //#region resourceOrGroup\n get resourceOrGroup() {\n return this.resourceOrGroup$.value;\n }\n set resourceGroup(value) {\n this.resourceOrGroup$.next(value);\n }\n //#endregion\n //#region timeSlots\n get timeSlots() {\n return this.timeSlots$.value;\n }\n set timeSlots(value) {\n this.timeSlots$.next(value);\n }\n //#endregion\n //#region isExpanded\n get isExpanded() {\n return this.isExpanded$.value;\n }\n set isExpanded(value) {\n this.isExpanded$.next(value);\n }\n //#endregion\n toggleExpanded() {\n this.isExpanded$.next(!this.isExpanded$.value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ResourceGroupPresenterComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: ResourceGroupPresenterComponent, isStandalone: false, selector: \"bs-resource-group-presenter\", inputs: { level: \"level\", resourceGroup: \"resourceGroup\", timeSlots: \"timeSlots\", isExpanded: \"isExpanded\" }, ngImport: i0, template: \"@if (data$ | async; as data) {\\n\\n <!-- Data is a resource group -->\\n @if (data.resourceGroup) {\\n <!-- Header -->\\n @if (timeSlots$ | async; as timeSlots) {\\n <tr class=\\\"p-0 cursor-pointer\\\" [title]=\\\"data.resourceGroup.description\\\">\\n @if (colSpan$ | async; as colspan) {\\n <td class=\\\"p-2 cursor-pointer\\\" [colSpan]=\\\"colspan + 1\\\" (click)=\\\"toggleExpanded()\\\">\\n <span class=\\\"p-2 align-middle position-sticky\\\">\\n @if (isExpanded$ | async) {\\n <span [innerHTML]=\\\"chevronDown\\\" [style.padding-left.px]=\\\"level * 20\\\"></span>\\n } @else {\\n <span [innerHTML]=\\\"chevronRight\\\" [style.padding-left.px]=\\\"level * 20\\\"></span>\\n }\\n {{ data.resourceGroup.description }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n\\n <!-- Subgroups or resources -->\\n @if (isExpanded$ | async) {\\n @if (timeSlots$ | async; as timeSlots) {\\n @for (child of data.resourceGroup.children; track child) {\\n <bs-resource-group-presenter [resourceGroup]=\\\"child\\\" [timeSlots]=\\\"timeSlots\\\" [level]=\\\"level + 1\\\"></bs-resource-group-presenter>\\n }\\n }\\n }\\n }\\n\\n <!-- Data is a resource -->\\n @if (data.resource) {\\n <tr class=\\\"p-0 bordered\\\" [title]=\\\"data.resource.description\\\">\\n <td class=\\\"p-0 bg-white\\\">\\n <div class=\\\"p-2\\\">{{ data.resource.description }}</div>\\n </td>\\n @for (slots of (timeSlots$ | async); track $index) {\\n @for (slot of slots.slots; track slot) {\\n <td class=\\\"bg-white border-1\\\">\\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\\n </td>\\n }\\n }\\n </tr>\\n }\\n}\", styles: [\":host{display:contents}tr{border-bottom-width:1px}tr:not(.bordered) td span.position-sticky{left:0;right:0}\\n\"], dependencies: [{ kind: \"component\", type: ResourceGroupPresenterComponent, selector: \"bs-resource-group-presenter\", inputs: [\"level\", \"resourceGroup\", \"timeSlots\", \"isExpanded\"] }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: ResourceGroupPresenterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-resource-group-presenter', standalone: false, template: \"@if (data$ | async; as data) {\\n\\n <!-- Data is a resource group -->\\n @if (data.resourceGroup) {\\n <!-- Header -->\\n @if (timeSlots$ | async; as timeSlots) {\\n <tr class=\\\"p-0 cursor-pointer\\\" [title]=\\\"data.resourceGroup.description\\\">\\n @if (colSpan$ | async; as colspan) {\\n <td class=\\\"p-2 cursor-pointer\\\" [colSpan]=\\\"colspan + 1\\\" (click)=\\\"toggleExpanded()\\\">\\n <span class=\\\"p-2 align-middle position-sticky\\\">\\n @if (isExpanded$ | async) {\\n <span [innerHTML]=\\\"chevronDown\\\" [style.padding-left.px]=\\\"level * 20\\\"></span>\\n } @else {\\n <span [innerHTML]=\\\"chevronRight\\\" [style.padding-left.px]=\\\"level * 20\\\"></span>\\n }\\n {{ data.resourceGroup.description }}\\n </span>\\n </td>\\n }\\n </tr>\\n }\\n\\n <!-- Subgroups or resources -->\\n @if (isExpanded$ | async) {\\n @if (timeSlots$ | async; as timeSlots) {\\n @for (child of data.resourceGroup.children; track child) {\\n <bs-resource-group-presenter [resourceGroup]=\\\"child\\\" [timeSlots]=\\\"timeSlots\\\" [level]=\\\"level + 1\\\"></bs-resource-group-presenter>\\n }\\n }\\n }\\n }\\n\\n <!-- Data is a resource -->\\n @if (data.resource) {\\n <tr class=\\\"p-0 bordered\\\" [title]=\\\"data.resource.description\\\">\\n <td class=\\\"p-0 bg-white\\\">\\n <div class=\\\"p-2\\\">{{ data.resource.description }}</div>\\n </td>\\n @for (slots of (timeSlots$ | async); track $index) {\\n @for (slot of slots.slots; track slot) {\\n <td class=\\\"bg-white border-1\\\">\\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\\n </td>\\n }\\n }\\n </tr>\\n }\\n}\", styles: [\":host{display:contents}tr{border-bottom-width:1px}tr:not(.bordered) td span.position-sticky{left:0;right:0}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { level: [{\n type: Input\n }], resourceGroup: [{\n type: Input\n }], timeSlots: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7QUFZaEUsTUFBTSxPQUFPLCtCQUErQjtJQUUxQyxZQUFvQixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBb0NsQyxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFrQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUF0Q2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjthQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyQixPQUFPLElBQUksQ0FBQztZQUNkLENB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bnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFJlc291cmNlR3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlc291cmNlT3JHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVzb3VyY2Utb3ItZ3JvdXAnO1xuaW1wb3J0IHsgU2NoZWR1bGVyU3RhbXBXaXRoU2xvdHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1zdGFtcC13aXRoLXNsb3RzJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnMtcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc291cmNlLWdyb3VwLXByZXNlbnRlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VHcm91cFByZXNlbnRlckNvbXBvbmVudCB7XG4gIFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgdGhpcy5kYXRhJCA9IHRoaXMucmVzb3VyY2VPckdyb3VwJFxuICAgICAgLnBpcGUobWFwKChyZXNvdXJjZU9yR3JvdXApID0+IHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZU9yR3JvdXApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICgnY2hpbGRyZW4nIGluIHJlc291cmNlT3JHcm91cCkge1xuICAgICAgICAgIHJldHVybiA8UmVzb3VyY2VPckdyb3VwPntcbiAgICAgICAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgICAgICAgcmVzb3VyY2VHcm91cDogcmVzb3VyY2VPckdyb3VwXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gPFJlc291cmNlT3JHcm91cD57XG4gICAgICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VPckdyb3VwLFxuICAgICAgICAgICAgcmVzb3VyY2VHcm91cDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pKVxuICAgICAgLnBpcGUoZmlsdGVyKChyZXNvdXJjZU9yR3JvdXApID0+ICEhcmVzb3VyY2VPckdyb3VwKSlcbiAgICAgIC5waXBlKG1hcCgocmVzb3VyY2VPckdyb3VwKSA9PiA8UmVzb3VyY2VPckdyb3VwPnJlc291cmNlT3JHcm91cCkpO1xuXG4gICAgdGhpcy5jb2xTcGFuJCA9IHRoaXMudGltZVNsb3RzJFxuICAgICAgLnBpcGUobWFwKHRpbWVTbG90cyA9PiB0aW1lU2xvdHNcbiAgICAgICAgLm1hcCh0aW1lc2xvdCA9PiB0aW1lc2xvdC5zbG90cy5sZW5ndGgpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudCwgMClcbiAgICAgICkpO1xuXG4gICAgaW1wb3J0KCdib290c3RyYXAtaWNvbnMvaWNvbnMvY2hldnJvbi1kb3duLnN2ZycpLnRoZW4oKGljb24pID0+IHtcbiAgICAgIHRoaXMuY2hldnJvbkRvd24gPSBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaWNvbi5kZWZhdWx0KTtcbiAgICB9KTtcbiAgICBpbXBvcnQoJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZycpLnRoZW4oKGljb24pID0+IHtcbiAgICAgIHRoaXMuY2hldnJvblJpZ2h0ID0gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGljb24uZGVmYXVsdCk7XG4gICAgfSk7XG4gIH1cblxuICBjaGV2cm9uRG93bj86IFNhZmVIdG1sO1xuICBjaGV2cm9uUmlnaHQ/OiBTYWZlSHRtbDtcbiAgQElucHV0KCkgbGV2ZWwgPSAwO1xuICByZXNvdXJjZU9yR3JvdXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXNvdXJjZSB8IFJlc291cmNlR3JvdXAgfCBudWxsPihudWxsKTtcbiAgdGltZVNsb3RzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NoZWR1bGVyU3RhbXBXaXRoU2xvdHNbXT4oW10pO1xuICBpc0V4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkYXRhJDogT2JzZXJ2YWJsZTxSZXNvdXJjZU9yR3JvdXA+O1xuICBjb2xTcGFuJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIC8vI3JlZ2lvbiByZXNvdXJjZU9yR3JvdXBcbiAgcHVibGljIGdldCByZXNvdXJjZU9yR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VPckdyb3VwJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHJlc291cmNlR3JvdXAodmFsdWU6IFJlc291cmNlIHwgUmVzb3VyY2VHcm91cCB8IG51bGwpIHtcbiAgICB0aGlzLnJlc291cmNlT3JHcm91cCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIHRpbWVTbG90c1xuICBwdWJsaWMgZ2V0IHRpbWVTbG90cygpIHtcbiAgICByZXR1cm4gdGhpcy50aW1lU2xvdHMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgdGltZVNsb3RzKHZhbHVlOiBTY2hlZHVsZXJTdGFtcFdpdGhTbG90c1tdKSB7XG4gICAgdGhpcy50aW1lU2xvdHMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBpc0V4cGFuZGVkXG4gIHB1YmxpYyBnZXQgaXNFeHBhbmRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHRvZ2dsZUV4cGFuZGVkKCkge1xuICAgIHRoaXMuaXNFeHBhbmRlZCQubmV4dCghdGhpcy5pc0V4cGFuZGVkJC52YWx1ZSk7XG4gIH1cblxufVxuIiwiQGlmIChkYXRhJCB8IGFzeW5jOyBhcyBkYXRhKSB7XG5cbiAgICA8IS0tIERhdGEgaXMgYSByZXNvdXJjZSBncm91cCAtLT5cbiAgICBAaWYgKGRhdGEucmVzb3VyY2VHcm91cCkge1xuICAgICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgICAgQGlmICh0aW1lU2xvdHMkIHwgYXN5bmM7IGFzIHRpbWVTbG90cykge1xuICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0wIGN1cnNvci1wb2ludGVyXCIgW3RpdGxlXT1cImRhdGEucmVzb3VyY2VHcm91cC5kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sU3BhbiQgfCBhc3luYzsgYXMgY29sc3Bhbikge1xuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXJcIiBbY29sU3Bhbl09XCJjb2xzcGFuICsgMVwiIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtMiBhbGlnbi1taWRkbGUgcG9zaXRpb24tc3RpY2t5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0V4cGFuZGVkJCB8IGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY2hldnJvbkRvd25cIiBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cImxldmVsICogMjBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY2hldnJvblJpZ2h0XCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJsZXZlbCAqIDIwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLnJlc291cmNlR3JvdXAuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBTdWJncm91cHMgb3IgcmVzb3VyY2VzIC0tPlxuICAgICAgICBAaWYgKGlzRXhwYW5kZWQkIHwgYXN5bmMpIHtcbiAgICAgICAgICAgIEBpZiAodGltZVNsb3RzJCB8IGFzeW5jOyBhcyB0aW1lU2xvdHMpIHtcbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBkYXRhLnJlc291cmNlR3JvdXAuY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxicy1yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIgW3Jlc291cmNlR3JvdXBdPVwiY2hpbGRcIiBbdGltZVNsb3RzXT1cInRpbWVTbG90c1wiIFtsZXZlbF09XCJsZXZlbCArIDFcIj48L2JzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8IS0tIERhdGEgaXMgYSByZXNvdXJjZSAtLT5cbiAgICBAaWYgKGRhdGEucmVzb3VyY2UpIHtcbiAgICAgICAgPHRyIGNsYXNzPVwicC0wIGJvcmRlcmVkXCIgW3RpdGxlXT1cImRhdGEucmVzb3VyY2UuZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMCBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj57eyBkYXRhLnJlc291cmNlLmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgQGZvciAoc2xvdHMgb2YgKHRpbWVTbG90cyQgfCBhc3luYyk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBmb3IgKHNsb3Qgb2Ygc2xvdHMuc2xvdHM7IHRyYWNrIHNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYmctd2hpdGUgYm9yZGVyLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgc2xvdC5zdGFydCB8IGRhdGU6ICdkZC9NTS95eXl5IEhIOm1tOnNzJyB9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgfVxufSJdfQ==","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BsSecondsTimespanPipe {\n transform(value) {\n return (value.end.getTime() - value.start.getTime()) / 1000;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTimespanPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTimespanPipe, isStandalone: false, name: \"bsSecondsTimespan\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTimespanPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'bsSecondsTimespan',\n standalone: false,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10aW1lc3Bhbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL3BpcGVzL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZS9icy1zZWNvbmRzLXRpbWVzcGFuLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBUXBELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsU0FBUyxDQUFDLEtBQTBDO1FBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDOUQsQ0FBQzs4R0FIVSxxQkFBcUI7NEdBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFKakMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixVQUFVLEVBQUUsS0FBSztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdic1NlY29uZHNUaW1lc3BhbicsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBCc1NlY29uZHNUaW1lc3BhblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBTY2hlZHVsZXJFdmVudFBhcnQgfCBTY2hlZHVsZXJFdmVudCkge1xuICAgIHJldHVybiAodmFsdWUuZW5kLmdldFRpbWUoKSAtIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSkgLyAxMDAwO1xuICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BsSecondsTodayOffsetPipe {\n transform(value) {\n const today = new Date(value.start);\n today.setHours(0);\n today.setMinutes(0);\n today.setSeconds(0);\n return (value.start.getTime() - today.getTime()) / 1000;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTodayOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTodayOffsetPipe, isStandalone: false, name: \"bsSecondsTodayOffset\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSecondsTodayOffsetPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'bsSecondsTodayOffset',\n standalone: false,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnMtc2Vjb25kcy10b2RheS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9waXBlcy9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQVFwRCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFNBQVMsQ0FBQyxLQUEwQztRQUNsRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMxRCxDQUFDOzhHQU5VLHdCQUF3Qjs0R0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRQYXJ0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zY2hlZHVsZXItZXZlbnQtcGFydCc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2JzU2Vjb25kc1RvZGF5T2Zmc2V0JyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEJzU2Vjb25kc1RvZGF5T2Zmc2V0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IFNjaGVkdWxlckV2ZW50UGFydCB8IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSh2YWx1ZS5zdGFydCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCk7IHRvZGF5LnNldE1pbnV0ZXMoMCk7IHRvZGF5LnNldFNlY29uZHMoMCk7XG5cbiAgICByZXR1cm4gKHZhbHVlLnN0YXJ0LmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAxMDAwO1xuICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class DayOfWeekPipe {\n transform(value) {\n const dayOfWeek = value.start.getDay();\n if (dayOfWeek === 0) {\n return 7;\n }\n else {\n return dayOfWeek;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DayOfWeekPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: DayOfWeekPipe, isStandalone: false, name: \"dayOfWeek\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DayOfWeekPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'dayOfWeek',\n standalone: false,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LW9mLXdlZWsucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9waXBlcy9kYXktb2Ytd2Vlay9kYXktb2Ytd2Vlay5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQVFwRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixTQUFTLENBQUMsS0FBMEM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7OEdBUlUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxXQUFXO29CQUNqQixVQUFVLEVBQUUsS0FBSztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdkYXlPZldlZWsnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgRGF5T2ZXZWVrUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IFNjaGVkdWxlckV2ZW50UGFydCB8IFNjaGVkdWxlckV2ZW50KSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gdmFsdWUuc3RhcnQuZ2V0RGF5KCk7XG4gICAgaWYgKGRheU9mV2VlayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXlPZldlZWs7XG4gICAgfVxuICB9XG59XG4iXX0=","/// <reference types=\"../../types\" />\nimport { Component, EventEmitter, HostListener, Input, Output, ViewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, combineLatest, filter, map, take } from 'rxjs';\nimport { ESchedulerMode } from '../../enums/scheduler-mode';\nimport { EDragOperation } from '../../enums/drag-operation';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/platform-browser\";\nimport * as i2 from \"@mintplayer/ng-bootstrap/calendar-month\";\nimport * as i3 from \"../../services/timeline/timeline.service\";\nimport * as i4 from \"../resource-group-presenter/resource-group-presenter.component\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"../../pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe\";\nimport * as i7 from \"../../pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe\";\nimport * as i8 from \"../../pipes/day-of-week/day-of-week.pipe\";\nexport class BsSchedulerComponent {\n constructor(sanitizer, calendarMonthService, timelineService, destroy) {\n this.sanitizer = sanitizer;\n this.calendarMonthService = calendarMonthService;\n this.timelineService = timelineService;\n this.destroy = destroy;\n this.resources$ = new BehaviorSubject([]);\n this.weekOptions$ = new BehaviorSubject({ unitHeight: 30 });\n this.timelineOptions$ = new BehaviorSubject({ unitWidth: 50 });\n this.previewEvent$ = new BehaviorSubject(null);\n this.timeSlotDuration$ = new BehaviorSubject(1800);\n this.timeSlots$ = new BehaviorSubject([]);\n this.mouseState$ = new BehaviorSubject(false);\n this.hoveredTimeSlot$ = new BehaviorSubject(null);\n this.hoveredEvent$ = new BehaviorSubject(null);\n this.resourceGroupPresenterCounter = 1;\n //#region Mode\n this.modes = ESchedulerMode;\n this.mode$ = new BehaviorSubject(ESchedulerMode.week);\n this.modeChange = new EventEmitter();\n //#endregion\n // //#region Scale\n // scale$ = new BehaviorSubject<SchedulerScale>(availableScales[4]);\n // @Output() public scaleChange = new EventEmitter<SchedulerScale>();\n // public get scale() {\n // return this.scale$.value;\n // }\n // @Input() public set scale(value: SchedulerScale) {\n // this.scale$.next(value);\n // }\n // //#endregion\n //#region WeekOptions\n this.weekOptionsChange = new EventEmitter();\n //#endregion\n //#region TimelineOptions\n this.timelineOptionsChange = new EventEmitter();\n //#endregion\n //#region maxInnerHeight\n this.maxInnerHeight = null;\n this.operation = null;\n this.dragStartTimeslot = null;\n const monday = this.calendarMonthService.getMondayBefore(new Date());\n this.currentWeekOrMonth$ = new BehaviorSubject(monday);\n this.shownDays$ = combineLatest([this.currentWeekOrMonth$, this.mode$])\n .pipe(map(([currentDay, mode]) => {\n currentDay.setHours(0);\n currentDay.setMinutes(0);\n currentDay.setSeconds(0);\n currentDay.setMilliseconds(0);\n switch (mode) {\n case ESchedulerMode.week: {\n return Array.from(Array(7).keys()).map((x) => this.addDays(currentDay, x));\n }\n case ESchedulerMode.timeline: {\n const firstDay = new Date(currentDay.getFullYear(), currentDay.getMonth(), 1);\n const daysOfMonth = new Date(currentDay.getFullYear(), currentDay.getMonth() + 1, 0).getDate();\n return Array.from(Array(daysOfMonth).keys()).map((x) => this.addDays(firstDay, x));\n }\n }\n }));\n this.daysOfWeekWithTimestamps$ = this.shownDays$\n .pipe(map((shownDays) => ({ start: shownDays[0].getTime(), end: shownDays[shownDays.length - 1].getTime() + 24 * 60 * 60 * 1000 })));\n this.events$ = this.resources$\n .pipe(map((resourcesOrGroups) => resourcesOrGroups.map(resOrGroup => this.getResourcesForGroup(resOrGroup))))\n .pipe(map(jaggedResources => jaggedResources.reduce((flat, toFlatten) => flat.concat(toFlatten), [])))\n .pipe(map(resources => resources.map(res => res.events)))\n .pipe(map(jaggedEvents => jaggedEvents.reduce((flat, toFlatten) => flat.concat(toFlatten), [])));\n // groups.reduce((flat, toFlatten) => flat.concat(toFlatten.children), [])\n this.eventParts$ = this.events$.pipe(map((events) => events.map((ev) => this.timelineService.splitInParts(ev))));\n this.eventPartsForThisWeek$ = combineLatest([\n this.daysOfWeekWithTimestamps$,\n this.eventParts$\n .pipe(map(eventParts => eventParts.map(evp => evp.parts)))\n .pipe(map(jaggedParts => jaggedParts.reduce((flat, toFlatten) => flat.concat(toFlatten), [])))\n ])\n .pipe(map(([startAndEnd, eventParts]) => {\n return eventParts.filter(eventPart => {\n return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));\n });\n }));\n this.previewEventParts$ = this.previewEvent$.pipe(map((event) => {\n if (event) {\n return this.timelineService.splitInParts(event);\n }\n else {\n return null;\n }\n }));\n this.previewEventPartsForThisWeek$ = combineLatest([this.daysOfWeekWithTimestamps$, this.previewEventParts$])\n .pipe(map(([startAndEnd, previewEventParts]) => {\n if (previewEventParts) {\n return previewEventParts.parts.filter(eventPart => {\n return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));\n });\n }\n else {\n return [];\n }\n }));\n this.timelinedEventPartsForThisWeek$ = this.eventPartsForThisWeek$\n .pipe(map(eventParts => {\n // We'll only use the events for this week\n const events = eventParts.map(ep => ep.event)\n .filter((e, i, list) => list.indexOf(e) === i)\n .filter((e) => !!e)\n .map((e) => e);\n const timeline = this.timelineService.getTimeline(events);\n const result = timeline.map(track => track.events.map(ev => ({ event: ev, index: track.index })))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), [])\n .map((evi) => eventParts.filter(p => p.event === evi.event).map(p => ({ part: p, index: evi.index })))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n return {\n total: timeline.length,\n parts: result\n };\n }));\n combineLatest([this.mode$, this.shownDays$, this.timeSlotDuration$])\n .pipe(filter(([mode, shownDays, duration]) => mode !== null))\n .pipe(map(([mode, shownDays, duration]) => {\n switch (mode) {\n case ESchedulerMode.week: {\n const timeSlotsPerDay = Math.floor((60 * 60 * 24) / duration);\n return Array.from(Array(timeSlotsPerDay).keys()).map((index) => {\n const timeslotForMonday = this.createTimeslot(shownDays[0], index, duration);\n return {\n slots: shownDays.map((day) => {\n const start = new Date(day);\n start.setHours(timeslotForMonday.start.getHours());\n start.setMinutes(timeslotForMonday.start.getMinutes());\n start.setSeconds(timeslotForMonday.start.getSeconds());\n start.setMilliseconds(timeslotForMonday.start.getMilliseconds());\n const end = new Date(day);\n end.setHours(timeslotForMonday.end.getHours());\n end.setMinutes(timeslotForMonday.end.getMinutes());\n end.setSeconds(timeslotForMonday.end.getSeconds());\n end.setMilliseconds(timeslotForMonday.end.getMilliseconds());\n end.setDate(end.getDate() + timeslotForMonday.end.getDate() - timeslotForMonday.start.getDate());\n return { start, end };\n }),\n stamp: timeslotForMonday.start\n };\n });\n }\n case ESchedulerMode.timeline: {\n const totalTimeslots = (24 * 60 * 60) / duration;\n return shownDays.map((day) => {\n return {\n slots: Array.from(Array(totalTimeslots).keys())\n .map((index) => {\n return this.createTimeslot(day, index, duration);\n }),\n stamp: day\n };\n });\n }\n default: {\n throw 'Unknown value for Mode: ' + mode;\n }\n }\n }))\n .pipe(takeUntilDestroyed(this.destroy))\n .subscribe((timeslots) => {\n // For performance reasons, we're not using an observable here, but persist the timeslots in a BehaviorSubject.\n this.timeSlots$.next(timeslots);\n });\n this.weekOptions$.pipe(takeUntilDestroyed())\n .subscribe(weekOptions => this.weekOptionsChange.emit(weekOptions));\n this.timelineOptions$.pipe(takeUntilDestroyed())\n .subscribe(timelineOptions => this.timelineOptionsChange.emit(timelineOptions));\n // combineLatest([this.mode$, this.scale$])\n // .pipe(filter(([mode, scale]) => mode === ESchedulerMode.timeline))\n import('bootstrap-icons/icons/chevron-left.svg').then((icon) => {\n this.chevronLeft = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n import('bootstrap-icons/icons/chevron-right.svg').then((icon) => {\n this.chevronRight = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n }\n createTimeslot(date, index, duration) {\n const timeSlotStart = new Date(date);\n timeSlotStart.setTime(+timeSlotStart.getTime() + index * duration * 1000);\n const timeSlotEnd = new Date(timeSlotStart);\n timeSlotEnd.setTime(+timeSlotEnd.getTime() + duration * 1000);\n return { start: timeSlotStart, end: timeSlotEnd };\n }\n getResourcesForGroup(resourceOrGroup) {\n if ('children' in resourceOrGroup) {\n return resourceOrGroup.children\n .map((child) => this.getResourcesForGroup(child))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n }\n else {\n return [resourceOrGroup];\n }\n }\n get mode() {\n return this.mode$.value;\n }\n set mode(value) {\n this.mode$.next(value);\n }\n get weekOptions() {\n return this.weekOptions$.value;\n }\n set weekOptions(value) {\n this.weekOptions$.next(value);\n }\n get timelineOptions() {\n return this.timelineOptions$.value;\n }\n set timelineOptions(value) {\n this.timelineOptions$.next(value);\n }\n //#endregion\n //#region Resources\n get resources() {\n return this.resources$.value;\n }\n set resources(value) {\n this.resources$.next(value);\n }\n //#endregion\n addDays(date, days) {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n }\n onPreviousWeekOrMonth() {\n this.onChangeWeekOrMonth(false);\n }\n onNextWeekOrMonth() {\n this.onChangeWeekOrMonth(true);\n }\n onChangeWeekOrMonth(next) {\n combineLatest([this.currentWeekOrMonth$, this.mode$])\n .pipe(map(([currentWeekOrMonth, mode]) => {\n switch (mode) {\n case ESchedulerMode.week: {\n return this.addDays(currentWeekOrMonth, (next ? 7 : -7));\n }\n case ESchedulerMode.timeline: {\n return new Date(currentWeekOrMonth.getFullYear(), currentWeekOrMonth.getMonth() + (next ? 1 : -1), 1);\n }\n }\n }), take(1), takeUntilDestroyed(this.destroy))\n .subscribe((w) => this.currentWeekOrMonth$.next(w));\n }\n onHoverEvent(ev) {\n this.hoveredEvent$.next(ev);\n }\n onLeaveEvent(ev) {\n this.hoveredEvent$.next(null);\n }\n onCreateEvent(ev, slot) {\n ev.preventDefault();\n this.mouseState$.next(true);\n this.dragStartTimeslot = slot;\n this.operation = {\n operation: EDragOperation.createEvent,\n event: {\n start: slot.start,\n end: slot.end,\n color: '#F00',\n description: 'Test event',\n },\n meta: null,\n };\n this.previewEvent$.next({ start: slot.start, end: slot.end });\n }\n randomColor() {\n const brightness = 128;\n return '#' + this.randomChannel(brightness) + this.randomChannel(brightness) + this.randomChannel(brightness);\n }\n randomChannel(brightness) {\n const r = 255 - brightness;\n const n = 0 | ((Math.random() * r) + brightness);\n const s = n.toString(16);\n return (s.length == 1) ? '0' + s : s;\n }\n onStartDragEvent(eventPart, ev) {\n ev.preventDefault();\n this.hoveredTimeSlot$.pipe(take(1), takeUntilDestroyed(this.destroy)).subscribe((hoveredTimeSlot) => {\n if (eventPart.event) {\n this.dragStartTimeslot = hoveredTimeSlot;\n this.operation = {\n operation: EDragOperation.moveEvent,\n event: eventPart.event,\n meta: null,\n };\n this.previewEvent$.next({ start: eventPart.event.start, end: eventPart.event.end });\n }\n });\n }\n onStartResizeEvent(event, position) {\n if (event) {\n switch (position) {\n case 'top':\n {\n this.operation = {\n operation: EDragOperation.resizeEvent,\n event: event,\n meta: { position },\n };\n this.previewEvent$.next({ start: event.start, end: event.end });\n }\n break;\n case 'bottom':\n {\n this.operation = {\n operation: EDragOperation.resizeEvent,\n event: event,\n meta: { position },\n };\n this.previewEvent$.next({ start: event.start, end: event.end });\n }\n break;\n }\n }\n }\n //#region hoveredTimeslot$\n getHoveredTimeslot(ev, timeSlots) {\n const hoveredSlots = this.timeSlotElements.filter((el) => {\n const rct = el.nativeElement.getBoundingClientRect();\n if (rct.left <= ev.x && ev.x <= rct.right && rct.top <= ev.y && ev.y <= rct.bottom) {\n return true;\n }\n else {\n return false;\n }\n });\n if (!hoveredSlots || hoveredSlots.length === 0) {\n return null;\n }\n const slotElement = hoveredSlots[0].nativeElement;\n const strRow = slotElement.getAttribute('data-row');\n if (!strRow) {\n return null;\n }\n const row = parseInt(strRow);\n const strColumn = slotElement.getAttribute('data-column');\n if (!strColumn) {\n return null;\n }\n const column = parseInt(strColumn);\n const slot = timeSlots[row].slots[column];\n return slot;\n }\n onMousemove(ev) {\n this.timeSlots$.pipe(take(1), takeUntilDestroyed(this.destroy)).subscribe((timeSlots) => {\n const hovered = this.getHoveredTimeslot(ev, timeSlots);\n this.hoveredTimeSlot$.next(hovered);\n if (this.operation) {\n switch (this.operation.operation) {\n case EDragOperation.createEvent:\n {\n if (this.operation.event && this.dragStartTimeslot && hovered && (this.operation.event.end.getTime() != hovered.end.getTime())) {\n if (this.dragStartTimeslot.start.getTime() === hovered.start.getTime()) {\n // 1 slot\n }\n else if (this.dragStartTimeslot.start.getTime() < hovered.start.getTime()) {\n // Drag down\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n ev.start = this.dragStartTimeslot.start;\n ev.end = hovered.end;\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n }\n else if (this.dragStartTimeslot.start.getTime() > hovered.start.getTime()) {\n // Drag up\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n ev.start = hovered.start;\n ev.end = this.dragStartTimeslot.end;\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n }\n }\n }\n break;\n case EDragOperation.moveEvent:\n {\n if (hovered && this.dragStartTimeslot) {\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n const result = {\n start: new Date(ev.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime()),\n end: new Date(ev.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime())\n };\n this.dragStartTimeslot = hovered;\n return result;\n }\n else {\n return ev;\n }\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(ev => this.previewEvent$.next(ev));\n }\n }\n break;\n case EDragOperation.resizeEvent:\n {\n if (hovered) {\n this.previewEvent$\n .pipe(filter((ev) => !!ev))\n .pipe(map((ev) => {\n if (ev && this.operation && this.operation.event) {\n if (this.operation.meta.position === 'top') {\n ev.start = hovered.start;\n ev.end = this.operation.event.end;\n }\n else if (this.operation.meta.position === 'bottom') {\n ev.start = this.operation.event.start;\n ev.end = hovered.end;\n }\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n }\n }\n break;\n }\n }\n });\n }\n //#endregion\n onMouseUp(ev) {\n if (this.operation) {\n switch (this.operation.operation) {\n case EDragOperation.createEvent:\n {\n combineLatest([this.previewEvent$])\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(([previewEvent]) => {\n if (previewEvent) {\n this.operation = null;\n this.dragStartTimeslot = null;\n this.resources$.next([\n ...this.resources$.value,\n {\n description: 'New resource group',\n events: [{\n start: previewEvent.start,\n end: previewEvent.end,\n color: this.randomColor(),\n description: 'New event'\n }]\n }\n ]);\n this.previewEvent$.next(null);\n }\n });\n }\n break;\n case EDragOperation.moveEvent:\n case EDragOperation.resizeEvent:\n {\n this.previewEvent$\n .pipe(filter((ev) => !!ev))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((previewEvent) => {\n if (this.operation && this.operation.event && previewEvent) {\n this.operation.event.start = previewEvent.start;\n this.operation.event.end = previewEvent.end;\n this.operation = null;\n this.dragStartTimeslot = null;\n this.resources$.next(this.resources$.value);\n this.previewEvent$.next(null);\n }\n });\n }\n break;\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.BsCalendarMonthService }, { token: i3.BsTimelineService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: BsSchedulerComponent, isStandalone: false, selector: \"bs-scheduler\", inputs: { mode: \"mode\", weekOptions: \"weekOptions\", timelineOptions: \"timelineOptions\", maxInnerHeight: \"maxInnerHeight\", resources: \"resources\" }, outputs: { modeChange: \"modeChange\", weekOptionsChange: \"weekOptionsChange\", timelineOptionsChange: \"timelineOptionsChange\" }, host: { listeners: { \"document:mousemove\": \"onMousemove($event)\", \"document:mouseup\": \"onMouseUp($event)\" } }, viewQueries: [{ propertyName: \"timeSlotElements\", predicate: [\"slot\"], descendants: true }], ngImport: i0, template: \"@switch (mode$ | async) {\\n @case (modes.week) {\\n <div class=\\\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\\\" [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)=\\\"onPreviousWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronLeft\\\" class=\\\"px-0\\\"></span>\\n </button>\\n <button class=\\\"btn btn-default flex-end\\\" (click)=\\\"onNextWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronRight\\\" class=\\\"px-0\\\"></span>\\n </button>\\n </div>\\n @for (day of (shownDays$ | async); track day) {\\n <div class=\\\"flex-grow-1 calendar-head-cell\\\">\\n <span class=\\\"d-block col-form-label text-center text-nowrap\\\">\\n <span>{{ day | date: 'dd-MM' }}</span><span class=\\\"d-none d-lg-inline-block\\\">-{{ day | date: 'yyyy' }}</span>\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"calendar-body\\\" [style.height.px]=\\\"maxInnerHeight\\\">\\n @if (timeSlots$ | async; as row) {\\n <div class=\\\"position-relative\\\">\\n @if (weekOptions$ | async; as weekOptions) {\\n <!-- Timeslots -->\\n @for (timeslots of row; track timeslots; let i = $index) {\\n <div class=\\\"d-flex flex-row p-0 timeslot\\\" [style.height.px]=\\\"weekOptions.unitHeight\\\">\\n <div class=\\\"calendar-cell calendar-left align-top px-2 py-0\\\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\\n @for (slot of timeslots.slots; track slot.start; let j = $index) {\\n <div class=\\\"calendar-cell flex-grow-1\\\" #slot (mousedown)=\\\"onCreateEvent($event, slot)\\\" [attr.data-row]=\\\"i\\\" [attr.data-column]=\\\"j\\\"></div>\\n }\\n </div>\\n }\\n \\n <!-- Events -->\\n @if (timeSlotDuration$ | async; as timeSlotDuration) {\\n @if (timelinedEventPartsForThisWeek$ | async; as partData) {\\n @for (eventPart of partData.parts; track eventPart) {\\n <div class=\\\"event p-0\\\"\\n [style.top.px]=\\\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.height.px]=\\\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.left]=\\\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\\\">\\n <div class=\\\"event-inner\\\" [class.hover]=\\\"(hoveredEvent$ | async) === eventPart.part.event\\\"\\n [style.width]=\\\"'calc(100% / ' + partData.total + ')'\\\"\\n [style.height.px]=\\\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.margin-left]=\\\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\\\">\\n \\n @if (eventPart.part.start === eventPart.part.event?.start) {\\n <div class=\\\"event-resize top\\\" (mousedown)=\\\"onStartResizeEvent(eventPart.part.event, 'top')\\\"></div>\\n }\\n <div class=\\\"event-border\\\"></div>\\n @if (eventPart.part.event) {\\n <div class=\\\"event-wrapper\\\"\\n (mousedown)=\\\"onStartDragEvent(eventPart.part, $event)\\\"\\n (mouseenter)=\\\"onHoverEvent(eventPart.part.event)\\\"\\n (mouseleave)=\\\"onLeaveEvent(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 </div>\\n }\\n @if (eventPart.part.end === eventPart.part.event?.end) {\\n <div class=\\\"event-resize bottom\\\" (mousedown)=\\\"onStartResizeEvent(eventPart.part.event, 'bottom')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n }\\n @if (previewEventPartsForThisWeek$ | async; as previewPartData) {\\n @for (eventPart of previewPartData; track eventPart) {\\n <div class=\\\"event preview p-0\\\"\\n [style.top.px]=\\\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.height.px]=\\\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.left]=\\\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\\\">\\n <div class=\\\"event-inner w-100\\\"\\n [style.height.px]=\\\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\">\\n </div>\\n </div>\\n }\\n }\\n }\\n }\\n </div>\\n }\\n </div>\\n </div>\\n }\\n @case (modes.timeline) {\\n <div class=\\\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\\\">\\n <div class=\\\"calendar-head d-flex\\\">\\n <button class=\\\"btn flex-start\\\" (click)=\\\"onPreviousWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronLeft\\\" class=\\\"px-0\\\"></span>\\n </button>\\n <div class=\\\"flex-grow-1 h3 py-2 mb-0 text-center\\\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\\n <button class=\\\"btn flex-start\\\" (click)=\\\"onNextWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronRight\\\" class=\\\"px-0\\\"></span>\\n </button>\\n </div>\\n \\n <div class=\\\"calendar-body table-responsive overflow-x-auto\\\">\\n <table class=\\\"table mb-0\\\">\\n @if (timeSlots$ | async; as timeSlots) {\\n <tr>\\n <td></td>\\n @for (day of timeSlots; track day) {\\n <td [attr.colspan]=\\\"day.slots.length\\\" class=\\\"text-center px-2\\\">\\n <span class=\\\"position-sticky day-label\\\">{{ day.stamp | date: 'd EE' }}</span>\\n </td>\\n }\\n </tr>\\n <tr>\\n <td></td>\\n @if (timelineOptions$ | async; as timelineOptions) {\\n @for (day of timeSlots; track day) {\\n @for (slot of day.slots; track slot) {\\n <td>\\n <span class=\\\"d-block p-0 text-center\\\" [style.width.px]=\\\"timelineOptions.unitWidth\\\">\\n {{ slot.start | date: 'HH:mm' }}\\n </span>\\n </td>\\n }\\n }\\n }\\n </tr>\\n @for (group of (resources$ | async); track group) {\\n <bs-resource-group-presenter [resourceGroup]=\\\"group\\\" [timeSlots]=\\\"timeSlots\\\"></bs-resource-group-presenter>\\n }\\n }\\n </table>\\n </div>\\n </div>\\n }\\n}\", styles: [\":host{display:block;border:1px solid #333;border-top-right-radius:10px;border-top-left-radius:10px;overflow:hidden}.calendar-head{background:#f7f7f7;color:#007aff}.tabel .calendar-head{flex:0 0 auto}.tabel .calendar-body{display:block;flex:1 1 auto}.week-schedule .calendar-head>div{padding-right:18px}.week-schedule .calendar-body{overflow-y:scroll;overflow-x:hidden}.week-schedule .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.week-schedule .calendar-body .calendar-cell.hover{border-top-width:3px}.week-schedule .calendar-left{width:90px}.week-schedule .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}.week-schedule .event.preview{background:#666;opacity:.6}.week-schedule .event .event-border{background:#000;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.week-schedule .event .event-inner{position:relative;inset:0 5px 5px 0;cursor:move;pointer-events:all;overflow:hidden}.week-schedule .event .event-inner .event-wrapper{width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px)}.week-schedule .event .event-inner .event-wrapper .event-bg{opacity:.5;height:100%;transition:opacity .15s ease-in-out}.week-schedule .event .event-inner .event-wrapper .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.week-schedule .event .event-inner .event-resize{position:absolute;cursor:ns-resize;height:4px;left:0;right:0;z-index:400}.week-schedule .event .event-inner .event-resize.top{top:0}.week-schedule .event .event-inner .event-resize.bottom{bottom:0}.week-schedule .event .event-inner .event-resize:hover{background:#ddd}.week-schedule .event .event-inner.hover .event-bg{opacity:.7!important}@media (max-width: 767px){.week-schedule.tabel .calendar-head .calendar-head-cell{text-orientation:sideways;writing-mode:vertical-rl}}.timeline.tabel{flex-flow:column}.timeline .calendar-body .tabel{background-color:#f7f7f7}.timeline .calendar-body .tabel tr:first-child td{background-color:#fff;border:1px solid #000}.timeline .calendar-body .tabel tr:first-child td:first-child{min-width:10rem}.timeline .calendar-body .tabel tr:first-child span.day-label{left:0;right:0}.timeline .calendar-body .tabel tr:nth-child(2) td{border-width:1px;border-color:inherit}.timeline .calendar-body .tabel>:not(:first-child){border-top:none!important}\\n\"], dependencies: [{ kind: \"component\", type: i4.ResourceGroupPresenterComponent, selector: \"bs-resource-group-presenter\", inputs: [\"level\", \"resourceGroup\", \"timeSlots\", \"isExpanded\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.DatePipe, name: \"date\" }, { kind: \"pipe\", type: i6.BsSecondsTimespanPipe, name: \"bsSecondsTimespan\" }, { kind: \"pipe\", type: i7.BsSecondsTodayOffsetPipe, name: \"bsSecondsTodayOffset\" }, { kind: \"pipe\", type: i8.DayOfWeekPipe, name: \"dayOfWeek\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'bs-scheduler', standalone: false, template: \"@switch (mode$ | async) {\\n @case (modes.week) {\\n <div class=\\\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\\\" [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)=\\\"onPreviousWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronLeft\\\" class=\\\"px-0\\\"></span>\\n </button>\\n <button class=\\\"btn btn-default flex-end\\\" (click)=\\\"onNextWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronRight\\\" class=\\\"px-0\\\"></span>\\n </button>\\n </div>\\n @for (day of (shownDays$ | async); track day) {\\n <div class=\\\"flex-grow-1 calendar-head-cell\\\">\\n <span class=\\\"d-block col-form-label text-center text-nowrap\\\">\\n <span>{{ day | date: 'dd-MM' }}</span><span class=\\\"d-none d-lg-inline-block\\\">-{{ day | date: 'yyyy' }}</span>\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"calendar-body\\\" [style.height.px]=\\\"maxInnerHeight\\\">\\n @if (timeSlots$ | async; as row) {\\n <div class=\\\"position-relative\\\">\\n @if (weekOptions$ | async; as weekOptions) {\\n <!-- Timeslots -->\\n @for (timeslots of row; track timeslots; let i = $index) {\\n <div class=\\\"d-flex flex-row p-0 timeslot\\\" [style.height.px]=\\\"weekOptions.unitHeight\\\">\\n <div class=\\\"calendar-cell calendar-left align-top px-2 py-0\\\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\\n @for (slot of timeslots.slots; track slot.start; let j = $index) {\\n <div class=\\\"calendar-cell flex-grow-1\\\" #slot (mousedown)=\\\"onCreateEvent($event, slot)\\\" [attr.data-row]=\\\"i\\\" [attr.data-column]=\\\"j\\\"></div>\\n }\\n </div>\\n }\\n \\n <!-- Events -->\\n @if (timeSlotDuration$ | async; as timeSlotDuration) {\\n @if (timelinedEventPartsForThisWeek$ | async; as partData) {\\n @for (eventPart of partData.parts; track eventPart) {\\n <div class=\\\"event p-0\\\"\\n [style.top.px]=\\\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.height.px]=\\\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.left]=\\\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\\\">\\n <div class=\\\"event-inner\\\" [class.hover]=\\\"(hoveredEvent$ | async) === eventPart.part.event\\\"\\n [style.width]=\\\"'calc(100% / ' + partData.total + ')'\\\"\\n [style.height.px]=\\\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.margin-left]=\\\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\\\">\\n \\n @if (eventPart.part.start === eventPart.part.event?.start) {\\n <div class=\\\"event-resize top\\\" (mousedown)=\\\"onStartResizeEvent(eventPart.part.event, 'top')\\\"></div>\\n }\\n <div class=\\\"event-border\\\"></div>\\n @if (eventPart.part.event) {\\n <div class=\\\"event-wrapper\\\"\\n (mousedown)=\\\"onStartDragEvent(eventPart.part, $event)\\\"\\n (mouseenter)=\\\"onHoverEvent(eventPart.part.event)\\\"\\n (mouseleave)=\\\"onLeaveEvent(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 </div>\\n }\\n @if (eventPart.part.end === eventPart.part.event?.end) {\\n <div class=\\\"event-resize bottom\\\" (mousedown)=\\\"onStartResizeEvent(eventPart.part.event, 'bottom')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n }\\n @if (previewEventPartsForThisWeek$ | async; as previewPartData) {\\n @for (eventPart of previewPartData; track eventPart) {\\n <div class=\\\"event preview p-0\\\"\\n [style.top.px]=\\\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.height.px]=\\\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\"\\n [style.left]=\\\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\\\">\\n <div class=\\\"event-inner w-100\\\"\\n [style.height.px]=\\\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\\\">\\n </div>\\n </div>\\n }\\n }\\n }\\n }\\n </div>\\n }\\n </div>\\n </div>\\n }\\n @case (modes.timeline) {\\n <div class=\\\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\\\">\\n <div class=\\\"calendar-head d-flex\\\">\\n <button class=\\\"btn flex-start\\\" (click)=\\\"onPreviousWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronLeft\\\" class=\\\"px-0\\\"></span>\\n </button>\\n <div class=\\\"flex-grow-1 h3 py-2 mb-0 text-center\\\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\\n <button class=\\\"btn flex-start\\\" (click)=\\\"onNextWeekOrMonth()\\\">\\n <span [innerHTML]=\\\"chevronRight\\\" class=\\\"px-0\\\"></span>\\n </button>\\n </div>\\n \\n <div class=\\\"calendar-body table-responsive overflow-x-auto\\\">\\n <table class=\\\"table mb-0\\\">\\n @if (timeSlots$ | async; as timeSlots) {\\n <tr>\\n <td></td>\\n @for (day of timeSlots; track day) {\\n <td [attr.colspan]=\\\"day.slots.length\\\" class=\\\"text-center px-2\\\">\\n <span class=\\\"position-sticky day-label\\\">{{ day.stamp | date: 'd EE' }}</span>\\n </td>\\n }\\n </tr>\\n <tr>\\n <td></td>\\n @if (timelineOptions$ | async; as timelineOptions) {\\n @for (day of timeSlots; track day) {\\n @for (slot of day.slots; track slot) {\\n <td>\\n <span class=\\\"d-block p-0 text-center\\\" [style.width.px]=\\\"timelineOptions.unitWidth\\\">\\n {{ slot.start | date: 'HH:mm' }}\\n </span>\\n </td>\\n }\\n }\\n }\\n </tr>\\n @for (group of (resources$ | async); track group) {\\n <bs-resource-group-presenter [resourceGroup]=\\\"group\\\" [timeSlots]=\\\"timeSlots\\\"></bs-resource-group-presenter>\\n }\\n }\\n </table>\\n </div>\\n </div>\\n }\\n}\", styles: [\":host{display:block;border:1px solid #333;border-top-right-radius:10px;border-top-left-radius:10px;overflow:hidden}.calendar-head{background:#f7f7f7;color:#007aff}.tabel .calendar-head{flex:0 0 auto}.tabel .calendar-body{display:block;flex:1 1 auto}.week-schedule .calendar-head>div{padding-right:18px}.week-schedule .calendar-body{overflow-y:scroll;overflow-x:hidden}.week-schedule .calendar-body .calendar-cell{border-right:1px solid #DEE2E6;border-bottom:1px solid #DEE2E6;cursor:default}.week-schedule .calendar-body .calendar-cell.hover{border-top-width:3px}.week-schedule .calendar-left{width:90px}.week-schedule .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}.week-schedule .event.preview{background:#666;opacity:.6}.week-schedule .event .event-border{background:#000;top:0;left:0;bottom:3px;width:3px;position:absolute;z-index:10;opacity:.3}.week-schedule .event .event-inner{position:relative;inset:0 5px 5px 0;cursor:move;pointer-events:all;overflow:hidden}.week-schedule .event .event-inner .event-wrapper{width:calc(100% - 2px);margin:1px auto 1px 0;height:calc(100% - 3px)}.week-schedule .event .event-inner .event-wrapper .event-bg{opacity:.5;height:100%;transition:opacity .15s ease-in-out}.week-schedule .event .event-inner .event-wrapper .event-label{position:absolute;top:0;font-size:12px;font-weight:600;padding:4px}.week-schedule .event .event-inner .event-resize{position:absolute;cursor:ns-resize;height:4px;left:0;right:0;z-index:400}.week-schedule .event .event-inner .event-resize.top{top:0}.week-schedule .event .event-inner .event-resize.bottom{bottom:0}.week-schedule .event .event-inner .event-resize:hover{background:#ddd}.week-schedule .event .event-inner.hover .event-bg{opacity:.7!important}@media (max-width: 767px){.week-schedule.tabel .calendar-head .calendar-head-cell{text-orientation:sideways;writing-mode:vertical-rl}}.timeline.tabel{flex-flow:column}.timeline .calendar-body .tabel{background-color:#f7f7f7}.timeline .calendar-body .tabel tr:first-child td{background-color:#fff;border:1px solid #000}.timeline .calendar-body .tabel tr:first-child td:first-child{min-width:10rem}.timeline .calendar-body .tabel tr:first-child span.day-label{left:0;right:0}.timeline .calendar-body .tabel tr:nth-child(2) td{border-width:1px;border-color:inherit}.timeline .calendar-body .tabel>:not(:first-child){border-top:none!important}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: i2.BsCalendarMonthService }, { type: i3.BsTimelineService }, { type: i0.DestroyRef }], propDecorators: { timeSlotElements: [{\n type: ViewChildren,\n args: ['slot']\n }], modeChange: [{\n type: Output\n }], mode: [{\n type: Input\n }], weekOptionsChange: [{\n type: Output\n }], weekOptions: [{\n type: Input\n }], timelineOptionsChange: [{\n type: Output\n }], timelineOptions: [{\n type: Input\n }], maxInnerHeight: [{\n type: Input\n }], resources: [{\n type: Input\n }], onMousemove: [{\n type: HostListener,\n args: ['document:mousemove', ['$event']]\n }], onMouseUp: [{\n type: HostListener,\n args: ['document:mouseup', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb21wb25lbnRzL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FBcUM7QUFFckMsT0FBTyxFQUFFLFNBQVMsRUFBMEIsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFhLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7O0FBcUI1RCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW9CLFNBQXVCLEVBQVUsb0JBQTRDLEVBQVUsZUFBa0MsRUFBVSxPQUFtQjtRQUF0SixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QjtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFnSzFLLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsRUFBRSxDQUFDLENBQUM7UUFLbkUsaUJBQVksR0FBRyxJ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QUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4uLy4uL3R5cGVzXCIgLz5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJzQ2FsZW5kYXJNb250aFNlcnZpY2UgfSBmcm9tICdAbWludHBsYXllci9uZy1ib290c3RyYXAvY2FsZW5kYXItbW9udGgnO1xuaW1wb3J0IHsgRVNjaGVkdWxlck1vZGUgfSBmcm9tICcuLi8uLi9lbnVtcy9zY2hlZHVsZXItbW9kZSc7XG5pbXBvcnQgeyBFRHJhZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL2RyYWctb3BlcmF0aW9uJztcbmltcG9ydCB7IERyYWdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RyYWctb3BlcmF0aW9uJztcbmltcG9ydCB7IFByZXZpZXdFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcHJldmlldy1ldmVudCc7XG5pbXBvcnQgeyBTY2hlZHVsZXJFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50JztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyRXZlbnRXaXRoUGFydHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1ldmVudC13aXRoLXBhcnRzJztcbmltcG9ydCB7IFRpbWVTbG90IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lLXNsb3QnO1xuaW1wb3J0IHsgQnNUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aW1lbGluZS90aW1lbGluZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc291cmNlR3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Jlc291cmNlLWdyb3VwJztcbmltcG9ydCB7IFJlc291cmNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXNvdXJjZSc7XG5pbXBvcnQgeyBTY2hlZHVsZXJTdGFtcFdpdGhTbG90cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLXN0YW1wLXdpdGgtc2xvdHMnO1xuaW1wb3J0IHsgV2Vla09wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3dlZWstb3B0aW9ucyc7XG5pbXBvcnQgeyBUaW1lbGluZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RpbWVsaW5lLW9wdGlvbnMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicy1zY2hlZHVsZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBCc1NjaGVkdWxlckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIHByaXZhdGUgY2FsZW5kYXJNb250aFNlcnZpY2U6IEJzQ2FsZW5kYXJNb250aFNlcnZpY2UsIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBCc1RpbWVsaW5lU2VydmljZSwgcHJpdmF0ZSBkZXN0cm95OiBEZXN0cm95UmVmKSB7XG4gICAgY29uc3QgbW9uZGF5ID0gdGhpcy5jYWxlbmRhck1vbnRoU2VydmljZS5nZXRNb25kYXlCZWZvcmUobmV3IERhdGUoKSk7XG4gICAgdGhpcy5jdXJyZW50V2Vla09yTW9udGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihtb25kYXkpO1xuXG4gICAgdGhpcy5zaG93bkRheXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50V2Vla09yTW9udGgkLCB0aGlzLm1vZGUkXSlcbiAgICAgIC5waXBlKG1hcCgoW2N1cnJlbnREYXksIG1vZGVdKSA9PiB7XG4gICAgICAgIGN1cnJlbnREYXkuc2V0SG91cnMoMCk7XG4gICAgICAgIGN1cnJlbnREYXkuc2V0TWludXRlcygwKTtcbiAgICAgICAgY3VycmVudERheS5zZXRTZWNvbmRzKDApO1xuICAgICAgICBjdXJyZW50RGF5LnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS53ZWVrOiB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShBcnJheSg3KS5rZXlzKCkpLm1hcCgoeCkgPT4gdGhpcy5hZGREYXlzKGN1cnJlbnREYXksIHgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS50aW1lbGluZToge1xuICAgICAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZShjdXJyZW50RGF5LmdldEZ1bGxZZWFyKCksIGN1cnJlbnREYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICBjb25zdCBkYXlzT2ZNb250aCA9IG5ldyBEYXRlKGN1cnJlbnREYXkuZ2V0RnVsbFllYXIoKSwgY3VycmVudERheS5nZXRNb250aCgpICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oQXJyYXkoZGF5c09mTW9udGgpLmtleXMoKSkubWFwKCh4KSA9PiB0aGlzLmFkZERheXMoZmlyc3REYXksIHgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGF5c09mV2Vla1dpdGhUaW1lc3RhbXBzJCA9IHRoaXMuc2hvd25EYXlzJFxuICAgICAgLnBpcGUobWFwKChzaG93bkRheXMpID0+ICh7IHN0YXJ0OiBzaG93bkRheXNbMF0uZ2V0VGltZSgpLCBlbmQ6IHNob3duRGF5c1tzaG93bkRheXMubGVuZ3RoIC0gMV0uZ2V0VGltZSgpICsgMjQgKiA2MCAqIDYwICogMTAwMCB9KSkpO1xuICAgIFxuICAgIHRoaXMuZXZlbnRzJCA9IHRoaXMucmVzb3VyY2VzJFxuICAgICAgLnBpcGUobWFwKChyZXNvdXJjZXNPckdyb3VwcykgPT4gcmVzb3VyY2VzT3JHcm91cHMubWFwKHJlc09yR3JvdXAgPT4gdGhpcy5nZXRSZXNvdXJjZXNGb3JHcm91cChyZXNPckdyb3VwKSkpKVxuICAgICAgLnBpcGUobWFwKGphZ2dlZFJlc291cmNlcyA9PiBqYWdnZWRSZXNvdXJjZXMucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKSkpXG4gICAgICAucGlwZShtYXAocmVzb3VyY2VzID0+IHJlc291cmNlcy5tYXAocmVzID0+IHJlcy5ldmVudHMpKSlcbiAgICAgIC5waXBlKG1hcChqYWdnZWRFdmVudHMgPT4gamFnZ2VkRXZlbnRzLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSkpKTtcblxuICAgICAgLy8gZ3JvdXBzLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiBmbGF0LmNvbmNhdCh0b0ZsYXR0ZW4uY2hpbGRyZW4pLCBbXSlcbiAgICB0aGlzLmV2ZW50UGFydHMkID0gdGhpcy5ldmVudHMkLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50cykgPT4gIGV2ZW50cy5tYXAoKGV2KSA9PiB0aGlzLnRpbWVsaW5lU2VydmljZS5zcGxpdEluUGFydHMoZXYpKSlcbiAgICApO1xuXG4gICAgdGhpcy5ldmVudFBhcnRzRm9yVGhpc1dlZWskID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRheXNPZldlZWtXaXRoVGltZXN0YW1wcyQsXG4gICAgICB0aGlzLmV2ZW50UGFydHMkXG4gICAgICAgIC5waXBlKG1hcChldmVudFBhcnRzID0+IGV2ZW50UGFydHMubWFwKGV2cCA9PiBldnAucGFydHMpKSlcbiAgICAgICAgLnBpcGUobWFwKGphZ2dlZFBhcnRzID0+ICBqYWdnZWRQYXJ0cy5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pKSlcbiAgICAgIF0pXG4gICAgICAucGlwZShtYXAoKFtzdGFydEFuZEVuZCwgZXZlbnRQYXJ0c10pID0+IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50UGFydHMuZmlsdGVyKGV2ZW50UGFydCA9PiB7XG4gICAgICAgICAgcmV0dXJuICEoKGV2ZW50UGFydC5lbmQuZ2V0VGltZSgpIDw9IHN0YXJ0QW5kRW5kLnN0YXJ0KSB8fCAoZXZlbnRQYXJ0LnN0YXJ0LmdldFRpbWUoKSA+PSBzdGFydEFuZEVuZC5lbmQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnByZXZpZXdFdmVudFBhcnRzJCA9IHRoaXMucHJldmlld0V2ZW50JC5waXBlKFxuICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50aW1lbGluZVNlcnZpY2Uuc3BsaXRJblBhcnRzKGV2ZW50KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5wcmV2aWV3RXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF5c09mV2Vla1dpdGhUaW1lc3RhbXBzJCwgdGhpcy5wcmV2aWV3RXZlbnRQYXJ0cyRdKVxuICAgICAgLnBpcGUobWFwKChbc3RhcnRBbmRFbmQsIHByZXZpZXdFdmVudFBhcnRzXSkgPT4ge1xuICAgICAgICBpZiAocHJldmlld0V2ZW50UGFydHMpIHtcbiAgICAgICAgICByZXR1cm4gcHJldmlld0V2ZW50UGFydHMucGFydHMuZmlsdGVyKGV2ZW50UGFydCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISgoZXZlbnRQYXJ0LmVuZC5nZXRUaW1lKCkgPD0gc3RhcnRBbmRFbmQuc3RhcnQpIHx8IChldmVudFBhcnQuc3RhcnQuZ2V0VGltZSgpID49IHN0YXJ0QW5kRW5kLmVuZCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gICAgdGhpcy50aW1lbGluZWRFdmVudFBhcnRzRm9yVGhpc1dlZWskID0gdGhpcy5ldmVudFBhcnRzRm9yVGhpc1dlZWskXG4gICAgICAucGlwZShtYXAoZXZlbnRQYXJ0cyA9PiB7XG4gICAgICAgIC8vIFdlJ2xsIG9ubHkgdXNlIHRoZSBldmVudHMgZm9yIHRoaXMgd2Vla1xuICAgICAgICBjb25zdCBldmVudHMgPSBldmVudFBhcnRzLm1hcChlcCA9PiBlcC5ldmVudClcbiAgICAgICAgICAuZmlsdGVyKChlLCBpLCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoZSkgPT09IGkpXG4gICAgICAgICAgLmZpbHRlcigoZSkgPT4gISFlKVxuICAgICAgICAgIC5tYXAoKGUpID0+IDxTY2hlZHVsZXJFdmVudD5lKTtcbiAgICAgICAgY29uc3QgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lU2VydmljZS5nZXRUaW1lbGluZShldmVudHMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRpbWVsaW5lLm1hcCh0cmFjayA9PiB0cmFjay5ldmVudHMubWFwKGV2ID0+ICh7IGV2ZW50OiBldiwgaW5kZXg6IHRyYWNrLmluZGV4IH0pKSlcbiAgICAgICAgICAucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKVxuICAgICAgICAgIC5tYXAoKGV2aSkgPT4gZXZlbnRQYXJ0cy5maWx0ZXIocCA9PiBwLmV2ZW50ID09PSBldmkuZXZlbnQpLm1hcChwID0+ICh7IHBhcnQ6IHAsIGluZGV4OiBldmkuaW5kZXggfSkpKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4gZmxhdC5jb25jYXQodG9GbGF0dGVuKSwgW10pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG90YWw6IHRpbWVsaW5lLmxlbmd0aCxcbiAgICAgICAgICBwYXJ0czogcmVzdWx0XG4gICAgICAgIH07XG4gICAgICB9KSk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vZGUkLCB0aGlzLnNob3duRGF5cyQsIHRoaXMudGltZVNsb3REdXJhdGlvbiRdKVxuICAgICAgLnBpcGUoZmlsdGVyKChbbW9kZSwgc2hvd25EYXlzLCBkdXJhdGlvbl0pID0+IG1vZGUgIT09IG51bGwpKVxuICAgICAgLnBpcGUobWFwKChbbW9kZSwgc2hvd25EYXlzLCBkdXJhdGlvbl0pID0+IHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS53ZWVrOiB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU2xvdHNQZXJEYXkgPSBNYXRoLmZsb29yKCg2MCAqIDYwICogMjQpIC8gZHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oQXJyYXkodGltZVNsb3RzUGVyRGF5KS5rZXlzKCkpLm1hcCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZXNsb3RGb3JNb25kYXkgPSB0aGlzLmNyZWF0ZVRpbWVzbG90KHNob3duRGF5c1swXSwgaW5kZXgsIGR1cmF0aW9uKTtcblxuICAgICAgICAgICAgICByZXR1cm4gPFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzPntcbiAgICAgICAgICAgICAgICBzbG90czogc2hvd25EYXlzLm1hcCgoZGF5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKGRheSk7XG4gICAgICAgICAgICAgICAgICBzdGFydC5zZXRIb3Vycyh0aW1lc2xvdEZvck1vbmRheS5zdGFydC5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0LnNldE1pbnV0ZXModGltZXNsb3RGb3JNb25kYXkuc3RhcnQuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0LnNldFNlY29uZHModGltZXNsb3RGb3JNb25kYXkuc3RhcnQuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0LnNldE1pbGxpc2Vjb25kcyh0aW1lc2xvdEZvck1vbmRheS5zdGFydC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICBcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKGRheSk7XG4gICAgICAgICAgICAgICAgICBlbmQuc2V0SG91cnModGltZXNsb3RGb3JNb25kYXkuZW5kLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgICAgICAgZW5kLnNldE1pbnV0ZXModGltZXNsb3RGb3JNb25kYXkuZW5kLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgICBlbmQuc2V0U2Vjb25kcyh0aW1lc2xvdEZvck1vbmRheS5lbmQuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICAgIGVuZC5zZXRNaWxsaXNlY29uZHModGltZXNsb3RGb3JNb25kYXkuZW5kLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICAgIGVuZC5zZXREYXRlKGVuZC5nZXREYXRlKCkgKyB0aW1lc2xvdEZvck1vbmRheS5lbmQuZ2V0RGF0ZSgpIC0gdGltZXNsb3RGb3JNb25kYXkuc3RhcnQuZ2V0RGF0ZSgpKTtcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxUaW1lU2xvdD57IHN0YXJ0LCBlbmQgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFtcDogdGltZXNsb3RGb3JNb25kYXkuc3RhcnRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEVTY2hlZHVsZXJNb2RlLnRpbWVsaW5lOiB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFRpbWVzbG90cyA9ICgyNCAqIDYwICogNjApIC8gZHVyYXRpb247XG4gICAgICAgICAgICByZXR1cm4gc2hvd25EYXlzLm1hcCgoZGF5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiA8U2NoZWR1bGVyU3RhbXBXaXRoU2xvdHM+e1xuICAgICAgICAgICAgICAgIHNsb3RzOiBBcnJheS5mcm9tKEFycmF5KHRvdGFsVGltZXNsb3RzKS5rZXlzKCkpXG4gICAgICAgICAgICAgICAgICAubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUaW1lc2xvdChkYXksIGluZGV4LCBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFtcDogZGF5XG4gICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdGhyb3cgJ1Vua25vd24gdmFsdWUgZm9yIE1vZGU6ICcgKyBtb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKHRpbWVzbG90cykgPT4ge1xuICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UncmUgbm90IHVzaW5nIGFuIG9ic2VydmFibGUgaGVyZSwgYnV0IHBlcnNpc3QgdGhlIHRpbWVzbG90cyBpbiBhIEJlaGF2aW9yU3ViamVjdC5cbiAgICAgICAgdGhpcy50aW1lU2xvdHMkLm5leHQodGltZXNsb3RzKTtcbiAgICAgIH0pO1xuICAgIFxuICAgIHRoaXMud2Vla09wdGlvbnMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKHdlZWtPcHRpb25zID0+IHRoaXMud2Vla09wdGlvbnNDaGFuZ2UuZW1pdCh3ZWVrT3B0aW9ucykpO1xuICAgIHRoaXMudGltZWxpbmVPcHRpb25zJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSh0aW1lbGluZU9wdGlvbnMgPT4gdGhpcy50aW1lbGluZU9wdGlvbnNDaGFuZ2UuZW1pdCh0aW1lbGluZU9wdGlvbnMpKTtcblxuICAgIC8vIGNvbWJpbmVMYXRlc3QoW3RoaXMubW9kZSQsIHRoaXMuc2NhbGUkXSlcbiAgICAvLyAgIC5waXBlKGZpbHRlcigoW21vZGUsIHNjYWxlXSkgPT4gbW9kZSA9PT0gRVNjaGVkdWxlck1vZGUudGltZWxpbmUpKVxuXG4gICAgaW1wb3J0KCdib290c3RyYXAtaWNvbnMvaWNvbnMvY2hldnJvbi1sZWZ0LnN2ZycpLnRoZW4oKGljb24pID0+IHtcbiAgICAgIHRoaXMuY2hldnJvbkxlZnQgPSBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaWNvbi5kZWZhdWx0KTtcbiAgICB9KTtcbiAgICBpbXBvcnQoJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZycpLnRoZW4oKGljb24pID0+IHtcbiAgICAgIHRoaXMuY2hldnJvblJpZ2h0ID0gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGljb24uZGVmYXVsdCk7XG4gICAgfSk7XG4gIH1cblxuICBjaGV2cm9uTGVmdD86IFNhZmVIdG1sO1xuICBjaGV2cm9uUmlnaHQ/OiBTYWZlSHRtbDtcbiAgcmVzb3VyY2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KFJlc291cmNlIHwgUmVzb3VyY2VHcm91cClbXT4oW10pO1xuICBldmVudHMkOiBPYnNlcnZhYmxlPFNjaGVkdWxlckV2ZW50W10+O1xuICBldmVudFBhcnRzJDogT2JzZXJ2YWJsZTxTY2hlZHVsZXJFdmVudFdpdGhQYXJ0c1tdPjtcbiAgZXZlbnRQYXJ0c0ZvclRoaXNXZWVrJDogT2JzZXJ2YWJsZTxTY2hlZHVsZXJFdmVudFBhcnRbXT47XG4gIHRpbWVsaW5lZEV2ZW50UGFydHNGb3JUaGlzV2VlayQ6IE9ic2VydmFibGU8eyB0b3RhbDogbnVtYmVyLCBwYXJ0czogeyBwYXJ0OiBTY2hlZHVsZXJFdmVudFBhcnQsIGluZGV4OiBudW1iZXJ9W10gfT47XG4gIHdlZWtPcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2Vla09wdGlvbnM+KHsgdW5pdEhlaWdodDogMzAgfSk7XG4gIHRpbWVsaW5lT3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRpbWVsaW5lT3B0aW9ucz4oeyB1bml0V2lkdGg6IDUwIH0pO1xuICBcbiAgcHJldmlld0V2ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJldmlld0V2ZW50IHwgbnVsbD4obnVsbCk7XG4gIHByZXZpZXdFdmVudFBhcnRzJDogT2JzZXJ2YWJsZTxTY2hlZHVsZXJFdmVudFdpdGhQYXJ0cyB8IG51bGw+O1xuICBwcmV2aWV3RXZlbnRQYXJ0c0ZvclRoaXNXZWVrJDogT2JzZXJ2YWJsZTxTY2hlZHVsZXJFdmVudFBhcnRbXT47XG4gIFxuICBjdXJyZW50V2Vla09yTW9udGgkOiBCZWhhdmlvclN1YmplY3Q8RGF0ZT47XG4gIHNob3duRGF5cyQ6IE9ic2VydmFibGU8RGF0ZVtdPjtcbiAgZGF5c09mV2Vla1dpdGhUaW1lc3RhbXBzJDogT2JzZXJ2YWJsZTx7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9PjtcbiAgdGltZVNsb3REdXJhdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMTgwMCk7XG4gIHRpbWVTbG90cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjaGVkdWxlclN0YW1wV2l0aFNsb3RzW10+KFtdKTtcbiAgbW91c2VTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaG92ZXJlZFRpbWVTbG90JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGltZVNsb3QgfCBudWxsPihudWxsKTtcbiAgaG92ZXJlZEV2ZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NoZWR1bGVyRXZlbnQgfCBudWxsPihudWxsKTtcbiAgcmVzb3VyY2VHcm91cFByZXNlbnRlckNvdW50ZXIgPSAxO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ3Nsb3QnKSB0aW1lU2xvdEVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PjtcblxuICBjcmVhdGVUaW1lc2xvdChkYXRlOiBEYXRlLCBpbmRleDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgY29uc3QgdGltZVNsb3RTdGFydCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHRpbWVTbG90U3RhcnQuc2V0VGltZSgrdGltZVNsb3RTdGFydC5nZXRUaW1lKCkgKyBpbmRleCAqIGR1cmF0aW9uICogMTAwMCk7XG4gICAgY29uc3QgdGltZVNsb3RFbmQgPSBuZXcgRGF0ZSh0aW1lU2xvdFN0YXJ0KTtcbiAgICB0aW1lU2xvdEVuZC5zZXRUaW1lKCt0aW1lU2xvdEVuZC5nZXRUaW1lKCkgKyBkdXJhdGlvbiAqIDEwMDApO1xuXG4gICAgcmV0dXJuIDxUaW1lU2xvdD57IHN0YXJ0OiB0aW1lU2xvdFN0YXJ0LCBlbmQ6IHRpbWVTbG90RW5kIH07XG4gIH1cblxuICBnZXRSZXNvdXJjZXNGb3JHcm91cChyZXNvdXJjZU9yR3JvdXA6IFJlc291cmNlIHwgUmVzb3VyY2VHcm91cCkgOiBSZXNvdXJjZVtdIHtcbiAgICBpZiAoJ2NoaWxkcmVuJyBpbiByZXNvdXJjZU9yR3JvdXApIHtcbiAgICAgIHJldHVybiByZXNvdXJjZU9yR3JvdXAuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGQpID0+IHRoaXMuZ2V0UmVzb3VyY2VzRm9yR3JvdXAoY2hpbGQpKVxuICAgICAgICAucmVkdWNlKChmbGF0LCB0b0ZsYXR0ZW4pID0+IGZsYXQuY29uY2F0KHRvRmxhdHRlbiksIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtyZXNvdXJjZU9yR3JvdXBdO1xuICAgIH1cbiAgfVxuXG4gIC8vI3JlZ2lvbiBNb2RlXG4gIG1vZGVzID0gRVNjaGVkdWxlck1vZGU7XG4gIG1vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFU2NoZWR1bGVyTW9kZT4oRVNjaGVkdWxlck1vZGUud2Vlayk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgbW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RVNjaGVkdWxlck1vZGU+KCk7XG4gIHB1YmxpYyBnZXQgbW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG1vZGUodmFsdWU6IEVTY2hlZHVsZXJNb2RlKSB7XG4gICAgdGhpcy5tb2RlJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgLy8gLy8jcmVnaW9uIFNjYWxlXG4gIC8vIHNjYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2NoZWR1bGVyU2NhbGU+KGF2YWlsYWJsZVNjYWxlc1s0XSk7XG4gIC8vIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNjaGVkdWxlclNjYWxlPigpO1xuICAvLyBwdWJsaWMgZ2V0IHNjYWxlKCkge1xuICAvLyAgIHJldHVybiB0aGlzLnNjYWxlJC52YWx1ZTtcbiAgLy8gfVxuICAvLyBASW5wdXQoKSBwdWJsaWMgc2V0IHNjYWxlKHZhbHVlOiBTY2hlZHVsZXJTY2FsZSkge1xuICAvLyAgIHRoaXMuc2NhbGUkLm5leHQodmFsdWUpO1xuICAvLyB9XG4gIC8vIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gV2Vla09wdGlvbnNcbiAgQE91dHB1dCgpIHB1YmxpYyB3ZWVrT3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8V2Vla09wdGlvbnM+KCk7XG4gIHB1YmxpYyBnZXQgd2Vla09wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMud2Vla09wdGlvbnMkLnZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgd2Vla09wdGlvbnModmFsdWU6IFdlZWtPcHRpb25zKSB7XG4gICAgdGhpcy53ZWVrT3B0aW9ucyQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBUaW1lbGluZU9wdGlvbnNcbiAgQE91dHB1dCgpIHB1YmxpYyB0aW1lbGluZU9wdGlvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVsaW5lT3B0aW9ucz4oKTtcbiAgcHVibGljIGdldCB0aW1lbGluZU9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGltZWxpbmVPcHRpb25zJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRpbWVsaW5lT3B0aW9ucyh2YWx1ZTogVGltZWxpbmVPcHRpb25zKSB7XG4gICAgdGhpcy50aW1lbGluZU9wdGlvbnMkLm5leHQodmFsdWUpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICAvLyNyZWdpb24gbWF4SW5uZXJIZWlnaHRcbiAgQElucHV0KCkgcHVibGljIG1heElubmVySGVpZ2h0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgLy8jZW5kcmVnaW9uXG4gIC8vI3JlZ2lvbiBSZXNvdXJjZXNcbiAgcHVibGljIGdldCByZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzJC52YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHJlc291cmNlcyh2YWx1ZTogKFJlc291cmNlIHwgUmVzb3VyY2VHcm91cClbXSkge1xuICAgIHRoaXMucmVzb3VyY2VzJC5uZXh0KHZhbHVlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBwcml2YXRlIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgcmVzdWx0LnNldERhdGUocmVzdWx0LmdldERhdGUoKSArIGRheXMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvblByZXZpb3VzV2Vla09yTW9udGgoKSB7XG4gICAgdGhpcy5vbkNoYW5nZVdlZWtPck1vbnRoKGZhbHNlKTtcbiAgfVxuXG4gIG9uTmV4dFdlZWtPck1vbnRoKCkge1xuICAgIHRoaXMub25DaGFuZ2VXZWVrT3JNb250aCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb25DaGFuZ2VXZWVrT3JNb250aChuZXh0OiBib29sZWFuKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5jdXJyZW50V2Vla09yTW9udGgkLCB0aGlzLm1vZGUkXSlcbiAgICAgIC5waXBlKG1hcCgoW2N1cnJlbnRXZWVrT3JNb250aCwgbW9kZV0pID0+IHtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS53ZWVrOiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGREYXlzKGN1cnJlbnRXZWVrT3JNb250aCwgKG5leHQgPyA3IDogLTcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBFU2NoZWR1bGVyTW9kZS50aW1lbGluZToge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGN1cnJlbnRXZWVrT3JNb250aC5nZXRGdWxsWWVhcigpLCBjdXJyZW50V2Vla09yTW9udGguZ2V0TW9udGgoKSArIChuZXh0ID8gMSA6IC0xKSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSwgdGFrZSgxKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKCh3KSA9PiB0aGlzLmN1cnJlbnRXZWVrT3JNb250aCQubmV4dCh3KSk7XG4gIH1cblxuICBvbkhvdmVyRXZlbnQoZXY6IFNjaGVkdWxlckV2ZW50IHwgbnVsbCkge1xuICAgIHRoaXMuaG92ZXJlZEV2ZW50JC5uZXh0KGV2KTtcbiAgfVxuXG4gIG9uTGVhdmVFdmVudChldjogU2NoZWR1bGVyRXZlbnQgfCBudWxsKSB7XG4gICAgdGhpcy5ob3ZlcmVkRXZlbnQkLm5leHQobnVsbCk7XG4gIH1cblxuICBvcGVyYXRpb246IERyYWdPcGVyYXRpb24gfCBudWxsID0gbnVsbDtcbiAgZHJhZ1N0YXJ0VGltZXNsb3Q6IFRpbWVTbG90IHwgbnVsbCA9IG51bGw7XG4gIG9uQ3JlYXRlRXZlbnQoZXY6IE1vdXNlRXZlbnQsIHNsb3Q6IFRpbWVTbG90KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1vdXNlU3RhdGUkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IHNsb3Q7XG4gICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICBvcGVyYXRpb246IEVEcmFnT3BlcmF0aW9uLmNyZWF0ZUV2ZW50LFxuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgc3RhcnQ6IHNsb3Quc3RhcnQsXG4gICAgICAgIGVuZDogc2xvdC5lbmQsXG4gICAgICAgIGNvbG9yOiAnI0YwMCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGVzdCBldmVudCcsXG4gICAgICB9LFxuICAgICAgbWV0YTogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IHNsb3Quc3RhcnQsIGVuZDogc2xvdC5lbmQgfSk7XG4gIH1cblxuICByYW5kb21Db2xvcigpIHtcbiAgICBjb25zdCBicmlnaHRuZXNzID0gMTI4O1xuICAgIHJldHVybiAnIycgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcykgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcykgKyB0aGlzLnJhbmRvbUNoYW5uZWwoYnJpZ2h0bmVzcyk7XG4gIH1cbiAgcmFuZG9tQ2hhbm5lbChicmlnaHRuZXNzOiBudW1iZXIpe1xuICAgIGNvbnN0IHIgPSAyNTUtYnJpZ2h0bmVzcztcbiAgICBjb25zdCBuID0gMHwoKE1hdGgucmFuZG9tKCkgKiByKSArIGJyaWdodG5lc3MpO1xuICAgIGNvbnN0IHMgPSBuLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gKHMubGVuZ3RoPT0xKSA/ICcwJytzIDogcztcbiAgfVxuXG4gIG9uU3RhcnREcmFnRXZlbnQoZXZlbnRQYXJ0OiBTY2hlZHVsZXJFdmVudFBhcnQsIGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmhvdmVyZWRUaW1lU2xvdCQucGlwZSh0YWtlKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSkuc3Vic2NyaWJlKChob3ZlcmVkVGltZVNsb3QpID0+IHtcbiAgICAgIGlmIChldmVudFBhcnQuZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IGhvdmVyZWRUaW1lU2xvdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICAgICAgb3BlcmF0aW9uOiBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQsXG4gICAgICAgICAgZXZlbnQ6IGV2ZW50UGFydC5ldmVudCxcbiAgICAgICAgICBtZXRhOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dCh7IHN0YXJ0OiBldmVudFBhcnQuZXZlbnQuc3RhcnQsIGVuZDogZXZlbnRQYXJ0LmV2ZW50LmVuZCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU3RhcnRSZXNpemVFdmVudChldmVudDogU2NoZWR1bGVyRXZlbnQgfCBudWxsLCBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOiB7XG4gICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSB7XG4gICAgICAgICAgICBvcGVyYXRpb246IEVEcmFnT3BlcmF0aW9uLnJlc2l6ZUV2ZW50LFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgbWV0YTogeyBwb3NpdGlvbiB9LFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCQubmV4dCh7IHN0YXJ0OiBldmVudC5zdGFydCwgZW5kOiBldmVudC5lbmQgfSk7XG4gICAgICAgIH0gYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQsXG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICBtZXRhOiB7IHBvc2l0aW9uIH0sXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KHsgc3RhcnQ6IGV2ZW50LnN0YXJ0LCBlbmQ6IGV2ZW50LmVuZCB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyNyZWdpb24gaG92ZXJlZFRpbWVzbG90JFxuICBwcml2YXRlIGdldEhvdmVyZWRUaW1lc2xvdChldjogTW91c2VFdmVudCwgdGltZVNsb3RzOiBTY2hlZHVsZXJTdGFtcFdpdGhTbG90c1tdKSB7XG4gICAgY29uc3QgaG92ZXJlZFNsb3RzID0gdGhpcy50aW1lU2xvdEVsZW1lbnRzLmZpbHRlcigoZWwpID0+IHtcbiAgICAgIGNvbnN0IHJjdCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocmN0LmxlZnQgPD0gZXYueCAmJiBldi54IDw9IHJjdC5yaWdodCAmJiByY3QudG9wIDw9IGV2LnkgJiYgZXYueSA8PSByY3QuYm90dG9tKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFob3ZlcmVkU2xvdHMgfHwgaG92ZXJlZFNsb3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xvdEVsZW1lbnQgPSBob3ZlcmVkU2xvdHNbMF0ubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHN0clJvdyA9IHNsb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3cnKTtcbiAgICBpZiAoIXN0clJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IHBhcnNlSW50KHN0clJvdyk7XG5cbiAgICBjb25zdCBzdHJDb2x1bW4gPSBzbG90RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uJyk7XG4gICAgaWYgKCFzdHJDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSBwYXJzZUludChzdHJDb2x1bW4pO1xuXG4gICAgY29uc3Qgc2xvdCA9IHRpbWVTbG90c1tyb3ddLnNsb3RzW2NvbHVtbl07XG4gICAgcmV0dXJuIHNsb3Q7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBvbk1vdXNlbW92ZShldjogTW91c2VFdmVudCkge1xuICAgIHRoaXMudGltZVNsb3RzJC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpKS5zdWJzY3JpYmUoKHRpbWVTbG90cykgPT4ge1xuICAgICAgY29uc3QgaG92ZXJlZCA9IHRoaXMuZ2V0SG92ZXJlZFRpbWVzbG90KGV2LCB0aW1lU2xvdHMpO1xuICAgICAgdGhpcy5ob3ZlcmVkVGltZVNsb3QkLm5leHQoaG92ZXJlZCk7XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdGlvbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uLm9wZXJhdGlvbikge1xuICAgICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24uY3JlYXRlRXZlbnQ6IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbi5ldmVudCAmJiB0aGlzLmRyYWdTdGFydFRpbWVzbG90ICYmIGhvdmVyZWQgJiYgKHRoaXMub3BlcmF0aW9uLmV2ZW50LmVuZC5nZXRUaW1lKCkgIT0gaG92ZXJlZC5lbmQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPT09IGhvdmVyZWQuc3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gMSBzbG90XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPCBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIC8vIERyYWcgZG93blxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JFxuICAgICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChldikgPT4gISFldiAmJiAhIXRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpKVxuICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKChldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXYgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkge1xuICAgICAgICAgICAgICAgICAgICAgIGV2LnN0YXJ0ID0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICBldi5lbmQgPSBob3ZlcmVkLmVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXY7XG4gICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXYpID0+IHRoaXMucHJldmlld0V2ZW50JC5uZXh0KGV2KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5zdGFydC5nZXRUaW1lKCkgPiBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIC8vIERyYWcgdXBcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYgJiYgISF0aGlzLmRyYWdTdGFydFRpbWVzbG90KSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBldi5zdGFydCA9IGhvdmVyZWQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuZW5kID0gdGhpcy5kcmFnU3RhcnRUaW1lc2xvdC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2O1xuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLnByZXZpZXdFdmVudCQubmV4dChldikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLm1vdmVFdmVudDoge1xuICAgICAgICAgICAgaWYgKGhvdmVyZWQgJiYgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkge1xuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2KSA9PiAhIWV2ICYmICEhdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCkpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKChldikgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGV2ICYmIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gIDxQcmV2aWV3RXZlbnQ+e1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShldi5zdGFydC5nZXRUaW1lKCkgKyBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGV2LmVuZC5nZXRUaW1lKCkgKyBob3ZlcmVkLnN0YXJ0LmdldFRpbWUoKSAtIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3Quc3RhcnQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRUaW1lc2xvdCA9IGhvdmVyZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ID0+IHRoaXMucHJldmlld0V2ZW50JC5uZXh0KGV2KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLnJlc2l6ZUV2ZW50OiB7XG4gICAgICAgICAgICBpZiAoaG92ZXJlZCkge1xuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKGV2KSA9PiAhIWV2KSlcbiAgICAgICAgICAgICAgICAucGlwZShtYXAoKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZXYgJiYgdGhpcy5vcGVyYXRpb24gJiYgdGhpcy5vcGVyYXRpb24uZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uLm1ldGEucG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuc3RhcnQgPSBob3ZlcmVkLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgIGV2LmVuZCA9IHRoaXMub3BlcmF0aW9uLmV2ZW50LmVuZDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZXJhdGlvbi5tZXRhLnBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgICAgICAgIGV2LnN0YXJ0ID0gdGhpcy5vcGVyYXRpb24uZXZlbnQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgZXYuZW5kID0gaG92ZXJlZC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBldjtcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldikgPT4gdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQoZXYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZVVwKGV2OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMub3BlcmF0aW9uLm9wZXJhdGlvbikge1xuICAgICAgICBjYXNlIEVEcmFnT3BlcmF0aW9uLmNyZWF0ZUV2ZW50OiB7XG4gICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5wcmV2aWV3RXZlbnQkXSlcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpZXdFdmVudF0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHByZXZpZXdFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydFRpbWVzbG90ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyQubmV4dChbXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnJlc291cmNlcyQudmFsdWUsXG4gICAgICAgICAgICAgICAgICA8UmVzb3VyY2U+e1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05ldyByZXNvdXJjZSBncm91cCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50czogW3tcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydDogcHJldmlld0V2ZW50LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgIGVuZDogcHJldmlld0V2ZW50LmVuZCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5yYW5kb21Db2xvcigpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmV3IGV2ZW50J1xuICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0V2ZW50JC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSBFRHJhZ09wZXJhdGlvbi5tb3ZlRXZlbnQ6XG4gICAgICAgIGNhc2UgRURyYWdPcGVyYXRpb24ucmVzaXplRXZlbnQ6IHtcbiAgICAgICAgICB0aGlzLnByZXZpZXdFdmVudCRcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXYpID0+ICEhZXYpKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwcmV2aWV3RXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uICYmIHRoaXMub3BlcmF0aW9uLmV2ZW50ICYmIHByZXZpZXdFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLmV2ZW50LnN0YXJ0ID0gcHJldmlld0V2ZW50LnN0YXJ0O1xuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uLmV2ZW50LmVuZCA9IHByZXZpZXdFdmVudC5lbmQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0VGltZXNsb3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzJC5uZXh0KHRoaXMucmVzb3VyY2VzJC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXZlbnQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQHN3aXRjaCAobW9kZSQgfCBhc3luYykge1xuICAgIEBjYXNlIChtb2Rlcy53ZWVrKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAgb3ZlcmZsb3cteS1hdXRvIG1iLTAgd2Vlay1zY2hlZHVsZVwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIm51bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNhbGVuZGFyLWxlZnQganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZmxleC1zdGFydFwiIChjbGljayk9XCJvblByZXZpb3VzV2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY2hldnJvbkxlZnRcIiBjbGFzcz1cInB4LTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZmxleC1lbmRcIiAoY2xpY2spPVwib25OZXh0V2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY2hldnJvblJpZ2h0XCIgY2xhc3M9XCJweC0wXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChkYXkgb2YgKHNob3duRGF5cyQgfCBhc3luYyk7IHRyYWNrIGRheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGNhbGVuZGFyLWhlYWQtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1ibG9jayBjb2wtZm9ybS1sYWJlbCB0ZXh0LWNlbnRlciB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkYXkgfCBkYXRlOiAnZGQtTU0nIH19PC9zcGFuPjxzcGFuIGNsYXNzPVwiZC1ub25lIGQtbGctaW5saW5lLWJsb2NrXCI+LXt7IGRheSB8IGRhdGU6ICd5eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItYm9keVwiIFtzdHlsZS5oZWlnaHQucHhdPVwibWF4SW5uZXJIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHRpbWVTbG90cyQgfCBhc3luYzsgYXMgcm93KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh3ZWVrT3B0aW9ucyQgfCBhc3luYzsgYXMgd2Vla09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRpbWVzbG90cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yICh0aW1lc2xvdHMgb2Ygcm93OyB0cmFjayB0aW1lc2xvdHM7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgcC0wIHRpbWVzbG90XCIgW3N0eWxlLmhlaWdodC5weF09XCJ3ZWVrT3B0aW9ucy51bml0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY2VsbCBjYWxlbmRhci1sZWZ0IGFsaWduLXRvcCBweC0yIHB5LTBcIj57eyB0aW1lc2xvdHMuc2xvdHNbMF0uc3RhcnQgfCBkYXRlOiAnSEg6bW06c3MnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzbG90IG9mIHRpbWVzbG90cy5zbG90czsgdHJhY2sgc2xvdC5zdGFydDsgbGV0IGogPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY2VsbCBmbGV4LWdyb3ctMVwiICNzbG90IChtb3VzZWRvd24pPVwib25DcmVhdGVFdmVudCgkZXZlbnQsIHNsb3QpXCIgW2F0dHIuZGF0YS1yb3ddPVwiaVwiIFthdHRyLmRhdGEtY29sdW1uXT1cImpcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFdmVudHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh0aW1lU2xvdER1cmF0aW9uJCB8IGFzeW5jOyBhcyB0aW1lU2xvdER1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGltZWxpbmVkRXZlbnRQYXJ0c0ZvclRoaXNXZWVrJCB8IGFzeW5jOyBhcyBwYXJ0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZXZlbnRQYXJ0IG9mIHBhcnREYXRhLnBhcnRzOyB0cmFjayBldmVudFBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCIoZXZlbnRQYXJ0LnBhcnQgfCBic1NlY29uZHNUb2RheU9mZnNldCkgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiKGV2ZW50UGFydC5wYXJ0IHwgYnNTZWNvbmRzVGltZXNwYW4pIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCInY2FsYyg5MHB4ICsgKCgxMDAlIC0gOTBweCkgLyA3ICogJyArICgoZXZlbnRQYXJ0LnBhcnQgfCBkYXlPZldlZWspIC0gMSkgKyAnKSknXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pbm5lclwiIFtjbGFzcy5ob3Zlcl09XCIoaG92ZXJlZEV2ZW50JCB8IGFzeW5jKSA9PT0gZXZlbnRQYXJ0LnBhcnQuZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIidjYWxjKDEwMCUgLyAnICsgcGFydERhdGEudG90YWwgKyAnKSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoZXZlbnRQYXJ0LnBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWFyZ2luLWxlZnRdPVwiJ2NhbGMoMTAwJSAvICcgKyBwYXJ0RGF0YS50b3RhbCArICcgKiAnICsgZXZlbnRQYXJ0LmluZGV4ICsgJyknXCI+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50UGFydC5wYXJ0LnN0YXJ0ID09PSBldmVudFBhcnQucGFydC5ldmVudD8uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcmVzaXplIHRvcFwiIChtb3VzZWRvd24pPVwib25TdGFydFJlc2l6ZUV2ZW50KGV2ZW50UGFydC5wYXJ0LmV2ZW50LCAndG9wJylcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1ib3JkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXZlbnRQYXJ0LnBhcnQuZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25TdGFydERyYWdFdmVudChldmVudFBhcnQucGFydCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uSG92ZXJFdmVudChldmVudFBhcnQucGFydC5ldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkxlYXZlRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1iZ1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImV2ZW50UGFydC5wYXJ0LmV2ZW50LmNvbG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1sYWJlbFwiPnt7IGV2ZW50UGFydC5wYXJ0LmV2ZW50LmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50UGFydC5wYXJ0LmVuZCA9PT0gZXZlbnRQYXJ0LnBhcnQuZXZlbnQ/LmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1yZXNpemUgYm90dG9tXCIgKG1vdXNlZG93bik9XCJvblN0YXJ0UmVzaXplRXZlbnQoZXZlbnRQYXJ0LnBhcnQuZXZlbnQsICdib3R0b20nKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByZXZpZXdFdmVudFBhcnRzRm9yVGhpc1dlZWskIHwgYXN5bmM7IGFzIHByZXZpZXdQYXJ0RGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZXZlbnRQYXJ0IG9mIHByZXZpZXdQYXJ0RGF0YTsgdHJhY2sgZXZlbnRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50IHByZXZpZXcgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCIoZXZlbnRQYXJ0IHwgYnNTZWNvbmRzVG9kYXlPZmZzZXQpIC8gdGltZVNsb3REdXJhdGlvbiAqIHdlZWtPcHRpb25zLnVuaXRIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0XT1cIidjYWxjKDkwcHggKyAoKDEwMCUgLSA5MHB4KSAvIDcgKiAnICsgKChldmVudFBhcnQgfCBkYXlPZldlZWspIC0gMSkgKyAnKSknXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pbm5lciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIihldmVudFBhcnQgfCBic1NlY29uZHNUaW1lc3BhbikgLyB0aW1lU2xvdER1cmF0aW9uICogd2Vla09wdGlvbnMudW5pdEhlaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAY2FzZSAobW9kZXMudGltZWxpbmUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi0xMDAgb3ZlcmZsb3cteS1hdXRvIG1iLTAgYmctd2hpdGUgdGltZWxpbmVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkIGQtZmxleFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZmxleC1zdGFydFwiIChjbGljayk9XCJvblByZXZpb3VzV2Vla09yTW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImNoZXZyb25MZWZ0XCIgY2xhc3M9XCJweC0wXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBoMyBweS0yIG1iLTAgdGV4dC1jZW50ZXJcIj57eyBjdXJyZW50V2Vla09yTW9udGgkIHwgYXN5bmMgfCBkYXRlOiAnTU1NTSB5eXl5JyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZmxleC1zdGFydFwiIChjbGljayk9XCJvbk5leHRXZWVrT3JNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiY2hldnJvblJpZ2h0XCIgY2xhc3M9XCJweC0wXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5IHRhYmxlLXJlc3BvbnNpdmUgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHRpbWVTbG90cyQgfCBhc3luYzsgYXMgdGltZVNsb3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF5IG9mIHRpbWVTbG90czsgdHJhY2sgZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImRheS5zbG90cy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tc3RpY2t5IGRheS1sYWJlbFwiPnt7IGRheS5zdGFtcCB8IGRhdGU6ICdkIEVFJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGltZWxpbmVPcHRpb25zJCB8IGFzeW5jOyBhcyB0aW1lbGluZU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF5IG9mIHRpbWVTbG90czsgdHJhY2sgZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzbG90IG9mIGRheS5zbG90czsgdHJhY2sgc2xvdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWJsb2NrIHAtMCB0ZXh0LWNlbnRlclwiIFtzdHlsZS53aWR0aC5weF09XCJ0aW1lbGluZU9wdGlvbnMudW5pdFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzbG90LnN0YXJ0IHwgZGF0ZTogJ0hIOm1tJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncm91cCBvZiAocmVzb3VyY2VzJCB8IGFzeW5jKTsgdHJhY2sgZ3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnMtcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyIFtyZXNvdXJjZUdyb3VwXT1cImdyb3VwXCIgW3RpbWVTbG90c109XCJ0aW1lU2xvdHNcIj48L2JzLXJlc291cmNlLWdyb3VwLXByZXNlbnRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxufSJdfQ==","export const availableScales = [\n { time: 60, pixels: 60, markerSize: 900 }, // 60s / 60px = 1 s/px = 1 min / 60 px\n { time: 120, pixels: 60, markerSize: 900 }, // 120s / 60px = 2 s/px = 2 min / 60 px\n { time: 300, pixels: 60, markerSize: 900 }, // 180s / 60px = 3 s/px = 5 min / 60 px\n { time: 900, pixels: 60, markerSize: 900 }, // 360s / 60px = 6 s/px = 15 min / 60 px\n { time: 3600, pixels: 60, markerSize: 21600 }, // 600s / 60px = 10 s/px = 1 u / 60 px\n { time: 7200, pixels: 60, markerSize: 21600 }, // 1200s / 60px = 20 s/px\n { time: 10800, pixels: 60, markerSize: 21600 }, // 1800s / 60px = 30 s/px\n { time: 21600, pixels: 60, markerSize: 21600 }, // 3600s / 60px = 60 s/px\n { time: 86400, pixels: 60, markerSize: 604800 }, // 6000s / 60px = 100 s/px\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmxlLXNjYWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9jb25zdGFudHMvYXZhaWxhYmxlLXNjYWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQXFCO0lBQzdDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBTSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBUyw4Q0FBOEM7SUFDcEcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFLLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFTLDhDQUE4QztJQUNwRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUssTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQVMsOENBQThDO0lBQ3BHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBSyxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBUyw4Q0FBOEM7SUFFcEcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFRLDhDQUE4QztJQUNyRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUksTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQVEsMkJBQTJCO0lBQ2xGLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBUSwyQkFBMkI7SUFDbEYsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFRLDJCQUEyQjtJQUVsRixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQU8sNEJBQTRCO0NBQ3RGLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlZHVsZXJTY2FsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3NjaGVkdWxlci1zY2hhbGVcIjtcblxuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVNjYWxlczogU2NoZWR1bGVyU2NhbGVbXSA9IFtcbiAgICB7IHRpbWU6IDYwLCAgICAgcGl4ZWxzOiA2MCwgbWFya2VyU2l6ZTogOTAwIH0sICAgICAgICAvLyA2MHMgLyA2MHB4ICAgICA9IDEgcy9weCAgICA9IDEgIG1pbiAvIDYwIHB4XG4gICAgeyB0aW1lOiAxMjAsICAgIHBpeGVsczogNjAsIG1hcmtlclNpemU6IDkwMCB9LCAgICAgICAgLy8gMTIwcyAvIDYwcHggICAgPSAyIHMvcHggICAgPSAyICBtaW4gLyA2MCBweFxuICAgIHsgdGltZTogMzAwLCAgICBwaXhlbHM6IDYwLCBtYXJrZXJTaXplOiA5MDAgfSwgICAgICAgIC8vIDE4MHMgLyA2MHB4ICAgID0gMyBzL3B4ICAgID0gNSAgbWluIC8gNjAgcHhcbiAgICB7IHRpbWU6IDkwMCwgICAgcGl4ZWxzOiA2MCwgbWFya2VyU2l6ZTogOTAwIH0sICAgICAgICAvLyAzNjBzIC8gNjBweCAgICA9IDYgcy9weCAgICA9IDE1IG1pbiAvIDYwIHB4XG5cbiAgICB7IHRpbWU6IDM2MDAsICAgcGl4ZWxzOiA2MCwgbWFya2VyU2l6ZTogMjE2MDAgfSwgICAgICAgLy8gNjAwcyAvIDYwcHggICAgPSAxMCBzL3B4ICAgPSAxICAgIHUgLyA2MCBweFxuICAgIHsgdGltZTogNzIwMCwgICBwaXhlbHM6IDYwLCBtYXJrZXJTaXplOiAyMTYwMCB9LCAgICAgICAvLyAxMjAwcyAvIDYwcHggICA9IDIwIHMvcHhcbiAgICB7IHRpbWU6IDEwODAwLCAgcGl4ZWxzOiA2MCwgbWFya2VyU2l6ZTogMjE2MDAgfSwgICAgICAgLy8gMTgwMHMgLyA2MHB4ICAgPSAzMCBzL3B4XG4gICAgeyB0aW1lOiAyMTYwMCwgIHBpeGVsczogNjAsIG1hcmtlclNpemU6IDIxNjAwIH0sICAgICAgIC8vIDM2MDBzIC8gNjBweCAgID0gNjAgcy9weFxuXG4gICAgeyB0aW1lOiA4NjQwMCwgIHBpeGVsczogNjAsIG1hcmtlclNpemU6IDYwNDgwMCB9LCAgICAgIC8vIDYwMDBzIC8gNjBweCAgID0gMTAwIHMvcHhcbl0iXX0=","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class DateOffsetPipe {\n transform(value) {\n const today = new Date(value.start);\n today.setHours(0);\n today.setMinutes(0);\n today.setSeconds(0);\n return (value.start.getTime() - today.getTime()) / 1000;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DateOffsetPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: DateOffsetPipe, isStandalone: false, name: \"dateOffset\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DateOffsetPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'dateOffset',\n standalone: false,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1vZmZzZXQucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9waXBlcy9kYXRlLW9mZnNldC9kYXRlLW9mZnNldC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU9wRCxNQUFNLE9BQU8sY0FBYztJQUN6QixTQUFTLENBQUMsS0FBeUI7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDMUQsQ0FBQzs4R0FOVSxjQUFjOzRHQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBSjFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjaGVkdWxlckV2ZW50UGFydCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2NoZWR1bGVyLWV2ZW50LXBhcnQnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdkYXRlT2Zmc2V0JyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVPZmZzZXRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogU2NoZWR1bGVyRXZlbnRQYXJ0KSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSh2YWx1ZS5zdGFydCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCk7IHRvZGF5LnNldE1pbnV0ZXMoMCk7IHRvZGF5LnNldFNlY29uZHMoMCk7XG5cbiAgICByZXR1cm4gKHZhbHVlLnN0YXJ0LmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAxMDAwO1xuICB9XG59XG4iXX0=","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsSecondsTimespanPipe } from './pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe';\nimport { BsSecondsTodayOffsetPipe } from './pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe';\nimport { DateOffsetPipe } from './pipes/date-offset/date-offset.pipe';\nimport { DayOfWeekPipe } from './pipes/day-of-week/day-of-week.pipe';\nimport { BsSchedulerComponent } from './components/scheduler/scheduler.component';\nimport { ResourceGroupPresenterComponent } from './components/resource-group-presenter/resource-group-presenter.component';\nimport * as i0 from \"@angular/core\";\nexport class BsSchedulerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerModule, declarations: [BsSchedulerComponent,\n BsSecondsTimespanPipe,\n BsSecondsTodayOffsetPipe,\n DateOffsetPipe,\n DayOfWeekPipe,\n ResourceGroupPresenterComponent], imports: [CommonModule], exports: [BsSchedulerComponent,\n ResourceGroupPresenterComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerModule, imports: [CommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: BsSchedulerModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n BsSchedulerComponent,\n BsSecondsTimespanPipe,\n BsSecondsTodayOffsetPipe,\n DateOffsetPipe,\n DayOfWeekPipe,\n ResourceGroupPresenterComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n BsSchedulerComponent,\n ResourceGroupPresenterComponent\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbWludHBsYXllci1uZy1ib290c3RyYXAvc2NoZWR1bGVyL3NyYy9zY2hlZHVsZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7O0FBbUIzSCxNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixpQkFmMUIsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQix3QkFBd0I7WUFDeEIsY0FBYztZQUNkLGFBQWE7WUFDYiwrQkFBK0IsYUFHL0IsWUFBWSxhQUdaLG9CQUFvQjtZQUNwQiwrQkFBK0I7K0dBR3RCLGlCQUFpQixZQVAxQixZQUFZOzsyRkFPSCxpQkFBaUI7a0JBakI3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsK0JBQStCO3FCQUNoQztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asb0JBQW9CO3dCQUNwQiwrQkFBK0I7cUJBQ2hDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCc1NlY29uZHNUaW1lc3BhblBpcGUgfSBmcm9tICcuL3BpcGVzL2JzLXNlY29uZHMtdGltZXNwYW4ucGlwZS9icy1zZWNvbmRzLXRpbWVzcGFuLnBpcGUnO1xuaW1wb3J0IHsgQnNTZWNvbmRzVG9kYXlPZmZzZXRQaXBlIH0gZnJvbSAnLi9waXBlcy9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC9icy1zZWNvbmRzLXRvZGF5LW9mZnNldC5waXBlJztcbmltcG9ydCB7IERhdGVPZmZzZXRQaXBlIH0gZnJvbSAnLi9waXBlcy9kYXRlLW9mZnNldC9kYXRlLW9mZnNldC5waXBlJztcbmltcG9ydCB7IERheU9mV2Vla1BpcGUgfSBmcm9tICcuL3BpcGVzL2RheS1vZi13ZWVrL2RheS1vZi13ZWVrLnBpcGUnO1xuaW1wb3J0IHsgQnNTY2hlZHVsZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cFByZXNlbnRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yZXNvdXJjZS1ncm91cC1wcmVzZW50ZXIvcmVzb3VyY2UtZ3JvdXAtcHJlc2VudGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEJzU2NoZWR1bGVyQ29tcG9uZW50LFxuICAgIEJzU2Vjb25kc1RpbWVzcGFuUGlwZSxcbiAgICBCc1NlY29uZHNUb2RheU9mZnNldFBpcGUsXG4gICAgRGF0ZU9mZnNldFBpcGUsXG4gICAgRGF5T2ZXZWVrUGlwZSxcbiAgICBSZXNvdXJjZUdyb3VwUHJlc2VudGVyQ29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBCc1NjaGVkdWxlckNvbXBvbmVudCxcbiAgICBSZXNvdXJjZUdyb3VwUHJlc2VudGVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQnNTY2hlZHVsZXJNb2R1bGUgeyB9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWludHBsYXllci1uZy1ib290c3RyYXAtc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9taW50cGxheWVyLW5nLWJvb3RzdHJhcC9zY2hlZHVsZXIvbWludHBsYXllci1uZy1ib290c3RyYXAtc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i2","i3.BsTimelineService","i4.ResourceGroupPresenterComponent","i6.BsSecondsTimespanPipe","i7.BsSecondsTodayOffsetPipe","i8.DayOfWeekPipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-scheduler.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/scheduler/src/enums/scheduler-mode.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/enums/drag-operation.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/services/timeline/timeline.service.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/components/resource-group-presenter/resource-group-presenter.component.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/components/resource-group-presenter/resource-group-presenter.component.html","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/pipes/day-of-week/day-of-week.pipe.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/components/scheduler/scheduler.component.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/components/scheduler/scheduler.component.html","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/constants/available-scales.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/pipes/date-offset/date-offset.pipe.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/src/scheduler.module.ts","../../../../libs/mintplayer-ng-bootstrap/scheduler/mintplayer-ng-bootstrap-scheduler.ts"],"sourcesContent":["export enum ESchedulerMode {\n week,\n timeline\n}","export enum EDragOperation {\n none,\n createEvent,\n resizeEvent,\n moveEvent,\n}","import { Injectable } from '@angular/core';\nimport { PreviewEvent } from '../../interfaces/preview-event';\nimport { SchedulerEvent } from '../../interfaces/scheduler-event';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\nimport { SchedulerEventWithParts } from '../../interfaces/scheduler-event-with-parts';\nimport { TimelineTrack } from '../../interfaces/timeline-track';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BsTimelineService {\n\n public splitInParts(event: SchedulerEvent | PreviewEvent) {\n let startTime = event.start;\n const result: SchedulerEventPart[] = [];\n const eventOrNull = 'color' in event ? event : null;\n while (!this.dateEquals(startTime, event.end)) {\n const end = new Date(startTime.getFullYear(), startTime.getMonth(), startTime.getDate() + 1, 0, 0, 0);\n result.push({ start: startTime, end: end, event: eventOrNull });\n startTime = end;\n }\n if (startTime != event.end) {\n result.push({ start: startTime, end: event.end, event: eventOrNull });\n }\n\n return <SchedulerEventWithParts>{ event: event, parts: result };\n }\n \n private dateEquals(date1: Date, date2: Date) {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n }\n\n public getTimeline(events: SchedulerEvent[]) {\n const timestamps = this.getTimestamps(events);\n const tracks: TimelineTrack[] = [];\n\n timestamps.forEach((timestamp, tIndex) => {\n const starting = events.filter((e) => e.start === timestamp);\n // const ending = events.filter((e) => e.end === timestamp);\n\n starting.forEach((startedEvent, eIndex) => {\n const freeTracks = tracks.filter(t => this.trackIsFreeAt(t, startedEvent));\n if (freeTracks.length === 0) {\n tracks.push({ index: tracks.length, events: [startedEvent] });\n } else {\n freeTracks[0].events.push(startedEvent);\n }\n });\n });\n\n return tracks;\n }\n\n private getTimestamps(events: SchedulerEvent[]) {\n const allTimestamps = events.map(e => [e.start, e.end])\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n \n return allTimestamps\n .filter((t, i) => allTimestamps.indexOf(t) === i)\n .sort((t1, t2) => <any>t1 - <any>t2);\n }\n\n private trackIsFreeAt(track: TimelineTrack, event: SchedulerEvent) {\n if (track.events.every((ev) => (ev.end <= event.start) || (event.end <= ev.start))) {\n return true;\n } else {\n return false;\n }\n }\n\n}\n","import { Component, Input } from '@angular/core';\nimport { BehaviorSubject, filter, map, Observable } from 'rxjs';\nimport { Resource, ResourceGroup } from '../../interfaces';\nimport { ResourceOrGroup } from '../../interfaces/resource-or-group';\nimport { SchedulerStampWithSlots } from '../../interfaces/scheduler-stamp-with-slots';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n selector: 'bs-resource-group-presenter',\n templateUrl: './resource-group-presenter.component.html',\n styleUrls: ['./resource-group-presenter.component.scss'],\n standalone: false,\n})\nexport class ResourceGroupPresenterComponent {\n \n constructor(private sanitizer: DomSanitizer) {\n this.data$ = this.resourceOrGroup$\n .pipe(map((resourceOrGroup) => {\n if (!resourceOrGroup) {\n return null;\n } else if ('children' in resourceOrGroup) {\n return <ResourceOrGroup>{\n resource: null,\n resourceGroup: resourceOrGroup\n };\n } else {\n return <ResourceOrGroup>{\n resource: resourceOrGroup,\n resourceGroup: null\n };\n }\n }))\n .pipe(filter((resourceOrGroup) => !!resourceOrGroup))\n .pipe(map((resourceOrGroup) => <ResourceOrGroup>resourceOrGroup));\n\n this.colSpan$ = this.timeSlots$\n .pipe(map(timeSlots => timeSlots\n .map(timeslot => timeslot.slots.length)\n .reduce((sum, current) => sum + current, 0)\n ));\n\n import('bootstrap-icons/icons/chevron-down.svg').then((icon) => {\n this.chevronDown = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n import('bootstrap-icons/icons/chevron-right.svg').then((icon) => {\n this.chevronRight = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n }\n\n chevronDown?: SafeHtml;\n chevronRight?: SafeHtml;\n @Input() level = 0;\n resourceOrGroup$ = new BehaviorSubject<Resource | ResourceGroup | null>(null);\n timeSlots$ = new BehaviorSubject<SchedulerStampWithSlots[]>([]);\n isExpanded$ = new BehaviorSubject<boolean>(false);\n data$: Observable<ResourceOrGroup>;\n colSpan$: Observable<number>;\n\n //#region resourceOrGroup\n public get resourceOrGroup() {\n return this.resourceOrGroup$.value;\n }\n @Input() public set resourceGroup(value: Resource | ResourceGroup | null) {\n this.resourceOrGroup$.next(value);\n }\n //#endregion\n\n //#region timeSlots\n public get timeSlots() {\n return this.timeSlots$.value;\n }\n @Input() public set timeSlots(value: SchedulerStampWithSlots[]) {\n this.timeSlots$.next(value);\n }\n //#endregion\n\n //#region isExpanded\n public get isExpanded() {\n return this.isExpanded$.value;\n }\n @Input() public set isExpanded(value: boolean) {\n this.isExpanded$.next(value);\n }\n //#endregion\n\n toggleExpanded() {\n this.isExpanded$.next(!this.isExpanded$.value);\n }\n\n}\n","@if (data$ | async; as data) {\n\n <!-- Data is a resource group -->\n @if (data.resourceGroup) {\n <!-- Header -->\n @if (timeSlots$ | async; as timeSlots) {\n <tr class=\"p-0 cursor-pointer\" [title]=\"data.resourceGroup.description\">\n @if (colSpan$ | async; as colspan) {\n <td class=\"p-2 cursor-pointer\" [colSpan]=\"colspan + 1\" (click)=\"toggleExpanded()\">\n <span class=\"p-2 align-middle position-sticky\">\n @if (isExpanded$ | async) {\n <span [innerHTML]=\"chevronDown\" [style.padding-left.px]=\"level * 20\"></span>\n } @else {\n <span [innerHTML]=\"chevronRight\" [style.padding-left.px]=\"level * 20\"></span>\n }\n {{ data.resourceGroup.description }}\n </span>\n </td>\n }\n </tr>\n }\n\n <!-- Subgroups or resources -->\n @if (isExpanded$ | async) {\n @if (timeSlots$ | async; as timeSlots) {\n @for (child of data.resourceGroup.children; track child) {\n <bs-resource-group-presenter [resourceGroup]=\"child\" [timeSlots]=\"timeSlots\" [level]=\"level + 1\"></bs-resource-group-presenter>\n }\n }\n }\n }\n\n <!-- Data is a resource -->\n @if (data.resource) {\n <tr class=\"p-0 bordered\" [title]=\"data.resource.description\">\n <td class=\"p-0 bg-white\">\n <div class=\"p-2\">{{ data.resource.description }}</div>\n </td>\n @for (slots of (timeSlots$ | async); track $index) {\n @for (slot of slots.slots; track slot) {\n <td class=\"bg-white border-1\">\n <!-- {{ slot.start | date: 'dd/MM/yyyy HH:mm:ss' }} -->\n </td>\n }\n }\n </tr>\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { SchedulerEvent } from '../../interfaces/scheduler-event';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\n\n@Pipe({\n name: 'bsSecondsTimespan',\n standalone: false,\n})\nexport class BsSecondsTimespanPipe implements PipeTransform {\n transform(value: SchedulerEventPart | SchedulerEvent) {\n return (value.end.getTime() - value.start.getTime()) / 1000;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SchedulerEvent } from '../../interfaces/scheduler-event';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\n\n@Pipe({\n name: 'bsSecondsTodayOffset',\n standalone: false,\n})\nexport class BsSecondsTodayOffsetPipe implements PipeTransform {\n transform(value: SchedulerEventPart | SchedulerEvent) {\n const today = new Date(value.start);\n today.setHours(0); today.setMinutes(0); today.setSeconds(0);\n\n return (value.start.getTime() - today.getTime()) / 1000;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SchedulerEvent } from '../../interfaces/scheduler-event';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\n\n@Pipe({\n name: 'dayOfWeek',\n standalone: false,\n})\nexport class DayOfWeekPipe implements PipeTransform {\n transform(value: SchedulerEventPart | SchedulerEvent) {\n const dayOfWeek = value.start.getDay();\n if (dayOfWeek === 0) {\n return 7;\n } else {\n return dayOfWeek;\n }\n }\n}\n","/// <reference types=\"../../types\" />\n\nimport { Component, DestroyRef, ElementRef, EventEmitter, HostListener, Input, Output, QueryList, ViewChildren } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, combineLatest, filter, map, Observable, take } from 'rxjs';\nimport { BsCalendarMonthService } from '@mintplayer/ng-bootstrap/calendar-month';\nimport { ESchedulerMode } from '../../enums/scheduler-mode';\nimport { EDragOperation } from '../../enums/drag-operation';\nimport { DragOperation } from '../../interfaces/drag-operation';\nimport { PreviewEvent } from '../../interfaces/preview-event';\nimport { SchedulerEvent } from '../../interfaces/scheduler-event';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\nimport { SchedulerEventWithParts } from '../../interfaces/scheduler-event-with-parts';\nimport { TimeSlot } from '../../interfaces/time-slot';\nimport { BsTimelineService } from '../../services/timeline/timeline.service';\nimport { ResourceGroup } from '../../interfaces/resource-group';\nimport { Resource } from '../../interfaces/resource';\nimport { SchedulerStampWithSlots } from '../../interfaces/scheduler-stamp-with-slots';\nimport { WeekOptions } from '../../interfaces/week-options';\nimport { TimelineOptions } from '../../interfaces/timeline-options';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n selector: 'bs-scheduler',\n templateUrl: './scheduler.component.html',\n styleUrls: ['./scheduler.component.scss'],\n standalone: false,\n})\nexport class BsSchedulerComponent {\n constructor(private sanitizer: DomSanitizer, private calendarMonthService: BsCalendarMonthService, private timelineService: BsTimelineService, private destroy: DestroyRef) {\n const monday = this.calendarMonthService.getMondayBefore(new Date());\n this.currentWeekOrMonth$ = new BehaviorSubject<Date>(monday);\n\n this.shownDays$ = combineLatest([this.currentWeekOrMonth$, this.mode$])\n .pipe(map(([currentDay, mode]) => {\n currentDay.setHours(0);\n currentDay.setMinutes(0);\n currentDay.setSeconds(0);\n currentDay.setMilliseconds(0);\n switch (mode) {\n case ESchedulerMode.week: {\n return Array.from(Array(7).keys()).map((x) => this.addDays(currentDay, x));\n }\n case ESchedulerMode.timeline: {\n const firstDay = new Date(currentDay.getFullYear(), currentDay.getMonth(), 1);\n const daysOfMonth = new Date(currentDay.getFullYear(), currentDay.getMonth() + 1, 0).getDate();\n return Array.from(Array(daysOfMonth).keys()).map((x) => this.addDays(firstDay, x));\n }\n }\n })\n );\n\n this.daysOfWeekWithTimestamps$ = this.shownDays$\n .pipe(map((shownDays) => ({ start: shownDays[0].getTime(), end: shownDays[shownDays.length - 1].getTime() + 24 * 60 * 60 * 1000 })));\n \n this.events$ = this.resources$\n .pipe(map((resourcesOrGroups) => resourcesOrGroups.map(resOrGroup => this.getResourcesForGroup(resOrGroup))))\n .pipe(map(jaggedResources => jaggedResources.reduce((flat, toFlatten) => flat.concat(toFlatten), [])))\n .pipe(map(resources => resources.map(res => res.events)))\n .pipe(map(jaggedEvents => jaggedEvents.reduce((flat, toFlatten) => flat.concat(toFlatten), [])));\n\n // groups.reduce((flat, toFlatten) => flat.concat(toFlatten.children), [])\n this.eventParts$ = this.events$.pipe(\n map((events) => events.map((ev) => this.timelineService.splitInParts(ev)))\n );\n\n this.eventPartsForThisWeek$ = combineLatest([\n this.daysOfWeekWithTimestamps$,\n this.eventParts$\n .pipe(map(eventParts => eventParts.map(evp => evp.parts)))\n .pipe(map(jaggedParts => jaggedParts.reduce((flat, toFlatten) => flat.concat(toFlatten), [])))\n ])\n .pipe(map(([startAndEnd, eventParts]) => {\n return eventParts.filter(eventPart => {\n return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));\n });\n }));\n\n this.previewEventParts$ = this.previewEvent$.pipe(\n map((event) => {\n if (event) {\n return this.timelineService.splitInParts(event)\n } else {\n return null;\n }\n })\n );\n this.previewEventPartsForThisWeek$ = combineLatest([this.daysOfWeekWithTimestamps$, this.previewEventParts$])\n .pipe(map(([startAndEnd, previewEventParts]) => {\n if (previewEventParts) {\n return previewEventParts.parts.filter(eventPart => {\n return !((eventPart.end.getTime() <= startAndEnd.start) || (eventPart.start.getTime() >= startAndEnd.end));\n });\n } else {\n return [];\n }\n }));\n\n this.timelinedEventPartsForThisWeek$ = this.eventPartsForThisWeek$\n .pipe(map(eventParts => {\n // We'll only use the events for this week\n const events = eventParts.map(ep => ep.event)\n .filter((e, i, list) => list.indexOf(e) === i)\n .filter((e) => !!e)\n .map((e) => <SchedulerEvent>e);\n const timeline = this.timelineService.getTimeline(events);\n\n const result = timeline.map(track => track.events.map(ev => ({ event: ev, index: track.index })))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), [])\n .map((evi) => eventParts.filter(p => p.event === evi.event).map(p => ({ part: p, index: evi.index })))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n\n return {\n total: timeline.length,\n parts: result\n };\n }));\n\n combineLatest([this.mode$, this.shownDays$, this.timeSlotDuration$])\n .pipe(filter(([mode, shownDays, duration]) => mode !== null))\n .pipe(map(([mode, shownDays, duration]) => {\n switch (mode) {\n case ESchedulerMode.week: {\n const timeSlotsPerDay = Math.floor((60 * 60 * 24) / duration);\n return Array.from(Array(timeSlotsPerDay).keys()).map((index) => {\n const timeslotForMonday = this.createTimeslot(shownDays[0], index, duration);\n\n return <SchedulerStampWithSlots>{\n slots: shownDays.map((day) => {\n const start = new Date(day);\n start.setHours(timeslotForMonday.start.getHours());\n start.setMinutes(timeslotForMonday.start.getMinutes());\n start.setSeconds(timeslotForMonday.start.getSeconds());\n start.setMilliseconds(timeslotForMonday.start.getMilliseconds());\n \n const end = new Date(day);\n end.setHours(timeslotForMonday.end.getHours());\n end.setMinutes(timeslotForMonday.end.getMinutes());\n end.setSeconds(timeslotForMonday.end.getSeconds());\n end.setMilliseconds(timeslotForMonday.end.getMilliseconds());\n end.setDate(end.getDate() + timeslotForMonday.end.getDate() - timeslotForMonday.start.getDate());\n \n return <TimeSlot>{ start, end };\n }),\n stamp: timeslotForMonday.start\n };\n });\n }\n case ESchedulerMode.timeline: {\n const totalTimeslots = (24 * 60 * 60) / duration;\n return shownDays.map((day) => {\n return <SchedulerStampWithSlots>{\n slots: Array.from(Array(totalTimeslots).keys())\n .map((index) => {\n return this.createTimeslot(day, index, duration);\n }),\n stamp: day\n } \n });\n }\n default: {\n throw 'Unknown value for Mode: ' + mode;\n }\n }\n }))\n .pipe(takeUntilDestroyed(this.destroy))\n .subscribe((timeslots) => {\n // For performance reasons, we're not using an observable here, but persist the timeslots in a BehaviorSubject.\n this.timeSlots$.next(timeslots);\n });\n \n this.weekOptions$.pipe(takeUntilDestroyed())\n .subscribe(weekOptions => this.weekOptionsChange.emit(weekOptions));\n this.timelineOptions$.pipe(takeUntilDestroyed())\n .subscribe(timelineOptions => this.timelineOptionsChange.emit(timelineOptions));\n\n // combineLatest([this.mode$, this.scale$])\n // .pipe(filter(([mode, scale]) => mode === ESchedulerMode.timeline))\n\n import('bootstrap-icons/icons/chevron-left.svg').then((icon) => {\n this.chevronLeft = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n import('bootstrap-icons/icons/chevron-right.svg').then((icon) => {\n this.chevronRight = sanitizer.bypassSecurityTrustHtml(icon.default);\n });\n }\n\n chevronLeft?: SafeHtml;\n chevronRight?: SafeHtml;\n resources$ = new BehaviorSubject<(Resource | ResourceGroup)[]>([]);\n events$: Observable<SchedulerEvent[]>;\n eventParts$: Observable<SchedulerEventWithParts[]>;\n eventPartsForThisWeek$: Observable<SchedulerEventPart[]>;\n timelinedEventPartsForThisWeek$: Observable<{ total: number, parts: { part: SchedulerEventPart, index: number}[] }>;\n weekOptions$ = new BehaviorSubject<WeekOptions>({ unitHeight: 30 });\n timelineOptions$ = new BehaviorSubject<TimelineOptions>({ unitWidth: 50 });\n \n previewEvent$ = new BehaviorSubject<PreviewEvent | null>(null);\n previewEventParts$: Observable<SchedulerEventWithParts | null>;\n previewEventPartsForThisWeek$: Observable<SchedulerEventPart[]>;\n \n currentWeekOrMonth$: BehaviorSubject<Date>;\n shownDays$: Observable<Date[]>;\n daysOfWeekWithTimestamps$: Observable<{start: number, end: number}>;\n timeSlotDuration$ = new BehaviorSubject<number>(1800);\n timeSlots$ = new BehaviorSubject<SchedulerStampWithSlots[]>([]);\n mouseState$ = new BehaviorSubject<boolean>(false);\n hoveredTimeSlot$ = new BehaviorSubject<TimeSlot | null>(null);\n hoveredEvent$ = new BehaviorSubject<SchedulerEvent | null>(null);\n resourceGroupPresenterCounter = 1;\n\n @ViewChildren('slot') timeSlotElements!: QueryList<ElementRef<HTMLDivElement>>;\n\n createTimeslot(date: Date, index: number, duration: number) {\n const timeSlotStart = new Date(date);\n timeSlotStart.setTime(+timeSlotStart.getTime() + index * duration * 1000);\n const timeSlotEnd = new Date(timeSlotStart);\n timeSlotEnd.setTime(+timeSlotEnd.getTime() + duration * 1000);\n\n return <TimeSlot>{ start: timeSlotStart, end: timeSlotEnd };\n }\n\n getResourcesForGroup(resourceOrGroup: Resource | ResourceGroup) : Resource[] {\n if ('children' in resourceOrGroup) {\n return resourceOrGroup.children\n .map((child) => this.getResourcesForGroup(child))\n .reduce((flat, toFlatten) => flat.concat(toFlatten), []);\n } else {\n return [resourceOrGroup];\n }\n }\n\n //#region Mode\n modes = ESchedulerMode;\n mode$ = new BehaviorSubject<ESchedulerMode>(ESchedulerMode.week);\n @Output() public modeChange = new EventEmitter<ESchedulerMode>();\n public get mode() {\n return this.mode$.value;\n }\n @Input() public set mode(value: ESchedulerMode) {\n this.mode$.next(value);\n }\n //#endregion\n // //#region Scale\n // scale$ = new BehaviorSubject<SchedulerScale>(availableScales[4]);\n // @Output() public scaleChange = new EventEmitter<SchedulerScale>();\n // public get scale() {\n // return this.scale$.value;\n // }\n // @Input() public set scale(value: SchedulerScale) {\n // this.scale$.next(value);\n // }\n // //#endregion\n //#region WeekOptions\n @Output() public weekOptionsChange = new EventEmitter<WeekOptions>();\n public get weekOptions() {\n return this.weekOptions$.value;\n }\n @Input() public set weekOptions(value: WeekOptions) {\n this.weekOptions$.next(value);\n }\n //#endregion\n //#region TimelineOptions\n @Output() public timelineOptionsChange = new EventEmitter<TimelineOptions>();\n public get timelineOptions() {\n return this.timelineOptions$.value;\n }\n @Input() public set timelineOptions(value: TimelineOptions) {\n this.timelineOptions$.next(value);\n }\n //#endregion\n //#region maxInnerHeight\n @Input() public maxInnerHeight: number | null = null;\n //#endregion\n //#region Resources\n public get resources() {\n return this.resources$.value;\n }\n @Input() public set resources(value: (Resource | ResourceGroup)[]) {\n this.resources$.next(value);\n }\n //#endregion\n\n private addDays(date: Date, days: number) {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n }\n\n onPreviousWeekOrMonth() {\n this.onChangeWeekOrMonth(false);\n }\n\n onNextWeekOrMonth() {\n this.onChangeWeekOrMonth(true);\n }\n\n private onChangeWeekOrMonth(next: boolean) {\n combineLatest([this.currentWeekOrMonth$, this.mode$])\n .pipe(map(([currentWeekOrMonth, mode]) => {\n switch (mode) {\n case ESchedulerMode.week: {\n return this.addDays(currentWeekOrMonth, (next ? 7 : -7));\n }\n case ESchedulerMode.timeline: {\n return new Date(currentWeekOrMonth.getFullYear(), currentWeekOrMonth.getMonth() + (next ? 1 : -1), 1);\n }\n }\n }), take(1), takeUntilDestroyed(this.destroy))\n .subscribe((w) => this.currentWeekOrMonth$.next(w));\n }\n\n onHoverEvent(ev: SchedulerEvent | null) {\n this.hoveredEvent$.next(ev);\n }\n\n onLeaveEvent(ev: SchedulerEvent | null) {\n this.hoveredEvent$.next(null);\n }\n\n operation: DragOperation | null = null;\n dragStartTimeslot: TimeSlot | null = null;\n onCreateEvent(ev: MouseEvent, slot: TimeSlot) {\n ev.preventDefault();\n this.mouseState$.next(true);\n this.dragStartTimeslot = slot;\n this.operation = {\n operation: EDragOperation.createEvent,\n event: {\n start: slot.start,\n end: slot.end,\n color: '#F00',\n description: 'Test event',\n },\n meta: null,\n };\n this.previewEvent$.next({ start: slot.start, end: slot.end });\n }\n\n randomColor() {\n const brightness = 128;\n return '#' + this.randomChannel(brightness) + this.randomChannel(brightness) + this.randomChannel(brightness);\n }\n randomChannel(brightness: number){\n const r = 255-brightness;\n const n = 0|((Math.random() * r) + brightness);\n const s = n.toString(16);\n return (s.length==1) ? '0'+s : s;\n }\n\n onStartDragEvent(eventPart: SchedulerEventPart, ev: MouseEvent) {\n ev.preventDefault();\n this.hoveredTimeSlot$.pipe(take(1), takeUntilDestroyed(this.destroy)).subscribe((hoveredTimeSlot) => {\n if (eventPart.event) {\n this.dragStartTimeslot = hoveredTimeSlot;\n this.operation = {\n operation: EDragOperation.moveEvent,\n event: eventPart.event,\n meta: null,\n };\n this.previewEvent$.next({ start: eventPart.event.start, end: eventPart.event.end });\n }\n });\n }\n\n onStartResizeEvent(event: SchedulerEvent | null, position: 'top' | 'bottom') {\n if (event) {\n switch (position) {\n case 'top': {\n this.operation = {\n operation: EDragOperation.resizeEvent,\n event: event,\n meta: { position },\n }\n this.previewEvent$.next({ start: event.start, end: event.end });\n } break;\n case 'bottom': {\n this.operation = {\n operation: EDragOperation.resizeEvent,\n event: event,\n meta: { position },\n }\n this.previewEvent$.next({ start: event.start, end: event.end });\n } break;\n }\n }\n }\n\n //#region hoveredTimeslot$\n private getHoveredTimeslot(ev: MouseEvent, timeSlots: SchedulerStampWithSlots[]) {\n const hoveredSlots = this.timeSlotElements.filter((el) => {\n const rct = el.nativeElement.getBoundingClientRect();\n if (rct.left <= ev.x && ev.x <= rct.right && rct.top <= ev.y && ev.y <= rct.bottom) {\n return true;\n } else {\n return false;\n }\n });\n\n if (!hoveredSlots || hoveredSlots.length === 0) {\n return null;\n }\n\n const slotElement = hoveredSlots[0].nativeElement;\n\n const strRow = slotElement.getAttribute('data-row');\n if (!strRow) {\n return null;\n }\n const row = parseInt(strRow);\n\n const strColumn = slotElement.getAttribute('data-column');\n if (!strColumn) {\n return null;\n }\n const column = parseInt(strColumn);\n\n const slot = timeSlots[row].slots[column];\n return slot;\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMousemove(ev: MouseEvent) {\n this.timeSlots$.pipe(take(1), takeUntilDestroyed(this.destroy)).subscribe((timeSlots) => {\n const hovered = this.getHoveredTimeslot(ev, timeSlots);\n this.hoveredTimeSlot$.next(hovered);\n\n if (this.operation) {\n switch (this.operation.operation) {\n case EDragOperation.createEvent: {\n if (this.operation.event && this.dragStartTimeslot && hovered && (this.operation.event.end.getTime() != hovered.end.getTime())) {\n if (this.dragStartTimeslot.start.getTime() === hovered.start.getTime()) {\n // 1 slot\n } else if (this.dragStartTimeslot.start.getTime() < hovered.start.getTime()) {\n // Drag down\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n ev.start = this.dragStartTimeslot.start;\n ev.end = hovered.end;\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n } else if (this.dragStartTimeslot.start.getTime() > hovered.start.getTime()) {\n // Drag up\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n ev.start = hovered.start;\n ev.end = this.dragStartTimeslot.end;\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n }\n }\n } break;\n case EDragOperation.moveEvent: {\n if (hovered && this.dragStartTimeslot) {\n this.previewEvent$\n .pipe(filter((ev) => !!ev && !!this.dragStartTimeslot))\n .pipe(map((ev) => {\n if (ev && this.dragStartTimeslot) {\n const result = <PreviewEvent>{\n start: new Date(ev.start.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime()),\n end: new Date(ev.end.getTime() + hovered.start.getTime() - this.dragStartTimeslot.start.getTime())\n };\n \n this.dragStartTimeslot = hovered;\n\n return result;\n } else {\n return ev;\n }\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(ev => this.previewEvent$.next(ev));\n }\n } break;\n case EDragOperation.resizeEvent: {\n if (hovered) {\n this.previewEvent$\n .pipe(filter((ev) => !!ev))\n .pipe(map((ev) => {\n if (ev && this.operation && this.operation.event) {\n if (this.operation.meta.position === 'top') {\n ev.start = hovered.start;\n ev.end = this.operation.event.end;\n } else if (this.operation.meta.position === 'bottom') {\n ev.start = this.operation.event.start;\n ev.end = hovered.end;\n }\n }\n return ev;\n }))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((ev) => this.previewEvent$.next(ev));\n }\n } break;\n }\n }\n\n });\n }\n //#endregion\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(ev: MouseEvent) {\n if (this.operation) {\n switch (this.operation.operation) {\n case EDragOperation.createEvent: {\n combineLatest([this.previewEvent$])\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(([previewEvent]) => {\n if (previewEvent) {\n this.operation = null;\n this.dragStartTimeslot = null;\n this.resources$.next([\n ...this.resources$.value,\n <Resource>{\n description: 'New resource group',\n events: [{\n start: previewEvent.start,\n end: previewEvent.end,\n color: this.randomColor(),\n description: 'New event'\n }]\n }\n ]);\n this.previewEvent$.next(null);\n }\n });\n } break;\n case EDragOperation.moveEvent:\n case EDragOperation.resizeEvent: {\n this.previewEvent$\n .pipe(filter((ev) => !!ev))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe((previewEvent) => {\n if (this.operation && this.operation.event && previewEvent) {\n this.operation.event.start = previewEvent.start;\n this.operation.event.end = previewEvent.end;\n this.operation = null;\n this.dragStartTimeslot = null;\n this.resources$.next(this.resources$.value);\n this.previewEvent$.next(null);\n }\n });\n } break;\n }\n }\n }\n}\n","@switch (mode$ | async) {\n @case (modes.week) {\n <div class=\"d-flex flex-column w-100 overflow-y-auto mb-0 week-schedule\" [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)=\"onPreviousWeekOrMonth()\">\n <span [innerHTML]=\"chevronLeft\" class=\"px-0\"></span>\n </button>\n <button class=\"btn btn-default flex-end\" (click)=\"onNextWeekOrMonth()\">\n <span [innerHTML]=\"chevronRight\" class=\"px-0\"></span>\n </button>\n </div>\n @for (day of (shownDays$ | async); track day) {\n <div class=\"flex-grow-1 calendar-head-cell\">\n <span class=\"d-block col-form-label text-center text-nowrap\">\n <span>{{ day | date: 'dd-MM' }}</span><span class=\"d-none d-lg-inline-block\">-{{ day | date: 'yyyy' }}</span>\n </span>\n </div>\n }\n </div>\n </div>\n <div class=\"calendar-body\" [style.height.px]=\"maxInnerHeight\">\n @if (timeSlots$ | async; as row) {\n <div class=\"position-relative\">\n @if (weekOptions$ | async; as weekOptions) {\n <!-- Timeslots -->\n @for (timeslots of row; track timeslots; let i = $index) {\n <div class=\"d-flex flex-row p-0 timeslot\" [style.height.px]=\"weekOptions.unitHeight\">\n <div class=\"calendar-cell calendar-left align-top px-2 py-0\">{{ timeslots.slots[0].start | date: 'HH:mm:ss' }}</div>\n @for (slot of timeslots.slots; track slot.start; let j = $index) {\n <div class=\"calendar-cell flex-grow-1\" #slot (mousedown)=\"onCreateEvent($event, slot)\" [attr.data-row]=\"i\" [attr.data-column]=\"j\"></div>\n }\n </div>\n }\n \n <!-- Events -->\n @if (timeSlotDuration$ | async; as timeSlotDuration) {\n @if (timelinedEventPartsForThisWeek$ | async; as partData) {\n @for (eventPart of partData.parts; track eventPart) {\n <div class=\"event p-0\"\n [style.top.px]=\"(eventPart.part | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart.part | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner\" [class.hover]=\"(hoveredEvent$ | async) === eventPart.part.event\"\n [style.width]=\"'calc(100% / ' + partData.total + ')'\"\n [style.height.px]=\"(eventPart.part | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.margin-left]=\"'calc(100% / ' + partData.total + ' * ' + eventPart.index + ')'\">\n \n @if (eventPart.part.start === eventPart.part.event?.start) {\n <div class=\"event-resize top\" (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'top')\"></div>\n }\n <div class=\"event-border\"></div>\n @if (eventPart.part.event) {\n <div class=\"event-wrapper\"\n (mousedown)=\"onStartDragEvent(eventPart.part, $event)\"\n (mouseenter)=\"onHoverEvent(eventPart.part.event)\"\n (mouseleave)=\"onLeaveEvent(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 </div>\n }\n @if (eventPart.part.end === eventPart.part.event?.end) {\n <div class=\"event-resize bottom\" (mousedown)=\"onStartResizeEvent(eventPart.part.event, 'bottom')\"></div>\n }\n </div>\n </div>\n }\n }\n @if (previewEventPartsForThisWeek$ | async; as previewPartData) {\n @for (eventPart of previewPartData; track eventPart) {\n <div class=\"event preview p-0\"\n [style.top.px]=\"(eventPart | bsSecondsTodayOffset) / timeSlotDuration * weekOptions.unitHeight\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\"\n [style.left]=\"'calc(90px + ((100% - 90px) / 7 * ' + ((eventPart | dayOfWeek) - 1) + '))'\">\n <div class=\"event-inner w-100\"\n [style.height.px]=\"(eventPart | bsSecondsTimespan) / timeSlotDuration * weekOptions.unitHeight\">\n </div>\n </div>\n }\n }\n }\n }\n </div>\n }\n </div>\n </div>\n }\n @case (modes.timeline) {\n <div class=\"d-flex flex-column-100 overflow-y-auto mb-0 bg-white timeline\">\n <div class=\"calendar-head d-flex\">\n <button class=\"btn flex-start\" (click)=\"onPreviousWeekOrMonth()\">\n <span [innerHTML]=\"chevronLeft\" class=\"px-0\"></span>\n </button>\n <div class=\"flex-grow-1 h3 py-2 mb-0 text-center\">{{ currentWeekOrMonth$ | async | date: 'MMMM yyyy' }}</div>\n <button class=\"btn flex-start\" (click)=\"onNextWeekOrMonth()\">\n <span [innerHTML]=\"chevronRight\" class=\"px-0\"></span>\n </button>\n </div>\n \n <div class=\"calendar-body table-responsive overflow-x-auto\">\n <table class=\"table mb-0\">\n @if (timeSlots$ | async; as timeSlots) {\n <tr>\n <td></td>\n @for (day of timeSlots; track day) {\n <td [attr.colspan]=\"day.slots.length\" class=\"text-center px-2\">\n <span class=\"position-sticky day-label\">{{ day.stamp | date: 'd EE' }}</span>\n </td>\n }\n </tr>\n <tr>\n <td></td>\n @if (timelineOptions$ | async; as timelineOptions) {\n @for (day of timeSlots; track day) {\n @for (slot of day.slots; track slot) {\n <td>\n <span class=\"d-block p-0 text-center\" [style.width.px]=\"timelineOptions.unitWidth\">\n {{ slot.start | date: 'HH:mm' }}\n </span>\n </td>\n }\n }\n }\n </tr>\n @for (group of (resources$ | async); track group) {\n <bs-resource-group-presenter [resourceGroup]=\"group\" [timeSlots]=\"timeSlots\"></bs-resource-group-presenter>\n }\n }\n </table>\n </div>\n </div>\n }\n}","import { SchedulerScale } from \"../interfaces/scheduler-schale\";\n\nexport const availableScales: SchedulerScale[] = [\n { time: 60, pixels: 60, markerSize: 900 }, // 60s / 60px = 1 s/px = 1 min / 60 px\n { time: 120, pixels: 60, markerSize: 900 }, // 120s / 60px = 2 s/px = 2 min / 60 px\n { time: 300, pixels: 60, markerSize: 900 }, // 180s / 60px = 3 s/px = 5 min / 60 px\n { time: 900, pixels: 60, markerSize: 900 }, // 360s / 60px = 6 s/px = 15 min / 60 px\n\n { time: 3600, pixels: 60, markerSize: 21600 }, // 600s / 60px = 10 s/px = 1 u / 60 px\n { time: 7200, pixels: 60, markerSize: 21600 }, // 1200s / 60px = 20 s/px\n { time: 10800, pixels: 60, markerSize: 21600 }, // 1800s / 60px = 30 s/px\n { time: 21600, pixels: 60, markerSize: 21600 }, // 3600s / 60px = 60 s/px\n\n { time: 86400, pixels: 60, markerSize: 604800 }, // 6000s / 60px = 100 s/px\n]","import { Pipe, PipeTransform } from '@angular/core';\nimport { SchedulerEventPart } from '../../interfaces/scheduler-event-part';\n\n@Pipe({\n name: 'dateOffset',\n standalone: false,\n})\nexport class DateOffsetPipe implements PipeTransform {\n transform(value: SchedulerEventPart) {\n const today = new Date(value.start);\n today.setHours(0); today.setMinutes(0); today.setSeconds(0);\n\n return (value.start.getTime() - today.getTime()) / 1000;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsSecondsTimespanPipe } from './pipes/bs-seconds-timespan.pipe/bs-seconds-timespan.pipe';\nimport { BsSecondsTodayOffsetPipe } from './pipes/bs-seconds-today-offset/bs-seconds-today-offset.pipe';\nimport { DateOffsetPipe } from './pipes/date-offset/date-offset.pipe';\nimport { DayOfWeekPipe } from './pipes/day-of-week/day-of-week.pipe';\nimport { BsSchedulerComponent } from './components/scheduler/scheduler.component';\nimport { ResourceGroupPresenterComponent } from './components/resource-group-presenter/resource-group-presenter.component';\n\n@NgModule({\n declarations: [\n BsSchedulerComponent,\n BsSecondsTimespanPipe,\n BsSecondsTodayOffsetPipe,\n DateOffsetPipe,\n DayOfWeekPipe,\n ResourceGroupPresenterComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n BsSchedulerComponent,\n ResourceGroupPresenterComponent\n ]\n})\nexport class BsSchedulerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3.BsTimelineService","i4.ResourceGroupPresenterComponent","i6.BsSecondsTimespanPipe","i7.BsSecondsTodayOffsetPipe","i8.DayOfWeekPipe"],"mappings":"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"}
|