@evotor-dev/ui-kit 8.10.0 → 8.11.1

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.
@@ -1,11 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, computed, createComponent, DestroyRef, ElementRef, EnvironmentInjector, inject, Injector, model, signal, viewChild, ViewContainerRef } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, createComponent, DestroyRef, ElementRef, EnvironmentInjector, inject, Injector, model, signal, viewChild, ViewContainerRef, } from '@angular/core';
2
2
  import { filter, finalize, fromEvent } from 'rxjs';
3
3
  import { takeWhile } from 'rxjs/operators';
4
4
  import { EvoButtonComponent } from '../evo-button';
5
- import { EvoUiClassDirective } from "../../directives";
6
5
  import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
7
6
  import { EVO_MODAL_DATA, EVO_MODAL_ROOT_ID } from './tokens';
8
- import { NgIf, NgTemplateOutlet } from '@angular/common';
7
+ import { NgTemplateOutlet } from '@angular/common';
9
8
  import { EvoModalService } from './evo-modal.service';
10
9
  import { isConfiguredComponentModalParams, isConfiguredTemplateModalParams, isDynamicModalParams } from './utils';
11
10
  import { EvoModalCloseTargets } from './enums';
@@ -137,16 +136,14 @@ export class EvoModalComponent {
137
136
  });
138
137
  }
