@sapphire-ion/framework 1.0.33 → 1.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/esm2022/lib/components/default/default-table/th-filter/th-filter.component.mjs +1 -1
  2. package/esm2022/lib/components/default/default-view/default-view.component.mjs +9 -3
  3. package/esm2022/lib/components/default/default-view/header-view/header-view.component.mjs +8 -5
  4. package/esm2022/lib/components/drawer/drawer.component.mjs +2 -2
  5. package/esm2022/lib/components/inputs/input-color/input-color.component.mjs +1 -1
  6. package/esm2022/lib/components/inputs/input-date/input-date.component.mjs +3 -3
  7. package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +22 -6
  8. package/esm2022/lib/components/inputs/input-select/input.select.configuration.mjs +16 -1
  9. package/esm2022/lib/components/main-content/main-content.component.mjs +1 -1
  10. package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +118 -108
  11. package/esm2022/lib/components/popover/sion-popover.module.mjs +3 -6
  12. package/fesm2022/sapphire-ion-framework.mjs +177 -130
  13. package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
  14. package/lib/components/default/default-view/default-view.component.d.ts +6 -2
  15. package/lib/components/default/default-view/header-view/header-view.component.d.ts +6 -3
  16. package/lib/components/inputs/input-select/input-select.component.d.ts +4 -1
  17. package/lib/components/inputs/input-select/input.select.configuration.d.ts +19 -0
  18. package/lib/components/popover/sion-popover/sion-popover.component.d.ts +21 -13
  19. package/lib/components/stepper/step/step.component.d.ts +1 -1
  20. package/package.json +1 -1
  21. package/themes/components/popover/sion-popover/sion-popover.component.scss +14 -32
@@ -74,7 +74,7 @@ export class MainContentComponent {
74
74
  }
75
75
  }
76
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 }); }
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\"> &#64;{{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 &#64;{{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"] }] }); }
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\"> &#64;{{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 &#64;{{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"] }] }); }
78
78
  }
