@sapphire-ion/framework 1.0.15 → 1.0.16
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/esm2022/lib/components/drawer/drawer-group/drawer-group.component.mjs +3 -3
- package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +3 -3
- package/esm2022/lib/components/main-content/main-content.component.mjs +38 -6
- package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +29 -12
- package/esm2022/lib/services/auth.service.mjs +5 -1
- package/fesm2022/sapphire-ion-framework.mjs +69 -19
- package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
- package/lib/components/main-content/main-content.component.d.ts +9 -1
- package/lib/components/popover/sion-popover/sion-popover.component.d.ts +7 -4
- package/lib/components/stepper/step/step.component.d.ts +1 -1
- package/package.json +1 -1
- package/themes/compiled-styles.scss +9 -0
- package/themes/components/drawer/drawer-group/drawer-group.component.scss +53 -13
- package/themes/styles/core.styles.scss +1 -1
|
@@ -2,24 +2,50 @@ import { CommonModule } from '@angular/common';
|
|
|
2
2
|
import { Component, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { IonicModule } from '@ionic/angular';
|
|
4
4
|
import { RouterLinkWithHref } from '@angular/router';
|
|
5
|
+
import { Preferences } from '@capacitor/preferences';
|
|
5
6
|
import { DrawerComponent } from '../drawer/drawer.component';
|
|
6
7
|
import { AuthService } from '../../services/auth.service';
|
|
8
|
+
import { SIonPopoverModule } from '../popover/sion-popover.module';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "../../services/auth.service";
|
|
9
11
|
import * as i2 from "@angular/common";
|
|
10
12
|
import * as i3 from "@ionic/angular";
|
|
13
|
+
import * as i4 from "../popover/sion-popover/sion-popover.component";
|
|
11
14
|
export class MainContentComponent {
|
|
12
15
|
constructor(authService) {
|
|
13
16
|
this.authService = authService;
|
|
14
17
|
this.backdrop = 'bg-primary/30';
|
|
15
18
|
this.shadowColor = 'color-mix(in srgb, var(--ion-color-primary) 15%, transparent)';
|
|
16
19
|
this.colapsed = false;
|
|
20
|
+
this.Theme = Theme.System;
|
|
17
21
|
}
|
|
18
|
-
ngOnInit() {
|
|
19
|
-
this.authService.LoadToken()
|
|
20
|
-
|
|
22
|
+
async ngOnInit() {
|
|
23
|
+
this.Token = await this.authService.LoadToken();
|
|
24
|
+
this.Theme = Number((await Preferences.get({ key: 'theme' })).value);
|
|
25
|
+
this.SetTheme(this.Theme);
|
|
26
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
|
|
27
|
+
this.SetTheme(this.Theme);
|
|
21
28
|
});
|
|
22
29
|
}
|
|
30
|
+
async SetTheme(theme) {
|
|
31
|
+
this.Theme = theme;
|
|
32
|
+
await Preferences.set({ key: 'theme', value: this.Theme.toString() });
|
|
33
|
+
if (this.Theme === Theme.System) {
|
|
34
|
+
var matches = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
35
|
+
if (matches) {
|
|
36
|
+
document.body.classList.add('dark');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
document.body.classList.remove('dark');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (this.Theme === Theme.Light) {
|
|
43
|
+
document.body.classList.remove('dark');
|
|
44
|
+
}
|
|
45
|
+
else if (this.Theme === Theme.Dark) {
|
|
46
|
+
document.body.classList.add('dark');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
23
49
|
get fullScreen() {
|
|
24
50
|
if (document.fullscreenElement != null) {
|
|
25
51
|
return true;
|
|
@@ -48,11 +74,11 @@ export class MainContentComponent {
|
|
|
48
74
|
}
|
|
49
75
|
}
|
|
50
76
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainContentComponent, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MainContentComponent, isStandalone: true, selector: "main-content", inputs: { backdrop: "backdrop", shadowColor: "shadowColor", colapsed: "colapsed", drawerComponent: "drawerComponent" }, viewQueries: [{ propertyName: "FullScreenConteiner", first: true, predicate: ["target"], descendants: true }], ngImport: i0, template: "<div class=\"size-full flex flex-col\" [ngClass]=\"{'bg-light/50': fullScreen}\" #target>\r\n <div class=\"w-full h-14 relative shrink-0\">\r\n <ion-card class=\"m-0 rounded-none size-full border-none\">\r\n <ion-card-content class=\"p-0 px-2 size-full flex\">\r\n <div class=\"w-1/2 h-full flex items-center justify-start\">\r\n @if (!fullScreen) {\r\n <ion-menu-button [routerLink]=\"['/']\" [autoHide]=\"true\"></ion-menu-button>\r\n }\r\n <ng-content select=\"[slot=start]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-1/2 h-full flex items-center justify-end gap-2\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n \r\n <ion-button (click)=\"FullScreen()\" fill=\"outline\" color=\"dark\" size=\"small\" class=\"size-10 aspect-square portrait:hidden\">\r\n <ion-icon slot=\"icon-only\" name=\"expand\"></ion-icon>\r\n </ion-button>\r\n\r\n @if (!fullScreen) {\r\n <ion-button (click)=\"userPopover.present($event)\" size=\"small\" class=\"size-10 aspect-square\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </ion-button>\r\n <ion-popover #userPopover [dismissOnSelect]=\"true\" triggerAction=\"click\">\r\n <ng-template>\r\n <ion-content>\r\n <div class=\"size-full\">\r\n <div class=\"w-full px-3 flex items-center\">\r\n <div class=\"size-10 shrink-0 aspect-square rounded-2xl text-sm flex items-center justify-center default-transition\" style=\"background-color: var(--ion-color-primary);\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </div>\r\n <div class=\"grow min-w-10 p-2 justify-center items-center whitespace-nowrap text-ellipsis overflow-hidden block default-transition\" [ngClass]=\"{'opacity-0 w-0': colapsed}\">\r\n <span>{{Token ? Token.Nome : ''}}</span> <br>\r\n <ion-text color=\"secondary\" class=\"text-sm\">\r\n @{{Token ? Token.Apelido : ''}}\r\n </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full\">\r\n <ng-content class=\"size-full\" select=\"[slot=user-popover]\"></ng-content>\r\n </div>\r\n <div class=\"w-full px-3 py-2 translucid-border !border-x-0 !border-b-0 flex items-center justify-between\">\r\n <ion-text> Log Out </ion-text>\r\n <ion-button (click)=\"authService.Loggout()\" class=\"size-10 shrink-0\" size=\"small\" color=\"danger\">\r\n <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon> \r\n </ion-button>\r\n </div>\r\n </div>\r\n </ion-content>\r\n </ng-template>\r\n </ion-popover>\r\n }\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n </div>\r\n <div class=\"size-full relative p-2 pt-0 bg-light\">\r\n <div class=\"size-full relative rounded-2xl content-shadow overflow-hidden {{backdrop}}\" style=\"--shadow-color: {{shadowColor}}\">\r\n <ng-content></ng-content> \r\n </div>\r\n </div>\r\n</div>", styles: ["#popover-user{--width: 17rem}.content-shadow{--shadow-color: color-mix(in srgb, var(--ion-color-primary) 15%, transparent);box-shadow:0 0 0 1px var(--shadow-color),0 6px 10px -4px var(--shadow-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: RouterLinkWithHref, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
77
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MainContentComponent, isStandalone: true, selector: "main-content", inputs: { backdrop: "backdrop", shadowColor: "shadowColor", colapsed: "colapsed", drawerComponent: "drawerComponent" }, viewQueries: [{ propertyName: "FullScreenConteiner", first: true, predicate: ["target"], descendants: true }], ngImport: i0, template: "<div class=\"size-full flex flex-col\" [ngClass]=\"{'bg-light/50': fullScreen}\" #target>\r\n <div class=\"w-full h-14 relative shrink-0\">\r\n <ion-card class=\"m-0 rounded-none size-full border-none\">\r\n <ion-card-content class=\"p-0 px-2 size-full flex\">\r\n <div class=\"w-1/2 h-full flex items-center justify-start\">\r\n @if (!fullScreen) {\r\n <ion-menu-button [routerLink]=\"['/']\" [autoHide]=\"true\"></ion-menu-button>\r\n }\r\n <ng-content select=\"[slot=start]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-1/2 h-full flex items-center justify-end gap-2\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n\r\n <ion-button (click)=\"FullScreen()\" fill=\"outline\" color=\"dark\" size=\"small\" class=\"size-10 aspect-square portrait:hidden\">\r\n <ion-icon slot=\"icon-only\" name=\"expand\"></ion-icon>\r\n </ion-button>\r\n\r\n\r\n @if (!fullScreen) {\r\n <div #anchor>\r\n <ion-button (click)=\"userPopover.present($event)\" size=\"small\" class=\"size-10 aspect-square\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </ion-button>\r\n </div>\r\n <sion-popover #userPopover [anchor]=\"anchor\" [flip]=\"false\" width=\"13rem\">\r\n <div class=\"w-full flex flex-col overflow-hidden\">\r\n <div class=\"w-full flex p-2 gap-2 overflow-hidden\">\r\n <div class=\"size-10 shrink-0 aspect-square rounded-2xl text-sm flex items-center justify-center bg-primary\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </div>\r\n\r\n <div class=\"shrink-0 w-full flex flex-col justify-center items-start overflow-hidden text-sm\">\r\n <span class=\"truncate\"> {{Token ? Token.Nome : ''}} </span>\r\n <span class=\"truncate text-secondary\"> @{{Token ? Token.Apelido : ''}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content class=\"size-full\" select=\"[slot=user-popover]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-full p-1 !pb-0 translucid-border !border-x-0 !border-b-0\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start default-transition py-1 px-2\">\r\n <ion-icon name=\"contrast\"></ion-icon>\r\n <ion-text> Tema </ion-text>\r\n </div>\r\n\r\n <div class=\"flex flex-col pl-4\">\r\n <ion-radio-group alignment=\"start\" [allowEmptySelection]=\"false\" [value]=\"Theme\" (ionChange)=\"SetTheme($event.detail.value)\">\r\n <ion-item class=\"bg-transparent\" lines=\"full\">\r\n <ion-icon name=\"cog\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"0\">Sistema</ion-radio>\r\n </ion-item>\r\n <ion-item class=\"bg-transparent\" lines=\"full\">\r\n <ion-icon name=\"sunny\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"1\">Claro</ion-radio>\r\n </ion-item>\r\n <ion-item class=\"bg-transparent\" lines=\"none\">\r\n <ion-icon name=\"moon\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"2\">Escuro</ion-radio>\r\n </ion-item>\r\n </ion-radio-group>\r\n\r\n\r\n <!-- <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 0\" (ionChange)=\"SetTheme(0)\" ></ion-checkbox>\r\n <ion-icon name=\"cog\"></ion-icon>\r\n <ion-text> Sistema </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 1\" (ionChange)=\"SetTheme(1)\" ></ion-checkbox>\r\n <ion-icon name=\"sunny\"></ion-icon>\r\n <ion-text> Claro </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 2\" (ionChange)=\"SetTheme(2)\" ></ion-checkbox>\r\n <ion-icon name=\"moon\"></ion-icon>\r\n <ion-text> Escuro </ion-text>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0\">\r\n <div (click)=\"authService.Loggout()\" class=\"rounded-xl flex gap-2 cursor-pointer items-center justify-start hover:bg-medium/10 default-transition py-1 px-2\">\r\n <ion-icon color=\"danger\" name=\"exit\"></ion-icon>\r\n <ion-text> Log Out </ion-text>\r\n </div>\r\n\r\n <!-- <ion-text> Log Out </ion-text>\r\n <ion-button (click)=\"authService.Loggout()\" class=\"size-8 shrink-0\" size=\"small\" fill=\"clear\" color=\"danger\">\r\n <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon> \r\n </ion-button> -->\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"size-full\">\r\n <div class=\"w-full p-1 flex items-center\">\r\n <div class=\"size-10 shrink-0 aspect-square rounded-2xl text-sm flex items-center justify-center default-transition\" style=\"background-color: var(--ion-color-primary);\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </div>\r\n <div class=\"grow min-w-10 p-2 justify-center items-center whitespace-nowrap text-ellipsis overflow-hidden block default-transition\" [ngClass]=\"{'opacity-0 w-0': colapsed}\">\r\n <span>{{Token ? Token.Nome : ''}}</span> <br>\r\n <ion-text color=\"secondary\" class=\"text-sm\">\r\n @{{Token ? Token.Apelido : ''}}\r\n </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full\">\r\n <ng-content class=\"size-full\" select=\"[slot=user-popover]\"></ng-content>\r\n </div>\r\n <div class=\"w-full p-1 px-2 translucid-border !border-x-0 !border-b-0 flex items-center justify-between\">\r\n <div class=\"hover:bg-medium/30 default-transition size-full\">\r\n <ion-button color=\"dark\" fill=\"clear\" size=\"small\" class=\"rounded-xl w-full text-left overflow-hidden\">\r\n <ion-icon slot=\"start\" name=\"contrast\"></ion-icon>\r\n <ion-label class=\"text-sm\">Tema</ion-label>\r\n </ion-button>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 px-2 translucid-border !border-x-0 !border-b-0 flex items-center justify-between\">\r\n <ion-text> Log Out </ion-text>\r\n <ion-button (click)=\"authService.Loggout()\" class=\"size-8 shrink-0\" size=\"small\" fill=\"clear\" color=\"danger\">\r\n <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon> \r\n </ion-button>\r\n </div>\r\n </div> -->\r\n </sion-popover>\r\n }\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n </div>\r\n <div class=\"size-full relative p-2 pt-0 bg-light\">\r\n <div class=\"size-full relative rounded-2xl content-shadow overflow-hidden {{backdrop}}\" style=\"--shadow-color: {{shadowColor}}\">\r\n <ng-content></ng-content> \r\n </div>\r\n </div>\r\n</div>", styles: ["#popover-user{--width: 17rem}.content-shadow{--shadow-color: color-mix(in srgb, var(--ion-color-primary) 15%, transparent);box-shadow:0 0 0 1px var(--shadow-color),0 6px 10px -4px var(--shadow-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonMenuButton, selector: "ion-menu-button", inputs: ["autoHide", "color", "disabled", "menu", "mode", "type"] }, { kind: "component", type: i3.IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: i3.IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "compareWith", "errorText", "helperText", "name", "value"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: RouterLinkWithHref, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: SIonPopoverModule }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
|
|
52
78
|
}
|
|
53
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainContentComponent, decorators: [{
|
|
54
80
|
type: Component,
|
|
55
|
-
args: [{ standalone: true, imports: [CommonModule, IonicModule, RouterLinkWithHref], selector: 'main-content', template: "<div class=\"size-full flex flex-col\" [ngClass]=\"{'bg-light/50': fullScreen}\" #target>\r\n <div class=\"w-full h-14 relative shrink-0\">\r\n <ion-card class=\"m-0 rounded-none size-full border-none\">\r\n <ion-card-content class=\"p-0 px-2 size-full flex\">\r\n <div class=\"w-1/2 h-full flex items-center justify-start\">\r\n @if (!fullScreen) {\r\n <ion-menu-button [routerLink]=\"['/']\" [autoHide]=\"true\"></ion-menu-button>\r\n }\r\n <ng-content select=\"[slot=start]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-1/2 h-full flex items-center justify-end gap-2\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n
|
|
81
|
+
args: [{ standalone: true, imports: [CommonModule, IonicModule, RouterLinkWithHref, SIonPopoverModule], selector: 'main-content', template: "<div class=\"size-full flex flex-col\" [ngClass]=\"{'bg-light/50': fullScreen}\" #target>\r\n <div class=\"w-full h-14 relative shrink-0\">\r\n <ion-card class=\"m-0 rounded-none size-full border-none\">\r\n <ion-card-content class=\"p-0 px-2 size-full flex\">\r\n <div class=\"w-1/2 h-full flex items-center justify-start\">\r\n @if (!fullScreen) {\r\n <ion-menu-button [routerLink]=\"['/']\" [autoHide]=\"true\"></ion-menu-button>\r\n }\r\n <ng-content select=\"[slot=start]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-1/2 h-full flex items-center justify-end gap-2\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n\r\n <ion-button (click)=\"FullScreen()\" fill=\"outline\" color=\"dark\" size=\"small\" class=\"size-10 aspect-square portrait:hidden\">\r\n <ion-icon slot=\"icon-only\" name=\"expand\"></ion-icon>\r\n </ion-button>\r\n\r\n\r\n @if (!fullScreen) {\r\n <div #anchor>\r\n <ion-button (click)=\"userPopover.present($event)\" size=\"small\" class=\"size-10 aspect-square\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </ion-button>\r\n </div>\r\n <sion-popover #userPopover [anchor]=\"anchor\" [flip]=\"false\" width=\"13rem\">\r\n <div class=\"w-full flex flex-col overflow-hidden\">\r\n <div class=\"w-full flex p-2 gap-2 overflow-hidden\">\r\n <div class=\"size-10 shrink-0 aspect-square rounded-2xl text-sm flex items-center justify-center bg-primary\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </div>\r\n\r\n <div class=\"shrink-0 w-full flex flex-col justify-center items-start overflow-hidden text-sm\">\r\n <span class=\"truncate\"> {{Token ? Token.Nome : ''}} </span>\r\n <span class=\"truncate text-secondary\"> @{{Token ? Token.Apelido : ''}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content class=\"size-full\" select=\"[slot=user-popover]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"w-full p-1 !pb-0 translucid-border !border-x-0 !border-b-0\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start default-transition py-1 px-2\">\r\n <ion-icon name=\"contrast\"></ion-icon>\r\n <ion-text> Tema </ion-text>\r\n </div>\r\n\r\n <div class=\"flex flex-col pl-4\">\r\n <ion-radio-group alignment=\"start\" [allowEmptySelection]=\"false\" [value]=\"Theme\" (ionChange)=\"SetTheme($event.detail.value)\">\r\n <ion-item class=\"bg-transparent\" lines=\"full\">\r\n <ion-icon name=\"cog\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"0\">Sistema</ion-radio>\r\n </ion-item>\r\n <ion-item class=\"bg-transparent\" lines=\"full\">\r\n <ion-icon name=\"sunny\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"1\">Claro</ion-radio>\r\n </ion-item>\r\n <ion-item class=\"bg-transparent\" lines=\"none\">\r\n <ion-icon name=\"moon\" slot=\"start\"></ion-icon>\r\n <ion-radio class=\"w-full\" [value]=\"2\">Escuro</ion-radio>\r\n </ion-item>\r\n </ion-radio-group>\r\n\r\n\r\n <!-- <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 0\" (ionChange)=\"SetTheme(0)\" ></ion-checkbox>\r\n <ion-icon name=\"cog\"></ion-icon>\r\n <ion-text> Sistema </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 1\" (ionChange)=\"SetTheme(1)\" ></ion-checkbox>\r\n <ion-icon name=\"sunny\"></ion-icon>\r\n <ion-text> Claro </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0 overflow-hidden\">\r\n <div class=\"rounded-xl flex gap-2 items-center justify-start cursor-pointer hover:bg-medium/30 default-transition py-1 px-2\">\r\n <ion-checkbox [checked]=\"Theme == 2\" (ionChange)=\"SetTheme(2)\" ></ion-checkbox>\r\n <ion-icon name=\"moon\"></ion-icon>\r\n <ion-text> Escuro </ion-text>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"w-full p-1 translucid-border !border-x-0 !border-b-0\">\r\n <div (click)=\"authService.Loggout()\" class=\"rounded-xl flex gap-2 cursor-pointer items-center justify-start hover:bg-medium/10 default-transition py-1 px-2\">\r\n <ion-icon color=\"danger\" name=\"exit\"></ion-icon>\r\n <ion-text> Log Out </ion-text>\r\n </div>\r\n\r\n <!-- <ion-text> Log Out </ion-text>\r\n <ion-button (click)=\"authService.Loggout()\" class=\"size-8 shrink-0\" size=\"small\" fill=\"clear\" color=\"danger\">\r\n <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon> \r\n </ion-button> -->\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"size-full\">\r\n <div class=\"w-full p-1 flex items-center\">\r\n <div class=\"size-10 shrink-0 aspect-square rounded-2xl text-sm flex items-center justify-center default-transition\" style=\"background-color: var(--ion-color-primary);\">\r\n <span class=\"uppercase text-white\">{{Token ? Token.Nome[0] : ''}}</span>\r\n </div>\r\n <div class=\"grow min-w-10 p-2 justify-center items-center whitespace-nowrap text-ellipsis overflow-hidden block default-transition\" [ngClass]=\"{'opacity-0 w-0': colapsed}\">\r\n <span>{{Token ? Token.Nome : ''}}</span> <br>\r\n <ion-text color=\"secondary\" class=\"text-sm\">\r\n @{{Token ? Token.Apelido : ''}}\r\n </ion-text>\r\n </div>\r\n </div>\r\n <div class=\"w-full\">\r\n <ng-content class=\"size-full\" select=\"[slot=user-popover]\"></ng-content>\r\n </div>\r\n <div class=\"w-full p-1 px-2 translucid-border !border-x-0 !border-b-0 flex items-center justify-between\">\r\n <div class=\"hover:bg-medium/30 default-transition size-full\">\r\n <ion-button color=\"dark\" fill=\"clear\" size=\"small\" class=\"rounded-xl w-full text-left overflow-hidden\">\r\n <ion-icon slot=\"start\" name=\"contrast\"></ion-icon>\r\n <ion-label class=\"text-sm\">Tema</ion-label>\r\n </ion-button>\r\n </div>\r\n </div>\r\n <div class=\"w-full p-1 px-2 translucid-border !border-x-0 !border-b-0 flex items-center justify-between\">\r\n <ion-text> Log Out </ion-text>\r\n <ion-button (click)=\"authService.Loggout()\" class=\"size-8 shrink-0\" size=\"small\" fill=\"clear\" color=\"danger\">\r\n <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon> \r\n </ion-button>\r\n </div>\r\n </div> -->\r\n </sion-popover>\r\n }\r\n </div>\r\n </ion-card-content>\r\n </ion-card>\r\n </div>\r\n <div class=\"size-full relative p-2 pt-0 bg-light\">\r\n <div class=\"size-full relative rounded-2xl content-shadow overflow-hidden {{backdrop}}\" style=\"--shadow-color: {{shadowColor}}\">\r\n <ng-content></ng-content> \r\n </div>\r\n </div>\r\n</div>", styles: ["#popover-user{--width: 17rem}.content-shadow{--shadow-color: color-mix(in srgb, var(--ion-color-primary) 15%, transparent);box-shadow:0 0 0 1px var(--shadow-color),0 6px 10px -4px var(--shadow-color)}\n"] }]
|
|
56
82
|
}], ctorParameters: () => [{ type: i1.AuthService }], propDecorators: { backdrop: [{
|
|
57
83
|
type: Input
|
|
58
84
|
}], shadowColor: [{
|
|
@@ -65,4 +91,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
65
91
|
type: ViewChild,
|
|
66
92
|
args: ['target']
|
|
67
93
|
}] } });
|
|
68
|
-
|
|
94
|
+
var Theme;
|
|
95
|
+
(function (Theme) {
|
|
96
|
+
Theme[Theme["System"] = 0] = "System";
|
|
97
|
+
Theme[Theme["Light"] = 1] = "Light";
|
|
98
|
+
Theme[Theme["Dark"] = 2] = "Dark";
|
|
99
|
+
})(Theme || (Theme = {}));
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tYWluLWNvbnRlbnQvbWFpbi1jb250ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tYWluLWNvbnRlbnQvbWFpbi1jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7QUFTbkUsTUFBTSxPQUFPLG9CQUFvQjtJQVEvQixZQUNTLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUHhCLGFBQVEsR0FBVyxlQUFlLENBQUM7UUFDbkMsZ0JBQVcsR0FBVywrREFBK0QsQ0FBQztRQUV0RixhQUFRLEdBQVksS0FBSyxDQUFDO1FBa0JuQyxVQUFLLEdBQVUsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQWJ4QixDQUFDO0lBR0wsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FB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QVcsdXREQUFFLGtCQUFrQixtT0FBRSxpQkFBaUI7OzRGQUtoRSxvQkFBb0I7a0JBUGhDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBRSxZQUNuRSxjQUFjO2dGQU1mLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBNkNlLG1CQUFtQjtzQkFBdkMsU0FBUzt1QkFBQyxRQUFROztBQW9CckIsSUFBSyxLQUlKO0FBSkQsV0FBSyxLQUFLO0lBQ1IscUNBQVUsQ0FBQTtJQUNWLG1DQUFVLENBQUE7SUFDVixpQ0FBVSxDQUFBO0FBQ1osQ0FBQyxFQUpJLEtBQUssS0FBTCxLQUFLLFFBSVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgUm91dGVyTGlua1dpdGhIcmVmIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUHJlZmVyZW5jZXMgfSBmcm9tICdAY2FwYWNpdG9yL3ByZWZlcmVuY2VzJztcclxuXHJcbmltcG9ydCB7IERyYXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2RyYXdlci9kcmF3ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL3BvcG92ZXIvc2lvbi1wb3BvdmVyLm1vZHVsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZSwgUm91dGVyTGlua1dpdGhIcmVmLCBTSW9uUG9wb3Zlck1vZHVsZSBdLFxyXG4gIHNlbGVjdG9yOiAnbWFpbi1jb250ZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWFpbi1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYWluLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1haW5Db250ZW50Q29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGJhY2tkcm9wOiBzdHJpbmcgPSAnYmctcHJpbWFyeS8zMCc7XHJcbiAgQElucHV0KCkgc2hhZG93Q29sb3I6IHN0cmluZyA9ICdjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpJztcclxuXHJcbiAgQElucHV0KCkgY29sYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkcmF3ZXJDb21wb25lbnQ6IERyYXdlckNvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICkgeyB9XHJcblxyXG4gIFRva2VuOiBhbnk7XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlRva2VuID0gYXdhaXQgdGhpcy5hdXRoU2VydmljZS5Mb2FkVG9rZW4oKTtcclxuICAgIHRoaXMuVGhlbWUgPSBOdW1iZXIoKGF3YWl0IFByZWZlcmVuY2VzLmdldCh7IGtleTogJ3RoZW1lJyB9KSkudmFsdWUpIGFzIFRoZW1lO1xyXG5cclxuICAgIHRoaXMuU2V0VGhlbWUodGhpcy5UaGVtZSk7XHJcbiAgICB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XHJcbiAgICAgIHRoaXMuU2V0VGhlbWUodGhpcy5UaGVtZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFRoZW1lOiBUaGVtZSA9IFRoZW1lLlN5c3RlbTtcclxuICBhc3luYyBTZXRUaGVtZSh0aGVtZTogVGhlbWUpIHtcclxuICAgIHRoaXMuVGhlbWUgPSB0aGVtZTtcclxuICAgIGF3YWl0IFByZWZlcmVuY2VzLnNldCh7IGtleTogJ3RoZW1lJywgdmFsdWU6IHRoaXMuVGhlbWUudG9TdHJpbmcoKSB9KTtcclxuICAgIGlmICh0aGlzLlRoZW1lID09PSBUaGVtZS5TeXN0ZW0pIHtcclxuICAgICAgdmFyIG1hdGNoZXMgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgXHJcbiAgICBpZiAodGhpcy5UaGVtZSA9PT0gVGhlbWUuTGlnaHQpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7XHJcbiAgICB9IGVsc2UgXHJcbiAgICBpZiAodGhpcy5UaGVtZSA9PT0gVGhlbWUuRGFyaykge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2RhcmsnKTsgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZnVsbFNjcmVlbigpOiBib29sZWFuIHsgXHJcbiAgICBpZihkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCAhPSBudWxsKXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7IFxyXG4gIH07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhcmdldCcpIEZ1bGxTY3JlZW5Db250ZWluZXI7XHJcbiAgRnVsbFNjcmVlbigpOiB2b2lke1xyXG4gICAgaWYoIXRoaXMuZnVsbFNjcmVlbil7XHJcbiAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLkZ1bGxTY3JlZW5Db250ZWluZXIubmF0aXZlRWxlbWVudDtcclxuICBcclxuICAgICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xyXG4gICAgICAgIGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZW51bSBUaGVtZSB7XHJcbiAgU3lzdGVtID0gMCxcclxuICBMaWdodCAgPSAxLFxyXG4gIERhcmsgICA9IDIsXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNpemUtZnVsbCBmbGV4IGZsZXgtY29sXCIgW25nQ2xhc3NdPVwieydiZy1saWdodC81MCc6IGZ1bGxTY3JlZW59XCIgI3RhcmdldD5cclxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtMTQgcmVsYXRpdmUgc2hyaW5rLTBcIj5cclxuICAgIDxpb24tY2FyZCBjbGFzcz1cIm0tMCByb3VuZGVkLW5vbmUgc2l6ZS1mdWxsIGJvcmRlci1ub25lXCI+XHJcbiAgICAgIDxpb24tY2FyZC1jb250ZW50IGNsYXNzPVwicC0wIHB4LTIgc2l6ZS1mdWxsIGZsZXhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnRcIj5cclxuICAgICAgICAgIEBpZiAoIWZ1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgPGlvbi1tZW51LWJ1dHRvbiAgW3JvdXRlckxpbmtdPVwiWycvJ11cIiBbYXV0b0hpZGVdPVwidHJ1ZVwiPjwvaW9uLW1lbnUtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9c3RhcnRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yXCI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG5cclxuICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJGdWxsU2NyZWVuKClcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNpemU9XCJzbWFsbFwiIGNsYXNzPVwic2l6ZS0xMCBhc3BlY3Qtc3F1YXJlICBwb3J0cmFpdDpoaWRkZW5cIj5cclxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiZXhwYW5kXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgQGlmICghZnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICA8ZGl2ICNhbmNob3I+XHJcbiAgICAgICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInVzZXJQb3BvdmVyLnByZXNlbnQoJGV2ZW50KVwiIHNpemU9XCJzbWFsbFwiIGNsYXNzPVwic2l6ZS0xMCBhc3BlY3Qtc3F1YXJlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwcGVyY2FzZSB0ZXh0LXdoaXRlXCI+e3tUb2tlbiA/IFRva2VuLk5vbWVbMF0gOiAnJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzaW9uLXBvcG92ZXIgI3VzZXJQb3BvdmVyIFthbmNob3JdPVwiYW5jaG9yXCIgW2ZsaXBdPVwiZmFsc2VcIiB3aWR0aD1cIjEzcmVtXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IHAtMiBnYXAtMiBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtMTAgc2hyaW5rLTAgYXNwZWN0LXNxdWFyZSByb3VuZGVkLTJ4bCB0ZXh0LXNtIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwcGVyY2FzZSB0ZXh0LXdoaXRlXCI+e3tUb2tlbiA/IFRva2VuLk5vbWVbMF0gOiAnJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaHJpbmstMCB3LWZ1bGwgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj4ge3tUb2tlbiA/IFRva2VuLk5vbWUgOiAnJ319IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlIHRleHQtc2Vjb25kYXJ5XCI+ICYjNjQ7e3tUb2tlbiA/IFRva2VuLkFwZWxpZG8gOiAnJ319IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IGNsYXNzPVwic2l6ZS1mdWxsXCIgc2VsZWN0PVwiW3Nsb3Q9dXNlci1wb3BvdmVyXVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcC0xICFwYi0wIHRyYW5zbHVjaWQtYm9yZGVyICFib3JkZXIteC0wICFib3JkZXItYi0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLXhsIGZsZXggZ2FwLTIgaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZGVmYXVsdC10cmFuc2l0aW9uIHB5LTEgcHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY29udHJhc3RcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD4gVGVtYSA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHBsLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLXJhZGlvLWdyb3VwIGFsaWdubWVudD1cInN0YXJ0XCIgW2FsbG93RW1wdHlTZWxlY3Rpb25dPVwiZmFsc2VcIiBbdmFsdWVdPVwiVGhlbWVcIiAoaW9uQ2hhbmdlKT1cIlNldFRoZW1lKCRldmVudC5kZXRhaWwudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gY2xhc3M9XCJiZy10cmFuc3BhcmVudFwiIGxpbmVzPVwiZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvZ1wiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tcmFkaW8gY2xhc3M9XCJ3LWZ1bGxcIiBbdmFsdWVdPVwiMFwiPlNpc3RlbWE8L2lvbi1yYWRpbz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gY2xhc3M9XCJiZy10cmFuc3BhcmVudFwiIGxpbmVzPVwiZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInN1bm55XCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1yYWRpbyBjbGFzcz1cInctZnVsbFwiIFt2YWx1ZV09XCIxXCI+Q2xhcm88L2lvbi1yYWRpbz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gY2xhc3M9XCJiZy10cmFuc3BhcmVudFwiIGxpbmVzPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm1vb25cIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXJhZGlvIGNsYXNzPVwidy1mdWxsXCIgW3ZhbHVlXT1cIjJcIj5Fc2N1cm88L2lvbi1yYWRpbz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9pb24tcmFkaW8tZ3JvdXA+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcC0xIHRyYW5zbHVjaWQtYm9yZGVyICFib3JkZXIteC0wICFib3JkZXItYi0wIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQteGwgZmxleCBnYXAtMiBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1tZWRpdW0vMzAgZGVmYXVsdC10cmFuc2l0aW9uIHB5LTEgcHgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWNoZWNrYm94IFtjaGVja2VkXT1cIlRoZW1lID09IDBcIiAoaW9uQ2hhbmdlKT1cIlNldFRoZW1lKDApXCIgPjwvaW9uLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvZ1wiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD4gU2lzdGVtYSA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTEgdHJhbnNsdWNpZC1ib3JkZXIgIWJvcmRlci14LTAgIWJvcmRlci1iLTAgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC14bCBmbGV4IGdhcC0yIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGN1cnNvci1wb2ludGVyIGhvdmVyOmJnLW1lZGl1bS8zMCBkZWZhdWx0LXRyYW5zaXRpb24gcHktMSBweC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY2hlY2tib3ggW2NoZWNrZWRdPVwiVGhlbWUgPT0gMVwiIChpb25DaGFuZ2UpPVwiU2V0VGhlbWUoMSlcIiA+PC9pb24tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic3VubnlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQ+IENsYXJvIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHAtMSB0cmFuc2x1Y2lkLWJvcmRlciAhYm9yZGVyLXgtMCAhYm9yZGVyLWItMCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLXhsIGZsZXggZ2FwLTIgaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctbWVkaXVtLzMwIGRlZmF1bHQtdHJhbnNpdGlvbiBweS0xIHB4LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBbY2hlY2tlZF09XCJUaGVtZSA9PSAyXCIgKGlvbkNoYW5nZSk9XCJTZXRUaGVtZSgyKVwiID48L2lvbi1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtb29uXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PiBFc2N1cm8gPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTEgdHJhbnNsdWNpZC1ib3JkZXIgIWJvcmRlci14LTAgIWJvcmRlci1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiYXV0aFNlcnZpY2UuTG9nZ291dCgpXCIgY2xhc3M9XCJyb3VuZGVkLXhsIGZsZXggZ2FwLTIgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgaG92ZXI6YmctbWVkaXVtLzEwIGRlZmF1bHQtdHJhbnNpdGlvbiBweS0xIHB4LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYW5nZXJcIiBuYW1lPVwiZXhpdFwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PiBMb2cgT3V0IDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLXRleHQ+IExvZyBPdXQgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImF1dGhTZXJ2aWNlLkxvZ2dvdXQoKVwiIGNsYXNzPVwic2l6ZS04IHNocmluay0wXCIgc2l6ZT1cInNtYWxsXCIgZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJleGl0LW91dGxpbmVcIj48L2lvbi1pY29uPiBcclxuICAgICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcC0xIGZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXplLTEwIHNocmluay0wIGFzcGVjdC1zcXVhcmUgcm91bmRlZC0yeGwgdGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBkZWZhdWx0LXRyYW5zaXRpb25cIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwcGVyY2FzZSB0ZXh0LXdoaXRlXCI+e3tUb2tlbiA/IFRva2VuLk5vbWVbMF0gOiAnJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3cgbWluLXctMTAgcC0yIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzIG92ZXJmbG93LWhpZGRlbiBibG9jayBkZWZhdWx0LXRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCB3LTAnOiBjb2xhcHNlZH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1Rva2VuID8gVG9rZW4uTm9tZSA6ICcnfX08L3NwYW4+IDxicj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJzZWNvbmRhcnlcIiBjbGFzcz1cInRleHQtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICYjNjQ7e3tUb2tlbiA/IFRva2VuLkFwZWxpZG8gOiAnJ319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgY2xhc3M9XCJzaXplLWZ1bGxcIiBzZWxlY3Q9XCJbc2xvdD11c2VyLXBvcG92ZXJdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHAtMSBweC0yIHRyYW5zbHVjaWQtYm9yZGVyICFib3JkZXIteC0wICFib3JkZXItYi0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXI6YmctbWVkaXVtLzMwIGRlZmF1bHQtdHJhbnNpdGlvbiBzaXplLWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImRhcmtcIiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiBjbGFzcz1cInJvdW5kZWQteGwgdy1mdWxsIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwiY29udHJhc3RcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cInRleHQtc21cIj5UZW1hPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBwLTEgcHgtMiB0cmFuc2x1Y2lkLWJvcmRlciAhYm9yZGVyLXgtMCAhYm9yZGVyLWItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PiBMb2cgT3V0IDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJhdXRoU2VydmljZS5Mb2dnb3V0KClcIiBjbGFzcz1cInNpemUtOCBzaHJpbmstMFwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiZXhpdC1vdXRsaW5lXCI+PC9pb24taWNvbj4gXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9zaW9uLXBvcG92ZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgIDwvaW9uLWNhcmQ+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCByZWxhdGl2ZSBwLTIgcHQtMCBiZy1saWdodFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCByZWxhdGl2ZSByb3VuZGVkLTJ4bCBjb250ZW50LXNoYWRvdyBvdmVyZmxvdy1oaWRkZW4ge3tiYWNrZHJvcH19XCIgc3R5bGU9XCItLXNoYWRvdy1jb2xvcjoge3tzaGFkb3dDb2xvcn19XCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { Component, ContentChildren, ElementRef, EventEmitter,
|
|
1
|
+
import { Component, ContentChildren, ElementRef, EventEmitter, Input, NgZone, Output, QueryList, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { autoUpdate, computePosition, flip, limitShift, offset, shift, arrow } from '@floating-ui/dom';
|
|
3
3
|
import { Timeout } from '../../../services/utils.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common";
|
|
6
6
|
export class SIonPopoverComponent {
|
|
7
|
-
constructor(viewContainerRef) {
|
|
7
|
+
constructor(viewContainerRef, ngZone) {
|
|
8
8
|
this.viewContainerRef = viewContainerRef;
|
|
9
|
+
this.ngZone = ngZone;
|
|
9
10
|
this.fill = 'blur';
|
|
10
11
|
this.arrow = true;
|
|
11
12
|
this.flip = true;
|
|
@@ -85,13 +86,29 @@ export class SIonPopoverComponent {
|
|
|
85
86
|
document.body.appendChild(this.popoverInstance);
|
|
86
87
|
this.popoverInstance.style.setProperty('display', 'none');
|
|
87
88
|
}
|
|
88
|
-
|
|
89
|
-
if (this.popoverInstance
|
|
90
|
-
|
|
89
|
+
onClick(event) {
|
|
90
|
+
if (!this.popoverInstance) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
console.log('Click detected in popover', !this.anchor.contains(event.target), this.anchor);
|
|
94
|
+
if (!this.popoverInstance.contains(event.target) &&
|
|
91
95
|
!this.anchor.contains(event.target)) {
|
|
92
96
|
this.dismiss();
|
|
93
97
|
}
|
|
94
98
|
}
|
|
99
|
+
ngOnInit() {
|
|
100
|
+
//TODO: Use Renderer2 to add event listeners for better Angular compatibility when updating to Angular 19
|
|
101
|
+
this.ngZone.runOutsideAngular(() => {
|
|
102
|
+
this.documentClickListener = (event) => {
|
|
103
|
+
// Run back inside Angular's zone when handling the event
|
|
104
|
+
this.ngZone.run(() => {
|
|
105
|
+
this.onClick(event);
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
// Use the native DOM API directly with capture phase
|
|
109
|
+
document.addEventListener('click', this.documentClickListener, true);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
95
112
|
async dismiss() {
|
|
96
113
|
this.onWillDismiss.emit();
|
|
97
114
|
if (this.cleanupAutoUpdate) {
|
|
@@ -108,15 +125,18 @@ export class SIonPopoverComponent {
|
|
|
108
125
|
this.onDidDismiss.emit();
|
|
109
126
|
}
|
|
110
127
|
ngOnDestroy() {
|
|
128
|
+
if (this.documentClickListener) {
|
|
129
|
+
document.removeEventListener('click', this.documentClickListener, true);
|
|
130
|
+
}
|
|
111
131
|
this.dismiss();
|
|
112
132
|
}
|
|
113
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverComponent, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
114
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SIonPopoverComponent, selector: "sion-popover", inputs: { fill: "fill", arrow: "arrow", flip: "flip", placement: "placement", height: "height", width: "width", anchor: "anchor" }, outputs: { onWillPresent: "onWillPresent", onDidPresent: "onDidPresent", onWillDismiss: "onWillDismiss", onDidDismiss: "onDidDismiss", isVisibleChange: "isVisibleChange" },
|
|
133
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SIonPopoverComponent, selector: "sion-popover", inputs: { fill: "fill", arrow: "arrow", flip: "flip", placement: "placement", height: "height", width: "width", anchor: "anchor" }, outputs: { onWillPresent: "onWillPresent", onDidPresent: "onDidPresent", onWillDismiss: "onWillDismiss", onDidDismiss: "onDidDismiss", isVisibleChange: "isVisibleChange" }, queries: [{ propertyName: "contentChildren", predicate: ["*"], descendants: true }], viewQueries: [{ propertyName: "popoverTemplate", first: true, predicate: ["popoverTemplate"], descendants: true, static: true }, { propertyName: "contentContainer", first: true, predicate: ["popoverWrapper"], descendants: true }, { propertyName: "arrowElement", first: true, predicate: ["popoverArrow"], descendants: true }], ngImport: i0, template: "<ng-template #popoverTemplate>\r\n <div #popoverWrapper class=\"popover-wrapper translucid-border\"\r\n [ngClass]=\"{\r\n 'bg-light' : fill == 'solid',\r\n 'bg-transparent' : fill == 'outline',\r\n 'backdrop-blur-md bg-light/80': fill == 'blur',\r\n '!border-0' : fill == 'clear',\r\n 'visible-anim' : isVisible,\r\n 'invisible-anim' : !isVisible,\r\n }\"\r\n [style.height]=\"height\"\r\n [style.width]=\"width\"\r\n >\r\n <!-- 'solid' | 'outline' | 'blur' | 'clear' -->\r\n @if(arrow){\r\n <div #popoverArrow class=\"popover-arrow size-4 translucid-border\"\r\n [ngClass]=\"{\r\n 'bg-light' : fill == 'solid',\r\n 'bg-transparent' : fill == 'outline',\r\n 'backdrop-blur-md': fill == 'blur',\r\n 'visible-anim' : isVisible,\r\n 'invisible-anim' : !isVisible,\r\n }\"\r\n ></div>\r\n }\r\n <ng-content #content></ng-content>\r\n </div>\r\n</ng-template>", styles: [".popover-wrapper{z-index:50;border-radius:.75rem;width:max-content;position:absolute;will-change:left,top,bottom,right,transform,opacity,filter;transition:opacity,transform,filter .2s ease-in-out;display:none}.popover-arrow{border-radius:.125rem;position:absolute;transform:scale(1) rotate(var(--rotation))!important;clip-path:var(--clip-path-triangle, polygon(0% 0%, 0% 100%, 100% 100%))}.visible-anim{animation:visible .2s ease-in-out forwards}.invisible-anim{pointer-events:none;animation:invisible .2s ease-in-out forwards;opacity:0}@keyframes visible{0%{opacity:0!important;filter:grayscale(.9);transform:scale(.95)}to{opacity:1!important;filter:grayscale(0);transform:scale(1)}}@keyframes invisible{0%{opacity:1;filter:grayscale(0);transform:scale(1)}to{opacity:0!important;filter:grayscale(.9);transform:scale(.95)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
115
135
|
}
|
|
116
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverComponent, decorators: [{
|
|
117
137
|
type: Component,
|
|
118
138
|
args: [{ selector: 'sion-popover', template: "<ng-template #popoverTemplate>\r\n <div #popoverWrapper class=\"popover-wrapper translucid-border\"\r\n [ngClass]=\"{\r\n 'bg-light' : fill == 'solid',\r\n 'bg-transparent' : fill == 'outline',\r\n 'backdrop-blur-md bg-light/80': fill == 'blur',\r\n '!border-0' : fill == 'clear',\r\n 'visible-anim' : isVisible,\r\n 'invisible-anim' : !isVisible,\r\n }\"\r\n [style.height]=\"height\"\r\n [style.width]=\"width\"\r\n >\r\n <!-- 'solid' | 'outline' | 'blur' | 'clear' -->\r\n @if(arrow){\r\n <div #popoverArrow class=\"popover-arrow size-4 translucid-border\"\r\n [ngClass]=\"{\r\n 'bg-light' : fill == 'solid',\r\n 'bg-transparent' : fill == 'outline',\r\n 'backdrop-blur-md': fill == 'blur',\r\n 'visible-anim' : isVisible,\r\n 'invisible-anim' : !isVisible,\r\n }\"\r\n ></div>\r\n }\r\n <ng-content #content></ng-content>\r\n </div>\r\n</ng-template>", styles: [".popover-wrapper{z-index:50;border-radius:.75rem;width:max-content;position:absolute;will-change:left,top,bottom,right,transform,opacity,filter;transition:opacity,transform,filter .2s ease-in-out;display:none}.popover-arrow{border-radius:.125rem;position:absolute;transform:scale(1) rotate(var(--rotation))!important;clip-path:var(--clip-path-triangle, polygon(0% 0%, 0% 100%, 100% 100%))}.visible-anim{animation:visible .2s ease-in-out forwards}.invisible-anim{pointer-events:none;animation:invisible .2s ease-in-out forwards;opacity:0}@keyframes visible{0%{opacity:0!important;filter:grayscale(.9);transform:scale(.95)}to{opacity:1!important;filter:grayscale(0);transform:scale(1)}}@keyframes invisible{0%{opacity:1;filter:grayscale(0);transform:scale(1)}to{opacity:0!important;filter:grayscale(.9);transform:scale(.95)}}\n"] }]
|
|
119
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef }], propDecorators: { fill: [{
|
|
139
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.NgZone }], propDecorators: { fill: [{
|
|
120
140
|
type: Input
|
|
121
141
|
}], arrow: [{
|
|
122
142
|
type: Input
|
|
@@ -152,9 +172,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
152
172
|
args: ['*', { descendants: true }]
|
|
153
173
|
}], isVisibleChange: [{
|
|
154
174
|
type: Output
|
|
155
|
-
}], HandleClicks: [{
|
|
156
|
-
type: HostListener,
|
|
157
|
-
args: ['document:click', ['$event']]
|
|
158
175
|
}] } });
|
|
159
176
|
const staticSides = {
|
|
160
177
|
top: "bottom",
|
|
@@ -168,4 +185,4 @@ const rotations = {
|
|
|
168
185
|
left: "225deg",
|
|
169
186
|
right: "45deg",
|
|
170
187
|
};
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xMLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUF5QixJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFTMUQsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFDVSxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQW5CbkMsU0FBSSxHQUFTLE1BQU0sQ0FBQztRQUNwQixVQUFLLEdBQVksSUFBSSxDQUFDO1FBQ3RCLFNBQUksR0FBYSxJQUFJLENBQUM7UUFHdEIsY0FBUyxHQUFjLFFBQVEsQ0FBQztRQUNoQyxXQUFNLEdBQVcsTUFBTSxDQUFDO1FBQ3hCLFVBQUssR0FBVyxNQUFNLENBQUM7UUFHdEIsa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM3RCxpQkFBWSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTVELGtCQUFhLEdBQXVCLElBQUksWUFBWSxF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LEVBQUUsUUFBUTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsTUFBTSxFQUFFLEtBQUs7SUFDYixJQUFJLEVBQUUsT0FBTztDQUNkLENBQUM7QUFDRixNQUFNLFNBQVMsR0FBRztJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsUUFBUTtJQUNiLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIENvbXB1dGVQb3NpdGlvblJldHVybiwgZmxpcCwgbGltaXRTaGlmdCwgb2Zmc2V0LCBQbGFjZW1lbnQsIHNoaWZ0LCBhcnJvdyB9IGZyb20gJ0BmbG9hdGluZy11aS9kb20nO1xyXG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcblxyXG50eXBlIEZpbGwgPSAnc29saWQnIHwgJ291dGxpbmUnIHwgJ2JsdXInIHwgJ2NsZWFyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2lvbi1wb3BvdmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zaW9uLXBvcG92ZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNJb25Qb3BvdmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZmlsbDogRmlsbCA9ICdibHVyJztcclxuICBASW5wdXQoKSBhcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmxpcCA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgQElucHV0KCkgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tJztcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJ2F1dG8nO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIG9uV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25EaWRQcmVzZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbldpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKSBhbmNob3I6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHBvcG92ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcldyYXBwZXInKSBjb250ZW50Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdwb3BvdmVyQXJyb3cnICApIGFycm93RWxlbWVudCAgICA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIFxyXG4gIC8vIFRyYWNrIGFsbCBjb250ZW50IGNoaWxkcmVuIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXHJcbiAgQENvbnRlbnRDaGlsZHJlbignKicsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgY29udGVudENoaWxkcmVuITogUXVlcnlMaXN0PGFueT47XHJcblxyXG4gIGlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgY2xlYW51cEF1dG9VcGRhdGU/OiAoKSA9PiB2b2lkO1xyXG4gIHByaXZhdGUgcG9wb3Zlckluc3RhbmNlPzogSFRNTEVsZW1lbnQ7XHJcbiAgQE91dHB1dCgpIGlzVmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwdWJsaWMgYXN5bmMgcHJlc2VudChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZih0aGlzLmlzVmlzaWJsZSl7IHJldHVybjsgfVxyXG4gICAgdGhpcy5vbldpbGxQcmVzZW50LmVtaXQoKTtcclxuICAgIFxyXG4gICAgdGhpcy5DcmVhdGVQb3BvdmVySW5Cb2R5KCk7XHJcbiAgICBhd2FpdCBUaW1lb3V0KDApO1xyXG4gICAgXHJcbiAgICBjb25zdCByZWZFbCAgID0gdGhpcy5hbmNob3IgPyB0aGlzLmFuY2hvciA6IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHBvcEVsICAgPSB0aGlzLnBvcG92ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IGFycm93RWwgPSB0aGlzLnBvcG92ZXJJbnN0YW5jZS5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1hcnJvdycpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IGNvbXB1dGVQb3NpdGlvblJldHJ1bjogQ29tcHV0ZVBvc2l0aW9uUmV0dXJuID0gYXdhaXQgdGhpcy5HZXRDb21wdXRlUG9zaXRpb25SZXR1cm4ocmVmRWwsIHBvcEVsLCBhcnJvd0VsKTtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5wb3BvdmVySW5zdGFuY2Uuc3R5bGUsIHtcclxuICAgICAgbGVmdDogYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnh9cHhgLFxyXG4gICAgICB0b3A6ICBgJHtjb21wdXRlUG9zaXRpb25SZXRydW4ueX1weGAsXHJcbiAgICAgIHdpZHRoIDogdGhpcy53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcclxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gYXV0b1VwZGF0ZShcclxuICAgICAgcmVmRWwsXHJcbiAgICAgIHBvcEVsLFxyXG4gICAgICBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29tcHV0ZVBvc2l0aW9uUmV0cnVuOiBDb21wdXRlUG9zaXRpb25SZXR1cm4gPSBhd2FpdCB0aGlzLkdldENvbXB1dGVQb3NpdGlvblJldHVybihyZWZFbCwgcG9wRWwsIGFycm93RWwpO1xyXG5cclxuICAgICAgICBPYmplY3QuYXNzaWduKHBvcEVsLnN0eWxlLCB7XHJcbiAgICAgICAgICBsZWZ0OiBgJHtjb21wdXRlUG9zaXRpb25SZXRydW4ueH1weGAsXHJcbiAgICAgICAgICB0b3A6ICBgJHtjb21wdXRlUG9zaXRpb25SZXRydW4ueX1weGAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoY29tcHV0ZVBvc2l0aW9uUmV0cnVuLm1pZGRsZXdhcmVEYXRhLmFycm93KXtcclxuICAgICAgICAgIGNvbnN0IHsgeDogYXJyb3dYLCB5OiBhcnJvd1kgfSA9IGNvbXB1dGVQb3NpdGlvblJldHJ1bi5taWRkbGV3YXJlRGF0YS5hcnJvdztcclxuXHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNvbXB1dGVQb3NpdGlvblJldHJ1bi5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcclxuICAgICAgICAgIGNvbnN0IHN0YXRpY1NpZGUgPSBzdGF0aWNTaWRlc1twb3NpdGlvbl07XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGFycm93RWwuc3R5bGUsIHtcclxuICAgICAgICAgICAgbGVmdDogYXJyb3dYICE9IG51bGwgPyBgJHthcnJvd1h9cHhgIDogJycsXHJcbiAgICAgICAgICAgIHRvcCA6IGFycm93WSAhPSBudWxsID8gYCR7YXJyb3dZfXB4YCA6ICcnLFxyXG4gICAgICAgICAgICByaWdodCA6ICcnLFxyXG4gICAgICAgICAgICBib3R0b206ICcnLFxyXG4gICAgICAgICAgICBbc3RhdGljU2lkZV06IGAtN3B4YCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYXJyb3dFbC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1yb3RhdGlvbmAsIHJvdGF0aW9uc1twb3NpdGlvbl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCBUaW1lb3V0KDUwKTtcclxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMucG9wb3Zlckluc3RhbmNlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMuaXNWaXNpYmxlKTtcclxuICAgIGF3YWl0IFRpbWVvdXQoMjAwKTtcclxuICAgIHRoaXMub25EaWRQcmVzZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIEdldENvbXB1dGVQb3NpdGlvblJldHVybihyZWZFbDogSFRNTEVsZW1lbnQsIHBvcEVsOiBIVE1MRWxlbWVudCwgYXJyb3dFbDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPENvbXB1dGVQb3NpdGlvblJldHVybj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IGNvbXB1dGVQb3NpdGlvbihyZWZFbCwgcG9wRWwsIHtcclxuICAgICAgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcclxuICAgICAgbWlkZGxld2FyZTogWyBcclxuICAgICAgICBvZmZzZXQoMTApLCBcclxuICAgICAgICB0aGlzLmZsaXAgID8gZmxpcCh7IGNyb3NzQXhpczogZmFsc2UgfSkgOiB1bmRlZmluZWQsIFxyXG4gICAgICAgIHNoaWZ0KHsgbGltaXRlcjogbGltaXRTaGlmdCgpLCBwYWRkaW5nOiA1IH0pLCBcclxuICAgICAgICB0aGlzLmFycm93ID8gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsLCBwYWRkaW5nOiAxMCB9KSA6IHVuZGVmaW5lZCxcclxuICAgICAgXS5maWx0ZXIocCA9PiBwKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDcmVhdGVQb3BvdmVySW5Cb2R5KCk6IHZvaWQge1xyXG4gICAgLy8gQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgdGVtcGxhdGVcclxuICAgIGNvbnN0IGVtYmVkZGVkVmlldyA9IHRoaXMucG9wb3ZlclRlbXBsYXRlLmNyZWF0ZUVtYmVkZGVkVmlldyh7fSk7XHJcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5zZXJ0KGVtYmVkZGVkVmlldyk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBwb3BvdmVyIGVsZW1lbnQgYW5kIGFwcGVuZCB0byBib2R5XHJcbiAgICB0aGlzLnBvcG92ZXJJbnN0YW5jZSA9IGVtYmVkZGVkVmlldy5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucG9wb3Zlckluc3RhbmNlKTtcclxuICAgIHRoaXMucG9wb3Zlckluc3RhbmNlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBIYW5kbGVDbGlja3MoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wb3BvdmVySW5zdGFuY2UgJiZcclxuICAgICAgIXRoaXMucG9wb3Zlckluc3RhbmNlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJlxyXG4gICAgICAhdGhpcy5hbmNob3IuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZGlzbWlzcygpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgdGhpcy5vbldpbGxEaXNtaXNzLmVtaXQoKTtcclxuICAgIGlmKHRoaXMuY2xlYW51cEF1dG9VcGRhdGUpe1xyXG4gICAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlKCk7XHJcbiAgICAgIHRoaXMuY2xlYW51cEF1dG9VcGRhdGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNWaXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5pc1Zpc2libGUpO1xyXG4gICAgYXdhaXQgVGltZW91dCgyMDApO1xyXG5cclxuICAgIGlmICh0aGlzLnBvcG92ZXJJbnN0YW5jZSkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucG9wb3Zlckluc3RhbmNlKTtcclxuICAgICAgdGhpcy5wb3BvdmVySW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRGlkRGlzbWlzcy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzbWlzcygpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc3RhdGljU2lkZXMgPSB7XHJcbiAgdG9wOiBcImJvdHRvbVwiLFxyXG4gIHJpZ2h0OiBcImxlZnRcIixcclxuICBib3R0b206IFwidG9wXCIsXHJcbiAgbGVmdDogXCJyaWdodFwiXHJcbn07XHJcbmNvbnN0IHJvdGF0aW9ucyA9IHtcclxuICBib3R0b206IFwiMTM1ZGVnXCIsXHJcbiAgdG9wOiBcIjMxNWRlZ1wiLFxyXG4gIGxlZnQ6IFwiMjI1ZGVnXCIsXHJcbiAgcmlnaHQ6IFwiNDVkZWdcIixcclxufVxyXG4iLCI8bmctdGVtcGxhdGUgI3BvcG92ZXJUZW1wbGF0ZT5cclxuICA8ZGl2ICNwb3BvdmVyV3JhcHBlciBjbGFzcz1cInBvcG92ZXItd3JhcHBlciB0cmFuc2x1Y2lkLWJvcmRlclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnYmctbGlnaHQnICAgICAgICA6IGZpbGwgPT0gJ3NvbGlkJyxcclxuICAgICAgICAnYmctdHJhbnNwYXJlbnQnICA6IGZpbGwgPT0gJ291dGxpbmUnLFxyXG4gICAgICAgICdiYWNrZHJvcC1ibHVyLW1kIGJnLWxpZ2h0LzgwJzogZmlsbCA9PSAnYmx1cicsXHJcbiAgICAgICAgJyFib3JkZXItMCcgICAgICAgOiBmaWxsID09ICdjbGVhcicsXHJcbiAgICAgICAgJ3Zpc2libGUtYW5pbScgICAgOiBpc1Zpc2libGUsXHJcbiAgICAgICAgJ2ludmlzaWJsZS1hbmltJyAgOiAhaXNWaXNpYmxlLFxyXG4gICAgICB9XCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXHJcbiAgPlxyXG4gIDwhLS0gJ3NvbGlkJyB8ICdvdXRsaW5lJyB8ICdibHVyJyB8ICdjbGVhcicgLS0+XHJcbiAgICBAaWYoYXJyb3cpe1xyXG4gICAgICA8ZGl2ICNwb3BvdmVyQXJyb3cgY2xhc3M9XCJwb3BvdmVyLWFycm93IHNpemUtNCB0cmFuc2x1Y2lkLWJvcmRlclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgJ2JnLWxpZ2h0JyAgICAgICAgOiBmaWxsID09ICdzb2xpZCcsXHJcbiAgICAgICAgICAnYmctdHJhbnNwYXJlbnQnICA6IGZpbGwgPT0gJ291dGxpbmUnLFxyXG4gICAgICAgICAgJ2JhY2tkcm9wLWJsdXItbWQnOiBmaWxsID09ICdibHVyJyxcclxuICAgICAgICAgICd2aXNpYmxlLWFuaW0nICAgIDogaXNWaXNpYmxlLFxyXG4gICAgICAgICAgJ2ludmlzaWJsZS1hbmltJyAgOiAhaXNWaXNpYmxlLFxyXG4gICAgICB9XCJcclxuICAgICAgPjwvZGl2PlxyXG4gICAgfVxyXG4gICAgPG5nLWNvbnRlbnQgI2NvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFnQixLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN00sT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQXlCLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQVMxRCxNQUFNLE9BQU8sb0JBQW9CO0lBb0IvQixZQUNVLGdCQUFrQyxFQUNsQyxNQUFjO1FBRGQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJmLFNBQUksR0FBUyxNQUFNLENBQUM7UUFDcEIsVUFBSyxHQUFZLElBQUksQ0FBQztRQUN0QixTQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVMsR0FBYyxRQUFRLENBQUM7UUFDaEMsV0FBTSxHQUFXLE1BQU0sQ0FBQztRQUN4QixVQUFLLEdBQVcsTUFBTSxDQUFDO1FBR3RCLGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0QsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVB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UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBDb21wdXRlUG9zaXRpb25SZXR1cm4sIGZsaXAsIGxpbWl0U2hpZnQsIG9mZnNldCwgUGxhY2VtZW50LCBzaGlmdCwgYXJyb3cgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcclxuaW1wb3J0IHsgVGltZW91dCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxudHlwZSBGaWxsID0gJ3NvbGlkJyB8ICdvdXRsaW5lJyB8ICdibHVyJyB8ICdjbGVhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Npb24tcG9wb3ZlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTSW9uUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZmlsbDogRmlsbCA9ICdibHVyJztcclxuICBASW5wdXQoKSBhcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmxpcCA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgQElucHV0KCkgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tJztcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJ2F1dG8nO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIG9uV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25EaWRQcmVzZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbldpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKSBhbmNob3I6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHsgfVxyXG5cclxuICBAVmlld0NoaWxkKCdwb3BvdmVyVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwb3BvdmVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXJXcmFwcGVyJykgY29udGVudENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgncG9wb3ZlckFycm93JyAgKSBhcnJvd0VsZW1lbnQgICAgOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBcclxuICAvLyBUcmFjayBhbGwgY29udGVudCBjaGlsZHJlbiBmb3IgY2hhbmdlIGRldGVjdGlvblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oJyonLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRDaGlsZHJlbiE6IFF1ZXJ5TGlzdDxhbnk+O1xyXG5cclxuICBpc1Zpc2libGUgPSBmYWxzZTtcclxuICBwcml2YXRlIGNsZWFudXBBdXRvVXBkYXRlPzogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIHBvcG92ZXJJbnN0YW5jZT86IEhUTUxFbGVtZW50O1xyXG4gIEBPdXRwdXQoKSBpc1Zpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcHVibGljIGFzeW5jIHByZXNlbnQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYodGhpcy5pc1Zpc2libGUpeyByZXR1cm47IH1cclxuICAgIHRoaXMub25XaWxsUHJlc2VudC5lbWl0KCk7XHJcbiAgICBcclxuICAgIHRoaXMuQ3JlYXRlUG9wb3ZlckluQm9keSgpO1xyXG4gICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgIFxyXG4gICAgY29uc3QgcmVmRWwgICA9IHRoaXMuYW5jaG9yID8gdGhpcy5hbmNob3IgOiBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBwb3BFbCAgID0gdGhpcy5wb3BvdmVySW5zdGFuY2U7XHJcbiAgICBjb25zdCBhcnJvd0VsID0gdGhpcy5wb3BvdmVySW5zdGFuY2UucXVlcnlTZWxlY3RvcignLnBvcG92ZXItYXJyb3cnKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBjb25zdCBjb21wdXRlUG9zaXRpb25SZXRydW46IENvbXB1dGVQb3NpdGlvblJldHVybiA9IGF3YWl0IHRoaXMuR2V0Q29tcHV0ZVBvc2l0aW9uUmV0dXJuKHJlZkVsLCBwb3BFbCwgYXJyb3dFbCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucG9wb3Zlckluc3RhbmNlLnN0eWxlLCB7XHJcbiAgICAgIGxlZnQ6IGAke2NvbXB1dGVQb3NpdGlvblJldHJ1bi54fXB4YCxcclxuICAgICAgdG9wOiAgYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnl9cHhgLFxyXG4gICAgICB3aWR0aCA6IHRoaXMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSA9IGF1dG9VcGRhdGUoXHJcbiAgICAgIHJlZkVsLFxyXG4gICAgICBwb3BFbCxcclxuICAgICAgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXB1dGVQb3NpdGlvblJldHJ1bjogQ29tcHV0ZVBvc2l0aW9uUmV0dXJuID0gYXdhaXQgdGhpcy5HZXRDb21wdXRlUG9zaXRpb25SZXR1cm4ocmVmRWwsIHBvcEVsLCBhcnJvd0VsKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwb3BFbC5zdHlsZSwge1xyXG4gICAgICAgICAgbGVmdDogYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnh9cHhgLFxyXG4gICAgICAgICAgdG9wOiAgYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnl9cHhgLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGNvbXB1dGVQb3NpdGlvblJldHJ1bi5taWRkbGV3YXJlRGF0YS5hcnJvdyl7XHJcbiAgICAgICAgICBjb25zdCB7IHg6IGFycm93WCwgeTogYXJyb3dZIH0gPSBjb21wdXRlUG9zaXRpb25SZXRydW4ubWlkZGxld2FyZURhdGEuYXJyb3c7XHJcblxyXG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25SZXRydW4ucGxhY2VtZW50LnNwbGl0KCctJylbMF07XHJcbiAgICAgICAgICBjb25zdCBzdGF0aWNTaWRlID0gc3RhdGljU2lkZXNbcG9zaXRpb25dO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhcnJvd0VsLnN0eWxlLCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGFycm93WCAhPSBudWxsID8gYCR7YXJyb3dYfXB4YCA6ICcnLFxyXG4gICAgICAgICAgICB0b3AgOiBhcnJvd1kgIT0gbnVsbCA/IGAke2Fycm93WX1weGAgOiAnJyxcclxuICAgICAgICAgICAgcmlnaHQgOiAnJyxcclxuICAgICAgICAgICAgYm90dG9tOiAnJyxcclxuICAgICAgICAgICAgW3N0YXRpY1NpZGVdOiBgLTdweGAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGFycm93RWwuc3R5bGUuc2V0UHJvcGVydHkoYC0tcm90YXRpb25gLCByb3RhdGlvbnNbcG9zaXRpb25dKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgVGltZW91dCg1MCk7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLnBvcG92ZXJJbnN0YW5jZS5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgdGhpcy5pc1Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLmlzVmlzaWJsZSk7XHJcbiAgICBhd2FpdCBUaW1lb3V0KDIwMCk7XHJcbiAgICB0aGlzLm9uRGlkUHJlc2VudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBHZXRDb21wdXRlUG9zaXRpb25SZXR1cm4ocmVmRWw6IEhUTUxFbGVtZW50LCBwb3BFbDogSFRNTEVsZW1lbnQsIGFycm93RWw6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxDb21wdXRlUG9zaXRpb25SZXR1cm4+IHtcclxuICAgIHJldHVybiBhd2FpdCBjb21wdXRlUG9zaXRpb24ocmVmRWwsIHBvcEVsLCB7XHJcbiAgICAgIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXHJcbiAgICAgIG1pZGRsZXdhcmU6IFsgXHJcbiAgICAgICAgb2Zmc2V0KDEwKSwgXHJcbiAgICAgICAgdGhpcy5mbGlwICA/IGZsaXAoeyBjcm9zc0F4aXM6IGZhbHNlIH0pIDogdW5kZWZpbmVkLCBcclxuICAgICAgICBzaGlmdCh7IGxpbWl0ZXI6IGxpbWl0U2hpZnQoKSwgcGFkZGluZzogNSB9KSwgXHJcbiAgICAgICAgdGhpcy5hcnJvdyA/IGFycm93KHsgZWxlbWVudDogYXJyb3dFbCwgcGFkZGluZzogMTAgfSkgOiB1bmRlZmluZWQsXHJcbiAgICAgIF0uZmlsdGVyKHAgPT4gcCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgQ3JlYXRlUG9wb3ZlckluQm9keSgpOiB2b2lkIHtcclxuICAgIC8vIENyZWF0ZSBhIGNvbnRhaW5lciBmb3IgdGhlIHRlbXBsYXRlXHJcbiAgICBjb25zdCBlbWJlZGRlZFZpZXcgPSB0aGlzLnBvcG92ZXJUZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcoe30pO1xyXG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmluc2VydChlbWJlZGRlZFZpZXcpO1xyXG5cclxuICAgIC8vIEdldCB0aGUgcG9wb3ZlciBlbGVtZW50IGFuZCBhcHBlbmQgdG8gYm9keVxyXG4gICAgdGhpcy5wb3BvdmVySW5zdGFuY2UgPSBlbWJlZGRlZFZpZXcucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcG92ZXJJbnN0YW5jZSk7XHJcbiAgICB0aGlzLnBvcG92ZXJJbnN0YW5jZS5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZighdGhpcy5wb3BvdmVySW5zdGFuY2UpeyByZXR1cm47fVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdDbGljayBkZXRlY3RlZCBpbiBwb3BvdmVyJywgIXRoaXMuYW5jaG9yLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSwgdGhpcy5hbmNob3IpO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5wb3BvdmVySW5zdGFuY2UuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpICYmXHJcbiAgICAgICF0aGlzLmFuY2hvci5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRpc21pc3MoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZG9jdW1lbnRDbGlja0xpc3RlbmVyOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvL1RPRE86IFVzZSBSZW5kZXJlcjIgdG8gYWRkIGV2ZW50IGxpc3RlbmVycyBmb3IgYmV0dGVyIEFuZ3VsYXIgY29tcGF0aWJpbGl0eSB3aGVuIHVwZGF0aW5nIHRvIEFuZ3VsYXIgMTlcclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAvLyBSdW4gYmFjayBpbnNpZGUgQW5ndWxhcidzIHpvbmUgd2hlbiBoYW5kbGluZyB0aGUgZXZlbnRcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIC8vIFVzZSB0aGUgbmF0aXZlIERPTSBBUEkgZGlyZWN0bHkgd2l0aCBjYXB0dXJlIHBoYXNlXHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGRpc21pc3MoKTogUHJvbWlzZTx2b2lkPntcclxuICAgIHRoaXMub25XaWxsRGlzbWlzcy5lbWl0KCk7XHJcbiAgICBpZih0aGlzLmNsZWFudXBBdXRvVXBkYXRlKXtcclxuICAgICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSgpO1xyXG4gICAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KHRoaXMuaXNWaXNpYmxlKTtcclxuICAgIGF3YWl0IFRpbWVvdXQoMjAwKTtcclxuXHJcbiAgICBpZiAodGhpcy5wb3BvdmVySW5zdGFuY2UpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLnBvcG92ZXJJbnN0YW5jZSk7XHJcbiAgICAgIHRoaXMucG9wb3Zlckluc3RhbmNlID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkRpZERpc21pc3MuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpIHtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaXNtaXNzKCk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzdGF0aWNTaWRlcyA9IHtcclxuICB0b3A6IFwiYm90dG9tXCIsXHJcbiAgcmlnaHQ6IFwibGVmdFwiLFxyXG4gIGJvdHRvbTogXCJ0b3BcIixcclxuICBsZWZ0OiBcInJpZ2h0XCJcclxufTtcclxuY29uc3Qgcm90YXRpb25zID0ge1xyXG4gIGJvdHRvbTogXCIxMzVkZWdcIixcclxuICB0b3A6IFwiMzE1ZGVnXCIsXHJcbiAgbGVmdDogXCIyMjVkZWdcIixcclxuICByaWdodDogXCI0NWRlZ1wiLFxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxyXG4gIDxkaXYgI3BvcG92ZXJXcmFwcGVyIGNsYXNzPVwicG9wb3Zlci13cmFwcGVyIHRyYW5zbHVjaWQtYm9yZGVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdiZy1saWdodCcgICAgICAgIDogZmlsbCA9PSAnc29saWQnLFxyXG4gICAgICAgICdiZy10cmFuc3BhcmVudCcgIDogZmlsbCA9PSAnb3V0bGluZScsXHJcbiAgICAgICAgJ2JhY2tkcm9wLWJsdXItbWQgYmctbGlnaHQvODAnOiBmaWxsID09ICdibHVyJyxcclxuICAgICAgICAnIWJvcmRlci0wJyAgICAgICA6IGZpbGwgPT0gJ2NsZWFyJyxcclxuICAgICAgICAndmlzaWJsZS1hbmltJyAgICA6IGlzVmlzaWJsZSxcclxuICAgICAgICAnaW52aXNpYmxlLWFuaW0nICA6ICFpc1Zpc2libGUsXHJcbiAgICAgIH1cIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxyXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcclxuICA+XHJcbiAgPCEtLSAnc29saWQnIHwgJ291dGxpbmUnIHwgJ2JsdXInIHwgJ2NsZWFyJyAtLT5cclxuICAgIEBpZihhcnJvdyl7XHJcbiAgICAgIDxkaXYgI3BvcG92ZXJBcnJvdyBjbGFzcz1cInBvcG92ZXItYXJyb3cgc2l6ZS00IHRyYW5zbHVjaWQtYm9yZGVyXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnYmctbGlnaHQnICAgICAgICA6IGZpbGwgPT0gJ3NvbGlkJyxcclxuICAgICAgICAgICdiZy10cmFuc3BhcmVudCcgIDogZmlsbCA9PSAnb3V0bGluZScsXHJcbiAgICAgICAgICAnYmFja2Ryb3AtYmx1ci1tZCc6IGZpbGwgPT0gJ2JsdXInLFxyXG4gICAgICAgICAgJ3Zpc2libGUtYW5pbScgICAgOiBpc1Zpc2libGUsXHJcbiAgICAgICAgICAnaW52aXNpYmxlLWFuaW0nICA6ICFpc1Zpc2libGUsXHJcbiAgICAgIH1cIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICB9XHJcbiAgICA8bmctY29udGVudCAjY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -30,6 +30,10 @@ export class AuthService {
|
|
|
30
30
|
if (this.isTokenValid(Token)) {
|
|
31
31
|
this.currentToken = await this.JWToken();
|
|
32
32
|
}
|
|
33
|
+
else {
|
|
34
|
+
this.Loggout();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
33
37
|
if (TokenAdmin && this.isTokenValid(TokenAdmin)) {
|
|
34
38
|
this._isAdmin = true;
|
|
35
39
|
}
|
|
@@ -143,4 +147,4 @@ class Token {
|
|
|
143
147
|
}
|
|
144
148
|
}
|
|
145
149
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFLeEMsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxJQUFnQixFQUNoQixhQUE0QixFQUM1QixXQUErQixFQUMvQixxQkFBNEM7UUFINUMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUs5QyxpQkFBWSxHQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3RHLGtCQUFhLEdBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDdkcsaUJBQVksR0FBa0IsSUFB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SyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlcyB9IGZyb20gJ0BjYXBhY2l0b3IvcHJlZmVyZW5jZXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGp3dERlY29kZSB9IGZyb20gJ2p3dC1kZWNvZGUnO1xyXG5cclxuaW1wb3J0IHsgQXBpVXJsUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2ViL2FwaS11cmwtcHJvdmlkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGNvcmVTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVVybFByb3ZpZGVyU2VydmljZTogQXBpVXJsUHJvdmlkZXJTZXJ2aWNlIFxyXG4gICkge1xyXG4gICAgdGhpcy5TZXRUb2tlbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFVzZXJLZXkgICAgICA6IHN0cmluZyA9IHRoaXMuY29yZVNlcnZpY2UuZW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lLnRvVXBwZXJDYXNlKCkgKyBcIl9VU0VSX0tFWVwiO1xyXG4gIHByaXZhdGUgbG9jYWxBZG1pbktleSAgICAgOiBzdHJpbmcgPSB0aGlzLmNvcmVTZXJ2aWNlLmVudmlyb25tZW50LmFwcGxpY2F0aW9uTmFtZS50b1VwcGVyQ2FzZSgpICsgXCJfQURNSU5fS0VZXCI7XHJcbiAgcHVibGljICBjdXJyZW50VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBhc3luYyBTZXRUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IFRva2VuICAgICAgPSBhd2FpdCB0aGlzLkxvYWRUb2tlbigpO1xyXG4gICAgY29uc3QgVG9rZW5BZG1pbiA9IGF3YWl0IHRoaXMuTG9hZFRva2VuQWRtaW4oKTtcclxuICAgIGlmKHRoaXMuaXNUb2tlblZhbGlkKFRva2VuKSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFRva2VuID0gYXdhaXQgdGhpcy5KV1Rva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoVG9rZW5BZG1pbiAmJiB0aGlzLmlzVG9rZW5WYWxpZChUb2tlbkFkbWluKSl7XHJcbiAgICAgIHRoaXMuX2lzQWRtaW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIExvZ2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBQcmVmZXJlbmNlcy5yZW1vdmUoeyBrZXk6IHRoaXMubG9jYWxVc2VyS2V5IH0pO1xyXG4gICAgYXdhaXQgUHJlZmVyZW5jZXMucmVtb3ZlKHsga2V5OiB0aGlzLmxvY2FsQWRtaW5LZXkgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KFwibG9naW5cIik7XHJcbiAgfVxyXG4gIFxyXG4gIF9pc0FkbWluOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGlzQWRtaW4oKXsgcmV0dXJuIHRoaXMuX2lzQWRtaW47ICB9XHJcblxyXG4gIGFzeW5jIExvZ2luKGNyZWRlbnRpYWxzOiBBdXRoZW50aWNhdGlvbik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnl7XHJcbiAgICAgIGNvbnN0IEpXVG9rZW4gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLkFwaUxvZ2luKGNyZWRlbnRpYWxzKSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuU2F2ZVRva2VuKEpXVG9rZW4pO1xyXG4gICAgICBhd2FpdCB0aGlzLlNldFRva2VuKCk7XHJcbiAgICAgIHJldHVybiAoand0RGVjb2RlKEpXVG9rZW4pKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFcnJvcil7XHJcbiAgICAgIHRocm93IEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgQnlwYXNzTG9naW4oaWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnl7XHJcbiAgICAgIGNvbnN0IEpXVG9rZW4gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLkFwaUJ5cGFzc0xvZ2luKGlkKSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuU2F2ZVRva2VuKEpXVG9rZW4pO1xyXG4gICAgICBhd2FpdCB0aGlzLlNldFRva2VuKCk7XHJcbiAgICAgIHJldHVybiAoand0RGVjb2RlKEpXVG9rZW4pKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFcnJvcil7XHJcbiAgICAgIHRocm93IEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQXBpTG9naW4oY3JlZGVudGlhbHM6IEF1dGhlbnRpY2F0aW9uKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxzdHJpbmc+KHRoaXMuYXBpVXJsUHJvdmlkZXJTZXJ2aWNlLmFwaVVybCArICdhdXRoJywgY3JlZGVudGlhbHMpO1xyXG4gIH1cclxuICBBcGlCeXBhc3NMb2dpbihpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZz4odGhpcy5hcGlVcmxQcm92aWRlclNlcnZpY2UuYXBpVXJsICsgYGF1dGgvJHtpZH1gKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIFNhdmVUb2tlbihKV1Rva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgaWYoKGp3dERlY29kZShKV1Rva2VuKSBhcyBUb2tlbikuaWQgPT0gMSl7IFxyXG4gICAgICBhd2FpdCBQcmVmZXJlbmNlcy5zZXQoeyBrZXk6IHRoaXMubG9jYWxBZG1pbktleSwgdmFsdWU6IEpXVG9rZW59KTtcclxuICAgIH1cclxuICAgIGF3YWl0IFByZWZlcmVuY2VzLnNldCh7IGtleTogdGhpcy5sb2NhbFVzZXJLZXksIHZhbHVlOiBKV1Rva2VuIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBMb2FkVG9rZW4oKTogUHJvbWlzZTxUb2tlbiB8IG51bGwgfCBhbnk+IHtcclxuICAgIGNvbnN0IEpXVG9rZW4gPSAoYXdhaXQgUHJlZmVyZW5jZXMuZ2V0KHsga2V5OiB0aGlzLmxvY2FsVXNlcktleX0pKS52YWx1ZTtcclxuICAgIGlmKEpXVG9rZW4pe1xyXG4gICAgICBjb25zdCBQYXJzZWRPYmplY3QgPSBqd3REZWNvZGUoSldUb2tlbik7XHJcbiAgICAgIHJldHVybiBQYXJzZWRPYmplY3Q7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIExvYWRUb2tlbkFkbWluKCk6IFByb21pc2U8VG9rZW4gfCBudWxsIHwgYW55PiB7XHJcbiAgICBjb25zdCBKV1Rva2VuID0gKGF3YWl0IFByZWZlcmVuY2VzLmdldCh7IGtleTogdGhpcy5sb2NhbEFkbWluS2V5fSkpLnZhbHVlO1xyXG4gICAgaWYoSldUb2tlbil7XHJcbiAgICAgIGNvbnN0IFBhcnNlZE9iamVjdCA9IGp3dERlY29kZShKV1Rva2VuKTtcclxuICAgICAgcmV0dXJuIFBhcnNlZE9iamVjdDtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIEpXVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IEpXVG9rZW46IHN0cmluZyA9IChhd2FpdCBQcmVmZXJlbmNlcy5nZXQoeyBrZXk6IHRoaXMubG9jYWxVc2VyS2V5IH0pKS52YWx1ZTtcclxuICAgIHJldHVybiBKV1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgR2V0QmVhcmVyKCk6IFByb21pc2U8c3RyaW5nPntcclxuICAgIHJldHVybiBgQmVhcmVyICR7YXdhaXQgdGhpcy5KV1Rva2VuKCl9YFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVG9rZW5WYWxpZChUb2tlbjogYW55KTogYm9vbGVhbntcclxuICAgIGlmKCFUb2tlbil7IHJldHVybiBmYWxzZTsgfWVsc2VcclxuICAgIHJldHVybiAhKFV0aWxzLlVOSVhUb0RhdGUoVG9rZW4uZXhwKSA8IG5ldyBEYXRlKCkpXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBBdXRoZW50aWNhdGlvbntcclxuICBwdWJsaWMgQXBlbGlkbzogc3RyaW5nID0gbnVsbDtcclxuICBwdWJsaWMgU2VuaGEgIDogc3RyaW5nID0gbnVsbDtcclxufVxyXG5cclxuY2xhc3MgVG9rZW4ge1xyXG4gIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcbiAgQWNlc3NvICAgOiBudW1iZXIgPSAwO1xyXG4gIEFwZWxpZG8gIDogc3RyaW5nID0gXCJcIjtcclxuICBOb21lICAgICA6IHN0cmluZyA9IFwiXCI7XHJcbiAgaWQgICAgICAgOiBudW1iZXIgPSAwO1xyXG4gIGlkRW1wcmVzYTogbnVtYmVyID0gMDtcclxuICBcclxuICBjb25zdHJ1Y3Rvcigpe31cclxuICBcclxuICBwYXRjaCh0b2tlbjogVG9rZW4gfCBhbnkpOiB2b2lke1xyXG4gICAgZm9yKGxldCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRva2VuKSl7XHJcbiAgICAgIGlmKE51bWJlcigodG9rZW5bcHJvcF0pKSl7XHJcbiAgICAgICAgdGhpc1twcm9wXSA9IE51bWJlcih0b2tlbltwcm9wXSk7IFxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXNbcHJvcF0gPSB0b2tlbltwcm9wXTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFLeEMsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxJQUFnQixFQUNoQixhQUE0QixFQUM1QixXQUErQixFQUMvQixxQkFBNEM7UUFINUMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUs5QyxpQkFBWSxHQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3RHLGtCQUFhLEdBQWdCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUM7UUFDdkcsaUJBQVksR0FBa0IsSUFB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Q0FBQztnQkFDakMsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlcyB9IGZyb20gJ0BjYXBhY2l0b3IvcHJlZmVyZW5jZXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGp3dERlY29kZSB9IGZyb20gJ2p3dC1kZWNvZGUnO1xyXG5cclxuaW1wb3J0IHsgQXBpVXJsUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2ViL2FwaS11cmwtcHJvdmlkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGNvcmVTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVVybFByb3ZpZGVyU2VydmljZTogQXBpVXJsUHJvdmlkZXJTZXJ2aWNlIFxyXG4gICkge1xyXG4gICAgdGhpcy5TZXRUb2tlbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFVzZXJLZXkgICAgICA6IHN0cmluZyA9IHRoaXMuY29yZVNlcnZpY2UuZW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lLnRvVXBwZXJDYXNlKCkgKyBcIl9VU0VSX0tFWVwiO1xyXG4gIHByaXZhdGUgbG9jYWxBZG1pbktleSAgICAgOiBzdHJpbmcgPSB0aGlzLmNvcmVTZXJ2aWNlLmVudmlyb25tZW50LmFwcGxpY2F0aW9uTmFtZS50b1VwcGVyQ2FzZSgpICsgXCJfQURNSU5fS0VZXCI7XHJcbiAgcHVibGljICBjdXJyZW50VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBhc3luYyBTZXRUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IFRva2VuICAgICAgPSBhd2FpdCB0aGlzLkxvYWRUb2tlbigpO1xyXG4gICAgY29uc3QgVG9rZW5BZG1pbiA9IGF3YWl0IHRoaXMuTG9hZFRva2VuQWRtaW4oKTtcclxuICAgIGlmKHRoaXMuaXNUb2tlblZhbGlkKFRva2VuKSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFRva2VuID0gYXdhaXQgdGhpcy5KV1Rva2VuKCk7XHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIHRoaXMuTG9nZ291dCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYoVG9rZW5BZG1pbiAmJiB0aGlzLmlzVG9rZW5WYWxpZChUb2tlbkFkbWluKSl7XHJcbiAgICAgIHRoaXMuX2lzQWRtaW4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIExvZ2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBQcmVmZXJlbmNlcy5yZW1vdmUoeyBrZXk6IHRoaXMubG9jYWxVc2VyS2V5IH0pO1xyXG4gICAgYXdhaXQgUHJlZmVyZW5jZXMucmVtb3ZlKHsga2V5OiB0aGlzLmxvY2FsQWRtaW5LZXkgfSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVSb290KFwibG9naW5cIik7XHJcbiAgfVxyXG4gIFxyXG4gIF9pc0FkbWluOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGlzQWRtaW4oKXsgcmV0dXJuIHRoaXMuX2lzQWRtaW47ICB9XHJcblxyXG4gIGFzeW5jIExvZ2luKGNyZWRlbnRpYWxzOiBBdXRoZW50aWNhdGlvbik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnl7XHJcbiAgICAgIGNvbnN0IEpXVG9rZW4gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLkFwaUxvZ2luKGNyZWRlbnRpYWxzKSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuU2F2ZVRva2VuKEpXVG9rZW4pO1xyXG4gICAgICBhd2FpdCB0aGlzLlNldFRva2VuKCk7XHJcbiAgICAgIHJldHVybiAoand0RGVjb2RlKEpXVG9rZW4pKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFcnJvcil7XHJcbiAgICAgIHRocm93IEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgQnlwYXNzTG9naW4oaWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnl7XHJcbiAgICAgIGNvbnN0IEpXVG9rZW4gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLkFwaUJ5cGFzc0xvZ2luKGlkKSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuU2F2ZVRva2VuKEpXVG9rZW4pO1xyXG4gICAgICBhd2FpdCB0aGlzLlNldFRva2VuKCk7XHJcbiAgICAgIHJldHVybiAoand0RGVjb2RlKEpXVG9rZW4pKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChFcnJvcil7XHJcbiAgICAgIHRocm93IEVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQXBpTG9naW4oY3JlZGVudGlhbHM6IEF1dGhlbnRpY2F0aW9uKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxzdHJpbmc+KHRoaXMuYXBpVXJsUHJvdmlkZXJTZXJ2aWNlLmFwaVVybCArICdhdXRoJywgY3JlZGVudGlhbHMpO1xyXG4gIH1cclxuICBBcGlCeXBhc3NMb2dpbihpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZz4odGhpcy5hcGlVcmxQcm92aWRlclNlcnZpY2UuYXBpVXJsICsgYGF1dGgvJHtpZH1gKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIFNhdmVUb2tlbihKV1Rva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgaWYoKGp3dERlY29kZShKV1Rva2VuKSBhcyBUb2tlbikuaWQgPT0gMSl7IFxyXG4gICAgICBhd2FpdCBQcmVmZXJlbmNlcy5zZXQoeyBrZXk6IHRoaXMubG9jYWxBZG1pbktleSwgdmFsdWU6IEpXVG9rZW59KTtcclxuICAgIH1cclxuICAgIGF3YWl0IFByZWZlcmVuY2VzLnNldCh7IGtleTogdGhpcy5sb2NhbFVzZXJLZXksIHZhbHVlOiBKV1Rva2VuIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBMb2FkVG9rZW4oKTogUHJvbWlzZTxUb2tlbiB8IG51bGwgfCBhbnk+IHtcclxuICAgIGNvbnN0IEpXVG9rZW4gPSAoYXdhaXQgUHJlZmVyZW5jZXMuZ2V0KHsga2V5OiB0aGlzLmxvY2FsVXNlcktleX0pKS52YWx1ZTtcclxuICAgIGlmKEpXVG9rZW4pe1xyXG4gICAgICBjb25zdCBQYXJzZWRPYmplY3QgPSBqd3REZWNvZGUoSldUb2tlbik7XHJcbiAgICAgIHJldHVybiBQYXJzZWRPYmplY3Q7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIExvYWRUb2tlbkFkbWluKCk6IFByb21pc2U8VG9rZW4gfCBudWxsIHwgYW55PiB7XHJcbiAgICBjb25zdCBKV1Rva2VuID0gKGF3YWl0IFByZWZlcmVuY2VzLmdldCh7IGtleTogdGhpcy5sb2NhbEFkbWluS2V5fSkpLnZhbHVlO1xyXG4gICAgaWYoSldUb2tlbil7XHJcbiAgICAgIGNvbnN0IFBhcnNlZE9iamVjdCA9IGp3dERlY29kZShKV1Rva2VuKTtcclxuICAgICAgcmV0dXJuIFBhcnNlZE9iamVjdDtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIEpXVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IEpXVG9rZW46IHN0cmluZyA9IChhd2FpdCBQcmVmZXJlbmNlcy5nZXQoeyBrZXk6IHRoaXMubG9jYWxVc2VyS2V5IH0pKS52YWx1ZTtcclxuICAgIHJldHVybiBKV1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgR2V0QmVhcmVyKCk6IFByb21pc2U8c3RyaW5nPntcclxuICAgIHJldHVybiBgQmVhcmVyICR7YXdhaXQgdGhpcy5KV1Rva2VuKCl9YFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVG9rZW5WYWxpZChUb2tlbjogYW55KTogYm9vbGVhbntcclxuICAgIGlmKCFUb2tlbil7IHJldHVybiBmYWxzZTsgfWVsc2VcclxuICAgIHJldHVybiAhKFV0aWxzLlVOSVhUb0RhdGUoVG9rZW4uZXhwKSA8IG5ldyBEYXRlKCkpXHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBBdXRoZW50aWNhdGlvbntcclxuICBwdWJsaWMgQXBlbGlkbzogc3RyaW5nID0gbnVsbDtcclxuICBwdWJsaWMgU2VuaGEgIDogc3RyaW5nID0gbnVsbDtcclxufVxyXG5cclxuY2xhc3MgVG9rZW4ge1xyXG4gIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcbiAgQWNlc3NvICAgOiBudW1iZXIgPSAwO1xyXG4gIEFwZWxpZG8gIDogc3RyaW5nID0gXCJcIjtcclxuICBOb21lICAgICA6IHN0cmluZyA9IFwiXCI7XHJcbiAgaWQgICAgICAgOiBudW1iZXIgPSAwO1xyXG4gIGlkRW1wcmVzYTogbnVtYmVyID0gMDtcclxuICBcclxuICBjb25zdHJ1Y3Rvcigpe31cclxuICBcclxuICBwYXRjaCh0b2tlbjogVG9rZW4gfCBhbnkpOiB2b2lke1xyXG4gICAgZm9yKGxldCBwcm9wIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRva2VuKSl7XHJcbiAgICAgIGlmKE51bWJlcigodG9rZW5bcHJvcF0pKSl7XHJcbiAgICAgICAgdGhpc1twcm9wXSA9IE51bWJlcih0b2tlbltwcm9wXSk7IFxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXNbcHJvcF0gPSB0b2tlbltwcm9wXTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|