139
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EvoModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
140
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: EvoModalComponent, isStandalone: true, selector: "evo-modal", inputs: { acceptText: { classPropertyName: "acceptText", publicName: "acceptText", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonColor: { classPropertyName: "acceptButtonColor", publicName: "acceptButtonColor", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonTheme: { classPropertyName: "acceptButtonTheme", publicName: "acceptButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, asyncAccept: { classPropertyName: "asyncAccept", publicName: "asyncAccept", isSignal: true, isRequired: false, transformFunction: null }, declineText: { classPropertyName: "declineText", publicName: "declineText", isSignal: true, isRequired: false, transformFunction: null }, declineButtonColor: { classPropertyName: "declineButtonColor", publicName: "declineButtonColor", isSignal: true, isRequired: false, transformFunction: null }, declineButtonTheme: { classPropertyName: "declineButtonTheme", publicName: "declineButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { acceptText: "acceptTextChange", acceptButtonColor: "acceptButtonColorChange", acceptButtonTheme: "acceptButtonThemeChange", asyncAccept: "asyncAcceptChange", declineText: "declineTextChange", declineButtonColor: "declineButtonColorChange", declineButtonTheme: "declineButtonThemeChange", id: "idChange", titleText: "titleTextChange" }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalElement", first: true, predicate: ["modal"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (click)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (click)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"], dependencies: [{ kind: "component", type: EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: EvoModalButtonsComponent, selector: "evo-modal-buttons, [evo-modal-buttons]", inputs: ["single"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: EvoModalComponent, isStandalone: true, selector: "evo-modal", inputs: { acceptText: { classPropertyName: "acceptText", publicName: "acceptText", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonColor: { classPropertyName: "acceptButtonColor", publicName: "acceptButtonColor", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonTheme: { classPropertyName: "acceptButtonTheme", publicName: "acceptButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, asyncAccept: { classPropertyName: "asyncAccept", publicName: "asyncAccept", isSignal: true, isRequired: false, transformFunction: null }, declineText: { classPropertyName: "declineText", publicName: "declineText", isSignal: true, isRequired: false, transformFunction: null }, declineButtonColor: { classPropertyName: "declineButtonColor", publicName: "declineButtonColor", isSignal: true, isRequired: false, transformFunction: null }, declineButtonTheme: { classPropertyName: "declineButtonTheme", publicName: "declineButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { acceptText: "acceptTextChange", acceptButtonColor: "acceptButtonColorChange", acceptButtonTheme: "acceptButtonThemeChange", asyncAccept: "asyncAcceptChange", declineText: "declineTextChange", declineButtonColor: "declineButtonColorChange", declineButtonTheme: "declineButtonThemeChange", id: "idChange", titleText: "titleTextChange" }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalElement", first: true, predicate: ["modal"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (mousedown)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (mousedown)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"], dependencies: [{ kind: "component", type: EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: EvoModalButtonsComponent, selector: "evo-modal-buttons, [evo-modal-buttons]", inputs: ["single"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
141
140
  }
142
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EvoModalComponent, decorators: [{
143
142
  type: Component,
144
143
  args: [{ selector: 'evo-modal', standalone: true, imports: [
145
144
  EvoButtonComponent,
146
- EvoUiClassDirective,
147
- NgIf,
148
145
  NgTemplateOutlet,
149
146
  EvoModalButtonsComponent,
150
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (click)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (click)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"] }]
147
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (mousedown)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (mousedown)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"] }]
151
148
  }] });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2V2by1tb2RhbC9ldm8tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLW1vZGFsL2V2by1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzNELE9BQU8sRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGdDQUFnQyxFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUFD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QUczQixVQUFVLDZDQzVFaEUsMHBFQXFEQSxxNENEVFEsa0JBQWtCLHVJQUdsQixnQkFBZ0Isb0pBQ2hCLHdCQUF3Qjs7NEZBSW5CLGlCQUFpQjtrQkFkN0IsU0FBUzsrQkFDSSxXQUFXLGNBR1QsSUFBSSxXQUNQO3dCQUNMLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixJQUFJO3dCQUNKLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3FCQUMzQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgbW9kZWwsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZpbHRlciwgZmluYWxpemUsIGZyb21FdmVudCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFdm9CdXR0b25Db2xvciwgRXZvQnV0dG9uVGhlbWV9IGZyb20gJy4uL2V2by1idXR0b24nO1xuaW1wb3J0IHtFdm9CdXR0b25Db21wb25lbnR9IGZyb20gJy4uL2V2by1idXR0b24nO1xuaW1wb3J0IHtFdm9VaUNsYXNzRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlc1wiO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtFVk9fTU9EQUxfREFUQSwgRVZPX01PREFMX1JPT1RfSUR9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7TmdJZiwgTmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7RXZvRHluYW1pY01vZGFsUGFyYW1zLCBFdm9Nb2RhbENvbWJpbmVkUGFyYW1zLCBFdm9Nb2RhbFN0YXRlfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtFdm9Nb2RhbFNlcnZpY2V9IGZyb20gJy4vZXZvLW1vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHtpc0NvbmZpZ3VyZWRDb21wb25lbnRNb2RhbFBhcmFtcywgaXNDb25maWd1cmVkVGVtcGxhdGVNb2RhbFBhcmFtcywgaXNEeW5hbWljTW9kYWxQYXJhbXN9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtFdm9Nb2RhbENsb3NlVGFyZ2V0c30gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQge0V2b01vZGFsRHJhd2luZ1N0cmF0ZWd5fSBmcm9tICcuL2NsYXNzZXMvRXZvTW9kYWxEcmF3aW5nU3RyYXRlZ3knO1xuaW1wb3J0IHtFdm9EeW5hbWljTW9kYWxEcmF3aW5nU3RyYXRlZ3l9IGZyb20gJy4vY2xhc3Nlcy9Fdm9EeW5hbWljTW9kYWxEcmF3aW5nU3RyYXRlZ3knO1xuaW1wb3J0IHtFdm9Db25maWd1cmVkQ29tcG9uZW50TW9kYWxEcmF3aW5nU3RyYXRlZ3l9IGZyb20gJy4vY2xhc3Nlcy9Fdm9Db25maWd1cmVkQ29tcG9uZW50TW9kYWxEcmF3aW5nU3RyYXRlZ3knO1xuaW1wb3J0IHtFdm9Db25maWd1cmVkVGVtcGxhdGVNb2RhbERyYXdpbmdTdHJhdGVneX0gZnJvbSAnLi9jbGFzc2VzL0V2b0NvbmZpZ3VyZWRUZW1wbGF0ZU1vZGFsRHJhd2luZ1N0cmF0ZWd5JztcbmltcG9ydCB7RXZvTW9kYWxCdXR0b25zQ29tcG9uZW50fSBmcm9tICcuL2V2by1tb2RhbC1idXR0b25zL2V2by1tb2RhbC1idXR0b25zLmNvbXBvbmVudCc7XG5cbnR5cGUgSW5zZXJ0aW9uQ29udGFpbmVyVHlwZSA9ICdtb2RhbCcgfCAnY29udGVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXZvLW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXZvLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ldm8tbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRXZvQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBFdm9VaUNsYXNzRGlyZWN0aXZlLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBFdm9Nb2RhbEJ1dHRvbnNDb21wb25lbnQsXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRXZvTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZvTW9kYWxSb290SWQgPSBpbmplY3QoRVZPX01PREFMX1JPT1RfSUQpO1xuXG4gICAgYWNjZXB0VGV4dCA9IG1vZGVsPHN0cmluZz4oJycpO1xuICAgIGFjY2VwdEJ1dHRvbkNvbG9yID0gbW9kZWw8RXZvQnV0dG9uQ29sb3I+KGBzdWNjZXNzYCk7XG4gICAgYWNjZXB0QnV0dG9uVGhlbWUgPSBtb2RlbDxFdm9CdXR0b25UaGVtZT4oYHJvdW5kZWQtc29saWRgKTtcbiAgICBhc3luY0FjY2VwdCA9IG1vZGVsPCgpID0+IE9ic2VydmFibGU8dW5rbm93bj4gfCBudWxsPihudWxsKTtcbiAgICBkZWNsaW5lVGV4dCA9IG1vZGVsPHN0cmluZz4oJycpO1xuICAgIGRlY2xpbmVCdXR0b25Db2xvciA9IG1vZGVsPEV2b0J1dHRvbkNvbG9yPignc2Vjb25kYXJ5Jyk7XG4gICAgZGVjbGluZUJ1dHRvblRoZW1lID0gbW9kZWw8RXZvQnV0dG9uVGhlbWU+KCdyb3VuZGVkLW91dGxpbmUnKTtcbiAgICBpZCA9IG1vZGVsPHN0cmluZz4odGhpcy5ldm9Nb2RhbFJvb3RJZCk7XG4gICAgdGl0bGVUZXh0ID0gbW9kZWw8c3RyaW5nPignJyk7XG5cbiAgICByZWFkb25seSBjb250ZW50Q29udGFpbmVyID0gdmlld0NoaWxkKCdjb250ZW50Q29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KTtcbiAgICByZWFkb25seSBjb250ZW50Q29udGFpbmVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmNvbnRlbnRDb250YWluZXIpO1xuICAgIHJlYWRvbmx5IGRyYXdpbmdTdHJhdGVneSA9IHNpZ25hbDxFdm9Nb2RhbERyYXdpbmdTdHJhdGVneSB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IGlzRHluYW1pY0NvbnRlbnQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHJlYWRvbmx5IGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gICAgcmVhZG9ubHkgaXNWaXNpYmxlID0gY29tcHV0ZWQoKCk6IGJvb2xlYW4gPT4gdGhpcy5tb2RhbFN0YXRlKCk/LmlzT3BlbiB8fCBmYWxzZSk7XG4gICAgcmVhZG9ubHkgbW9kYWxDb250YWluZXIgPSB2aWV3Q2hpbGQoJ21vZGFsQ29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KTtcbiAgICByZWFkb25seSBtb2RhbENvbnRhaW5lciQgPSB0b09ic2VydmFibGUodGhpcy5tb2RhbENvbnRhaW5lcik7XG4gICAgcmVhZG9ubHkgbW9kYWxDb250ZW50ID0gc2lnbmFsPHt0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8e2RhdGE6IHVua25vd259PiwgY29udGV4dDogdW5rbm93bn0gfCBudWxsPihudWxsKTtcbiAgICByZWFkb25seSBtb2RhbEVsZW1lbnQgPSB2aWV3Q2hpbGQoJ21vZGFsJywge3JlYWQ6IEVsZW1lbnRSZWZ9KTtcbiAgICByZWFkb25seSBtb2RhbFN0YXRlID0gc2lnbmFsPEV2b01vZGFsU3RhdGUgfCBudWxsPihudWxsKTtcbiAgICByZWFkb25seSBzaG93QnV0dG9ucyA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4gdGhpcy5hY2NlcHRUZXh0KCkgfHwgdGhpcy5kZWNsaW5lVGV4dCgpKTtcblxuICAgIHJlYWRvbmx5IGNsb3NlVGFyZ2V0cyA9IEV2b01vZGFsQ2xvc2VUYXJnZXRzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2b01vZGFsU2VydmljZSA9IGluamVjdChFdm9Nb2RhbFNlcnZpY2UpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZvTW9kYWxTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMuaWQoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlTW9kYWxFdmVudHMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldm9Nb2RhbFNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmlkKCkpO1xuICAgIH1cblxuICAgIG9uQWNjZXB0Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFzeW5jQWNjZXB0QWN0aW9uID0gdGhpcy5hc3luY0FjY2VwdCgpPy4oKTtcblxuICAgICAgICBpZiAoIWFzeW5jQWNjZXB0QWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZSh0cnVlLCBFdm9Nb2RhbENsb3NlVGFyZ2V0cy5CVVRUT04pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgIGFzeW5jQWNjZXB0QWN0aW9uLnBpcGUoXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKTogdm9pZCA9PiB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApLnN1YnNjcmliZSgoKTogdm9pZCA9PiB0aGlzLmNsb3NlKHRydWUsIEV2b01vZGFsQ2xvc2VUYXJnZXRzLkJVVFRPTikpO1xuICAgIH1cblxuICAgIG9uQmFja2dyb3VuZENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jYW5DbG9zZUJ5QmFja2dyb3VuZChldmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoZmFsc2UsIEV2b01vZGFsQ2xvc2VUYXJnZXRzLkJBQ0tHUk9VTkQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EZWNsaW5lQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKGZhbHNlLCBFdm9Nb2RhbENsb3NlVGFyZ2V0cy5CVVRUT04pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhclZpZXcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kYWxDb250YWluZXIoKT8uY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5zZXJ0Q29tcG9uZW50KFxuICAgICAgICB7ZGF0YSwgaW5qZWN0b3IsIGNvbXBvbmVudH06IFBpY2s8RXZvRHluYW1pY01vZGFsUGFyYW1zLCAnZGF0YScgfCAnY29tcG9uZW50JyB8ICdpbmplY3Rvcic+LFxuICAgICAgICB0YXJnZXQ6IEluc2VydGlvbkNvbnRhaW5lclR5cGUgPSAnbW9kYWwnLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgZWxlbWVudEluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBFVk9fTU9EQUxfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbmplY3RvcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdldEluc2VydGlvbkNvbnRhaW5lcih0YXJnZXQpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGNvbnRhaW5lcik6IGNvbnRhaW5lciBpcyBWaWV3Q29udGFpbmVyUmVmID0+ICEhY29udGFpbmVyKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApLnN1YnNjcmliZSgoY29udGFpbmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0KGR5bmFtaWNDb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgZHluYW1pY0NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5DbG9zZUJ5QmFja2dyb3VuZChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRlY2xpbmVUZXh0KCkgfHwgdGhpcy5pc0R5bmFtaWNDb250ZW50KCkpICYmXG4gICAgICAgICAgICAhdGhpcy5pc0xvYWRpbmcoKSAmJlxuICAgICAgICAgICAgdGhpcy5tb2RhbFN0YXRlKCkuaXNPcGVuICYmXG4gICAgICAgICAgICBldmVudD8udGFyZ2V0ICYmXG4gICAgICAgICAgICAhdGhpcy5tb2RhbEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZShhZ3JlZW1lbnQ6IGJvb2xlYW4sIGNsb3NlVGFyZ2V0OiBFdm9Nb2RhbENsb3NlVGFyZ2V0cyk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2b01vZGFsU2VydmljZS5jbG9zZSh0aGlzLmlkKCksIGFncmVlbWVudCwge2Nsb3NlVGFyZ2V0fSk7XG4gICAgICAgIHRoaXMuY2xlYXJWaWV3KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaWQoKSAhPT0gdGhpcy5ldm9Nb2RhbFJvb3RJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldm9Nb2RhbFNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmV2b01vZGFsUm9vdElkKTtcbiAgICAgICAgdGhpcy5ldm9Nb2RhbFNlcnZpY2UuY2xlYW51cERlZmF1bHRIb3N0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbnNlcnRpb25Db250YWluZXIodGFyZ2V0OiBJbnNlcnRpb25Db250YWluZXJUeXBlKTogT2JzZXJ2YWJsZTxWaWV3Q29udGFpbmVyUmVmPiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQgPT09ICdtb2RhbCcgPyB0aGlzLm1vZGFsQ29udGFpbmVyJCA6IHRoaXMuY29udGVudENvbnRhaW5lciQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0S2V5Ym9hcmRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LmJvZHksICdrZXlkb3duJykucGlwZShcbiAgICAgICAgICAgIHRha2VXaGlsZSgoKTogYm9vbGVhbiA9PiB0aGlzLm1vZGFsU3RhdGUoKS5pc09wZW4pLFxuICAgICAgICAgICAgZmlsdGVyKChldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4gPT4gKHRoaXMuZGVjbGluZVRleHQoKSB8fCB0aGlzLmlzRHluYW1pY0NvbnRlbnQoKSkgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgKS5zdWJzY3JpYmUoKCk6IHZvaWQgPT4gdGhpcy5jbG9zZShmYWxzZSwgdGhpcy5jbG9zZVRhcmdldHMuRVNDKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREcmF3aW5nU3RyYXRlZ3kocGFyYW1zOiBFdm9Nb2RhbENvbWJpbmVkUGFyYW1zKTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBpc0R5bmFtaWNNb2RhbFBhcmFtcyhwYXJhbXMpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXdpbmdTdHJhdGVneS5zZXQobmV3IEV2b0R5bmFtaWNNb2RhbERyYXdpbmdTdHJhdGVneSgpKTtcbiAgICAgICAgICAgIGNhc2UgaXNDb25maWd1cmVkQ29tcG9uZW50TW9kYWxQYXJhbXMocGFyYW1zKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3aW5nU3RyYXRlZ3kuc2V0KG5ldyBFdm9Db25maWd1cmVkQ29tcG9uZW50TW9kYWxEcmF3aW5nU3RyYXRlZ3koKSk7XG4gICAgICAgICAgICBjYXNlIGlzQ29uZmlndXJlZFRlbXBsYXRlTW9kYWxQYXJhbXMocGFyYW1zKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3aW5nU3RyYXRlZ3kuc2V0KG5ldyBFdm9Db25maWd1cmVkVGVtcGxhdGVNb2RhbERyYXdpbmdTdHJhdGVneSgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVNb2RhbEV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldm9Nb2RhbFNlcnZpY2UuZ2V0RXZlbnRzU3Vic2NyaXB0aW9uKHRoaXMuaWQoKSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApLnN1YnNjcmliZSgobW9kYWxTdGF0ZTogRXZvTW9kYWxTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFN0YXRlLnNldChtb2RhbFN0YXRlKTtcblxuICAgICAgICAgICAgaWYgKCFtb2RhbFN0YXRlLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5zZXREcmF3aW5nU3RyYXRlZ3kobW9kYWxTdGF0ZS5wYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5kcmF3aW5nU3RyYXRlZ3koKT8uZHJhdy5jYWxsKHRoaXMsIG1vZGFsU3RhdGUucGFyYW1zKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiQGlmIChpc1Zpc2libGUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJldm8tbW9kYWxfX2JhY2tncm91bmRcIiAoY2xpY2spPVwib25CYWNrZ3JvdW5kQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImV2by1tb2RhbF9fd3JhcHBlclwiIChjbGljayk9XCJvbkJhY2tncm91bmRDbGljaygkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldm8tbW9kYWxcIiAjbW9kYWw+XG4gICAgICAgICAgICBAaWYgKGlzRHluYW1pY0NvbnRlbnQoKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbW9kYWxDb250YWluZXIvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by1tb2RhbF9faWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJldm8taWNvblwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAodGl0bGVUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZXZvLW1vZGFsX190aXRsZVwiPnt7IHRpdGxlVGV4dCgpIH19PC9oMj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZvLW1vZGFsX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50Lz5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb250ZW50KCk/LnRlbXBsYXRlOyBjb250ZXh0OiB7ZGF0YTogbW9kYWxDb250ZW50KCk/LmNvbnRleHR9XCIvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudENvbnRhaW5lci8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dCdXR0b25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGV2by1tb2RhbC1idXR0b25zIFtzaW5nbGVdPVwiIWRlY2xpbmVUZXh0KCkgfHwgIWFjY2VwdFRleHQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChkZWNsaW5lVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV2by1tb2RhbF9fYnV0dG9uX2RlY2xpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldm9CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRlY2xpbmVCdXR0b25Db2xvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cImRlY2xpbmVCdXR0b25UaGVtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVjbGluZUNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBkZWNsaW5lVGV4dCgpIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjZXB0VGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV2by1tb2RhbF9fYnV0dG9uX2FjY2VwdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2b0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYWNjZXB0QnV0dG9uQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJhY2NlcHRCdXR0b25UaGVtZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BY2NlcHRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWNjZXB0VGV4dCgpIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZXZvLW1vZGFsLWJ1dHRvbnM+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZvLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V2by11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2V2by1tb2RhbC9ldm8tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXZvLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZXZvLW1vZGFsL2V2by1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFpQixrQkFBa0IsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBRSwrQkFBK0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNoSCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxTQUFT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b0pBQ2hCLHdCQUF3Qjs7NEZBSW5CLGlCQUFpQjtrQkFaN0IsU0FBUzsrQkFDSSxXQUFXLGNBR1QsSUFBSSxXQUNQO3dCQUNMLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQix3QkFBd0I7cUJBQzNCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgY3JlYXRlQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBtb2RlbCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIHNpZ25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICB2aWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZpbHRlciwgZmluYWxpemUsIGZyb21FdmVudCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFdm9CdXR0b25Db2xvciwgRXZvQnV0dG9uQ29tcG9uZW50LCBFdm9CdXR0b25UaGVtZX0gZnJvbSAnLi4vZXZvLWJ1dHRvbic7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0VWT19NT0RBTF9EQVRBLCBFVk9fTU9EQUxfUk9PVF9JRH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHtOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtFdm9EeW5hbWljTW9kYWxQYXJhbXMsIEV2b01vZGFsQ29tYmluZWRQYXJhbXMsIEV2b01vZGFsU3RhdGV9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge0V2b01vZGFsU2VydmljZX0gZnJvbSAnLi9ldm8tbW9kYWwuc2VydmljZSc7XG5pbXBvcnQge2lzQ29uZmlndXJlZENvbXBvbmVudE1vZGFsUGFyYW1zLCBpc0NvbmZpZ3VyZWRUZW1wbGF0ZU1vZGFsUGFyYW1zLCBpc0R5bmFtaWNNb2RhbFBhcmFtc30gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge0V2b01vZGFsQ2xvc2VUYXJnZXRzfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7RXZvTW9kYWxEcmF3aW5nU3RyYXRlZ3l9IGZyb20gJy4vY2xhc3Nlcy9Fdm9Nb2RhbERyYXdpbmdTdHJhdGVneSc7XG5pbXBvcnQge0V2b0R5bmFtaWNNb2RhbERyYXdpbmdTdHJhdGVneX0gZnJvbSAnLi9jbGFzc2VzL0V2b0R5bmFtaWNNb2RhbERyYXdpbmdTdHJhdGVneSc7XG5pbXBvcnQge0V2b0NvbmZpZ3VyZWRDb21wb25lbnRNb2RhbERyYXdpbmdTdHJhdGVneX0gZnJvbSAnLi9jbGFzc2VzL0V2b0NvbmZpZ3VyZWRDb21wb25lbnRNb2RhbERyYXdpbmdTdHJhdGVneSc7XG5pbXBvcnQge0V2b0NvbmZpZ3VyZWRUZW1wbGF0ZU1vZGFsRHJhd2luZ1N0cmF0ZWd5fSBmcm9tICcuL2NsYXNzZXMvRXZvQ29uZmlndXJlZFRlbXBsYXRlTW9kYWxEcmF3aW5nU3RyYXRlZ3knO1xuaW1wb3J0IHtFdm9Nb2RhbEJ1dHRvbnNDb21wb25lbnR9IGZyb20gJy4vZXZvLW1vZGFsLWJ1dHRvbnMvZXZvLW1vZGFsLWJ1dHRvbnMuY29tcG9uZW50JztcblxudHlwZSBJbnNlcnRpb25Db250YWluZXJUeXBlID0gJ21vZGFsJyB8ICdjb250ZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldm8tbW9kYWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldm8tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2V2by1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBFdm9CdXR0b25Db21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEV2b01vZGFsQnV0dG9uc0NvbXBvbmVudCxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFdm9Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgcHJpdmF0ZSByZWFkb25seSBldm9Nb2RhbFJvb3RJZCA9IGluamVjdChFVk9fTU9EQUxfUk9PVF9JRCk7XG5cbiAgICBhY2NlcHRUZXh0ID0gbW9kZWw8c3RyaW5nPignJyk7XG4gICAgYWNjZXB0QnV0dG9uQ29sb3IgPSBtb2RlbDxFdm9CdXR0b25Db2xvcj4oYHN1Y2Nlc3NgKTtcbiAgICBhY2NlcHRCdXR0b25UaGVtZSA9IG1vZGVsPEV2b0J1dHRvblRoZW1lPihgcm91bmRlZC1zb2xpZGApO1xuICAgIGFzeW5jQWNjZXB0ID0gbW9kZWw8KCkgPT4gT2JzZXJ2YWJsZTx1bmtub3duPiB8IG51bGw+KG51bGwpO1xuICAgIGRlY2xpbmVUZXh0ID0gbW9kZWw8c3RyaW5nPignJyk7XG4gICAgZGVjbGluZUJ1dHRvbkNvbG9yID0gbW9kZWw8RXZvQnV0dG9uQ29sb3I+KCdzZWNvbmRhcnknKTtcbiAgICBkZWNsaW5lQnV0dG9uVGhlbWUgPSBtb2RlbDxFdm9CdXR0b25UaGVtZT4oJ3JvdW5kZWQtb3V0bGluZScpO1xuICAgIGlkID0gbW9kZWw8c3RyaW5nPih0aGlzLmV2b01vZGFsUm9vdElkKTtcbiAgICB0aXRsZVRleHQgPSBtb2RlbDxzdHJpbmc+KCcnKTtcblxuICAgIHJlYWRvbmx5IGNvbnRlbnRDb250YWluZXIgPSB2aWV3Q2hpbGQoJ2NvbnRlbnRDb250YWluZXInLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pO1xuICAgIHJlYWRvbmx5IGNvbnRlbnRDb250YWluZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuY29udGVudENvbnRhaW5lcik7XG4gICAgcmVhZG9ubHkgZHJhd2luZ1N0cmF0ZWd5ID0gc2lnbmFsPEV2b01vZGFsRHJhd2luZ1N0cmF0ZWd5IHwgbnVsbD4obnVsbCk7XG4gICAgcmVhZG9ubHkgaXNEeW5hbWljQ29udGVudCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gICAgcmVhZG9ubHkgaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgICByZWFkb25seSBpc1Zpc2libGUgPSBjb21wdXRlZCgoKTogYm9vbGVhbiA9PiB0aGlzLm1vZGFsU3RhdGUoKT8uaXNPcGVuIHx8IGZhbHNlKTtcbiAgICByZWFkb25seSBtb2RhbENvbnRhaW5lciA9IHZpZXdDaGlsZCgnbW9kYWxDb250YWluZXInLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pO1xuICAgIHJlYWRvbmx5IG1vZGFsQ29udGFpbmVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLm1vZGFsQ29udGFpbmVyKTtcbiAgICByZWFkb25seSBtb2RhbENvbnRlbnQgPSBzaWduYWw8e3RlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ZGF0YTogdW5rbm93bn0+LCBjb250ZXh0OiB1bmtub3dufSB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IG1vZGFsRWxlbWVudCA9IHZpZXdDaGlsZCgnbW9kYWwnLCB7cmVhZDogRWxlbWVudFJlZn0pO1xuICAgIHJlYWRvbmx5IG1vZGFsU3RhdGUgPSBzaWduYWw8RXZvTW9kYWxTdGF0ZSB8IG51bGw+KG51bGwpO1xuICAgIHJlYWRvbmx5IHNob3dCdXR0b25zID0gY29tcHV0ZWQoKCk6IHN0cmluZyA9PiB0aGlzLmFjY2VwdFRleHQoKSB8fCB0aGlzLmRlY2xpbmVUZXh0KCkpO1xuXG4gICAgcmVhZG9ubHkgY2xvc2VUYXJnZXRzID0gRXZvTW9kYWxDbG9zZVRhcmdldHM7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZvTW9kYWxTZXJ2aWNlID0gaW5qZWN0KEV2b01vZGFsU2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldm9Nb2RhbFNlcnZpY2UucmVnaXN0ZXIodGhpcy5pZCgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVNb2RhbEV2ZW50cygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2b01vZGFsU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuaWQoKSk7XG4gICAgfVxuXG4gICAgb25BY2NlcHRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXN5bmNBY2NlcHRBY3Rpb24gPSB0aGlzLmFzeW5jQWNjZXB0KCk/LigpO1xuXG4gICAgICAgIGlmICghYXN5bmNBY2NlcHRBY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlKHRydWUsIEV2b01vZGFsQ2xvc2VUYXJnZXRzLkJVVFRPTik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG5cbiAgICAgICAgYXN5bmNBY2NlcHRBY3Rpb24ucGlwZShcbiAgICAgICAgICAgIGZpbmFsaXplKCgpOiB2b2lkID0+IHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICkuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHRoaXMuY2xvc2UodHJ1ZSwgRXZvTW9kYWxDbG9zZVRhcmdldHMuQlVUVE9OKSk7XG4gICAgfVxuXG4gICAgb25CYWNrZ3JvdW5kQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhbkNsb3NlQnlCYWNrZ3JvdW5kKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZShmYWxzZSwgRXZvTW9kYWxDbG9zZVRhcmdldHMuQkFDS0dST1VORCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlY2xpbmVDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoZmFsc2UsIEV2b01vZGFsQ2xvc2VUYXJnZXRzLkJVVFRPTik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNsZWFyVmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RhbENvbnRhaW5lcigpPy5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbnNlcnRDb21wb25lbnQoXG4gICAgICAgIHtkYXRhLCBpbmplY3RvciwgY29tcG9uZW50fTogUGljazxFdm9EeW5hbWljTW9kYWxQYXJhbXMsICdkYXRhJyB8ICdjb21wb25lbnQnIHwgJ2luamVjdG9yJz4sXG4gICAgICAgIHRhcmdldDogSW5zZXJ0aW9uQ29udGFpbmVyVHlwZSA9ICdtb2RhbCcsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEVWT19NT0RBTF9EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGluamVjdG9yLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZ2V0SW5zZXJ0aW9uQ29udGFpbmVyKHRhcmdldCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoY29udGFpbmVyKTogY29udGFpbmVyIGlzIFZpZXdDb250YWluZXJSZWYgPT4gISFjb250YWluZXIpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICkuc3Vic2NyaWJlKChjb250YWluZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5pbnNlcnQoZHluYW1pY0NvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICBkeW5hbWljQ29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbkNsb3NlQnlCYWNrZ3JvdW5kKGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZGVjbGluZVRleHQoKSB8fCB0aGlzLmlzRHluYW1pY0NvbnRlbnQoKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzTG9hZGluZygpICYmXG4gICAgICAgICAgICB0aGlzLm1vZGFsU3RhdGUoKS5pc09wZW4gJiZcbiAgICAgICAgICAgIGV2ZW50Py50YXJnZXQgJiZcbiAgICAgICAgICAgICF0aGlzLm1vZGFsRWxlbWVudCgpLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlKGFncmVlbWVudDogYm9vbGVhbiwgY2xvc2VUYXJnZXQ6IEV2b01vZGFsQ2xvc2VUYXJnZXRzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXZvTW9kYWxTZXJ2aWNlLmNsb3NlKHRoaXMuaWQoKSwgYWdyZWVtZW50LCB7Y2xvc2VUYXJnZXR9KTtcbiAgICAgICAgdGhpcy5jbGVhclZpZXcoKTtcblxuICAgICAgICBpZiAodGhpcy5pZCgpICE9PSB0aGlzLmV2b01vZGFsUm9vdElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2b01vZGFsU2VydmljZS51bnJlZ2lzdGVyKHRoaXMuZXZvTW9kYWxSb290SWQpO1xuICAgICAgICB0aGlzLmV2b01vZGFsU2VydmljZS5jbGVhbnVwRGVmYXVsdEhvc3QoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluc2VydGlvbkNvbnRhaW5lcih0YXJnZXQ6IEluc2VydGlvbkNvbnRhaW5lclR5cGUpOiBPYnNlcnZhYmxlPFZpZXdDb250YWluZXJSZWY+IHtcbiAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gJ21vZGFsJyA/IHRoaXMubW9kYWxDb250YWluZXIkIDogdGhpcy5jb250ZW50Q29udGFpbmVyJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRLZXlib2FyZExpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICBmcm9tRXZlbnQoZG9jdW1lbnQuYm9keSwgJ2tleWRvd24nKS5waXBlKFxuICAgICAgICAgICAgdGFrZVdoaWxlKCgpOiBib29sZWFuID0+IHRoaXMubW9kYWxTdGF0ZSgpLmlzT3BlbiksXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiA9PiAodGhpcy5kZWNsaW5lVGV4dCgpIHx8IHRoaXMuaXNEeW5hbWljQ29udGVudCgpKSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApLnN1YnNjcmliZSgoKTogdm9pZCA9PiB0aGlzLmNsb3NlKGZhbHNlLCB0aGlzLmNsb3NlVGFyZ2V0cy5FU0MpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERyYXdpbmdTdHJhdGVneShwYXJhbXM6IEV2b01vZGFsQ29tYmluZWRQYXJhbXMpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIGlzRHluYW1pY01vZGFsUGFyYW1zKHBhcmFtcyk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJhd2luZ1N0cmF0ZWd5LnNldChuZXcgRXZvRHluYW1pY01vZGFsRHJhd2luZ1N0cmF0ZWd5KCkpO1xuICAgICAgICAgICAgY2FzZSBpc0NvbmZpZ3VyZWRDb21wb25lbnRNb2RhbFBhcmFtcyhwYXJhbXMpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXdpbmdTdHJhdGVneS5zZXQobmV3IEV2b0NvbmZpZ3VyZWRDb21wb25lbnRNb2RhbERyYXdpbmdTdHJhdGVneSgpKTtcbiAgICAgICAgICAgIGNhc2UgaXNDb25maWd1cmVkVGVtcGxhdGVNb2RhbFBhcmFtcyhwYXJhbXMpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXdpbmdTdHJhdGVneS5zZXQobmV3IEV2b0NvbmZpZ3VyZWRUZW1wbGF0ZU1vZGFsRHJhd2luZ1N0cmF0ZWd5KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZU1vZGFsRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2b01vZGFsU2VydmljZS5nZXRFdmVudHNTdWJzY3JpcHRpb24odGhpcy5pZCgpKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICkuc3Vic2NyaWJlKChtb2RhbFN0YXRlOiBFdm9Nb2RhbFN0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vZGFsU3RhdGUuc2V0KG1vZGFsU3RhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIW1vZGFsU3RhdGUuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRLZXlib2FyZExpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLnNldERyYXdpbmdTdHJhdGVneShtb2RhbFN0YXRlLnBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLmRyYXdpbmdTdHJhdGVneSgpPy5kcmF3LmNhbGwodGhpcywgbW9kYWxTdGF0ZS5wYXJhbXMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJAaWYgKGlzVmlzaWJsZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImV2by1tb2RhbF9fYmFja2dyb3VuZFwiIChtb3VzZWRvd24pPVwib25CYWNrZ3JvdW5kQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImV2by1tb2RhbF9fd3JhcHBlclwiIChtb3VzZWRvd24pPVwib25CYWNrZ3JvdW5kQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXZvLW1vZGFsXCIgI21vZGFsPlxuICAgICAgICAgICAgQGlmIChpc0R5bmFtaWNDb250ZW50KCkpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21vZGFsQ29udGFpbmVyLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldm8tbW9kYWxfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZXZvLWljb25cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHRpdGxlVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImV2by1tb2RhbF9fdGl0bGVcIj57eyB0aXRsZVRleHQoKSB9fTwvaDI+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2by1tb2RhbF9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsQ29udGVudCgpPy50ZW1wbGF0ZTsgY29udGV4dDoge2RhdGE6IG1vZGFsQ29udGVudCgpPy5jb250ZXh0fVwiLz5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnRDb250YWluZXIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGlmIChzaG93QnV0dG9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxldm8tbW9kYWwtYnV0dG9ucyBbc2luZ2xlXT1cIiFkZWNsaW5lVGV4dCgpIHx8ICFhY2NlcHRUZXh0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGVjbGluZVRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldm8tbW9kYWxfX2J1dHRvbl9kZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZvQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkZWNsaW5lQnV0dG9uQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJkZWNsaW5lQnV0dG9uVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRlY2xpbmVDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZGVjbGluZVRleHQoKSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2VwdFRleHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldm8tbW9kYWxfX2J1dHRvbl9hY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldm9CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjY2VwdEJ1dHRvbkNvbG9yKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwiYWNjZXB0QnV0dG9uVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWNjZXB0Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGFjY2VwdFRleHQoKSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2V2by1tb2RhbC1idXR0b25zPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
@@ -3804,17 +3804,15 @@ class EvoModalComponent {
3804
3804
  });
3805
3805
  }
3806
3806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EvoModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3807
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: EvoModalComponent, isStandalone: true, selector: "evo-modal", inputs: { acceptText: { classPropertyName: "acceptText", publicName: "acceptText", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonColor: { classPropertyName: "acceptButtonColor", publicName: "acceptButtonColor", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonTheme: { classPropertyName: "acceptButtonTheme", publicName: "acceptButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, asyncAccept: { classPropertyName: "asyncAccept", publicName: "asyncAccept", isSignal: true, isRequired: false, transformFunction: null }, declineText: { classPropertyName: "declineText", publicName: "declineText", isSignal: true, isRequired: false, transformFunction: null }, declineButtonColor: { classPropertyName: "declineButtonColor", publicName: "declineButtonColor", isSignal: true, isRequired: false, transformFunction: null }, declineButtonTheme: { classPropertyName: "declineButtonTheme", publicName: "declineButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { acceptText: "acceptTextChange", acceptButtonColor: "acceptButtonColorChange", acceptButtonTheme: "acceptButtonThemeChange", asyncAccept: "asyncAcceptChange", declineText: "declineTextChange", declineButtonColor: "declineButtonColorChange", declineButtonTheme: "declineButtonThemeChange", id: "idChange", titleText: "titleTextChange" }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalElement", first: true, predicate: ["modal"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (click)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (click)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"], dependencies: [{ kind: "component", type: EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: EvoModalButtonsComponent, selector: "evo-modal-buttons, [evo-modal-buttons]", inputs: ["single"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.10", type: EvoModalComponent, isStandalone: true, selector: "evo-modal", inputs: { acceptText: { classPropertyName: "acceptText", publicName: "acceptText", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonColor: { classPropertyName: "acceptButtonColor", publicName: "acceptButtonColor", isSignal: true, isRequired: false, transformFunction: null }, acceptButtonTheme: { classPropertyName: "acceptButtonTheme", publicName: "acceptButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, asyncAccept: { classPropertyName: "asyncAccept", publicName: "asyncAccept", isSignal: true, isRequired: false, transformFunction: null }, declineText: { classPropertyName: "declineText", publicName: "declineText", isSignal: true, isRequired: false, transformFunction: null }, declineButtonColor: { classPropertyName: "declineButtonColor", publicName: "declineButtonColor", isSignal: true, isRequired: false, transformFunction: null }, declineButtonTheme: { classPropertyName: "declineButtonTheme", publicName: "declineButtonTheme", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, titleText: { classPropertyName: "titleText", publicName: "titleText", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { acceptText: "acceptTextChange", acceptButtonColor: "acceptButtonColorChange", acceptButtonTheme: "acceptButtonThemeChange", asyncAccept: "asyncAcceptChange", declineText: "declineTextChange", declineButtonColor: "declineButtonColorChange", declineButtonTheme: "declineButtonThemeChange", id: "idChange", titleText: "titleTextChange" }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["contentContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "modalElement", first: true, predicate: ["modal"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (mousedown)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (mousedown)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"], dependencies: [{ kind: "component", type: EvoButtonComponent, selector: "button[evoButton], a[evoButton]", inputs: ["size", "color", "theme", "disabled", "loading"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: EvoModalButtonsComponent, selector: "evo-modal-buttons, [evo-modal-buttons]", inputs: ["single"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3808
3808
  }
3809
3809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: EvoModalComponent, decorators: [{
3810
3810
  type: Component,
3811
3811
  args: [{ selector: 'evo-modal', standalone: true, imports: [
3812
3812
  EvoButtonComponent,
3813
- EvoUiClassDirective,
3814
- NgIf,
3815
3813
  NgTemplateOutlet,
3816
3814
  EvoModalButtonsComponent,
3817
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (click)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (click)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"] }]
3815
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isVisible()) {\n <div class=\"evo-modal__background\" (mousedown)=\"onBackgroundClick($event)\"></div>\n\n <div class=\"evo-modal__wrapper\" (mousedown)=\"onBackgroundClick($event)\">\n <div class=\"evo-modal\" #modal>\n @if (isDynamicContent()) {\n <ng-template #modalContainer/>\n } @else {\n <div class=\"evo-modal__icon\">\n <ng-content select=\"evo-icon\"/>\n </div>\n\n @if (titleText()) {\n <h2 class=\"evo-modal__title\">{{ titleText() }}</h2>\n }\n\n <div class=\"evo-modal__content\">\n <ng-content/>\n\n <ng-container *ngTemplateOutlet=\"modalContent()?.template; context: {data: modalContent()?.context}\"/>\n\n <ng-template #contentContainer/>\n </div>\n\n @if (showButtons()) {\n <evo-modal-buttons [single]=\"!declineText() || !acceptText()\">\n @if (declineText()) {\n <button\n class=\"evo-modal__button_decline\"\n evoButton\n [color]=\"declineButtonColor()\"\n [theme]=\"declineButtonTheme()\"\n [disabled]=\"isLoading()\"\n (click)=\"onDeclineClick()\"\n >{{ declineText() }}</button>\n }\n\n @if (acceptText()) {\n <button\n class=\"evo-modal__button_accept\"\n evoButton\n [color]=\"acceptButtonColor()\"\n [theme]=\"acceptButtonTheme()\"\n [loading]=\"isLoading()\"\n (click)=\"onAcceptClick()\"\n >{{ acceptText() }}</button>\n }\n </evo-modal-buttons>\n }\n }\n </div>\n </div>\n}\n", styles: ["@keyframes appearance{0%{opacity:0}to{opacity:1}}.evo-modal{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;width:100%;max-width:752px;height:auto;max-height:100%;padding:16px;overflow:hidden;text-align:center;background-color:#fff;border-radius:16px;box-shadow:0 0 12px 2px #0000004d;animation:appearance .25s linear}@media (min-width: 768px){.evo-modal{width:752px;height:auto;padding:32px}}.evo-modal__title{margin-top:0;margin-bottom:0;font-weight:700;font-size:16px;line-height:24px}@media (min-width: 768px){.evo-modal__title{width:674px;font-size:24px;line-height:32px}}.evo-modal__icon{margin-bottom:8px}.evo-modal__icon ::ng-deep evo-icon{display:block;width:64px;height:64px}@media (min-width: 768px){.evo-modal__icon{margin-bottom:32px}}.evo-modal__icon:empty{display:none}.evo-modal__content{width:100%;margin-top:32px;overflow:auto;font-size:14px;line-height:22px}.evo-modal__content:empty{display:none;margin-top:0}.evo-modal__content ::ng-deep *:last-child{margin-bottom:0}.evo-modal__background{position:fixed;inset:0;z-index:1010;display:flex;justify-content:center;width:100%;height:100%;background:#00000080}.evo-modal__wrapper{position:fixed;inset:0;z-index:1011;display:flex;justify-content:center;align-items:center;width:100%;padding:16px}@media (min-width: 768px){.evo-modal__wrapper{width:auto}}\n"] }]
3818
3816
  }] });
3819
3817
 
3820
3818
  class EvoModalModule {