79
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainContentComponent, decorators: [{
80
80
  type: Component,
@@ -1,4 +1,4 @@
1
- import { Component, ContentChildren, ElementRef, EventEmitter, Input, NgZone, Output, QueryList, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, Input, NgZone, Output, 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";
@@ -18,130 +18,143 @@ export class SIonPopoverComponent {
18
18
  this.onWillDismiss = new EventEmitter();
19
19
  this.onDidDismiss = new EventEmitter();
20
20
  this.anchor = undefined;
21
- this.isVisible = false;
22
- this.isVisibleChange = new EventEmitter();
23
- this.lock = false;
24
- }
25
- async present(event) {
26
- if (this.isVisible) {
27
- return;
28
- }
29
- await waitUntil(() => !this.lock);
30
- this.lock = true;
31
- this.onWillPresent.emit();
32
- this.CreatePopoverInBody();
33
- await Timeout(0);
34
- const refEl = this.anchor ? this.anchor : event.target;
35
- const popEl = this.popoverInstance;
36
- const arrowEl = this.popoverInstance.querySelector('.popover-arrow');
37
- const computePositionRetrun = await this.GetComputePositionReturn(refEl, popEl, arrowEl);
38
- Object.assign(this.popoverInstance.style, {
39
- left: `${computePositionRetrun.x}px`,
40
- top: `${computePositionRetrun.y}px`,
41
- width: this.width,
42
- height: this.height,
43
- position: 'absolute',
44
- });
45
- this.cleanupAutoUpdate = autoUpdate(refEl, popEl, async () => {
46
- const computePositionRetrun = await this.GetComputePositionReturn(refEl, popEl, arrowEl);
47
- Object.assign(popEl.style, {
48
- left: `${computePositionRetrun.x}px`,
49
- top: `${computePositionRetrun.y}px`,
50
- });
51
- if (computePositionRetrun.middlewareData.arrow) {
52
- const { x: arrowX, y: arrowY } = computePositionRetrun.middlewareData.arrow;
53
- const position = computePositionRetrun.placement.split('-')[0];
54
- const staticSide = staticSides[position];
55
- Object.assign(arrowEl.style, {
56
- left: arrowX != null ? `${arrowX}px` : '',
57
- top: arrowY != null ? `${arrowY}px` : '',
58
- right: '',
59
- bottom: '',
60
- [staticSide]: `-7px`,
61
- });
62
- arrowEl.style.setProperty(`--rotation`, rotations[position]);
63
- }
64
- });
65
- await Timeout(50);
66
- this.isVisible = true;
67
- this.popoverInstance.style.setProperty('display', 'block');
68
- this.isVisibleChange.emit(this.isVisible);
69
- await Timeout(200);
70
- this.onDidPresent.emit();
71
- this.lock = false;
72
- }
73
- async GetComputePositionReturn(refEl, popEl, arrowEl) {
74
- return await computePosition(refEl, popEl, {
75
- placement: this.placement,
76
- middleware: [
77
- offset(10),
78
- this.flip ? flip({ crossAxis: false }) : undefined,
79
- shift({ limiter: limitShift(), padding: 5 }),
80
- this.arrow ? arrow({ element: arrowEl, padding: 10 }) : undefined,
81
- ].filter(p => p),
82
- });
83
- }
84
- CreatePopoverInBody() {
85
- // Create a container for the template
86
- const embeddedView = this.popoverTemplate.createEmbeddedView({});
87
- this.viewContainerRef.insert(embeddedView);
88
- // Get the popover element and append to body
89
- this.popoverInstance = embeddedView.rootNodes[0];
90
- document.body.appendChild(this.popoverInstance);
91
- this.popoverInstance.style.setProperty('display', 'none');
92
- }
93
- onClick(event) {
94
- if (!this.popoverInstance) {
95
- return;
96
- }
97
- if (!this.popoverInstance.contains(event.target) &&
98
- !this.anchor.contains(event.target)) {
99
- this.dismiss();
100
- }
21
+ this.state = POPOVER_STATE.IDLE;
101
22
  }
102
23
  ngOnInit() {
24
+ this.CreateEmbeddedView();
25
+ this.CreateInstance();
103
26
  //TODO: Use Renderer2 to add event listeners for better Angular compatibility when updating to Angular 19
104
27
  this.ngZone.runOutsideAngular(() => {
105
28
  this.documentClickListener = (event) => {
106
29
  // Run back inside Angular's zone when handling the event
107
30
  this.ngZone.run(() => {
108
- this.onClick(event);
31
+ if (!this._instance) {
32
+ return;
33
+ }
34
+ if (!this._instance.contains(event.target) &&
35
+ !this.anchor.contains(event.target)) {
36
+ this.dismiss();
37
+ }
109
38
  });
110
39
  };
111
40
  // Use the native DOM API directly with capture phase
112
41
  document.addEventListener('click', this.documentClickListener, true);
113
42
  });
114
43
  }
44
+ CreateEmbeddedView() {
45
+ if (this._embeddedView) {
46
+ return;
47
+ }
48
+ this._embeddedView = this.popoverTemplate.createEmbeddedView({});
49
+ this.viewRef = this.viewContainerRef.insert(this._embeddedView);
50
+ }
51
+ CreateInstance() {
52
+ this._instance = this._embeddedView.rootNodes[0];
53
+ document.body.appendChild(this._instance);
54
+ // const style = {
55
+ // "solid" : ['bg-light'],
56
+ // "outline": ['bg-transparent'],
57
+ // "blur" : ['backdrop-blur-md', 'bg-light/80'],
58
+ // "clear" : ['!border-0 bg-transparent'],
59
+ // }[this.fill];
60
+ // style.forEach(s => {
61
+ // this._instance.classList.add(s);
62
+ // this.arrowEl?.classList.add(s);
63
+ // });
64
+ }
65
+ get arrowEl() {
66
+ return this._instance.querySelector('.popover-arrow');
67
+ }
68
+ async present(event) {
69
+ if (this.state != POPOVER_STATE.IDLE) {
70
+ return;
71
+ }
72
+ this.onWillPresent.emit();
73
+ this.state = POPOVER_STATE.PRESENTING;
74
+ const refEl = this.anchor ? this.anchor : event.target;
75
+ const arrowEl = this.arrowEl;
76
+ await this.update(refEl, arrowEl);
77
+ this._instance.classList.add('show');
78
+ this.cleanupAutoUpdate = autoUpdate(refEl, this._instance, async () => this.update(refEl, arrowEl));
79
+ this.state = POPOVER_STATE.VISIBLE;
80
+ this.onDidPresent.emit();
81
+ }
82
+ async update(refEl, arrowEl) {
83
+ const computePositionReturn = await this.GetComputePositionReturn(refEl, this._instance, arrowEl);
84
+ this.HandleComputePositionReturn(computePositionReturn, arrowEl);
85
+ }
115
86
  async dismiss() {
116
- await waitUntil(() => !this.lock);
117
- this.lock = true;
118
- this.onWillDismiss.emit();
87
+ if (this.state == POPOVER_STATE.IDLE) {
88
+ return;
89
+ }
119
90
  if (this.cleanupAutoUpdate) {
120
91
  this.cleanupAutoUpdate();
121
92
  this.cleanupAutoUpdate = undefined;
122
93
  }
123
- this.isVisible = false;
124
- this.isVisibleChange.emit(this.isVisible);
94
+ this.onWillDismiss.emit();
95
+ this.state = POPOVER_STATE.DISMISSING;
96
+ this._instance.classList.remove('show');
125
97
  await Timeout(200);
126
- if (this.popoverInstance) {
127
- document.body.removeChild(this.popoverInstance);
128
- this.popoverInstance = undefined;
129
- }
98
+ this.state = POPOVER_STATE.IDLE;
130
99
  this.onDidDismiss.emit();
131
- this.lock = false;
100
+ }
101
+ HandleComputePositionReturn(computePositionReturn, arrowEl) {
102
+ Object.assign(this._instance.style, {
103
+ left: `${computePositionReturn.x}px`,
104
+ top: `${computePositionReturn.y}px`,
105
+ width: this.width,
106
+ height: this.height,
107
+ position: 'absolute',
108
+ });
109
+ if (computePositionReturn.middlewareData.arrow) {
110
+ const { x: arrowX, y: arrowY } = computePositionReturn.middlewareData.arrow;
111
+ const position = computePositionReturn.placement.split('-')[0];
112
+ const staticSide = STATIC_SIDES[position];
113
+ Object.assign(arrowEl.style, {
114
+ left: arrowX != null ? `${arrowX}px` : '',
115
+ top: arrowY != null ? `${arrowY}px` : '',
116
+ right: '',
117
+ bottom: '',
118
+ [staticSide]: `-7px`,
119
+ });
120
+ arrowEl.style.setProperty(`--rotation`, ROTATIONS[position]);
121
+ }
132
122
  }
133
123
  ngOnDestroy() {
124
+ if (this._instance) {
125
+ document.body.removeChild(this._instance);
126
+ this._instance.remove();
127
+ this._instance = undefined;
128
+ }
129
+ if (this._embeddedView) {
130
+ this._embeddedView.destroy();
131
+ this._embeddedView = undefined;
132
+ }
134
133
  if (this.documentClickListener) {
135
134
  document.removeEventListener('click', this.documentClickListener, true);
136
135
  }
137
- this.dismiss();
136
+ if (this.viewRef) {
137
+ this.viewRef.destroy();
138
+ this.viewRef = undefined;
139
+ }
140
+ }
141
+ async GetComputePositionReturn(refEl, popEl, arrowEl) {
142
+ return await computePosition(refEl, popEl, {
143
+ placement: this.placement,
144
+ middleware: [
145
+ offset(10),
146
+ this.flip ? flip({ crossAxis: false }) : undefined,
147
+ shift({ limiter: limitShift(), padding: 5 }),
148
+ this.arrow ? arrow({ element: arrowEl, padding: 10 }) : undefined,
149
+ ].filter(p => p),
150
+ });
138
151
  }
139
152
  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 }); }
140
- 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,auto,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"] }] }); }
153
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.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" }, 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 \r\n class=\"popover-wrapper translucid-border\"\r\n [style.height]=\"height\"\r\n [style.width]=\"width\"\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 }\"\r\n > \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 bg-light/80': fill == 'blur',\r\n '!border-0' : fill == 'clear',\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,auto,opacity,filter;opacity:0;transition:opacity .15s ease-in-out,transform .15s ease-in-out,filter .15s ease-in-out;min-width:2rem;min-height:2rem;filter:grayscale(.9);transform:scale(.95)}.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%))}.show{filter:grayscale(0);transform:scale(1);opacity:1}.popover-wrapper:not(.show){pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
141
154
  }
