@dereekb/dbx-web 9.23.17 → 9.23.18
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/calendar/esm2020/lib/calendar.base.component.mjs +20 -10
- package/calendar/esm2020/lib/calendar.store.mjs +70 -12
- package/calendar/fesm2015/dereekb-dbx-web-calendar.mjs +91 -23
- package/calendar/fesm2015/dereekb-dbx-web-calendar.mjs.map +1 -1
- package/calendar/fesm2020/dereekb-dbx-web-calendar.mjs +91 -23
- package/calendar/fesm2020/dereekb-dbx-web-calendar.mjs.map +1 -1
- package/calendar/lib/calendar.base.component.d.ts +7 -1
- package/calendar/lib/calendar.store.d.ts +53 -4
- package/calendar/package.json +2 -2
- package/esm2020/calendar/lib/calendar.base.component.mjs +20 -10
- package/esm2020/calendar/lib/calendar.store.mjs +70 -12
- package/esm2020/lib/layout/text/detail.block.component.mjs +3 -3
- package/esm2020/mapbox/lib/mapbox.marker.component.mjs +2 -2
- package/fesm2015/dereekb-dbx-web-calendar.mjs +91 -23
- package/fesm2015/dereekb-dbx-web-calendar.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-web-mapbox.mjs +1 -1
- package/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-web.mjs +2 -2
- package/fesm2015/dereekb-dbx-web.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-web-calendar.mjs +91 -23
- package/fesm2020/dereekb-dbx-web-calendar.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-web-mapbox.mjs +1 -1
- package/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-web.mjs +2 -2
- package/fesm2020/dereekb-dbx-web.mjs.map +1 -1
- package/lib/extension/calendar/_calendar.scss +5 -3
- package/lib/extension/calendar/style/_variables.scss +4 -0
- package/lib/extension/calendar/style/month/calendar-month-view.scss +2 -0
- package/lib/extension/calendar/style/week/calendar-week-view.scss +5 -0
- package/lib/layout/flex/_flex.scss +2 -1
- package/mapbox/esm2020/lib/mapbox.marker.component.mjs +2 -2
- package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs +1 -1
- package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs +1 -1
- package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/mapbox/package.json +3 -3
- package/package.json +3 -3
- package/table/package.json +3 -3
|
@@ -4,18 +4,22 @@ import { DbxCalendarStore } from './calendar.store';
|
|
|
4
4
|
import { map, withLatestFrom } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "./calendar.store";
|
|
7
|
-
import * as i2 from "@angular/
|
|
8
|
-
import * as i3 from "@angular/material/
|
|
9
|
-
import * as i4 from "@
|
|
10
|
-
import * as i5 from "@
|
|
11
|
-
import * as i6 from "@angular/flex-layout/
|
|
12
|
-
import * as i7 from "@angular/
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
|
+
import * as i3 from "@angular/material/icon";
|
|
9
|
+
import * as i4 from "@angular/material/button";
|
|
10
|
+
import * as i5 from "@dereekb/dbx-web";
|
|
11
|
+
import * as i6 from "@angular/flex-layout/flex";
|
|
12
|
+
import * as i7 from "@angular/flex-layout/extended";
|
|
13
13
|
import * as i8 from "angular-calendar";
|
|
14
14
|
export class DbxCalendarBaseComponent {
|
|
15
15
|
constructor(calendarStore) {
|
|
16
16
|
this.calendarStore = calendarStore;
|
|
17
17
|
this.viewDate$ = this.calendarStore.date$;
|
|
18
|
-
this.
|
|
18
|
+
this.showTodayButton$ = this.calendarStore.showTodayButton$;
|
|
19
|
+
this.canJumpToToday$ = this.calendarStore.canJumpToToday$;
|
|
20
|
+
this.isLookingAtMinimumDate$ = this.calendarStore.isLookingAtMinimumDate$;
|
|
21
|
+
this.isLookingAtMaximumDate$ = this.calendarStore.isLookingAtMaximumDate$;
|
|
22
|
+
this.showPageButtons$ = this.calendarStore.canShowPageButtons$;
|
|
19
23
|
this.activeDayIsOpen$ = this.calendarStore.eventsForDateState$.pipe(withLatestFrom(this.calendarStore.date$), map(([x, date]) => {
|
|
20
24
|
if (x.events.length && isSameMonth(x.date, date)) {
|
|
21
25
|
return !x.dateTappedTwice;
|
|
@@ -27,20 +31,26 @@ export class DbxCalendarBaseComponent {
|
|
|
27
31
|
todayClicked() {
|
|
28
32
|
this.calendarStore.tapDay(new Date());
|
|
29
33
|
}
|
|
34
|
+
firstPageButtonClicked() {
|
|
35
|
+
this.calendarStore.tapFirstPage();
|
|
36
|
+
}
|
|
30
37
|
nextButtonClicked() {
|
|
31
38
|
this.calendarStore.tapNext();
|
|
32
39
|
}
|
|
33
40
|
previousButtonClicked() {
|
|
34
41
|
this.calendarStore.tapPrevious();
|
|
35
42
|
}
|
|
43
|
+
lastPageButtonClicked() {
|
|
44
|
+
this.calendarStore.tapLastPage();
|
|
45
|
+
}
|
|
36
46
|
typeToggleChanged(event) {
|
|
37
47
|
this.calendarStore.setDisplayType(event.value);
|
|
38
48
|
}
|
|
39
49
|
}
|
|
40
50
|
DbxCalendarBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxCalendarBaseComponent, deps: [{ token: i1.DbxCalendarStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
-
DbxCalendarBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxCalendarBaseComponent, selector: "dbx-calendar-base", ngImport: i0, template: "<div class=\"dbx-calendar\">\n <h3 class=\"dbx-calendar-title\">{{ (viewDate$ | async)! | calendarDate: (displayType$ | async) + 'ViewTitle':'en' }}</h3>\n <div class=\"dbx-calendar-header\">\n <div class=\"dbx-calendar-controls\" fxLayout=\"row\" fxLayout.xs=\"column\" ngClass.xs=\"dbx-calendar-controls-compact\">\n <span class=\"dbx-calendar-controls-left\" fxFlex=\"nogrow\">\n <button mat-stroked-button [disabled]=\"
|
|
51
|
+
DbxCalendarBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxCalendarBaseComponent, selector: "dbx-calendar-base", ngImport: i0, template: "<div class=\"dbx-calendar\">\n <h3 class=\"dbx-calendar-title\">{{ (viewDate$ | async)! | calendarDate: (displayType$ | async) + 'ViewTitle':'en' }}</h3>\n <div class=\"dbx-calendar-header\">\n <div class=\"dbx-calendar-controls\" fxLayout=\"row\" fxLayout.xs=\"column\" ngClass.xs=\"dbx-calendar-controls-compact\">\n <span class=\"dbx-calendar-controls-left\" fxFlex=\"nogrow\">\n <button *ngIf=\"showTodayButton$ | async\" mat-stroked-button [disabled]=\"!(canJumpToToday$ | async)\" (click)=\"todayClicked()\">Today</button>\n <dbx-button-spacer></dbx-button-spacer>\n <div class=\"d-iblock\">\n <button *ngIf=\"showPageButtons$ | async\" mat-icon-button [disabled]=\"isLookingAtMinimumDate$ | async\" aria-label=\"first page button\" (click)=\"firstPageButtonClicked()\">\n <mat-icon>first_page</mat-icon>\n </button>\n <button mat-icon-button [disabled]=\"isLookingAtMinimumDate$ | async\" [attr.aria-label]=\"'Previous ' + (displayType$ | async) + ' button'\" (click)=\"previousButtonClicked()\">\n <mat-icon>navigate_before</mat-icon>\n </button>\n <button mat-icon-button [disabled]=\"isLookingAtMaximumDate$ | async\" [attr.aria-label]=\"'Next' + (displayType$ | async)! + ' button'\" (click)=\"nextButtonClicked()\">\n <mat-icon>navigate_next</mat-icon>\n </button>\n <button *ngIf=\"showPageButtons$ | async\" mat-icon-button [disabled]=\"isLookingAtMaximumDate$ | async\" aria-label=\"last page button\" (click)=\"lastPageButtonClicked()\">\n <mat-icon>last_page</mat-icon>\n </button>\n </div>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"dbx-calendar-controls-right\" fxFlex=\"nogrow\">\n <ng-content select=\"[controls]\"></ng-content>\n </span>\n </div>\n </div>\n <ng-content></ng-content>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i5.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.ɵCalendarDatePipe, name: "calendarDate" }] });
|
|
42
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxCalendarBaseComponent, decorators: [{
|
|
43
53
|
type: Component,
|
|
44
|
-
args: [{ selector: 'dbx-calendar-base', template: "<div class=\"dbx-calendar\">\n <h3 class=\"dbx-calendar-title\">{{ (viewDate$ | async)! | calendarDate: (displayType$ | async) + 'ViewTitle':'en' }}</h3>\n <div class=\"dbx-calendar-header\">\n <div class=\"dbx-calendar-controls\" fxLayout=\"row\" fxLayout.xs=\"column\" ngClass.xs=\"dbx-calendar-controls-compact\">\n <span class=\"dbx-calendar-controls-left\" fxFlex=\"nogrow\">\n <button mat-stroked-button [disabled]=\"
|
|
54
|
+
args: [{ selector: 'dbx-calendar-base', template: "<div class=\"dbx-calendar\">\n <h3 class=\"dbx-calendar-title\">{{ (viewDate$ | async)! | calendarDate: (displayType$ | async) + 'ViewTitle':'en' }}</h3>\n <div class=\"dbx-calendar-header\">\n <div class=\"dbx-calendar-controls\" fxLayout=\"row\" fxLayout.xs=\"column\" ngClass.xs=\"dbx-calendar-controls-compact\">\n <span class=\"dbx-calendar-controls-left\" fxFlex=\"nogrow\">\n <button *ngIf=\"showTodayButton$ | async\" mat-stroked-button [disabled]=\"!(canJumpToToday$ | async)\" (click)=\"todayClicked()\">Today</button>\n <dbx-button-spacer></dbx-button-spacer>\n <div class=\"d-iblock\">\n <button *ngIf=\"showPageButtons$ | async\" mat-icon-button [disabled]=\"isLookingAtMinimumDate$ | async\" aria-label=\"first page button\" (click)=\"firstPageButtonClicked()\">\n <mat-icon>first_page</mat-icon>\n </button>\n <button mat-icon-button [disabled]=\"isLookingAtMinimumDate$ | async\" [attr.aria-label]=\"'Previous ' + (displayType$ | async) + ' button'\" (click)=\"previousButtonClicked()\">\n <mat-icon>navigate_before</mat-icon>\n </button>\n <button mat-icon-button [disabled]=\"isLookingAtMaximumDate$ | async\" [attr.aria-label]=\"'Next' + (displayType$ | async)! + ' button'\" (click)=\"nextButtonClicked()\">\n <mat-icon>navigate_next</mat-icon>\n </button>\n <button *ngIf=\"showPageButtons$ | async\" mat-icon-button [disabled]=\"isLookingAtMaximumDate$ | async\" aria-label=\"last page button\" (click)=\"lastPageButtonClicked()\">\n <mat-icon>last_page</mat-icon>\n </button>\n </div>\n </span>\n <span class=\"spacer\"></span>\n <span class=\"dbx-calendar-controls-right\" fxFlex=\"nogrow\">\n <ng-content select=\"[controls]\"></ng-content>\n </span>\n </div>\n </div>\n <ng-content></ng-content>\n</div>\n" }]
|
|
45
55
|
}], ctorParameters: function () { return [{ type: i1.DbxCalendarStore }]; } });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuYmFzZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuYmFzZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPM0MsTUFBTSxPQUFPLHdCQUF3QjtJQXVCbkMsWUFBNEIsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBdEJyRCxjQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFFckMscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDO1FBRXJELDRCQUF1QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7UUFDckUsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztRQUNyRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDO1FBRTFELHFCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNyRSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNoRCxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQzthQUMzQjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVPLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFFUyxDQUFDO0lBRWxFLFlBQVk7UUFDVixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQTRCO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDOztzSEEvQ1Usd0JBQXdCOzBHQUF4Qix3QkFBd0IseURDVnJDLCszREE4QkE7NEZEcEJhLHdCQUF3QjtrQkFKcEMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzU2FtZU1vbnRoIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTdG9yZSB9IGZyb20gJy4vY2FsZW5kYXIuc3RvcmUnO1xuaW1wb3J0IHsgbWFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1jYWxlbmRhci1iYXNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmJhc2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERieENhbGVuZGFyQmFzZUNvbXBvbmVudDxUPiB7XG4gIHJlYWRvbmx5IHZpZXdEYXRlJCA9IHRoaXMuY2FsZW5kYXJTdG9yZS5kYXRlJDtcblxuICByZWFkb25seSBzaG93VG9kYXlCdXR0b24kID0gdGhpcy5jYWxlbmRhclN0b3JlLnNob3dUb2RheUJ1dHRvbiQ7XG4gIHJlYWRvbmx5IGNhbkp1bXBUb1RvZGF5JCA9IHRoaXMuY2FsZW5kYXJTdG9yZS5jYW5KdW1wVG9Ub2RheSQ7XG5cbiAgcmVhZG9ubHkgaXNMb29raW5nQXRNaW5pbXVtRGF0ZSQgPSB0aGlzLmNhbGVuZGFyU3RvcmUuaXNMb29raW5nQXRNaW5pbXVtRGF0ZSQ7XG4gIHJlYWRvbmx5IGlzTG9va2luZ0F0TWF4aW11bURhdGUkID0gdGhpcy5jYWxlbmRhclN0b3JlLmlzTG9va2luZ0F0TWF4aW11bURhdGUkO1xuICByZWFkb25seSBzaG93UGFnZUJ1dHRvbnMkID0gdGhpcy5jYWxlbmRhclN0b3JlLmNhblNob3dQYWdlQnV0dG9ucyQ7XG5cbiAgcmVhZG9ubHkgYWN0aXZlRGF5SXNPcGVuJCA9IHRoaXMuY2FsZW5kYXJTdG9yZS5ldmVudHNGb3JEYXRlU3RhdGUkLnBpcGUoXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy5jYWxlbmRhclN0b3JlLmRhdGUkKSxcbiAgICBtYXAoKFt4LCBkYXRlXSkgPT4ge1xuICAgICAgaWYgKHguZXZlbnRzLmxlbmd0aCAmJiBpc1NhbWVNb250aCh4LmRhdGUsIGRhdGUpKSB7XG4gICAgICAgIHJldHVybiAheC5kYXRlVGFwcGVkVHdpY2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXlUeXBlJCA9IHRoaXMuY2FsZW5kYXJTdG9yZS5kaXNwbGF5VHlwZSQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNhbGVuZGFyU3RvcmU6IERieENhbGVuZGFyU3RvcmU8VD4pIHt9XG5cbiAgdG9kYXlDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsZW5kYXJTdG9yZS50YXBEYXkobmV3IERhdGUoKSk7XG4gIH1cblxuICBmaXJzdFBhZ2VCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsZW5kYXJTdG9yZS50YXBGaXJzdFBhZ2UoKTtcbiAgfVxuXG4gIG5leHRCdXR0b25DbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsZW5kYXJTdG9yZS50YXBOZXh0KCk7XG4gIH1cblxuICBwcmV2aW91c0J1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxlbmRhclN0b3JlLnRhcFByZXZpb3VzKCk7XG4gIH1cblxuICBsYXN0UGFnZUJ1dHRvbkNsaWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxlbmRhclN0b3JlLnRhcExhc3RQYWdlKCk7XG4gIH1cblxuICB0eXBlVG9nZ2xlQ2hhbmdlZChldmVudDogTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5jYWxlbmRhclN0b3JlLnNldERpc3BsYXlUeXBlKGV2ZW50LnZhbHVlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1jYWxlbmRhclwiPlxuICA8aDMgY2xhc3M9XCJkYngtY2FsZW5kYXItdGl0bGVcIj57eyAodmlld0RhdGUkIHwgYXN5bmMpISB8IGNhbGVuZGFyRGF0ZTogKGRpc3BsYXlUeXBlJCB8IGFzeW5jKSArICdWaWV3VGl0bGUnOidlbicgfX08L2gzPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWNhbGVuZGFyLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtY2FsZW5kYXItY29udHJvbHNcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0LnhzPVwiY29sdW1uXCIgbmdDbGFzcy54cz1cImRieC1jYWxlbmRhci1jb250cm9scy1jb21wYWN0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRieC1jYWxlbmRhci1jb250cm9scy1sZWZ0XCIgZnhGbGV4PVwibm9ncm93XCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93VG9kYXlCdXR0b24kIHwgYXN5bmNcIiBtYXQtc3Ryb2tlZC1idXR0b24gW2Rpc2FibGVkXT1cIiEoY2FuSnVtcFRvVG9kYXkkIHwgYXN5bmMpXCIgKGNsaWNrKT1cInRvZGF5Q2xpY2tlZCgpXCI+VG9kYXk8L2J1dHRvbj5cbiAgICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWlibG9ja1wiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UGFnZUJ1dHRvbnMkIHwgYXN5bmNcIiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cImlzTG9va2luZ0F0TWluaW11bURhdGUkIHwgYXN5bmNcIiBhcmlhLWxhYmVsPVwiZmlyc3QgcGFnZSBidXR0b25cIiAoY2xpY2spPVwiZmlyc3RQYWdlQnV0dG9uQ2xpY2tlZCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Zmlyc3RfcGFnZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cImlzTG9va2luZ0F0TWluaW11bURhdGUkIHwgYXN5bmNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidQcmV2aW91cyAnICsgKGRpc3BsYXlUeXBlJCB8IGFzeW5jKSArICcgYnV0dG9uJ1wiIChjbGljayk9XCJwcmV2aW91c0J1dHRvbkNsaWNrZWQoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPm5hdmlnYXRlX2JlZm9yZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2Rpc2FibGVkXT1cImlzTG9va2luZ0F0TWF4aW11bURhdGUkIHwgYXN5bmNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidOZXh0JyArIChkaXNwbGF5VHlwZSQgfCBhc3luYykhICsgJyBidXR0b24nXCIgKGNsaWNrKT1cIm5leHRCdXR0b25DbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5uYXZpZ2F0ZV9uZXh0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1BhZ2VCdXR0b25zJCB8IGFzeW5jXCIgbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCJpc0xvb2tpbmdBdE1heGltdW1EYXRlJCB8IGFzeW5jXCIgYXJpYS1sYWJlbD1cImxhc3QgcGFnZSBidXR0b25cIiAoY2xpY2spPVwibGFzdFBhZ2VCdXR0b25DbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5sYXN0X3BhZ2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3BhY2VyXCI+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkYngtY2FsZW5kYXItY29udHJvbHMtcmlnaHRcIiBmeEZsZXg9XCJub2dyb3dcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NvbnRyb2xzXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { isDateInDateRange } from '@dereekb/date';
|
|
2
|
+
import { clampDateToDateRange, isDateInDateRange, isFullDateRange, isSameDateDay, isSameDateRange } from '@dereekb/date';
|
|
3
3
|
import { ComponentStore } from '@ngrx/component-store';
|
|
4
4
|
import { differenceInDays, addDays, endOfDay, endOfMonth, endOfWeek, isSameDay, startOfDay, startOfMonth, startOfWeek, isBefore, isAfter } from 'date-fns';
|
|
5
|
-
import { distinctUntilChanged, first, map, shareReplay, switchMap, tap } from 'rxjs';
|
|
5
|
+
import { distinctUntilChanged, first, map, shareReplay, switchMap, tap, combineLatest } from 'rxjs';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export var CalendarDisplayType;
|
|
8
8
|
(function (CalendarDisplayType) {
|
|
@@ -11,7 +11,7 @@ export var CalendarDisplayType;
|
|
|
11
11
|
CalendarDisplayType["DAY"] = "day";
|
|
12
12
|
})(CalendarDisplayType || (CalendarDisplayType = {}));
|
|
13
13
|
export function visibleDateRangeForCalendarState(calendarState) {
|
|
14
|
-
const { type, date } = calendarState;
|
|
14
|
+
const { navigationRangeLimit, type, date } = calendarState;
|
|
15
15
|
let start;
|
|
16
16
|
let end;
|
|
17
17
|
let distance;
|
|
@@ -32,12 +32,15 @@ export function visibleDateRangeForCalendarState(calendarState) {
|
|
|
32
32
|
distance = 1;
|
|
33
33
|
break;
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
const isMinDateVisible = navigationRangeLimit?.start != null ? isBefore(start, navigationRangeLimit.start) : false;
|
|
36
|
+
const isMaxDateVisible = navigationRangeLimit?.end != null ? isAfter(end, navigationRangeLimit.end) : false;
|
|
36
37
|
return {
|
|
37
38
|
type,
|
|
38
39
|
start,
|
|
39
40
|
end,
|
|
40
|
-
distance
|
|
41
|
+
distance,
|
|
42
|
+
isMinDateVisible,
|
|
43
|
+
isMaxDateVisible
|
|
41
44
|
};
|
|
42
45
|
}
|
|
43
46
|
const distinctUntilDateOrTypeOrEventsChanged = distinctUntilChanged((a, b) => a?.date === b?.date && a?.type === b?.type && a?.events === b?.events);
|
|
@@ -45,22 +48,42 @@ export class DbxCalendarStore extends ComponentStore {
|
|
|
45
48
|
constructor() {
|
|
46
49
|
super({
|
|
47
50
|
type: CalendarDisplayType.MONTH,
|
|
51
|
+
showTodayButton: true,
|
|
48
52
|
date: new Date(),
|
|
49
53
|
dateTappedTwice: false,
|
|
50
54
|
events: []
|
|
51
55
|
});
|
|
52
56
|
// MARK: Effects
|
|
57
|
+
this.tapFirstPage = this.effect((input) => {
|
|
58
|
+
return input.pipe(switchMap(() => this.minNavigationDate$.pipe(first(), tap((x) => {
|
|
59
|
+
if (x) {
|
|
60
|
+
this.tapDay(x);
|
|
61
|
+
}
|
|
62
|
+
}))));
|
|
63
|
+
});
|
|
53
64
|
this.tapNext = this.effect((input) => {
|
|
54
|
-
return input.pipe(switchMap(() => this.visibleDateRange$.pipe(first(), tap(({ end }) => {
|
|
55
|
-
|
|
65
|
+
return input.pipe(switchMap(() => this.visibleDateRange$.pipe(first(), tap(({ end, isMaxDateVisible }) => {
|
|
66
|
+
if (!isMaxDateVisible) {
|
|
67
|
+
this.tapDay(addDays(end, 1));
|
|
68
|
+
}
|
|
56
69
|
}))));
|
|
57
70
|
});
|
|
58
71
|
this.tapPrevious = this.effect((input) => {
|
|
59
|
-
return input.pipe(switchMap(() => this.visibleDateRange$.pipe(first(), tap(({ start }) => {
|
|
60
|
-
|
|
72
|
+
return input.pipe(switchMap(() => this.visibleDateRange$.pipe(first(), tap(({ start, isMinDateVisible }) => {
|
|
73
|
+
if (!isMinDateVisible) {
|
|
74
|
+
this.tapDay(addDays(start, -1));
|
|
75
|
+
}
|
|
76
|
+
}))));
|
|
77
|
+
});
|
|
78
|
+
this.tapLastPage = this.effect((input) => {
|
|
79
|
+
return input.pipe(switchMap(() => this.maxNavigationDate$.pipe(first(), tap((x) => {
|
|
80
|
+
if (x) {
|
|
81
|
+
this.tapDay(x);
|
|
82
|
+
}
|
|
61
83
|
}))));
|
|
62
84
|
});
|
|
63
85
|
// MARK: Accessors
|
|
86
|
+
this.showTodayButton$ = this.state$.pipe(map((x) => x.showTodayButton), distinctUntilChanged(), shareReplay());
|
|
64
87
|
this.date$ = this.state$.pipe(map((x) => x.date));
|
|
65
88
|
this.dateTappedTwice$ = this.state$.pipe(map((x) => x.dateTappedTwice));
|
|
66
89
|
this.events$ = this.state$.pipe(map((x) => x.events));
|
|
@@ -82,15 +105,23 @@ export class DbxCalendarStore extends ComponentStore {
|
|
|
82
105
|
return false; // Type changed, date range changed.
|
|
83
106
|
}
|
|
84
107
|
}), shareReplay(1));
|
|
85
|
-
this.isLookingAtToday$ = this.visibleDateRange$.pipe(map((x) => isDateInDateRange(new Date(),
|
|
108
|
+
this.isLookingAtToday$ = this.visibleDateRange$.pipe(map((x) => isDateInDateRange(new Date(), x)), distinctUntilChanged(), shareReplay(1));
|
|
109
|
+
this.isLookingAtMinimumDate$ = this.visibleDateRange$.pipe(map((x) => x.isMinDateVisible), distinctUntilChanged(), shareReplay(1));
|
|
110
|
+
this.isLookingAtMaximumDate$ = this.visibleDateRange$.pipe(map((x) => x.isMaxDateVisible), distinctUntilChanged(), shareReplay(1));
|
|
86
111
|
this.displayType$ = this.state$.pipe(map((x) => x.type), distinctUntilChanged((a, b) => a === b), shareReplay(1));
|
|
112
|
+
this.navigationRangeLimit$ = this.state$.pipe(map((x) => x.navigationRangeLimit), distinctUntilChanged(isSameDateRange), shareReplay(1));
|
|
113
|
+
this.minNavigationDate$ = this.navigationRangeLimit$.pipe(map((x) => x?.start), distinctUntilChanged(isSameDateDay), shareReplay(1));
|
|
114
|
+
this.maxNavigationDate$ = this.navigationRangeLimit$.pipe(map((x) => x?.end), distinctUntilChanged(isSameDateDay), shareReplay(1));
|
|
115
|
+
this.isTodayInNavigationRangeLimit$ = this.navigationRangeLimit$.pipe(map((x) => isDateInDateRange(new Date(), x ?? {})), distinctUntilChanged(), shareReplay(1));
|
|
116
|
+
this.canJumpToToday$ = combineLatest([this.isLookingAtToday$, this.isTodayInNavigationRangeLimit$]).pipe(map(([isLookingAtToday, isTodayInNavigationRangeLimit]) => !isLookingAtToday && isTodayInNavigationRangeLimit), distinctUntilChanged(), shareReplay(1));
|
|
117
|
+
this.canShowPageButtons$ = this.state$.pipe(map((x) => x.showPageButtons && x.navigationRangeLimit && isFullDateRange(x.navigationRangeLimit)), distinctUntilChanged(), shareReplay(1));
|
|
87
118
|
// MARK: State Changes
|
|
88
119
|
/**
|
|
89
120
|
* Tap a day.
|
|
90
121
|
*
|
|
91
122
|
* - If the same day is presented, dateTappedTwice is flipped.
|
|
92
123
|
*/
|
|
93
|
-
this.tapDay = this.updater((state, date) => (
|
|
124
|
+
this.tapDay = this.updater((state, date) => updateCalendarStateWithTappedDate(state, date));
|
|
94
125
|
/**
|
|
95
126
|
* Set all events on the calendar.
|
|
96
127
|
*/
|
|
@@ -99,6 +130,12 @@ export class DbxCalendarStore extends ComponentStore {
|
|
|
99
130
|
* Set all events on the calendar.
|
|
100
131
|
*/
|
|
101
132
|
this.setDisplayType = this.updater((state, type) => ({ ...state, type }));
|
|
133
|
+
/**
|
|
134
|
+
* Sets the navigation limit.
|
|
135
|
+
*/
|
|
136
|
+
this.setNavigationRangeLimit = this.updater((state, navigationRangeLimit) => updateCalendarStateWithNavigationRangeLimit(state, navigationRangeLimit));
|
|
137
|
+
this.setShowTodayButton = this.updater((state, showTodayButton) => ({ ...state, showTodayButton: showTodayButton != null ? showTodayButton : true }));
|
|
138
|
+
this.setShowPageButtons = this.updater((state, showPageButtons) => ({ ...state, showPageButtons: showPageButtons != null ? showPageButtons : false }));
|
|
102
139
|
}
|
|
103
140
|
}
|
|
104
141
|
DbxCalendarStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxCalendarStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -106,4 +143,25 @@ DbxCalendarStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ver
|
|
|
106
143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxCalendarStore, decorators: [{
|
|
107
144
|
type: Injectable
|
|
108
145
|
}], ctorParameters: function () { return []; } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0osT0FBTyxFQUFjLG9CQUFvQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRWpHLE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0Isc0NBQWUsQ0FBQTtJQUNmLG9DQUFhLENBQUE7SUFDYixrQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUpXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFJOUI7QUE0QkQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLGFBQTRCO0lBQzNFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLElBQUksS0FBVyxDQUFDO0lBQ2hCLElBQUksR0FBUyxDQUFDO0lBQ2QsSUFBSSxRQUFnQixDQUFDO0lBRXJCLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO1lBQzVCLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FB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LENBQUMsRUFDdkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRixzQkFBc0I7UUFDdEI7Ozs7V0FJRztRQUNNLFdBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNKOztXQUVHO1FBQ00sY0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRzs7V0FFRztRQUNNLG1CQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBL0ZuRyxDQUFDOzs4R0FSVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNEYXRlSW5EYXRlUmFuZ2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdhbmd1bGFyLWNhbGVuZGFyJztcbmltcG9ydCB7IGRpZmZlcmVuY2VJbkRheXMsIGFkZERheXMsIGVuZE9mRGF5LCBlbmRPZk1vbnRoLCBlbmRPZldlZWssIGlzU2FtZURheSwgc3RhcnRPZkRheSwgc3RhcnRPZk1vbnRoLCBzdGFydE9mV2VlaywgaXNCZWZvcmUsIGlzQWZ0ZXIgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3QsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBlbnVtIENhbGVuZGFyRGlzcGxheVR5cGUge1xuICBNT05USCA9ICdtb250aCcsXG4gIFdFRUsgPSAnd2VlaycsXG4gIERBWSA9ICdkYXknXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJWaWV3RGF0ZVJhbmdlIHtcbiAgdHlwZTogQ2FsZW5kYXJEaXNwbGF5VHlwZTtcbiAgc3RhcnQ6IERhdGU7XG4gIGVuZDogRGF0ZTtcbiAgZGlzdGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclN0YXRlPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIENhbGVuZGFyIGRpc3BsYXkgbW9kZVxuICAgKi9cbiAgdHlwZTogQ2FsZW5kYXJEaXNwbGF5VHlwZTtcbiAgLyoqXG4gICAqIERhdGUgdGhhdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIGRhdGU6IERhdGU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF5IHdhcyB0YXBwZWQvc2V0IHR3aWNlLlxuICAgKi9cbiAgZGF0ZVRhcHBlZFR3aWNlOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0IG9mIGNhbGVuZGFyIGV2ZW50cy5cbiAgICovXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudDxUPltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZURhdGVSYW5nZUZvckNhbGVuZGFyU3RhdGUoY2FsZW5kYXJTdGF0ZTogQ2FsZW5kYXJTdGF0ZSk6IENhbGVuZGFyVmlld0RhdGVSYW5nZSB7XG4gIGNvbnN0IHsgdHlwZSwgZGF0ZSB9ID0gY2FsZW5kYXJTdGF0ZTtcbiAgbGV0IHN0YXJ0OiBEYXRlO1xuICBsZXQgZW5kOiBEYXRlO1xuICBsZXQgZGlzdGFuY2U6IG51bWJlcjtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIENhbGVuZGFyRGlzcGxheVR5cGUuTU9OVEg6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZEYXkoc3RhcnRPZldlZWsoc3RhcnRPZk1vbnRoKGRhdGUpLCB7IHdlZWtTdGFydHNPbjogMCB9KSk7XG4gICAgICBlbmQgPSBlbmRPZldlZWsoZW5kT2ZNb250aChkYXRlKSk7XG4gICAgICBkaXN0YW5jZSA9IGRpZmZlcmVuY2VJbkRheXMoZW5kLCBzdGFydCkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDYWxlbmRhckRpc3BsYXlUeXBlLldFRUs6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZXZWVrKGRhdGUpO1xuICAgICAgZW5kID0gZW5kT2ZXZWVrKHN0YXJ0KTtcbiAgICAgIGRpc3RhbmNlID0gNzsgLy8gNyBkYXlzIGluIGEgd2Vlay5cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2FsZW5kYXJEaXNwbGF5VHlwZS5EQVk6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZEYXkoZGF0ZSk7XG4gICAgICBlbmQgPSBlbmRPZkRheShkYXRlKTtcbiAgICAgIGRpc3RhbmNlID0gMTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gY29uc29sZS5sb2coJ0RhdGUgcmFuZ2U6ICcsIHN0YXJ0LCBlbmQsIGRpc3RhbmNlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIGRpc3RhbmNlXG4gIH07XG59XG5cbmNvbnN0IGRpc3RpbmN0VW50aWxEYXRlT3JUeXBlT3JFdmVudHNDaGFuZ2VkID0gZGlzdGluY3RVbnRpbENoYW5nZWQ8Q2FsZW5kYXJTdGF0ZT4oKGEsIGIpID0+IGE/LmRhdGUgPT09IGI/LmRhdGUgJiYgYT8udHlwZSA9PT0gYj8udHlwZSAmJiBhPy5ldmVudHMgPT09IGI/LmV2ZW50cyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhDYWxlbmRhclN0b3JlPFQgPSBhbnk+IGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8Q2FsZW5kYXJTdGF0ZTxUPj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiBDYWxlbmRhckRpc3BsYXlUeXBlLk1PTlRILFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIGRhdGVUYXBwZWRUd2ljZTogZmFsc2UsXG4gICAgICBldmVudHM6IFtdXG4gICAgfSk7XG4gIH1cblxuICAvLyBNQVJLOiBFZmZlY3RzXG4gIHJlYWRvbmx5IHRhcE5leHQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLnZpc2libGVEYXRlUmFuZ2UkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICB0YXAoKHsgZW5kIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFwRGF5KGFkZERheXMoZW5kLCAxKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRhcFByZXZpb3VzID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy52aXNpYmxlRGF0ZVJhbmdlJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgdGFwKCh7IHN0YXJ0IH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFwRGF5KGFkZERheXMoc3RhcnQsIC0xKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICByZWFkb25seSBkYXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4LmRhdGUpKTtcbiAgcmVhZG9ubHkgZGF0ZVRhcHBlZFR3aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4LmRhdGVUYXBwZWRUd2ljZSkpO1xuXG4gIHJlYWRvbmx5IGV2ZW50cyQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcCgoeCkgPT4geC5ldmVudHMpKTtcblxuICAvLyBUT0RPOiBGaWx0ZXIgdG8gYmUgZXZlbnRzIHRoYXQgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBiYXNlZCBvbiB0aGUgY3VycmVudCBjYWxlbmRhci5cbiAgcmVhZG9ubHkgdmlzaWJsZUV2ZW50cyQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5ldmVudHMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZXZlbnRzRm9yRGF0ZVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbERhdGVPclR5cGVPckV2ZW50c0NoYW5nZWQsXG4gICAgbWFwKChzdGF0ZSkgPT4gKHtcbiAgICAgIGRhdGU6IHN0YXRlLmRhdGUsXG4gICAgICBldmVudHM6IHN0YXRlLmV2ZW50cy5maWx0ZXIoKHgpID0+IGlzU2FtZURheSh4LnN0YXJ0LCBzdGF0ZS5kYXRlKSB8fCAoeC5lbmQgJiYgaXNCZWZvcmUoeC5zdGFydCwgc3RhdGUuZGF0ZSkgJiYgaXNBZnRlcih4LmVuZCwgc3RhdGUuZGF0ZSkpKSxcbiAgICAgIGRhdGVUYXBwZWRUd2ljZTogc3RhdGUuZGF0ZVRhcHBlZFR3aWNlXG4gICAgfSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZXZlbnRzRm9yRGF0ZSQgPSB0aGlzLmV2ZW50c0ZvckRhdGVTdGF0ZSQucGlwZShtYXAoKHN0YXRlKSA9PiBzdGF0ZS5ldmVudHMpKTtcblxuICByZWFkb25seSB2aXNpYmxlRGF0ZVJhbmdlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgLy8gSWYgdGhlIGRhdGUgb3IgdHlwZSBjaGFuZ2VzLCBjaGVjayBhZ2Fpbi5cbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYT8uZGF0ZSA9PT0gYj8uZGF0ZSAmJiBhPy50eXBlID09PSBiPy50eXBlKSxcbiAgICBtYXAodmlzaWJsZURhdGVSYW5nZUZvckNhbGVuZGFyU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS50eXBlID09PSBiLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGlzU2FtZURheShhLnN0YXJ0LCBiLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVHlwZSBjaGFuZ2VkLCBkYXRlIHJhbmdlIGNoYW5nZWQuXG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0xvb2tpbmdBdFRvZGF5JCA9IHRoaXMudmlzaWJsZURhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzRGF0ZUluRGF0ZVJhbmdlKG5ldyBEYXRlKCksIHsgc3RhcnQ6IHguc3RhcnQsIGVuZDogeC5lbmQgfSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkaXNwbGF5VHlwZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50eXBlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYSA9PT0gYiksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIC8qKlxuICAgKiBUYXAgYSBkYXkuXG4gICAqXG4gICAqIC0gSWYgdGhlIHNhbWUgZGF5IGlzIHByZXNlbnRlZCwgZGF0ZVRhcHBlZFR3aWNlIGlzIGZsaXBwZWQuXG4gICAqL1xuICByZWFkb25seSB0YXBEYXkgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkYXRlOiBEYXRlKSA9PiAoeyAuLi5zdGF0ZSwgZGF0ZSwgZGF0ZVRhcHBlZFR3aWNlOiBpc1NhbWVEYXkoZGF0ZSwgc3RhdGUuZGF0ZSkgPyAhc3RhdGUuZGF0ZVRhcHBlZFR3aWNlIDogZmFsc2UgfSkpO1xuXG4gIC8qKlxuICAgKiBTZXQgYWxsIGV2ZW50cyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICByZWFkb25seSBzZXRFdmVudHMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBldmVudHM6IENhbGVuZGFyRXZlbnQ8VD5bXSkgPT4gKHsgLi4uc3RhdGUsIGV2ZW50cyB9KSk7XG5cbiAgLyoqXG4gICAqIFNldCBhbGwgZXZlbnRzIG9uIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIHJlYWRvbmx5IHNldERpc3BsYXlUeXBlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdHlwZTogQ2FsZW5kYXJEaXNwbGF5VHlwZSkgPT4gKHsgLi4uc3RhdGUsIHR5cGUgfSkpO1xufVxuIl19
|
|
146
|
+
export function updateCalendarStateWithTappedDate(state, date) {
|
|
147
|
+
// only update the date if it is different
|
|
148
|
+
if (!isSameDateDay(state.date, date)) {
|
|
149
|
+
// Only update the date if it is within the date range
|
|
150
|
+
if (!state.navigationRangeLimit || isDateInDateRange(date, state.navigationRangeLimit)) {
|
|
151
|
+
state = { ...state, date, dateTappedTwice: isSameDay(date, state.date) ? !state.dateTappedTwice : false };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return state;
|
|
155
|
+
}
|
|
156
|
+
export function updateCalendarStateWithNavigationRangeLimit(state, navigationRangeLimit) {
|
|
157
|
+
const { date } = state;
|
|
158
|
+
// cap the date if it doesn't fall within the range.
|
|
159
|
+
if (navigationRangeLimit && !isDateInDateRange(date, navigationRangeLimit)) {
|
|
160
|
+
const clampedDate = clampDateToDateRange(date, navigationRangeLimit);
|
|
161
|
+
return { ...state, date: clampedDate, navigationRangeLimit };
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return { ...state, navigationRangeLimit };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQWEsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0osT0FBTyxFQUFjLG9CQUFvQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUVoSCxNQUFNLENBQU4sSUFBWSxtQkFJWDtBQUpELFdBQVksbUJBQW1CO0lBQzdCLHNDQUFlLENBQUE7SUFDZixvQ0FBYSxDQUFBO0lBQ2Isa0NBQVcsQ0FBQTtBQUNiLENBQUMsRUFKVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSTlCO0FBZ0RELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxhQUE0QjtJQUMzRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUMzRCxJQUFJLEtBQVcsQ0FBQztJQUNoQixJQUFJLEdBQVMsQ0FBQztJQUNkLElBQUksUUFBZ0IsQ0FBQztJQUVyQixRQUFRLElBQUksRUFBRTtRQUNaLEtB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b20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xhbXBEYXRlVG9EYXRlUmFuZ2UsIERhdGVSYW5nZSwgaXNEYXRlSW5EYXRlUmFuZ2UsIGlzRnVsbERhdGVSYW5nZSwgaXNTYW1lRGF0ZURheSwgaXNTYW1lRGF0ZVJhbmdlIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ2FuZ3VsYXItY2FsZW5kYXInO1xuaW1wb3J0IHsgZGlmZmVyZW5jZUluRGF5cywgYWRkRGF5cywgZW5kT2ZEYXksIGVuZE9mTW9udGgsIGVuZE9mV2VlaywgaXNTYW1lRGF5LCBzdGFydE9mRGF5LCBzdGFydE9mTW9udGgsIHN0YXJ0T2ZXZWVrLCBpc0JlZm9yZSwgaXNBZnRlciB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaXJzdCwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YXAsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGVudW0gQ2FsZW5kYXJEaXNwbGF5VHlwZSB7XG4gIE1PTlRIID0gJ21vbnRoJyxcbiAgV0VFSyA9ICd3ZWVrJyxcbiAgREFZID0gJ2RheSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclZpZXdEYXRlUmFuZ2Uge1xuICB0eXBlOiBDYWxlbmRhckRpc3BsYXlUeXBlO1xuICBzdGFydDogRGF0ZTtcbiAgZW5kOiBEYXRlO1xuICBkaXN0YW5jZTogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIG1pbiBuYXZpZ2F0aW9uIGRhdGUgaXMgY3VycmVudGx5IHZpc2libGUuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIGF0IHRoZSBtaW5pbXVtIGRhdGUuXG4gICAqL1xuICBpc01pbkRhdGVWaXNpYmxlOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIG1heGltdW0gbmF2aWdhdGlvbiBkYXRlIGlzIHZpc2libGUuIFRoaXMgaW1wbGllcyB0aGF0IHdlJ3JlIGF0IHRoZSBtYXhpbXVtIGRhdGUuXG4gICAqL1xuICBpc01heERhdGVWaXNpYmxlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU3RhdGU8VCA9IGFueT4ge1xuICAvKipcbiAgICogQ2FsZW5kYXIgZGlzcGxheSBtb2RlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBDYWxlbmRhckRpc3BsYXlUeXBlO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgdG9kYXkgYnV0dG9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RvZGF5QnV0dG9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERhdGUgdGhhdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGU6IERhdGU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF5IHdhcyB0YXBwZWQvc2V0IHR3aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0ZVRhcHBlZFR3aWNlOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0IG9mIGNhbGVuZGFyIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudDxUPltdO1xuICAvKipcbiAgICogT3B0aW9uYWwgbmF2aWdhdGlvbiByYW5nZSBsaW1pdGF0aW9uIHRoYXQgbGltaXRzIHdoaWNoIGRhdGVzIGNhbiBiZSBuYXZpZ2F0ZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBuYXZpZ2F0aW9uUmFuZ2VMaW1pdD86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSBwYWdlIGJ1dHRvbnMgd2hlbiBhcHBsaWNhYmxlLiBDYW4gb25seSBiZSBkaXNwbGF5ZWQgd2hlbiBhIG5hdmlnYXRpb25SYW5nZUxpbWl0IGlzIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3dQYWdlQnV0dG9ucz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlRGF0ZVJhbmdlRm9yQ2FsZW5kYXJTdGF0ZShjYWxlbmRhclN0YXRlOiBDYWxlbmRhclN0YXRlKTogQ2FsZW5kYXJWaWV3RGF0ZVJhbmdlIHtcbiAgY29uc3QgeyBuYXZpZ2F0aW9uUmFuZ2VMaW1pdCwgdHlwZSwgZGF0ZSB9ID0gY2FsZW5kYXJTdGF0ZTtcbiAgbGV0IHN0YXJ0OiBEYXRlO1xuICBsZXQgZW5kOiBEYXRlO1xuICBsZXQgZGlzdGFuY2U6IG51bWJlcjtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIENhbGVuZGFyRGlzcGxheVR5cGUuTU9OVEg6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZEYXkoc3RhcnRPZldlZWsoc3RhcnRPZk1vbnRoKGRhdGUpLCB7IHdlZWtTdGFydHNPbjogMCB9KSk7XG4gICAgICBlbmQgPSBlbmRPZldlZWsoZW5kT2ZNb250aChkYXRlKSk7XG4gICAgICBkaXN0YW5jZSA9IGRpZmZlcmVuY2VJbkRheXMoZW5kLCBzdGFydCkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDYWxlbmRhckRpc3BsYXlUeXBlLldFRUs6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZXZWVrKGRhdGUpO1xuICAgICAgZW5kID0gZW5kT2ZXZWVrKHN0YXJ0KTtcbiAgICAgIGRpc3RhbmNlID0gNzsgLy8gNyBkYXlzIGluIGEgd2Vlay5cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2FsZW5kYXJEaXNwbGF5VHlwZS5EQVk6XG4gICAgICBzdGFydCA9IHN0YXJ0T2ZEYXkoZGF0ZSk7XG4gICAgICBlbmQgPSBlbmRPZkRheShkYXRlKTtcbiAgICAgIGRpc3RhbmNlID0gMTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgaXNNaW5EYXRlVmlzaWJsZTogYm9vbGVhbiA9IG5hdmlnYXRpb25SYW5nZUxpbWl0Py5zdGFydCAhPSBudWxsID8gaXNCZWZvcmUoc3RhcnQsIG5hdmlnYXRpb25SYW5nZUxpbWl0LnN0YXJ0KSA6IGZhbHNlO1xuICBjb25zdCBpc01heERhdGVWaXNpYmxlOiBib29sZWFuID0gbmF2aWdhdGlvblJhbmdlTGltaXQ/LmVuZCAhPSBudWxsID8gaXNBZnRlcihlbmQsIG5hdmlnYXRpb25SYW5nZUxpbWl0LmVuZCkgOiBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIGRpc3RhbmNlLFxuICAgIGlzTWluRGF0ZVZpc2libGUsXG4gICAgaXNNYXhEYXRlVmlzaWJsZVxuICB9O1xufVxuXG5jb25zdCBkaXN0aW5jdFVudGlsRGF0ZU9yVHlwZU9yRXZlbnRzQ2hhbmdlZCA9IGRpc3RpbmN0VW50aWxDaGFuZ2VkPENhbGVuZGFyU3RhdGU+KChhLCBiKSA9PiBhPy5kYXRlID09PSBiPy5kYXRlICYmIGE/LnR5cGUgPT09IGI/LnR5cGUgJiYgYT8uZXZlbnRzID09PSBiPy5ldmVudHMpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4Q2FsZW5kYXJTdG9yZTxUID0gYW55PiBleHRlbmRzIENvbXBvbmVudFN0b3JlPENhbGVuZGFyU3RhdGU8VD4+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogQ2FsZW5kYXJEaXNwbGF5VHlwZS5NT05USCxcbiAgICAgIHNob3dUb2RheUJ1dHRvbjogdHJ1ZSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICBkYXRlVGFwcGVkVHdpY2U6IGZhbHNlLFxuICAgICAgZXZlbnRzOiBbXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gTUFSSzogRWZmZWN0c1xuICByZWFkb25seSB0YXBGaXJzdFBhZ2UgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLm1pbk5hdmlnYXRpb25EYXRlJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgdGFwKCh4KSA9PiB7XG4gICAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgICB0aGlzLnRhcERheSh4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGFwTmV4dCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMudmlzaWJsZURhdGVSYW5nZSQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIHRhcCgoeyBlbmQsIGlzTWF4RGF0ZVZpc2libGUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc01heERhdGVWaXNpYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudGFwRGF5KGFkZERheXMoZW5kLCAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRhcFByZXZpb3VzID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy52aXNpYmxlRGF0ZVJhbmdlJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgdGFwKCh7IHN0YXJ0LCBpc01pbkRhdGVWaXNpYmxlIH0pID0+IHtcbiAgICAgICAgICAgIGlmICghaXNNaW5EYXRlVmlzaWJsZSkge1xuICAgICAgICAgICAgICB0aGlzLnRhcERheShhZGREYXlzKHN0YXJ0LCAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0YXBMYXN0UGFnZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMubWF4TmF2aWdhdGlvbkRhdGUkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICB0YXAoKHgpID0+IHtcbiAgICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICAgIHRoaXMudGFwRGF5KHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9KTtcblxuICAvLyBNQVJLOiBBY2Nlc3NvcnNcblxuICByZWFkb25seSBzaG93VG9kYXlCdXR0b24kID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguc2hvd1RvZGF5QnV0dG9uKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KClcbiAgKTtcblxuICByZWFkb25seSBkYXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4LmRhdGUpKTtcbiAgcmVhZG9ubHkgZGF0ZVRhcHBlZFR3aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4LmRhdGVUYXBwZWRUd2ljZSkpO1xuXG4gIHJlYWRvbmx5IGV2ZW50cyQgPSB0aGlzLnN0YXRlJC5waXBlKG1hcCgoeCkgPT4geC5ldmVudHMpKTtcblxuICAvLyBUT0RPOiBGaWx0ZXIgdG8gYmUgZXZlbnRzIHRoYXQgd2lsbCBvbmx5IGJlIGRpc3BsYXllZCBiYXNlZCBvbiB0aGUgY3VycmVudCBjYWxlbmRhci5cbiAgcmVhZG9ubHkgdmlzaWJsZUV2ZW50cyQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5ldmVudHMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZXZlbnRzRm9yRGF0ZVN0YXRlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbERhdGVPclR5cGVPckV2ZW50c0NoYW5nZWQsXG4gICAgbWFwKChzdGF0ZSkgPT4gKHtcbiAgICAgIGRhdGU6IHN0YXRlLmRhdGUsXG4gICAgICBldmVudHM6IHN0YXRlLmV2ZW50cy5maWx0ZXIoKHgpID0+IGlzU2FtZURheSh4LnN0YXJ0LCBzdGF0ZS5kYXRlKSB8fCAoeC5lbmQgJiYgaXNCZWZvcmUoeC5zdGFydCwgc3RhdGUuZGF0ZSkgJiYgaXNBZnRlcih4LmVuZCwgc3RhdGUuZGF0ZSkpKSxcbiAgICAgIGRhdGVUYXBwZWRUd2ljZTogc3RhdGUuZGF0ZVRhcHBlZFR3aWNlXG4gICAgfSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZXZlbnRzRm9yRGF0ZSQgPSB0aGlzLmV2ZW50c0ZvckRhdGVTdGF0ZSQucGlwZShtYXAoKHN0YXRlKSA9PiBzdGF0ZS5ldmVudHMpKTtcblxuICByZWFkb25seSB2aXNpYmxlRGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxDYWxlbmRhclZpZXdEYXRlUmFuZ2U+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICAvLyBJZiB0aGUgZGF0ZSBvciB0eXBlIGNoYW5nZXMsIGNoZWNrIGFnYWluLlxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhPy5kYXRlID09PSBiPy5kYXRlICYmIGE/LnR5cGUgPT09IGI/LnR5cGUpLFxuICAgIG1hcCh2aXNpYmxlRGF0ZVJhbmdlRm9yQ2FsZW5kYXJTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLnR5cGUgPT09IGIudHlwZSkge1xuICAgICAgICByZXR1cm4gaXNTYW1lRGF5KGEuc3RhcnQsIGIuc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUeXBlIGNoYW5nZWQsIGRhdGUgcmFuZ2UgY2hhbmdlZC5cbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTG9va2luZ0F0VG9kYXkkID0gdGhpcy52aXNpYmxlRGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gaXNEYXRlSW5EYXRlUmFuZ2UobmV3IERhdGUoKSwgeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0xvb2tpbmdBdE1pbmltdW1EYXRlJCA9IHRoaXMudmlzaWJsZURhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNNaW5EYXRlVmlzaWJsZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzTG9va2luZ0F0TWF4aW11bURhdGUkID0gdGhpcy52aXNpYmxlRGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc01heERhdGVWaXNpYmxlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGlzcGxheVR5cGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudHlwZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGEgPT09IGIpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbmF2aWdhdGlvblJhbmdlTGltaXQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubmF2aWdhdGlvblJhbmdlTGltaXQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5OYXZpZ2F0aW9uRGF0ZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gdGhpcy5uYXZpZ2F0aW9uUmFuZ2VMaW1pdCQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1heE5hdmlnYXRpb25EYXRlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSB0aGlzLm5hdmlnYXRpb25SYW5nZUxpbWl0JC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzVG9kYXlJbk5hdmlnYXRpb25SYW5nZUxpbWl0JCA9IHRoaXMubmF2aWdhdGlvblJhbmdlTGltaXQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBpc0RhdGVJbkRhdGVSYW5nZShuZXcgRGF0ZSgpLCB4ID8/IHt9KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNhbkp1bXBUb1RvZGF5JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNMb29raW5nQXRUb2RheSQsIHRoaXMuaXNUb2RheUluTmF2aWdhdGlvblJhbmdlTGltaXQkXSkucGlwZShcbiAgICBtYXAoKFtpc0xvb2tpbmdBdFRvZGF5LCBpc1RvZGF5SW5OYXZpZ2F0aW9uUmFuZ2VMaW1pdF0pID0+ICFpc0xvb2tpbmdBdFRvZGF5ICYmIGlzVG9kYXlJbk5hdmlnYXRpb25SYW5nZUxpbWl0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2FuU2hvd1BhZ2VCdXR0b25zJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnNob3dQYWdlQnV0dG9ucyAmJiB4Lm5hdmlnYXRpb25SYW5nZUxpbWl0ICYmIGlzRnVsbERhdGVSYW5nZSh4Lm5hdmlnYXRpb25SYW5nZUxpbWl0KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgLyoqXG4gICAqIFRhcCBhIGRheS5cbiAgICpcbiAgICogLSBJZiB0aGUgc2FtZSBkYXkgaXMgcHJlc2VudGVkLCBkYXRlVGFwcGVkVHdpY2UgaXMgZmxpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcERheSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRhdGU6IERhdGUpID0+IHVwZGF0ZUNhbGVuZGFyU3RhdGVXaXRoVGFwcGVkRGF0ZShzdGF0ZSwgZGF0ZSkpO1xuXG4gIC8qKlxuICAgKiBTZXQgYWxsIGV2ZW50cyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICByZWFkb25seSBzZXRFdmVudHMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBldmVudHM6IENhbGVuZGFyRXZlbnQ8VD5bXSkgPT4gKHsgLi4uc3RhdGUsIGV2ZW50cyB9KSk7XG5cbiAgLyoqXG4gICAqIFNldCBhbGwgZXZlbnRzIG9uIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIHJlYWRvbmx5IHNldERpc3BsYXlUeXBlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdHlwZTogQ2FsZW5kYXJEaXNwbGF5VHlwZSkgPT4gKHsgLi4uc3RhdGUsIHR5cGUgfSkpO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuYXZpZ2F0aW9uIGxpbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0TmF2aWdhdGlvblJhbmdlTGltaXQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBuYXZpZ2F0aW9uUmFuZ2VMaW1pdDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4gdXBkYXRlQ2FsZW5kYXJTdGF0ZVdpdGhOYXZpZ2F0aW9uUmFuZ2VMaW1pdChzdGF0ZSwgbmF2aWdhdGlvblJhbmdlTGltaXQpKTtcblxuICByZWFkb25seSBzZXRTaG93VG9kYXlCdXR0b24gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzaG93VG9kYXlCdXR0b246IE1heWJlPGJvb2xlYW4+KSA9PiAoeyAuLi5zdGF0ZSwgc2hvd1RvZGF5QnV0dG9uOiBzaG93VG9kYXlCdXR0b24gIT0gbnVsbCA/IHNob3dUb2RheUJ1dHRvbiA6IHRydWUgfSkpO1xuICByZWFkb25seSBzZXRTaG93UGFnZUJ1dHRvbnMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzaG93UGFnZUJ1dHRvbnM6IE1heWJlPGJvb2xlYW4+KSA9PiAoeyAuLi5zdGF0ZSwgc2hvd1BhZ2VCdXR0b25zOiBzaG93UGFnZUJ1dHRvbnMgIT0gbnVsbCA/IHNob3dQYWdlQnV0dG9ucyA6IGZhbHNlIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNhbGVuZGFyU3RhdGVXaXRoVGFwcGVkRGF0ZShzdGF0ZTogQ2FsZW5kYXJTdGF0ZSwgZGF0ZTogRGF0ZSkge1xuICAvLyBvbmx5IHVwZGF0ZSB0aGUgZGF0ZSBpZiBpdCBpcyBkaWZmZXJlbnRcbiAgaWYgKCFpc1NhbWVEYXRlRGF5KHN0YXRlLmRhdGUsIGRhdGUpKSB7XG4gICAgLy8gT25seSB1cGRhdGUgdGhlIGRhdGUgaWYgaXQgaXMgd2l0aGluIHRoZSBkYXRlIHJhbmdlXG4gICAgaWYgKCFzdGF0ZS5uYXZpZ2F0aW9uUmFuZ2VMaW1pdCB8fCBpc0RhdGVJbkRhdGVSYW5nZShkYXRlLCBzdGF0ZS5uYXZpZ2F0aW9uUmFuZ2VMaW1pdCkpIHtcbiAgICAgIHN0YXRlID0geyAuLi5zdGF0ZSwgZGF0ZSwgZGF0ZVRhcHBlZFR3aWNlOiBpc1NhbWVEYXkoZGF0ZSwgc3RhdGUuZGF0ZSkgPyAhc3RhdGUuZGF0ZVRhcHBlZFR3aWNlIDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDYWxlbmRhclN0YXRlV2l0aE5hdmlnYXRpb25SYW5nZUxpbWl0KHN0YXRlOiBDYWxlbmRhclN0YXRlLCBuYXZpZ2F0aW9uUmFuZ2VMaW1pdDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pikge1xuICBjb25zdCB7IGRhdGUgfSA9IHN0YXRlO1xuXG4gIC8vIGNhcCB0aGUgZGF0ZSBpZiBpdCBkb2Vzbid0IGZhbGwgd2l0aGluIHRoZSByYW5nZS5cbiAgaWYgKG5hdmlnYXRpb25SYW5nZUxpbWl0ICYmICFpc0RhdGVJbkRhdGVSYW5nZShkYXRlLCBuYXZpZ2F0aW9uUmFuZ2VMaW1pdCkpIHtcbiAgICBjb25zdCBjbGFtcGVkRGF0ZSA9IGNsYW1wRGF0ZVRvRGF0ZVJhbmdlKGRhdGUsIG5hdmlnYXRpb25SYW5nZUxpbWl0KTtcbiAgICByZXR1cm4geyAuLi5zdGF0ZSwgZGF0ZTogY2xhbXBlZERhdGUsIG5hdmlnYXRpb25SYW5nZUxpbWl0IH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIG5hdmlnYXRpb25SYW5nZUxpbWl0IH07XG4gIH1cbn1cbiJdfQ==
|