UNPKG

kwikui

Version:

KwikID's UI Component Library in Angular

87 lines 25.6 kB
import { animate, style, transition, trigger } from "@angular/animations"; import { ChangeDetectionStrategy, Component } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "./toaster.service"; import * as i2 from "@taiga-ui/core"; import * as i3 from "@angular/common"; export class KwikUIToasterComponent { constructor(toasterService, cdr) { this.toasterService = toasterService; this.cdr = cdr; this.isToasterVisible = false; this.toasterSubscription = this.toasterService.showToaster.subscribe((isVisible) => { this.isToasterVisible = isVisible; this.cdr.markForCheck(); }); } ngOnInit() { } ngOnDestroy() { // Clean up subscription this.toasterSubscription.unsubscribe(); } /** * Returns animation parameters based on toaster position */ getAnimationParams() { const position = this.toasterService.position || ""; if (position.startsWith("top")) { return { enterTransform: "translateY(-20px)", exitTransform: "translateY(-20px)" }; } if (position.startsWith("bottom")) { return { enterTransform: "translateY(20px)", exitTransform: "translateY(20px)" }; } if (position.includes("left")) { return { enterTransform: "translateX(-20px)", exitTransform: "translateX(-20px)" }; } if (position.includes("right")) { return { enterTransform: "translateX(20px)", exitTransform: "translateX(20px)" }; } // Default animation for center positions return { enterTransform: "scale(0.9)", exitTransform: "scale(0.9)" }; } } /** @nocollapse */ KwikUIToasterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIToasterComponent, deps: [{ token: i1.KwikUIToasterService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ KwikUIToasterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikUIToasterComponent, selector: "kwikui-toaster", ngImport: i0, template: "<div\n class=\"kwikui-toaster-container\"\n *ngIf=\"toasterService.showToaster | async as isToasterVisible\"\n [class.type-error]=\"toasterService.type === 'error'\"\n [class.type-info]=\"!toasterService.type || toasterService.type === 'info'\"\n [class.type-success]=\"toasterService.type === 'success'\"\n [class.type-warning]=\"toasterService.type === 'warning'\"\n [class.position-top-left]=\"\n toasterService.position === 'top-left' &&\n !toasterService.customPositionStyles\n \"\n [class.position-top-center]=\"\n toasterService.position === 'top-center' &&\n !toasterService.customPositionStyles\n \"\n [class.position-top-right]=\"\n toasterService.position === 'top-right' &&\n !toasterService.customPositionStyles\n \"\n [class.position-center-left]=\"\n toasterService.position === 'center-left' &&\n !toasterService.customPositionStyles\n \"\n [class.position-center-center]=\"\n toasterService.position === 'center-center' &&\n !toasterService.customPositionStyles\n \"\n [class.position-center-right]=\"\n toasterService.position === 'center-right' &&\n !toasterService.customPositionStyles\n \"\n [class.position-bottom-left]=\"\n toasterService.position === 'bottom-left' &&\n !toasterService.customPositionStyles\n \"\n [class.position-bottom-center]=\"\n toasterService.position === 'bottom-center' &&\n !toasterService.customPositionStyles\n \"\n [class.position-bottom-right]=\"\n toasterService.position === 'bottom-right' &&\n !toasterService.customPositionStyles\n \"\n [class.shape-curved]=\"toasterService.shape === 'curved'\"\n [class.shape-rectangle]=\"toasterService.shape === 'rectangle'\"\n [class.shape-rounded]=\"toasterService.shape === 'rounded'\"\n [class.size-xs]=\"toasterService.size === 'xs'\"\n [class.size-s]=\"toasterService.size === 's'\"\n [class.size-m]=\"toasterService.size === 'm'\"\n [class.size-l]=\"toasterService.size === 'l'\"\n [class.size-xl]=\"toasterService.size === 'xl'\"\n [class.custom-positioned]=\"toasterService.customPositionStyles\"\n [ngStyle]=\"toasterService.customPositionStyles || {}\"\n [@panelInOut]=\"{\n value: isToasterVisible ? 'visible' : 'hidden',\n params: getAnimationParams()\n }\"\n role=\"alert\"\n [attr.aria-live]=\"toasterService.type === 'error' ? 'assertive' : 'polite'\"\n tabindex=\"0\"\n (click)=\"toasterService.hide()\"\n (keydown.escape)=\"toasterService.hide()\"\n>\n <div class=\"toaster-content\">\n <!-- Info icon -->\n <tui-svg\n [src]=\"toasterService.customIcons.info || 'tuiIconInfo'\"\n class=\"toaster-icon toaster-icon-info\"\n *ngIf=\"toasterService.type === 'info' || !toasterService.type\"\n ></tui-svg>\n\n <!-- Warning icon -->\n <tui-svg\n [src]=\"toasterService.customIcons.warning || 'tuiIconAlertTriangle'\"\n class=\"toaster-icon toaster-icon-warning\"\n *ngIf=\"toasterService.type === 'warning'\"\n ></tui-svg>\n\n <!-- Success icon -->\n <tui-svg\n [src]=\"toasterService.customIcons.success || 'tuiIconCheckCircle'\"\n class=\"toaster-icon toaster-icon-success\"\n *ngIf=\"toasterService.type === 'success'\"\n ></tui-svg>\n\n <!-- Error icon -->\n <tui-svg\n [src]=\"toasterService.customIcons.error || 'tuiIconXCircle'\"\n class=\"toaster-icon toaster-icon-error\"\n *ngIf=\"toasterService.type === 'error'\"\n ></tui-svg>\n <div class=\"toaster-message\">\n {{ toasterService.message }}\n </div>\n </div>\n</div>\n", styles: [":host{pointer-events:none}.kwikui-toaster-container{pointer-events:auto;position:fixed;display:inline-flex;align-items:center;color:var(--kwikui-color-white);box-sizing:border-box;box-shadow:var(--kwikui-box-shadow-1),var(--kwikui-box-shadow-2);cursor:pointer;overflow:hidden;max-width:90vw;z-index:1000;transition:transform .2s ease,box-shadow .2s ease,background-color .2s ease}.kwikui-toaster-container:focus-visible{outline:2px solid var(--kwikui-color-white);outline-offset:2px}@media (max-width: 480px){.kwikui-toaster-container{max-width:calc(100vw - var(--kwikui-space-m) * 2);min-width:auto}}.kwikui-toaster-container.custom-positioned{top:auto;right:auto;bottom:auto;left:auto;transform:none}.kwikui-toaster-container.position-top-left{top:var(--kwikui-space-m);left:var(--kwikui-space-m)}@media (max-width: 480px){.kwikui-toaster-container.position-top-left{top:var(--kwikui-space-s);left:var(--kwikui-space-s)}}.kwikui-toaster-container.position-top-center{top:var(--kwikui-space-m);left:50%;transform:translate(-50%)}@media (max-width: 480px){.kwikui-toaster-container.position-top-center{top:var(--kwikui-space-s)}}.kwikui-toaster-container.position-top-right{top:var(--kwikui-space-m);right:var(--kwikui-space-m)}@media (max-width: 480px){.kwikui-toaster-container.position-top-right{top:var(--kwikui-space-s);right:var(--kwikui-space-s)}}.kwikui-toaster-container.position-center-left{top:50%;left:var(--kwikui-space-m);transform:translateY(-50%)}@media (max-width: 480px){.kwikui-toaster-container.position-center-left{left:var(--kwikui-space-s)}}.kwikui-toaster-container.position-center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.kwikui-toaster-container.position-center-right{top:50%;right:var(--kwikui-space-m);transform:translateY(-50%)}@media (max-width: 480px){.kwikui-toaster-container.position-center-right{right:var(--kwikui-space-s)}}.kwikui-toaster-container.position-bottom-left{bottom:var(--kwikui-space-m);left:var(--kwikui-space-m)}@media (max-width: 480px){.kwikui-toaster-container.position-bottom-left{bottom:var(--kwikui-space-s);left:var(--kwikui-space-s)}}.kwikui-toaster-container.position-bottom-center{bottom:var(--kwikui-space-m);left:50%;transform:translate(-50%)}@media (max-width: 480px){.kwikui-toaster-container.position-bottom-center{bottom:var(--kwikui-space-s)}}.kwikui-toaster-container.position-bottom-right{bottom:var(--kwikui-space-m);right:var(--kwikui-space-m)}@media (max-width: 480px){.kwikui-toaster-container.position-bottom-right{bottom:var(--kwikui-space-s);right:var(--kwikui-space-s)}}.kwikui-toaster-container:hover{transform:translateY(-2px);box-shadow:var(--kwikui-box-shadow-1),var(--kwikui-box-shadow-2),var(--kwikui-box-shadow-2)}.kwikui-toaster-container:active{transform:translateY(0);box-shadow:var(--kwikui-box-shadow-1)}.kwikui-toaster-container.type-success{background-color:var(--kwikui-color-success)}.kwikui-toaster-container.type-success:hover{background-color:var(--kwikui-color-success-path)}.kwikui-toaster-container.type-error{background-color:var(--kwikui-color-error)}.kwikui-toaster-container.type-error:hover{background-color:var(--kwikui-color-error-path)}.kwikui-toaster-container.type-warning{background-color:var(--kwikui-color-warning)}.kwikui-toaster-container.type-warning:hover{filter:brightness(1.05)}.kwikui-toaster-container.type-info{background-color:var(--kwikui-color-info)}.kwikui-toaster-container.type-info:hover{filter:brightness(1.05)}.kwikui-toaster-container.shape-rounded{border-radius:2rem}.kwikui-toaster-container.shape-curved{border-radius:.5rem}.kwikui-toaster-container.shape-rectangle{border-radius:0}.kwikui-toaster-container.size-xs{padding:var(--kwikui-space-xs) var(--kwikui-space-s)}.kwikui-toaster-container.size-xs .toaster-content{grid-gap:var(--kwikui-space-xxs);gap:var(--kwikui-space-xxs)}.kwikui-toaster-container.size-xs .toaster-icon{width:calc(var(--kwikui-font-size-xs) * var(--kwikui-multiplier-xl));height:calc(var(--kwikui-font-size-xs) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-xs .toaster-message{font-size:var(--kwikui-font-size-xs);line-height:calc(var(--kwikui-font-size-xs) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-s{padding:var(--kwikui-space-xs) var(--kwikui-space-m)}.kwikui-toaster-container.size-s .toaster-content{grid-gap:var(--kwikui-space-xs);gap:var(--kwikui-space-xs)}.kwikui-toaster-container.size-s .toaster-icon{width:calc(var(--kwikui-font-size-s) * var(--kwikui-multiplier-xl));height:calc(var(--kwikui-font-size-s) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-s .toaster-message{font-size:var(--kwikui-font-size-s);line-height:calc(var(--kwikui-font-size-s) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-m{padding:var(--kwikui-space-s) var(--kwikui-space-m)}.kwikui-toaster-container.size-m .toaster-content{grid-gap:var(--kwikui-space-s);gap:var(--kwikui-space-s)}.kwikui-toaster-container.size-m .toaster-icon{width:calc(var(--kwikui-font-size-m) * var(--kwikui-multiplier-xl));height:calc(var(--kwikui-font-size-m) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-m .toaster-message{font-size:var(--kwikui-font-size-m);line-height:calc(var(--kwikui-font-size-m) * var(--kwikui-multiplier-xl))}.kwikui-toaster-container.size-l{padding:var(--kwikui-space-m) var(--kwikui-space-l)}.kwikui-toaster-container.size-l .toaster-content{grid-gap:var(--kwikui-space-s);gap:var(--kwikui-space-s)}.kwikui-toaster-container.size-l .toaster-icon{width:calc(var(--kwikui-font-size-l) * var(--kwikui-multiplier-l));height:calc(var(--kwikui-font-size-l) * var(--kwikui-multiplier-l))}.kwikui-toaster-container.size-l .toaster-message{font-size:var(--kwikui-font-size-l);line-height:calc(var(--kwikui-font-size-l) * var(--kwikui-multiplier-l))}.kwikui-toaster-container.size-xl{padding:var(--kwikui-space-m) var(--kwikui-space-xl)}.kwikui-toaster-container.size-xl .toaster-content{grid-gap:var(--kwikui-space-m);gap:var(--kwikui-space-m)}.kwikui-toaster-container.size-xl .toaster-icon{width:calc(var(--kwikui-font-size-xl) * var(--kwikui-multiplier-l));height:calc(var(--kwikui-font-size-xl) * var(--kwikui-multiplier-l))}.kwikui-toaster-container.size-xl .toaster-message{font-size:var(--kwikui-font-size-xl);line-height:calc(var(--kwikui-font-size-xl) * var(--kwikui-multiplier-l))}.kwikui-toaster-container .toaster-content{display:flex;flex-direction:row;align-items:center;width:100%}.kwikui-toaster-container .toaster-icon{display:flex;justify-content:center;align-items:center;flex-shrink:0}.kwikui-toaster-container .toaster-icon ::ng-deep svg{width:100%;height:100%;fill:currentColor}.kwikui-toaster-container .toaster-message{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;font-weight:500;margin:0;letter-spacing:.01em}\n"], components: [{ type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i3.AsyncPipe }, animations: [ trigger("panelInOut", [ transition(":enter", [ style({ opacity: 0, transform: "{{enterTransform}}" }), animate(150) ]), transition(":leave", [ animate(100, style({ opacity: 0, transform: "{{exitTransform}}" })) ]) ]) ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikUIToasterComponent, decorators: [{ type: Component, args: [{ selector: "kwikui-toaster", templateUrl: "./toaster.component.html", styleUrls: ["./toaster.component.scss"], changeDetection: ChangeDetectionStrategy.OnPush, animations: [ trigger("panelInOut", [ transition(":enter", [ style({ opacity: 0, transform: "{{enterTransform}}" }), animate(150) ]), transition(":leave", [ animate(100, style({ opacity: 0, transform: "{{exitTransform}}" })) ]) ]) ] }] }], ctorParameters: function () { return [{ type: i1.KwikUIToasterService }, { type: i0.ChangeDetectorRef }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lrdWkvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS90b2FzdGVyL3RvYXN0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa3VpL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20vdG9hc3Rlci90b2FzdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFHVixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFxQnZCLE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsWUFDUyxjQUFvQyxFQUNuQyxHQUFzQjtRQUR2QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFOaEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBUXZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2xFLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxLQUFVLENBQUM7SUFFbkIsV0FBVztRQUNULHdCQUF3QjtRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUVwRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTztnQkFDTCxjQUFjLEVBQUUsbUJBQW1CO2dCQUNuQyxhQUFhLEVBQUUsbUJBQW1CO2FBQ25DLENBQUM7U0FDSDtRQUNELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqQyxPQUFPO2dCQUNMLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLGFBQWEsRUFBRSxrQkFBa0I7YUFDbEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLE9BQU87Z0JBQ0wsY0FBYyxFQUFFLG1CQUFtQjtnQkFDbkMsYUFBYSxFQUFFLG1CQUFtQjthQUNuQyxDQUFDO1NBQ0g7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsT0FBTztnQkFDTCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxhQUFhLEVBQUUsa0JBQWtCO2FBQ2xDLENBQUM7U0FDSDtRQUNELHlDQUF5QztRQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDdkUsQ0FBQzs7dUlBeERVLHNCQUFzQjsySEFBdEIsc0JBQXNCLHNEQzVCbkMsODlHQWdHQSw2N05EaEZjO1FBQ1YsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNwQixVQUFVLENBQUMsUUFBUSxFQUFFO2dCQUNuQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDO2FBQ2IsQ0FBQztZQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2FBQ3BFLENBQUM7U0FDSCxDQUFDO0tBQ0g7NEZBRVUsc0JBQXNCO2tCQWpCbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDdkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUNwQixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO2dDQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDOzZCQUNiLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7NkJBQ3BFLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEt3aWtVSVRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdG9hc3Rlci5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrd2lrdWktdG9hc3RlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RvYXN0ZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3RvYXN0ZXIuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiBcInt7ZW50ZXJUcmFuc2Zvcm19fVwiIH0pLFxuICAgICAgICBhbmltYXRlKDE1MClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbihcIjpsZWF2ZVwiLCBbXG4gICAgICAgIGFuaW1hdGUoMTAwLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogXCJ7e2V4aXRUcmFuc2Zvcm19fVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtVSVRvYXN0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGlzVG9hc3RlclZpc2libGUgPSBmYWxzZTtcblxuICBwcml2YXRlIHRvYXN0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdG9hc3RlclNlcnZpY2U6IEt3aWtVSVRvYXN0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnRvYXN0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnNob3dUb2FzdGVyLnN1YnNjcmliZShcbiAgICAgIChpc1Zpc2libGUpID0+IHtcbiAgICAgICAgdGhpcy5pc1RvYXN0ZXJWaXNpYmxlID0gaXNWaXNpYmxlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIENsZWFuIHVwIHN1YnNjcmlwdGlvblxuICAgIHRoaXMudG9hc3RlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW5pbWF0aW9uIHBhcmFtZXRlcnMgYmFzZWQgb24gdG9hc3RlciBwb3NpdGlvblxuICAgKi9cbiAgZ2V0QW5pbWF0aW9uUGFyYW1zKCk6IHsgZW50ZXJUcmFuc2Zvcm06IHN0cmluZzsgZXhpdFRyYW5zZm9ybTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy50b2FzdGVyU2VydmljZS5wb3NpdGlvbiB8fCBcIlwiO1xuXG4gICAgaWYgKHBvc2l0aW9uLnN0YXJ0c1dpdGgoXCJ0b3BcIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGVyVHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoLTIwcHgpXCIsXG4gICAgICAgIGV4aXRUcmFuc2Zvcm06IFwidHJhbnNsYXRlWSgtMjBweClcIlxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uLnN0YXJ0c1dpdGgoXCJib3R0b21cIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGVyVHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMjBweClcIixcbiAgICAgICAgZXhpdFRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDIwcHgpXCJcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbi5pbmNsdWRlcyhcImxlZnRcIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGVyVHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoLTIwcHgpXCIsXG4gICAgICAgIGV4aXRUcmFuc2Zvcm06IFwidHJhbnNsYXRlWCgtMjBweClcIlxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uLmluY2x1ZGVzKFwicmlnaHRcIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGVyVHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoMjBweClcIixcbiAgICAgICAgZXhpdFRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDIwcHgpXCJcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIERlZmF1bHQgYW5pbWF0aW9uIGZvciBjZW50ZXIgcG9zaXRpb25zXG4gICAgcmV0dXJuIHsgZW50ZXJUcmFuc2Zvcm06IFwic2NhbGUoMC45KVwiLCBleGl0VHJhbnNmb3JtOiBcInNjYWxlKDAuOSlcIiB9O1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwia3dpa3VpLXRvYXN0ZXItY29udGFpbmVyXCJcbiAgKm5nSWY9XCJ0b2FzdGVyU2VydmljZS5zaG93VG9hc3RlciB8IGFzeW5jIGFzIGlzVG9hc3RlclZpc2libGVcIlxuICBbY2xhc3MudHlwZS1lcnJvcl09XCJ0b2FzdGVyU2VydmljZS50eXBlID09PSAnZXJyb3InXCJcbiAgW2NsYXNzLnR5cGUtaW5mb109XCIhdG9hc3RlclNlcnZpY2UudHlwZSB8fCB0b2FzdGVyU2VydmljZS50eXBlID09PSAnaW5mbydcIlxuICBbY2xhc3MudHlwZS1zdWNjZXNzXT1cInRvYXN0ZXJTZXJ2aWNlLnR5cGUgPT09ICdzdWNjZXNzJ1wiXG4gIFtjbGFzcy50eXBlLXdhcm5pbmddPVwidG9hc3RlclNlcnZpY2UudHlwZSA9PT0gJ3dhcm5pbmcnXCJcbiAgW2NsYXNzLnBvc2l0aW9uLXRvcC1sZWZ0XT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAndG9wLWxlZnQnICYmXG4gICAgIXRvYXN0ZXJTZXJ2aWNlLmN1c3RvbVBvc2l0aW9uU3R5bGVzXG4gIFwiXG4gIFtjbGFzcy5wb3NpdGlvbi10b3AtY2VudGVyXT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAndG9wLWNlbnRlcicgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnBvc2l0aW9uLXRvcC1yaWdodF09XCJcbiAgICB0b2FzdGVyU2VydmljZS5wb3NpdGlvbiA9PT0gJ3RvcC1yaWdodCcgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnBvc2l0aW9uLWNlbnRlci1sZWZ0XT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAnY2VudGVyLWxlZnQnICYmXG4gICAgIXRvYXN0ZXJTZXJ2aWNlLmN1c3RvbVBvc2l0aW9uU3R5bGVzXG4gIFwiXG4gIFtjbGFzcy5wb3NpdGlvbi1jZW50ZXItY2VudGVyXT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAnY2VudGVyLWNlbnRlcicgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnBvc2l0aW9uLWNlbnRlci1yaWdodF09XCJcbiAgICB0b2FzdGVyU2VydmljZS5wb3NpdGlvbiA9PT0gJ2NlbnRlci1yaWdodCcgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnBvc2l0aW9uLWJvdHRvbS1sZWZ0XT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnICYmXG4gICAgIXRvYXN0ZXJTZXJ2aWNlLmN1c3RvbVBvc2l0aW9uU3R5bGVzXG4gIFwiXG4gIFtjbGFzcy5wb3NpdGlvbi1ib3R0b20tY2VudGVyXT1cIlxuICAgIHRvYXN0ZXJTZXJ2aWNlLnBvc2l0aW9uID09PSAnYm90dG9tLWNlbnRlcicgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnBvc2l0aW9uLWJvdHRvbS1yaWdodF09XCJcbiAgICB0b2FzdGVyU2VydmljZS5wb3NpdGlvbiA9PT0gJ2JvdHRvbS1yaWdodCcgJiZcbiAgICAhdG9hc3RlclNlcnZpY2UuY3VzdG9tUG9zaXRpb25TdHlsZXNcbiAgXCJcbiAgW2NsYXNzLnNoYXBlLWN1cnZlZF09XCJ0b2FzdGVyU2VydmljZS5zaGFwZSA9PT0gJ2N1cnZlZCdcIlxuICBbY2xhc3Muc2hhcGUtcmVjdGFuZ2xlXT1cInRvYXN0ZXJTZXJ2aWNlLnNoYXBlID09PSAncmVjdGFuZ2xlJ1wiXG4gIFtjbGFzcy5zaGFwZS1yb3VuZGVkXT1cInRvYXN0ZXJTZXJ2aWNlLnNoYXBlID09PSAncm91bmRlZCdcIlxuICBbY2xhc3Muc2l6ZS14c109XCJ0b2FzdGVyU2VydmljZS5zaXplID09PSAneHMnXCJcbiAgW2NsYXNzLnNpemUtc109XCJ0b2FzdGVyU2VydmljZS5zaXplID09PSAncydcIlxuICBbY2xhc3Muc2l6ZS1tXT1cInRvYXN0ZXJTZXJ2aWNlLnNpemUgPT09ICdtJ1wiXG4gIFtjbGFzcy5zaXplLWxdPVwidG9hc3RlclNlcnZpY2Uuc2l6ZSA9PT0gJ2wnXCJcbiAgW2NsYXNzLnNpemUteGxdPVwidG9hc3RlclNlcnZpY2Uuc2l6ZSA9PT0gJ3hsJ1wiXG4gIFtjbGFzcy5jdXN0b20tcG9zaXRpb25lZF09XCJ0b2FzdGVyU2VydmljZS5jdXN0b21Qb3NpdGlvblN0eWxlc1wiXG4gIFtuZ1N0eWxlXT1cInRvYXN0ZXJTZXJ2aWNlLmN1c3RvbVBvc2l0aW9uU3R5bGVzIHx8IHt9XCJcbiAgW0BwYW5lbEluT3V0XT1cIntcbiAgICB2YWx1ZTogaXNUb2FzdGVyVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICAgIHBhcmFtczogZ2V0QW5pbWF0aW9uUGFyYW1zKClcbiAgfVwiXG4gIHJvbGU9XCJhbGVydFwiXG4gIFthdHRyLmFyaWEtbGl2ZV09XCJ0b2FzdGVyU2VydmljZS50eXBlID09PSAnZXJyb3InID8gJ2Fzc2VydGl2ZScgOiAncG9saXRlJ1wiXG4gIHRhYmluZGV4PVwiMFwiXG4gIChjbGljayk9XCJ0b2FzdGVyU2VydmljZS5oaWRlKClcIlxuICAoa2V5ZG93bi5lc2NhcGUpPVwidG9hc3RlclNlcnZpY2UuaGlkZSgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cInRvYXN0ZXItY29udGVudFwiPlxuICAgIDwhLS0gSW5mbyBpY29uIC0tPlxuICAgIDx0dWktc3ZnXG4gICAgICBbc3JjXT1cInRvYXN0ZXJTZXJ2aWNlLmN1c3RvbUljb25zLmluZm8gfHwgJ3R1aUljb25JbmZvJ1wiXG4gICAgICBjbGFzcz1cInRvYXN0ZXItaWNvbiB0b2FzdGVyLWljb24taW5mb1wiXG4gICAgICAqbmdJZj1cInRvYXN0ZXJTZXJ2aWNlLnR5cGUgPT09ICdpbmZvJyB8fCAhdG9hc3RlclNlcnZpY2UudHlwZVwiXG4gICAgPjwvdHVpLXN2Zz5cblxuICAgIDwhLS0gV2FybmluZyBpY29uIC0tPlxuICAgIDx0dWktc3ZnXG4gICAgICBbc3JjXT1cInRvYXN0ZXJTZXJ2aWNlLmN1c3RvbUljb25zLndhcm5pbmcgfHwgJ3R1aUljb25BbGVydFRyaWFuZ2xlJ1wiXG4gICAgICBjbGFzcz1cInRvYXN0ZXItaWNvbiB0b2FzdGVyLWljb24td2FybmluZ1wiXG4gICAgICAqbmdJZj1cInRvYXN0ZXJTZXJ2aWNlLnR5cGUgPT09ICd3YXJuaW5nJ1wiXG4gICAgPjwvdHVpLXN2Zz5cblxuICAgIDwhLS0gU3VjY2VzcyBpY29uIC0tPlxuICAgIDx0dWktc3ZnXG4gICAgICBbc3JjXT1cInRvYXN0ZXJTZXJ2aWNlLmN1c3RvbUljb25zLnN1Y2Nlc3MgfHwgJ3R1aUljb25DaGVja0NpcmNsZSdcIlxuICAgICAgY2xhc3M9XCJ0b2FzdGVyLWljb24gdG9hc3Rlci1pY29uLXN1Y2Nlc3NcIlxuICAgICAgKm5nSWY9XCJ0b2FzdGVyU2VydmljZS50eXBlID09PSAnc3VjY2VzcydcIlxuICAgID48L3R1aS1zdmc+XG5cbiAgICA8IS0tIEVycm9yIGljb24gLS0+XG4gICAgPHR1aS1zdmdcbiAgICAgIFtzcmNdPVwidG9hc3RlclNlcnZpY2UuY3VzdG9tSWNvbnMuZXJyb3IgfHwgJ3R1aUljb25YQ2lyY2xlJ1wiXG4gICAgICBjbGFzcz1cInRvYXN0ZXItaWNvbiB0b2FzdGVyLWljb24tZXJyb3JcIlxuICAgICAgKm5nSWY9XCJ0b2FzdGVyU2VydmljZS50eXBlID09PSAnZXJyb3InXCJcbiAgICA+PC90dWktc3ZnPlxuICAgIDxkaXYgY2xhc3M9XCJ0b2FzdGVyLW1lc3NhZ2VcIj5cbiAgICAgIHt7IHRvYXN0ZXJTZXJ2aWNlLm1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==