142
155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverComponent, decorators: [{
143
156
  type: Component,
144
- 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,auto,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"] }]
157
+ args: [{ selector: 'sion-popover', template: "<ng-template #popoverTemplate>\r\n <div #popoverWrapper \r\n class=\"popover-wrapper translucid-border\"\r\n [style.height]=\"height\"\r\n [style.width]=\"width\"\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 }\"\r\n > \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 bg-light/80': fill == 'blur',\r\n '!border-0' : fill == 'clear',\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,auto,opacity,filter;opacity:0;transition:opacity .15s ease-in-out,transform .15s ease-in-out,filter .15s ease-in-out;min-width:2rem;min-height:2rem;filter:grayscale(.9);transform:scale(.95)}.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%))}.show{filter:grayscale(0);transform:scale(1);opacity:1}.popover-wrapper:not(.show){pointer-events:none}\n"] }]
145
158
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.NgZone }], propDecorators: { fill: [{
146
159
  type: Input
147
160
  }], arrow: [{
@@ -173,27 +186,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
173
186
  }], arrowElement: [{
174
187
  type: ViewChild,
175
188
  args: ['popoverArrow']
176
- }], contentChildren: [{
177
- type: ContentChildren,
178
- args: ['*', { descendants: true }]
179
- }], isVisibleChange: [{
180
- type: Output
181
189
  }] } });
182
- const staticSides = {
190
+ var POPOVER_STATE;
191
+ (function (POPOVER_STATE) {
192
+ POPOVER_STATE[POPOVER_STATE["IDLE"] = 1] = "IDLE";
193
+ POPOVER_STATE[POPOVER_STATE["PRESENTING"] = 2] = "PRESENTING";
194
+ POPOVER_STATE[POPOVER_STATE["DISMISSING"] = 3] = "DISMISSING";
195
+ POPOVER_STATE[POPOVER_STATE["VISIBLE"] = 4] = "VISIBLE";
196
+ })(POPOVER_STATE || (POPOVER_STATE = {}));
197
+ const STATIC_SIDES = {
183
198
  top: "bottom",
184
199
  right: "left",
185
200
  bottom: "top",
186
201
  left: "right"
187
202
  };
188
- const rotations = {
203
+ const ROTATIONS = {
189
204
  bottom: "135deg",
190
205
  top: "315deg",
191
206
  left: "225deg",
192
207
  right: "45deg",
193
208
  };
194
- async function waitUntil(condition, interval = 50) {
195
- while (!condition()) {
196
- await new Promise(resolve => setTimeout(resolve, interval));
197
- }
198
- }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFnQixLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN00sT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQXlCLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQVMxRCxNQUFNLE9BQU8sb0JBQW9CO0lBb0IvQixZQUNVLGdCQUFrQyxFQUNsQyxNQUFjO1FBRGQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJmLFNBQUksR0FBUyxNQUFNLENBQUM7UUFDcEIsVUFBSyxHQUFZLElBQUksQ0FBQztRQUN0QixTQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVMsR0FBYyxRQUFRLENBQUM7UUFDaEMsV0FBTSxHQUFXLE1BQU0sQ0FBQztRQUN4QixVQUFLLEdBQVcsTUFBTSxDQUFDO1FBR3RCLGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDN0QsaUJBQVksR0FBdUIsSUFBSSxZQUFZLEVB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QUM7QUFDRixNQUFNLFNBQVMsR0FBRztJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsUUFBUTtJQUNiLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFBO0FBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxTQUF3QixFQUFFLFdBQW1CLEVBQUU7SUFDdEUsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBDb21wdXRlUG9zaXRpb25SZXR1cm4sIGZsaXAsIGxpbWl0U2hpZnQsIG9mZnNldCwgUGxhY2VtZW50LCBzaGlmdCwgYXJyb3cgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcclxuaW1wb3J0IHsgVGltZW91dCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxudHlwZSBGaWxsID0gJ3NvbGlkJyB8ICdvdXRsaW5lJyB8ICdibHVyJyB8ICdjbGVhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Npb24tcG9wb3ZlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTSW9uUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZmlsbDogRmlsbCA9ICdibHVyJztcclxuICBASW5wdXQoKSBhcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmxpcCA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgQElucHV0KCkgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tJztcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJ2F1dG8nO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIG9uV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25EaWRQcmVzZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbldpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKSBhbmNob3I6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHsgfVxyXG5cclxuICBAVmlld0NoaWxkKCdwb3BvdmVyVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwb3BvdmVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXJXcmFwcGVyJykgY29udGVudENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgncG9wb3ZlckFycm93JyAgKSBhcnJvd0VsZW1lbnQgICAgOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBcclxuICAvLyBUcmFjayBhbGwgY29udGVudCBjaGlsZHJlbiBmb3IgY2hhbmdlIGRldGVjdGlvblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oJyonLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRDaGlsZHJlbiE6IFF1ZXJ5TGlzdDxhbnk+O1xyXG5cclxuICBpc1Zpc2libGUgPSBmYWxzZTtcclxuICBwcml2YXRlIGNsZWFudXBBdXRvVXBkYXRlPzogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIHBvcG92ZXJJbnN0YW5jZT86IEhUTUxFbGVtZW50O1xyXG4gIEBPdXRwdXQoKSBpc1Zpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBsb2NrOiBib29sZWFuID0gZmFsc2U7IFxyXG4gIHB1YmxpYyBhc3luYyBwcmVzZW50KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKHRoaXMuaXNWaXNpYmxlKXsgcmV0dXJuOyB9XHJcbiAgICBhd2FpdCB3YWl0VW50aWwoKCkgPT4gIXRoaXMubG9jayk7XHJcbiAgICB0aGlzLmxvY2sgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub25XaWxsUHJlc2VudC5lbWl0KCk7XHJcbiAgICBcclxuICAgIHRoaXMuQ3JlYXRlUG9wb3ZlckluQm9keSgpO1xyXG4gICAgYXdhaXQgVGltZW91dCgwKTtcclxuICAgIFxyXG4gICAgY29uc3QgcmVmRWwgICA9IHRoaXMuYW5jaG9yID8gdGhpcy5hbmNob3IgOiBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBwb3BFbCAgID0gdGhpcy5wb3BvdmVySW5zdGFuY2U7XHJcbiAgICBjb25zdCBhcnJvd0VsID0gdGhpcy5wb3BvdmVySW5zdGFuY2UucXVlcnlTZWxlY3RvcignLnBvcG92ZXItYXJyb3cnKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBjb25zdCBjb21wdXRlUG9zaXRpb25SZXRydW46IENvbXB1dGVQb3NpdGlvblJldHVybiA9IGF3YWl0IHRoaXMuR2V0Q29tcHV0ZVBvc2l0aW9uUmV0dXJuKHJlZkVsLCBwb3BFbCwgYXJyb3dFbCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucG9wb3Zlckluc3RhbmNlLnN0eWxlLCB7XHJcbiAgICAgIGxlZnQ6IGAke2NvbXB1dGVQb3NpdGlvblJldHJ1bi54fXB4YCxcclxuICAgICAgdG9wOiAgYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnl9cHhgLFxyXG4gICAgICB3aWR0aCA6IHRoaXMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSA9IGF1dG9VcGRhdGUoXHJcbiAgICAgIHJlZkVsLFxyXG4gICAgICBwb3BFbCxcclxuICAgICAgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXB1dGVQb3NpdGlvblJldHJ1bjogQ29tcHV0ZVBvc2l0aW9uUmV0dXJuID0gYXdhaXQgdGhpcy5HZXRDb21wdXRlUG9zaXRpb25SZXR1cm4ocmVmRWwsIHBvcEVsLCBhcnJvd0VsKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwb3BFbC5zdHlsZSwge1xyXG4gICAgICAgICAgbGVmdDogYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnh9cHhgLFxyXG4gICAgICAgICAgdG9wOiAgYCR7Y29tcHV0ZVBvc2l0aW9uUmV0cnVuLnl9cHhgLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGNvbXB1dGVQb3NpdGlvblJldHJ1bi5taWRkbGV3YXJlRGF0YS5hcnJvdyl7XHJcbiAgICAgICAgICBjb25zdCB7IHg6IGFycm93WCwgeTogYXJyb3dZIH0gPSBjb21wdXRlUG9zaXRpb25SZXRydW4ubWlkZGxld2FyZURhdGEuYXJyb3c7XHJcblxyXG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25SZXRydW4ucGxhY2VtZW50LnNwbGl0KCctJylbMF07XHJcbiAgICAgICAgICBjb25zdCBzdGF0aWNTaWRlID0gc3RhdGljU2lkZXNbcG9zaXRpb25dO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihhcnJvd0VsLnN0eWxlLCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGFycm93WCAhPSBudWxsID8gYCR7YXJyb3dYfXB4YCA6ICcnLFxyXG4gICAgICAgICAgICB0b3AgOiBhcnJvd1kgIT0gbnVsbCA/IGAke2Fycm93WX1weGAgOiAnJyxcclxuICAgICAgICAgICAgcmlnaHQgOiAnJyxcclxuICAgICAgICAgICAgYm90dG9tOiAnJyxcclxuICAgICAgICAgICAgW3N0YXRpY1NpZGVdOiBgLTdweGAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGFycm93RWwuc3R5bGUuc2V0UHJvcGVydHkoYC0tcm90YXRpb25gLCByb3RhdGlvbnNbcG9zaXRpb25dKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgYXdhaXQgVGltZW91dCg1MCk7XHJcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLnBvcG92ZXJJbnN0YW5jZS5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgdGhpcy5pc1Zpc2libGVDaGFuZ2UuZW1pdCh0aGlzLmlzVmlzaWJsZSk7XHJcbiAgICBhd2FpdCBUaW1lb3V0KDIwMCk7XHJcbiAgICB0aGlzLm9uRGlkUHJlc2VudC5lbWl0KCk7XHJcbiAgICB0aGlzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIEdldENvbXB1dGVQb3NpdGlvblJldHVybihyZWZFbDogSFRNTEVsZW1lbnQsIHBvcEVsOiBIVE1MRWxlbWVudCwgYXJyb3dFbDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPENvbXB1dGVQb3NpdGlvblJldHVybj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IGNvbXB1dGVQb3NpdGlvbihyZWZFbCwgcG9wRWwsIHtcclxuICAgICAgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcclxuICAgICAgbWlkZGxld2FyZTogWyBcclxuICAgICAgICBvZmZzZXQoMTApLCBcclxuICAgICAgICB0aGlzLmZsaXAgID8gZmxpcCh7IGNyb3NzQXhpczogZmFsc2UgfSkgOiB1bmRlZmluZWQsIFxyXG4gICAgICAgIHNoaWZ0KHsgbGltaXRlcjogbGltaXRTaGlmdCgpLCBwYWRkaW5nOiA1IH0pLCBcclxuICAgICAgICB0aGlzLmFycm93ID8gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsLCBwYWRkaW5nOiAxMCB9KSA6IHVuZGVmaW5lZCxcclxuICAgICAgXS5maWx0ZXIocCA9PiBwKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDcmVhdGVQb3BvdmVySW5Cb2R5KCk6IHZvaWQge1xyXG4gICAgLy8gQ3JlYXRlIGEgY29udGFpbmVyIGZvciB0aGUgdGVtcGxhdGVcclxuICAgIGNvbnN0IGVtYmVkZGVkVmlldyA9IHRoaXMucG9wb3ZlclRlbXBsYXRlLmNyZWF0ZUVtYmVkZGVkVmlldyh7fSk7XHJcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuaW5zZXJ0KGVtYmVkZGVkVmlldyk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBwb3BvdmVyIGVsZW1lbnQgYW5kIGFwcGVuZCB0byBib2R5XHJcbiAgICB0aGlzLnBvcG92ZXJJbnN0YW5jZSA9IGVtYmVkZGVkVmlldy5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucG9wb3Zlckluc3RhbmNlKTtcclxuICAgIHRoaXMucG9wb3Zlckluc3RhbmNlLnN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmKCF0aGlzLnBvcG92ZXJJbnN0YW5jZSl7IHJldHVybjt9XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnBvcG92ZXJJbnN0YW5jZS5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiZcclxuICAgICAgIXRoaXMuYW5jaG9yLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG9jdW1lbnRDbGlja0xpc3RlbmVyOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvL1RPRE86IFVzZSBSZW5kZXJlcjIgdG8gYWRkIGV2ZW50IGxpc3RlbmVycyBmb3IgYmV0dGVyIEFuZ3VsYXIgY29tcGF0aWJpbGl0eSB3aGVuIHVwZGF0aW5nIHRvIEFuZ3VsYXIgMTlcclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAvLyBSdW4gYmFjayBpbnNpZGUgQW5ndWxhcidzIHpvbmUgd2hlbiBoYW5kbGluZyB0aGUgZXZlbnRcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIC8vIFVzZSB0aGUgbmF0aXZlIERPTSBBUEkgZGlyZWN0bHkgd2l0aCBjYXB0dXJlIHBoYXNlXHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGFzeW5jIGRpc21pc3MoKTogUHJvbWlzZTx2b2lkPntcclxuICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5sb2NrKTtcclxuICAgIHRoaXMubG9jayA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5vbldpbGxEaXNtaXNzLmVtaXQoKTtcclxuICAgIGlmKHRoaXMuY2xlYW51cEF1dG9VcGRhdGUpe1xyXG4gICAgICB0aGlzLmNsZWFudXBBdXRvVXBkYXRlKCk7XHJcbiAgICAgIHRoaXMuY2xlYW51cEF1dG9VcGRhdGUgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNWaXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5pc1Zpc2libGUpO1xyXG4gICAgYXdhaXQgVGltZW91dCgyMDApO1xyXG5cclxuICAgIGlmICh0aGlzLnBvcG92ZXJJbnN0YW5jZSkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucG9wb3Zlckluc3RhbmNlKTtcclxuICAgICAgdGhpcy5wb3BvdmVySW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRGlkRGlzbWlzcy5lbWl0KCk7XHJcbiAgICB0aGlzLmxvY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzbWlzcygpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc3RhdGljU2lkZXMgPSB7XHJcbiAgdG9wOiBcImJvdHRvbVwiLFxyXG4gIHJpZ2h0OiBcImxlZnRcIixcclxuICBib3R0b206IFwidG9wXCIsXHJcbiAgbGVmdDogXCJyaWdodFwiXHJcbn07XHJcbmNvbnN0IHJvdGF0aW9ucyA9IHtcclxuICBib3R0b206IFwiMTM1ZGVnXCIsXHJcbiAgdG9wOiBcIjMxNWRlZ1wiLFxyXG4gIGxlZnQ6IFwiMjI1ZGVnXCIsXHJcbiAgcmlnaHQ6IFwiNDVkZWdcIixcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gd2FpdFVudGlsKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbiwgaW50ZXJ2YWw6IG51bWJlciA9IDUwKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgd2hpbGUgKCFjb25kaXRpb24oKSkge1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGludGVydmFsKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjcG9wb3ZlclRlbXBsYXRlPlxyXG4gIDxkaXYgI3BvcG92ZXJXcmFwcGVyIGNsYXNzPVwicG9wb3Zlci13cmFwcGVyIHRyYW5zbHVjaWQtYm9yZGVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdiZy1saWdodCcgICAgICAgIDogZmlsbCA9PSAnc29saWQnLFxyXG4gICAgICAgICdiZy10cmFuc3BhcmVudCcgIDogZmlsbCA9PSAnb3V0bGluZScsXHJcbiAgICAgICAgJ2JhY2tkcm9wLWJsdXItbWQgYmctbGlnaHQvODAnOiBmaWxsID09ICdibHVyJyxcclxuICAgICAgICAnIWJvcmRlci0wJyAgICAgICA6IGZpbGwgPT0gJ2NsZWFyJyxcclxuICAgICAgICAndmlzaWJsZS1hbmltJyAgICA6IGlzVmlzaWJsZSxcclxuICAgICAgICAnaW52aXNpYmxlLWFuaW0nICA6ICFpc1Zpc2libGUsXHJcbiAgICAgIH1cIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxyXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcclxuICA+XHJcbiAgPCEtLSAnc29saWQnIHwgJ291dGxpbmUnIHwgJ2JsdXInIHwgJ2NsZWFyJyAtLT5cclxuICAgIEBpZihhcnJvdyl7XHJcbiAgICAgIDxkaXYgI3BvcG92ZXJBcnJvdyBjbGFzcz1cInBvcG92ZXItYXJyb3cgc2l6ZS00IHRyYW5zbHVjaWQtYm9yZGVyXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnYmctbGlnaHQnICAgICAgICA6IGZpbGwgPT0gJ3NvbGlkJyxcclxuICAgICAgICAgICdiZy10cmFuc3BhcmVudCcgIDogZmlsbCA9PSAnb3V0bGluZScsXHJcbiAgICAgICAgICAnYmFja2Ryb3AtYmx1ci1tZCc6IGZpbGwgPT0gJ2JsdXInLFxyXG4gICAgICAgICAgJ3Zpc2libGUtYW5pbScgICAgOiBpc1Zpc2libGUsXHJcbiAgICAgICAgICAnaW52aXNpYmxlLWFuaW0nICA6ICFpc1Zpc2libGUsXHJcbiAgICAgIH1cIlxyXG4gICAgICA+PC9kaXY+XHJcbiAgICB9XHJcbiAgICA8bmctY29udGVudCAjY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci9zaW9uLXBvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBbUIsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXFCLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQ2xMLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUF5QixJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFTMUQsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFDVSxnQkFBa0MsRUFDbEMsTUFBYztRQURkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXBCZixTQUFJLEdBQVMsTUFBTSxDQUFDO1FBQ3BCLFVBQUssR0FBWSxJQUFJLENBQUM7UUFDdEIsU0FBSSxHQUFhLElBQUksQ0FBQztRQUd0QixjQUFTLEdBQWMsUUFBUSxDQUFDO1FBQ2hDLFdBQU0sR0FBVyxNQUFNLENBQUM7UUFDeEIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUd0QixrQkFBYSxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzdELGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUQsa0JBQWEs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QyxFQUxJLGFBQWEsS0FBYixhQUFhLFFBS2pCO0FBQ0QsTUFBTSxZQUFZLEdBQUc7SUFDbkIsR0FBRyxFQUFFLFFBQVE7SUFDYixLQUFLLEVBQUUsTUFBTTtJQUNiLE1BQU0sRUFBRSxLQUFLO0lBQ2IsSUFBSSxFQUFFLE9BQU87Q0FDZCxDQUFDO0FBQ0YsTUFBTSxTQUFTLEdBQUc7SUFDaEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxFQUFFLFFBQVE7SUFDYixJQUFJLEVBQUUsUUFBUTtJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRW1iZWRkZWRWaWV3UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYXV0b1VwZGF0ZSwgY29tcHV0ZVBvc2l0aW9uLCBDb21wdXRlUG9zaXRpb25SZXR1cm4sIGZsaXAsIGxpbWl0U2hpZnQsIG9mZnNldCwgUGxhY2VtZW50LCBzaGlmdCwgYXJyb3cgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcclxuaW1wb3J0IHsgVGltZW91dCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxudHlwZSBGaWxsID0gJ3NvbGlkJyB8ICdvdXRsaW5lJyB8ICdibHVyJyB8ICdjbGVhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Npb24tcG9wb3ZlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Npb24tcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2lvbi1wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTSW9uUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZmlsbDogRmlsbCA9ICdibHVyJztcclxuICBASW5wdXQoKSBhcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmxpcCA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgQElucHV0KCkgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tJztcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJ2F1dG8nO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIG9uV2lsbFByZXNlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25EaWRQcmVzZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbldpbGxEaXNtaXNzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uRGlkRGlzbWlzczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKSBhbmNob3I6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHsgfVxyXG5cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHBvcG92ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgncG9wb3ZlcldyYXBwZXInKSBjb250ZW50Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdwb3BvdmVyQXJyb3cnICApIGFycm93RWxlbWVudCAgICA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRW1iZWRkZWRWaWV3KCk7XHJcbiAgICB0aGlzLkNyZWF0ZUluc3RhbmNlKCk7XHJcbiAgXHJcbiAgICAvL1RPRE86IFVzZSBSZW5kZXJlcjIgdG8gYWRkIGV2ZW50IGxpc3RlbmVycyBmb3IgYmV0dGVyIEFuZ3VsYXIgY29tcGF0aWJpbGl0eSB3aGVuIHVwZGF0aW5nIHRvIEFuZ3VsYXIgMTlcclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAvLyBSdW4gYmFjayBpbnNpZGUgQW5ndWxhcidzIHpvbmUgd2hlbiBoYW5kbGluZyB0aGUgZXZlbnRcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgaWYoIXRoaXMuX2luc3RhbmNlKXsgcmV0dXJuO31cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuX2luc3RhbmNlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5hbmNob3IuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNtaXNzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBET00gQVBJIGRpcmVjdGx5IHdpdGggY2FwdHVyZSBwaGFzZVxyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBkb2N1bWVudENsaWNrTGlzdGVuZXI6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcclxuICB2aWV3UmVmPzogVmlld1JlZjtcclxuXHJcbiAgcHJpdmF0ZSBfZW1iZWRkZWRWaWV3PzogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgQ3JlYXRlRW1iZWRkZWRWaWV3KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5fZW1iZWRkZWRWaWV3KXsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLl9lbWJlZGRlZFZpZXcgPSB0aGlzLnBvcG92ZXJUZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcoe30pO1xyXG4gICAgdGhpcy52aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmluc2VydCh0aGlzLl9lbWJlZGRlZFZpZXcpO1xyXG4gIH1cclxuICBwcml2YXRlIF9pbnN0YW5jZT86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIENyZWF0ZUluc3RhbmNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5zdGFuY2UgPSB0aGlzLl9lbWJlZGRlZFZpZXcucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9pbnN0YW5jZSk7XHJcblxyXG4gICAgLy8gY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAvLyAgIFwic29saWRcIiAgOiBbJ2JnLWxpZ2h0J10sXHJcbiAgICAvLyAgIFwib3V0bGluZVwiOiBbJ2JnLXRyYW5zcGFyZW50J10sXHJcbiAgICAvLyAgIFwiYmx1clwiICAgOiBbJ2JhY2tkcm9wLWJsdXItbWQnLCAnYmctbGlnaHQvODAnXSxcclxuICAgIC8vICAgXCJjbGVhclwiICA6IFsnIWJvcmRlci0wIGJnLXRyYW5zcGFyZW50J10sXHJcbiAgICAvLyB9W3RoaXMuZmlsbF07XHJcbiAgICAvLyBzdHlsZS5mb3JFYWNoKHMgPT4ge1xyXG4gICAgLy8gICB0aGlzLl9pbnN0YW5jZS5jbGFzc0xpc3QuYWRkKHMpO1xyXG4gICAgLy8gICB0aGlzLmFycm93RWw/LmNsYXNzTGlzdC5hZGQocyk7XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhcnJvd0VsKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5xdWVyeVNlbGVjdG9yKCcucG9wb3Zlci1hcnJvdycpIGFzIEhUTUxFbGVtZW50O1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGNsZWFudXBBdXRvVXBkYXRlPzogKCkgPT4gdm9pZDtcclxuICBwdWJsaWMgc3RhdGU6IFBPUE9WRVJfU1RBVEUgPSBQT1BPVkVSX1NUQVRFLklETEU7XHJcbiAgcHVibGljIGFzeW5jIHByZXNlbnQoZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYodGhpcy5zdGF0ZSAhPSBQT1BPVkVSX1NUQVRFLklETEUpIHsgcmV0dXJuOyB9XHJcbiAgICB0aGlzLm9uV2lsbFByZXNlbnQuZW1pdCgpO1xyXG4gICAgXHJcbiAgICB0aGlzLnN0YXRlID0gUE9QT1ZFUl9TVEFURS5QUkVTRU5USU5HO1xyXG4gICAgY29uc3QgcmVmRWwgICA9IHRoaXMuYW5jaG9yID8gdGhpcy5hbmNob3IgOiBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBhcnJvd0VsID0gdGhpcy5hcnJvd0VsO1xyXG5cclxuICAgIGF3YWl0IHRoaXMudXBkYXRlKHJlZkVsLCBhcnJvd0VsKVxyXG4gICAgdGhpcy5faW5zdGFuY2UuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xyXG4gICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSA9IGF1dG9VcGRhdGUocmVmRWwsIHRoaXMuX2luc3RhbmNlLCBhc3luYyAoKSA9PiB0aGlzLnVwZGF0ZShyZWZFbCwgYXJyb3dFbCkpO1xyXG4gICAgXHJcbiAgICB0aGlzLnN0YXRlID0gUE9QT1ZFUl9TVEFURS5WSVNJQkxFO1xyXG4gICAgdGhpcy5vbkRpZFByZXNlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGUocmVmRWw6IEhUTUxFbGVtZW50LCBhcnJvd0VsOiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgY29tcHV0ZVBvc2l0aW9uUmV0dXJuOiBDb21wdXRlUG9zaXRpb25SZXR1cm4gPSBhd2FpdCB0aGlzLkdldENvbXB1dGVQb3NpdGlvblJldHVybihyZWZFbCwgdGhpcy5faW5zdGFuY2UsIGFycm93RWwpO1xyXG4gICAgdGhpcy5IYW5kbGVDb21wdXRlUG9zaXRpb25SZXR1cm4oY29tcHV0ZVBvc2l0aW9uUmV0dXJuLCBhcnJvd0VsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkaXNtaXNzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYodGhpcy5zdGF0ZSA9PSBQT1BPVkVSX1NUQVRFLklETEUpIHsgcmV0dXJuOyB9XHJcbiAgICBpZih0aGlzLmNsZWFudXBBdXRvVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cEF1dG9VcGRhdGUoKTtcclxuICAgICAgdGhpcy5jbGVhbnVwQXV0b1VwZGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHRoaXMub25XaWxsRGlzbWlzcy5lbWl0KCk7XHJcbiAgICB0aGlzLnN0YXRlID0gUE9QT1ZFUl9TVEFURS5ESVNNSVNTSU5HO1xyXG4gICAgdGhpcy5faW5zdGFuY2UuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xyXG4gICAgYXdhaXQgVGltZW91dCgyMDApO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFBPUE9WRVJfU1RBVEUuSURMRTtcclxuICAgIHRoaXMub25EaWREaXNtaXNzLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIEhhbmRsZUNvbXB1dGVQb3NpdGlvblJldHVybihjb21wdXRlUG9zaXRpb25SZXR1cm46IENvbXB1dGVQb3NpdGlvblJldHVybiwgYXJyb3dFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5faW5zdGFuY2Uuc3R5bGUsIHtcclxuICAgICAgbGVmdDogYCR7Y29tcHV0ZVBvc2l0aW9uUmV0dXJuLnh9cHhgLFxyXG4gICAgICB0b3A6ICBgJHtjb21wdXRlUG9zaXRpb25SZXR1cm4ueX1weGAsXHJcbiAgICAgIHdpZHRoIDogdGhpcy53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCxcclxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICB9KTtcclxuICAgIGlmKGNvbXB1dGVQb3NpdGlvblJldHVybi5taWRkbGV3YXJlRGF0YS5hcnJvdyl7XHJcbiAgICAgIGNvbnN0IHsgeDogYXJyb3dYLCB5OiBhcnJvd1kgfSA9IGNvbXB1dGVQb3NpdGlvblJldHVybi5taWRkbGV3YXJlRGF0YS5hcnJvdztcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBjb21wdXRlUG9zaXRpb25SZXR1cm4ucGxhY2VtZW50LnNwbGl0KCctJylbMF07XHJcbiAgICAgIGNvbnN0IHN0YXRpY1NpZGUgPSBTVEFUSUNfU0lERVNbcG9zaXRpb25dO1xyXG4gICAgICBPYmplY3QuYXNzaWduKGFycm93RWwuc3R5bGUsIHtcclxuICAgICAgICBsZWZ0OiBhcnJvd1ggIT0gbnVsbCA/IGAke2Fycm93WH1weGAgOiAnJyxcclxuICAgICAgICB0b3AgOiBhcnJvd1kgIT0gbnVsbCA/IGAke2Fycm93WX1weGAgOiAnJyxcclxuICAgICAgICByaWdodCA6ICcnLFxyXG4gICAgICAgIGJvdHRvbTogJycsXHJcbiAgICAgICAgW3N0YXRpY1NpZGVdOiBgLTdweGAsXHJcbiAgICAgIH0pO1xyXG4gICAgICBhcnJvd0VsLnN0eWxlLnNldFByb3BlcnR5KGAtLXJvdGF0aW9uYCwgUk9UQVRJT05TW3Bvc2l0aW9uXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuX2luc3RhbmNlKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5faW5zdGFuY2UpO1xyXG4gICAgICB0aGlzLl9pbnN0YW5jZS5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLl9lbWJlZGRlZFZpZXcpIHtcclxuICAgICAgdGhpcy5fZW1iZWRkZWRWaWV3LmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5fZW1iZWRkZWRWaWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZXdSZWYpIHtcclxuICAgICAgdGhpcy52aWV3UmVmLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy52aWV3UmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgR2V0Q29tcHV0ZVBvc2l0aW9uUmV0dXJuKHJlZkVsOiBIVE1MRWxlbWVudCwgcG9wRWw6IEhUTUxFbGVtZW50LCBhcnJvd0VsOiBIVE1MRWxlbWVudCk6IFByb21pc2U8Q29tcHV0ZVBvc2l0aW9uUmV0dXJuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgY29tcHV0ZVBvc2l0aW9uKHJlZkVsLCBwb3BFbCwge1xyXG4gICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxyXG4gICAgICBtaWRkbGV3YXJlOiBbIFxyXG4gICAgICAgIG9mZnNldCgxMCksIFxyXG4gICAgICAgIHRoaXMuZmxpcCAgPyBmbGlwKHsgY3Jvc3NBeGlzOiBmYWxzZSB9KSA6IHVuZGVmaW5lZCwgXHJcbiAgICAgICAgc2hpZnQoeyBsaW1pdGVyOiBsaW1pdFNoaWZ0KCksIHBhZGRpbmc6IDUgfSksIFxyXG4gICAgICAgIHRoaXMuYXJyb3cgPyBhcnJvdyh7IGVsZW1lbnQ6IGFycm93RWwsIHBhZGRpbmc6IDEwIH0pIDogdW5kZWZpbmVkLFxyXG4gICAgICBdLmZpbHRlcihwID0+IHApLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5lbnVtIFBPUE9WRVJfU1RBVEV7XHJcbiAgSURMRSAgICAgICA9IDEsXHJcbiAgUFJFU0VOVElORyA9IDIsXHJcbiAgRElTTUlTU0lORyA9IDMsXHJcbiAgVklTSUJMRSAgICA9IDRcclxufVxyXG5jb25zdCBTVEFUSUNfU0lERVMgPSB7XHJcbiAgdG9wOiBcImJvdHRvbVwiLFxyXG4gIHJpZ2h0OiBcImxlZnRcIixcclxuICBib3R0b206IFwidG9wXCIsXHJcbiAgbGVmdDogXCJyaWdodFwiXHJcbn07XHJcbmNvbnN0IFJPVEFUSU9OUyA9IHtcclxuICBib3R0b206IFwiMTM1ZGVnXCIsXHJcbiAgdG9wOiBcIjMxNWRlZ1wiLFxyXG4gIGxlZnQ6IFwiMjI1ZGVnXCIsXHJcbiAgcmlnaHQ6IFwiNDVkZWdcIixcclxufVxyXG4iLCI8bmctdGVtcGxhdGUgI3BvcG92ZXJUZW1wbGF0ZT5cclxuICA8ZGl2ICNwb3BvdmVyV3JhcHBlciBcclxuICAgIGNsYXNzPVwicG9wb3Zlci13cmFwcGVyIHRyYW5zbHVjaWQtYm9yZGVyXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2JnLWxpZ2h0JyAgICAgICAgOiBmaWxsID09ICdzb2xpZCcsXHJcbiAgICAgICAgJ2JnLXRyYW5zcGFyZW50JyAgOiBmaWxsID09ICdvdXRsaW5lJyxcclxuICAgICAgICAnYmFja2Ryb3AtYmx1ci1tZCBiZy1saWdodC84MCc6IGZpbGwgPT0gJ2JsdXInLFxyXG4gICAgICAgICchYm9yZGVyLTAnICAgICAgIDogZmlsbCA9PSAnY2xlYXInLFxyXG4gICAgICB9XCJcclxuICA+IFxyXG4gICAgPGRpdiAjcG9wb3ZlckFycm93IGNsYXNzPVwicG9wb3Zlci1hcnJvdyBzaXplLTQgdHJhbnNsdWNpZC1ib3JkZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2JnLWxpZ2h0JyAgICAgICAgOiBmaWxsID09ICdzb2xpZCcsXHJcbiAgICAgICAgJ2JnLXRyYW5zcGFyZW50JyAgOiBmaWxsID09ICdvdXRsaW5lJyxcclxuICAgICAgICAnYmFja2Ryb3AtYmx1ci1tZCBiZy1saWdodC84MCc6IGZpbGwgPT0gJ2JsdXInLFxyXG4gICAgICAgICchYm9yZGVyLTAnICAgICAgIDogZmlsbCA9PSAnY2xlYXInLFxyXG4gICAgICB9XCJcclxuICAgID48L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGVudCAjY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -2,9 +2,6 @@ import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { SIonPopoverComponent } from './sion-popover/sion-popover.component';
4
4
  import * as i0 from "@angular/core";
5
- const lstComponents = [
6
- SIonPopoverComponent,
7
- ];
8
5
  export class SIonPopoverModule {
9
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
7
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverModule, declarations: [SIonPopoverComponent], imports: [CommonModule], exports: [SIonPopoverComponent] }); }
@@ -13,11 +10,11 @@ export class SIonPopoverModule {
13
10
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SIonPopoverModule, decorators: [{
14
11
  type: NgModule,
15
12
  args: [{
16
- declarations: [...lstComponents,],
17
- exports: [...lstComponents],
13
+ declarations: [SIonPopoverComponent],
14
+ exports: [SIonPopoverComponent],
18
15
  imports: [
19
16
  CommonModule
20
17
  ]
21
18
  }]
22
19
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBRTdFLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLG9CQUFvQjtDQUNyQixDQUFBO0FBU0QsTUFBTSxPQUFPLGlCQUFpQjsrR0FBakIsaUJBQWlCO2dIQUFqQixpQkFBaUIsaUJBVjVCLG9CQUFvQixhQU9sQixZQUFZLGFBUGQsb0JBQW9CO2dIQVVULGlCQUFpQixZQUgxQixZQUFZOzs0RkFHSCxpQkFBaUI7a0JBUDdCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUUsR0FBRyxhQUFhLEVBQUk7b0JBQ3BDLE9BQU8sRUFBRSxDQUFFLEdBQUcsYUFBYSxDQUFFO29CQUM3QixPQUFPLEVBQUU7d0JBQ1AsWUFBWTtxQkFDYjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNJb25Qb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zaW9uLXBvcG92ZXIvc2lvbi1wb3BvdmVyLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBsc3RDb21wb25lbnRzID0gW1xyXG4gIFNJb25Qb3BvdmVyQ29tcG9uZW50LFxyXG5dXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogWyAuLi5sc3RDb21wb25lbnRzLCAgXSxcclxuICBleHBvcnRzOiBbIC4uLmxzdENvbXBvbmVudHMgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTSW9uUG9wb3Zlck1vZHVsZSB7IH1cclxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lvbi1wb3BvdmVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wb3BvdmVyL3Npb24tcG9wb3Zlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBUzdFLE1BQU0sT0FBTyxpQkFBaUI7K0dBQWpCLGlCQUFpQjtnSEFBakIsaUJBQWlCLGlCQU5aLG9CQUFvQixhQUdsQyxZQUFZLGFBRkgsb0JBQW9CO2dIQUtwQixpQkFBaUIsWUFIMUIsWUFBWTs7NEZBR0gsaUJBQWlCO2tCQVA3QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFFLG9CQUFvQixDQUFHO29CQUN2QyxPQUFPLEVBQUUsQ0FBRSxvQkFBb0IsQ0FBRTtvQkFDakMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7cUJBQ2I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4vc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFsgU0lvblBvcG92ZXJDb21wb25lbnQgIF0sXHJcbiAgZXhwb3J0czogWyBTSW9uUG9wb3ZlckNvbXBvbmVudCBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNJb25Qb3BvdmVyTW9kdWxlIHsgfVxyXG4iXX0=