UNPKG

progress-button

Version:
131 lines 27 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { Observable } from 'rxjs'; import { ProgressButtonService } from './progress-button.service'; export class ProgressButtonComponent { constructor(service) { this.service = service; this.progressValue = 0; this.loading = false; this.noTransition = false; this.statusClass = ''; /** * Specifies the type of button */ this.type = 'button'; /** * Specifies that a button should automatically get focus when the page loads */ this.autofocus = null; /** * Specifies that a button should be disabled */ this.disabled = null; /** * Fires on a mouse click on the element */ this.action = new EventEmitter(); /** * Execute click action */ this.click = () => { this.action.emit(this); }; /** * Init the progress component */ this.progressInit = () => { this.disabled = true; this.loading = true; this.noTransition = false; this.progressValue = 0; }; /** * Stop the progress animation * @param status ProgressButtonStatus State of stop (error, success) * @return Observable An observable with after-init and complete steps */ this.progressStop = (status) => { return new Observable((observer) => { observer.next('before-init'); const tim1 = setTimeout(() => { this.noTransition = true; this.progressValue = 0; this.loading = false; this.statusClass = ('state-' + status); observer.next('after-init'); const tim2 = setTimeout(() => { this.statusClass = ''; this.disabled = null; observer.complete(); clearTimeout(tim1); clearTimeout(tim2); }, this.progress.statusTime); }, 300); }); }; this.progress = this.service.progress; this.design = this.service.design; } /** * Return the status of the progress data */ get status() { return this.service.status; } /** * Return styles of the button and its components */ get styles() { return this.service.styles(this.progressValue, this.statusClass); } /** * Progress Button Data * @param progress ProgressButtonData The Progress Button Data */ set progress(progress) { this.service.progress = progress; } /** * The Progress Button Data */ get progress() { return this.service.progress; } /** * Progress Button Design * @param design ProgressButtonDesign The Progress Button Design */ set design(design) { this.service.design = design; } /** * The Progress Button Design */ get design() { return this.service.design; } } ProgressButtonComponent.decorators = [ { type: Component, args: [{ selector: 'ydd-progress-button', template: "<button class=\"progress-button\"\r\n [attr.autofocus]=\"autofocus\"\r\n [attr.disabled]=\"disabled\"\r\n\r\n [attr.form]=\"form?.id\"\r\n [attr.formaction]=\"form?.action\"\r\n [attr.formmethod]=\"form?.method\"\r\n [attr.formnovalidate]=\"form?.noValidate\"\r\n [attr.formtarget]=\"form?.target\"\r\n [attr.formenctype]=\"form?.enctype\"\r\n\r\n [attr.name]=\"name\"\r\n [attr.type]=\"type\"\r\n [attr.value]=\"value\"\r\n\r\n [attr.data-style]=\"progress.animation\"\r\n [attr.data-vertical]=\"(progress.direction === 'vertical')?'':null\"\r\n [attr.data-horizontal]=\"(progress.direction === 'horizontal')?'':null\"\r\n [attr.data-perspective]=\"status.perspective\"\r\n (click)=\"click()\"\r\n [ngClass]=\"[(loading)?'state-loading':'',statusClass,(status.isBorderRadius)?'radius':'']\"\r\n [ngStyle]=\"styles.button\">\r\n <!-- perspective -->\r\n <ng-container *ngIf=\"status.perspective === ''\">\r\n <span class=\"progress-wrap\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </span>\r\n </ng-container>\r\n <!-- not perspective -->\r\n <ng-container *ngIf=\"status.perspective === null\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </ng-container>\r\n</button>\r\n<!-- template -->\r\n<ng-template #content>\r\n <span class=\"content\" [ngStyle]=\"styles.content\">\r\n <div class=\"success\" [style.color]=\"design.successIconColor\" [innerHTML]=\"'&#xe600;'\"></div>\r\n <ng-content></ng-content>\r\n <div class=\"error\" [style.color]=\"design.errorIconColor\" [innerHTML]=\"'&#xe601;'\"></div>\r\n </span>\r\n <span class=\"progress\"\r\n [style.background]=\"design.progressBackground\"\r\n [style.borderRadius]=\"(status.isBorderRadius)?design.radius+'px':null\">\r\n <span class=\"progress-inner\"\r\n [ngStyle]=\"styles.progressInner\"\r\n [ngClass]=\"{'notransition':noTransition}\"\r\n ></span>\r\n </span>\r\n</ng-template>\r\n", providers: [ProgressButtonService], styles: ["", "*{box-sizing:border-box}@font-face{font-weight:400;font-style:normal;font-family:icomoon;src:url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAPYAA0AAAAABbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABoAAAAcadpakEdERUYAAAFMAAAAHwAAACAAMwAGT1MvMgAAAWwAAAA8AAAAYA6xAoFjbWFwAAABqAAAAEoAAAFKy/Ug/2dhc3AAAAH0AAAACAAAAAgAAAAQZ2x5ZgAAAfwAAABaAAAAfGYDQ4loZWFkAAACWAAAAC0AAAA2Fk6lo2hoZWEAAAKIAAAAHAAAACQHwgPGaG10eAAAAqQAAAAWAAAAFgeVAABsb2NhAAACvAAAAA4AAAAOAEYAHG1heHAAAALMAAAAGAAAACAACAAObmFtZQAAAuQAAADNAAABifyQVWlwb3N0AAADtAAAACMAAAA+PkKaWnicY2BgYGQAgjO2i86D6HPnoh/AaABS9wgqAAB4nGNgZGBg4ANiCQYQYGJgZGBmYAWSLGAeAwAEmwA6AHicY2BmDmWcwMDKwMA0k+kMAwNDP4RmfM1gzMjJgAoYBdAEGBwYFJ4xMh/4D4TMB4A8VKDAwAgAYB4MOXicY2BgYGaAYBkGRgYQcAHyGMF8FgYNIM0GpBkZmBgUnjH+/w/kKzxj+P///2MpFqh6IGBkY4BzGJmABBMDKmCEWDGcAQC49wjcAAAAAQAB//8AD3icVYqxDYAwEAPtfxCKolQUTICYgS6jZacs8Dulf/EKosDFyZYPxBcBbsHcC7RiBfYt8aIZmzTzKtX8bQgvoKYNGThDSwz5SFTzwdJ9+OgsEzEn/gcekeAiHQAAeJxjYGRgYADimev2psfz23xl4GZhAIGbMwwmI9MsDMwNQIqDgQnEAwAiqwkVAAAAeJxjYGRgYD7w/wADAwsDCABJRgZUwAoATFcCkgAAAAAAAAAAAVUAAAIAAAAEAAAAAEAAAAAAAAAAAAAAAAgAHAA+AAB4nGNgZGBgYGPgYQDRDAxMDGgAAAJGABd4nHXOMQ6CMBgF4IeARk2MgzGOjE6GI7ghg4sDcRShISTQJlUS2T2Co2fwGJ7LB/kdadL264PXFMACHzjohoMJluIRvRW79F7s0Wexjzke4jHzl3iGFb5sOd6UyaK/ofOI3ohdOhR79EHsY42LeMz8KZ7xNW+UyGBQcxpooMxMbQxxgkKBBhVSWB5V0VQpMfT/UJ7wHosbv3d5wBfuOJEoeyuNDsJdONyN2NV9P8Wde87+FS3XuG8c/41IaWXTu8qDaxvEmTl29R+0pjoZAAAAeJxjYGLAD9iAmJGBiYGZkYmRmb00L9PVzMAAShsCACiABHMA) format(\"woff\")}.progress-button{position:relative;display:inline-block;padding:0;outline:none;border:none;background:\"#222222\";color:\"#FFFFFF\";letter-spacing:1px;font-size:1em;line-height:1.4;cursor:pointer;transition:background-color .2s ease}.progress-button[disabled],.progress-button[disabled].state-loading{cursor:default}.progress-button .content{position:relative;display:block;padding:20px 60px;transition:background-color .2s ease}.progress-button .content .error,.progress-button .content .success{position:absolute;right:20px;font-family:icomoon,sans-serif;opacity:0;transition:opacity .3s .3s;line-height:1;top:0;height:100%;align-items:center;display:flex}.progress-button .content .error,.progress-button .content .success{color:\"#ffffff\"}.progress-button.state-error .content .error,.progress-button.state-success .content .success{opacity:1}.progress-button .progress{background:\"#000000\"}.progress-button .progress-inner{position:absolute;left:0;background:\"#555555\"}.progress-button .progress-inner.notransition{transition:none!important}.progress-button[data-horizontal] .progress-inner{top:0;width:0;height:100%;transition:width .3s,opacity .3s}.progress-button[data-vertical] .progress-inner{bottom:0;width:100%;height:0;transition:height .3s,opacity .3s}.progress-button[data-perspective]{position:relative;display:inline-block;padding:0;background:transparent;perspective:900px}.progress-button[data-perspective] .content{padding:20px 60px;background:\"#222222\"}.progress-button[data-perspective] .progress-wrap{display:block;transition:transform .2s;transform-style:preserve-3d}.progress-button[data-perspective] .content,.progress-button[data-perspective] .progress{outline:1px solid transparent}", ".progress-button{transition:background .2s}.progress-button[data-style=fill][data-horizontal],.progress-button[data-style=fill][data-vertical]{overflow:hidden}.progress-button[data-style=fill][data-horizontal] .content,.progress-button[data-style=fill][data-vertical] .content{z-index:10;transition:transform .3s}.progress-button[data-style=fill][data-horizontal] .content .error,.progress-button[data-style=fill][data-horizontal] .content .success,.progress-button[data-style=fill][data-vertical] .content .error,.progress-button[data-style=fill][data-vertical] .content .success{top:100%;right:auto;left:50%;transition:opacity .3s;transform:translateX(-50%)}.progress-button[data-style=fill][data-horizontal].state-error .content,.progress-button[data-style=fill][data-horizontal].state-success .content,.progress-button[data-style=fill][data-vertical].state-error .content,.progress-button[data-style=fill][data-vertical].state-success .content{transform:translateY(-100%)}.progress-button[data-style=shrink]{overflow:hidden;transition:transform .2s,border-radius .2s linear}.progress-button[data-style=shrink][data-horizontal] .content,.progress-button[data-style=shrink][data-vertical] .content{transition:opacity .3s,transform .3s,border-radius .3s linear,padding .3s linear}.progress-button[data-style=shrink][data-horizontal] .content .error,.progress-button[data-style=shrink][data-horizontal] .content .success,.progress-button[data-style=shrink][data-vertical] .content .error,.progress-button[data-style=shrink][data-vertical] .content .success{top:100%;right:auto;left:50%;transition:opacity .3s,border-radius .3s linear;transform:translateX(-50%)}.progress-button[data-style=shrink][data-horizontal].state-loading,.progress-button[data-style=shrink][data-vertical].state-loading{transform:scaleY(.3)}.progress-button[data-style=shrink][data-horizontal].state-loading .content,.progress-button[data-style=shrink][data-vertical].state-loading .content{opacity:0}.progress-button[data-style=shrink][data-horizontal].state-error .content,.progress-button[data-style=shrink][data-horizontal].state-success .content,.progress-button[data-style=shrink][data-vertical].state-error .content,.progress-button[data-style=shrink][data-vertical].state-success .content{transform:translateY(-100%)}.progress-button[data-style=shrink][data-vertical].state-loading{transform:scaleX(.1)}.progress-button[data-style=shrink].radius.state-loading{transform:scale3d(.3,.3,1)}.progress-button[data-style=shrink].radius.state-loading .content{padding:20px 120px}.progress-button[data-style=shrink].radius[data-vertical].state-loading{transform:scale3d(.3,.3,1) rotate(-90deg)}.progress-button[data-style=shrink].radius[data-vertical].state-loading .content{padding:20px 60px}.progress-button[data-style=rotate-angle-bottom] .progress{position:absolute;top:100%;left:0;width:100%;height:20px;box-shadow:0 -1px 0 rgba(0,0,0,.3);transform:rotateX(-90deg);transform-origin:50% 0}.progress-button[data-style=rotate-angle-bottom].state-loading .progress-wrap{transform:rotateX(45deg)}.progress-button[data-style=rotate-angle-top] .progress{position:absolute;bottom:100%;left:0;width:100%;height:20px;box-shadow:0 -1px 0 rgba(0,0,0,.3);transform:rotateX(90deg);transform-origin:50% 100%}.progress-button[data-style=rotate-angle-top].state-loading .progress-wrap{transform:rotateX(-45deg)}.progress-button[data-style=rotate-angle-left] .progress{position:absolute;top:0;right:100%;width:20px;height:100%;box-shadow:1px 0 0 rgba(0,0,0,.3);transform:rotateY(-90deg);transform-origin:100% 50%}.progress-button[data-style=rotate-angle-left].state-loading .progress-wrap{transform:rotateY(45deg)}.progress-button[data-style=rotate-angle-right] .progress{position:absolute;top:0;left:100%;width:20px;height:100%;box-shadow:-1px 0 0 rgba(0,0,0,.3);transform:rotateY(90deg);transform-origin:0 50%}.progress-button[data-style=rotate-angle-right].state-loading .progress-wrap{transform:rotateY(-45deg)}.progress-button[data-style=rotate-side-down] .progress{position:absolute;top:100%;left:0;width:100%;height:20px;transform:rotateX(-90deg);transform-origin:50% 0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=rotate-side-down].state-loading .progress-wrap{transform:rotateX(90deg) translateZ(10px)}.progress-button[data-style=rotate-side-up] .progress{position:absolute;bottom:100%;left:0;width:100%;height:20px;transform:rotateX(90deg);transform-origin:50% 100%;-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=rotate-side-up].state-loading .progress-wrap{transform:rotateX(-90deg) translateZ(10px)}.progress-button[data-style=rotate-side-left] .progress{position:absolute;top:0;left:0;width:20px;height:100%;transform:rotateY(90deg);transform-origin:0 50%}.progress-button[data-style=rotate-side-left] .progress-wrap{transform-origin:0 50%}.progress-button[data-style=rotate-side-left].state-loading .progress-wrap{transform:translateX(50%) rotateY(90deg) translateZ(10px)}.progress-button[data-style=rotate-side-right] .progress{position:absolute;top:0;left:100%;width:20px;height:100%;transform:rotateY(90deg);transform-origin:0 50%}.progress-button[data-style=rotate-side-right] .progress-wrap{transform-origin:100% 50%}.progress-button[data-style=rotate-side-right].state-loading .progress-wrap{transform:translateX(-50%) rotateY(-90deg) translateZ(10px)}.progress-button[data-style=rotate-back] .progress{position:absolute;top:100%;left:0;width:100%;height:100%;transform:rotateX(-180deg);transform-origin:50% 0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=rotate-back] .progress-wrap{transition-timing-function:ease-out}.progress-button[data-style=rotate-back] .content{-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=rotate-back].state-loading .progress-wrap{transform:rotateX(180deg) scaleX(.6) scaleY(.3)}.progress-button[data-style=flip-open] .progress{position:absolute;top:auto;bottom:0;left:0;width:100%;height:30%}.progress-button[data-style=flip-open] .content{z-index:10;transition:transform .2s,background .2s;transform-origin:50% 0}.progress-button[data-style=flip-open].state-loading .content{transform:rotateX(45deg)}.progress-button[data-style=flip-open].radius .progress{height:100%;opacity:0;transition:opacity .2s ease;overflow:hidden}.progress-button[data-style=flip-open].radius.state-loading .progress{opacity:1}.progress-button[data-style=slide-down]{padding:0;overflow:visible;-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=slide-down] .progress{position:absolute;top:auto;bottom:0;left:0;width:100%;height:10px;transition:transform .2s,opacity .2s}.progress-button[data-style=slide-down] .content{z-index:10;padding:20px 60px;background:\"#222222\"}.progress-button[data-style=slide-down].state-loading .progress{transform:translateY(10px)}.progress-button[data-style=slide-down].radius .progress,.progress-button[data-style=slide-down].radius .progress-inner{height:100%;opacity:0;overflow:hidden}.progress-button[data-style=slide-down].radius.state-loading .progress{transform:translateY(5px)}.progress-button[data-style=slide-down].radius.state-loading .progress,.progress-button[data-style=slide-down].radius.state-loading .progress-inner{opacity:1}.progress-button[data-style=move-up]{padding:0;overflow:visible;-webkit-backface-visibility:hidden;backface-visibility:hidden}.progress-button[data-style=move-up] .progress{position:absolute;top:auto;bottom:0;left:0;width:100%;height:15px;transition:opacity .2s}.progress-button[data-style=move-up] .content{z-index:10;padding:20px 60px;background:\"#222222\";transition:transform .2s,opacity .2s}.progress-button[data-style=move-up].state-loading .content{transform:translateY(-15px)}.progress-button[data-style=move-up].radius .progress,.progress-button[data-style=move-up].radius .progress-inner{height:100%;opacity:0;overflow:hidden}.progress-button[data-style=move-up].radius.state-loading .content{transform:translateY(-5px)}.progress-button[data-style=move-up].radius.state-loading .progress,.progress-button[data-style=move-up].radius.state-loading .progress-inner{opacity:1}.progress-button[data-style=top-line]{transition:background .2s;overflow:hidden}.progress-button[data-style=top-line] .progress-inner{height:10px}.progress-button[data-style=lateral-lines]{overflow:hidden}.progress-button[data-style=lateral-lines] .progress-inner{width:100%;border-left:10px solid \"#555555\";border-bottom-color:\"#555555\";border-right:10px solid \"#555555\";border-top-color:\"#555555\";background:transparent}"] },] } ]; /** @nocollapse */ ProgressButtonComponent.ctorParameters = () => [ { type: ProgressButtonService } ]; ProgressButtonComponent.propDecorators = { name: [{ type: Input }], value: [{ type: Input }], type: [{ type: Input }], autofocus: [{ type: Input }], disabled: [{ type: Input }], form: [{ type: Input }], action: [{ type: Output }], progress: [{ type: Input }], design: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb2dyZXNzLWJ1dHRvbi9zcmMvbGliL3Byb2dyZXNzLWJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVE3RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBV2hFLE1BQU0sT0FBTyx1QkFBdUI7SUFxQ2xDLFlBQW9CLE9BQThCO1FBQTlCLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBbkNsRCxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBVWpCOztXQUVHO1FBQ00sU0FBSSxHQUF1QixRQUFRLENBQUM7UUFDN0M7O1dBRUc7UUFDTSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCOztXQUVHO1FBQ00sYUFBUSxHQUFHLElBQUksQ0FBQztRQU16Qjs7V0FFRztRQUNPLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBcUJ0Qzs7V0FFRztRQUNILFVBQUssR0FBRyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFFRjs7V0FFRztRQUNILGlCQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQztRQUVGOzs7O1dBSUc7UUFDSCxpQkFBWSxHQUFHLENBQUMsTUFBNEIsRUFBc0IsRUFBRTtZQUNsRSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDckIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNwQixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNWLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBMURBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQTRDRDs7O09BR0c7SUFDSCxJQUNJLFFBQVEsQ0FBQyxRQUE0QjtRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDSSxNQUFNLENBQUMsTUFBNEI7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQzs7O1lBeklGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQiwrakVBQStDO2dCQUsvQyxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzs7YUFDbkM7Ozs7WUFWTyxxQkFBcUI7OzttQkFxQjFCLEtBQUs7b0JBSUwsS0FBSzttQkFJTCxLQUFLO3dCQUlMLEtBQUs7dUJBSUwsS0FBSzttQkFJTCxLQUFLO3FCQUtMLE1BQU07dUJBbUVOLEtBQUs7cUJBZ0JMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFByb2dyZXNzQnV0dG9uRGVzaWduLFxyXG4gIFByb2dyZXNzQnV0dG9uRm9ybSxcclxuICBQcm9ncmVzc0J1dHRvblN0YXR1cyxcclxuICBQcm9ncmVzc0J1dHRvblR5cGUsXHJcbiAgUHJvZ3Jlc3NCdXR0b25EYXRhLCBQcm9ncmVzc0J1dHRvbkRhdGFTdGF0dXMsIFByb2dyZXNzQnV0dG9uU3R5bGVzXHJcbn0gZnJvbSAnLi9wcm9ncmVzcy1idXR0b24udHlwZXMnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1Byb2dyZXNzQnV0dG9uU2VydmljZX0gZnJvbSAnLi9wcm9ncmVzcy1idXR0b24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3lkZC1wcm9ncmVzcy1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vcHJvZ3Jlc3MtYnV0dG9uLmNvbXBvbmVudC52YXJzLnNjc3MnLFxyXG4gICAgJy4vcHJvZ3Jlc3MtYnV0dG9uLmNvbXBvbmVudC5zY3NzJyxcclxuICAgICcuL3Byb2dyZXNzLWJ1dHRvbi5jb21wb25lbnQuc3R5bGVzLnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtQcm9ncmVzc0J1dHRvblNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0J1dHRvbkNvbXBvbmVudCB7XHJcblxyXG4gIHByb2dyZXNzVmFsdWUgPSAwO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBub1RyYW5zaXRpb24gPSBmYWxzZTtcclxuICBzdGF0dXNDbGFzcyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgYSBuYW1lIGZvciB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmllcyBhbiBpbml0aWFsIHZhbHVlIGZvciB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgdHlwZTogUHJvZ3Jlc3NCdXR0b25UeXBlID0gJ2J1dHRvbic7XHJcbiAgLyoqXHJcbiAgICogU3BlY2lmaWVzIHRoYXQgYSBidXR0b24gc2hvdWxkIGF1dG9tYXRpY2FsbHkgZ2V0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHNcclxuICAgKi9cclxuICBASW5wdXQoKSBhdXRvZm9jdXMgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmllcyB0aGF0IGEgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gbnVsbDtcclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgZm9ybSBwYXJhbWV0ZXJzIGZvciB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQElucHV0KCkgZm9ybTogUHJvZ3Jlc3NCdXR0b25Gb3JtO1xyXG5cclxuICAvKipcclxuICAgKiAgRmlyZXMgb24gYSBtb3VzZSBjbGljayBvbiB0aGUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogUHJvZ3Jlc3NCdXR0b25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnByb2dyZXNzID0gdGhpcy5zZXJ2aWNlLnByb2dyZXNzO1xyXG4gICAgdGhpcy5kZXNpZ24gPSB0aGlzLnNlcnZpY2UuZGVzaWduO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIHByb2dyZXNzIGRhdGFcclxuICAgKi9cclxuICBnZXQgc3RhdHVzKCk6IFByb2dyZXNzQnV0dG9uRGF0YVN0YXR1cyB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnN0YXR1cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBzdHlsZXMgb2YgdGhlIGJ1dHRvbiBhbmQgaXRzIGNvbXBvbmVudHNcclxuICAgKi9cclxuICBnZXQgc3R5bGVzKCk6IFByb2dyZXNzQnV0dG9uU3R5bGVzIHtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2Uuc3R5bGVzKHRoaXMucHJvZ3Jlc3NWYWx1ZSwgdGhpcy5zdGF0dXNDbGFzcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGNsaWNrIGFjdGlvblxyXG4gICAqL1xyXG4gIGNsaWNrID0gKCkgPT4ge1xyXG4gICAgdGhpcy5hY3Rpb24uZW1pdCh0aGlzKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBJbml0IHRoZSBwcm9ncmVzcyBjb21wb25lbnRcclxuICAgKi9cclxuICBwcm9ncmVzc0luaXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vVHJhbnNpdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gMDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBwcm9ncmVzcyBhbmltYXRpb25cclxuICAgKiBAcGFyYW0gc3RhdHVzIFByb2dyZXNzQnV0dG9uU3RhdHVzIFN0YXRlIG9mIHN0b3AgKGVycm9yLCBzdWNjZXNzKVxyXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZSBBbiBvYnNlcnZhYmxlIHdpdGggYWZ0ZXItaW5pdCBhbmQgY29tcGxldGUgc3RlcHNcclxuICAgKi9cclxuICBwcm9ncmVzc1N0b3AgPSAoc3RhdHVzOiBQcm9ncmVzc0J1dHRvblN0YXR1cyk6IE9ic2VydmFibGU8c3RyaW5nPiA9PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIG9ic2VydmVyLm5leHQoJ2JlZm9yZS1pbml0Jyk7XHJcbiAgICAgIGNvbnN0IHRpbTEgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm5vVHJhbnNpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YXR1c0NsYXNzID0gKCdzdGF0ZS0nICsgc3RhdHVzKTtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCdhZnRlci1pbml0Jyk7XHJcbiAgICAgICAgY29uc3QgdGltMiA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNDbGFzcyA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IG51bGw7XHJcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbTEpO1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbTIpO1xyXG4gICAgICAgIH0sIHRoaXMucHJvZ3Jlc3Muc3RhdHVzVGltZSk7XHJcbiAgICAgIH0sIDMwMCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBQcm9ncmVzcyBCdXR0b24gRGF0YVxyXG4gICAqIEBwYXJhbSBwcm9ncmVzcyBQcm9ncmVzc0J1dHRvbkRhdGEgVGhlIFByb2dyZXNzIEJ1dHRvbiBEYXRhXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgcHJvZ3Jlc3MocHJvZ3Jlc3M6IFByb2dyZXNzQnV0dG9uRGF0YSkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgUHJvZ3Jlc3MgQnV0dG9uIERhdGFcclxuICAgKi9cclxuICBnZXQgcHJvZ3Jlc3MoKTogUHJvZ3Jlc3NCdXR0b25EYXRhIHtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UucHJvZ3Jlc3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9ncmVzcyBCdXR0b24gRGVzaWduXHJcbiAgICogQHBhcmFtIGRlc2lnbiBQcm9ncmVzc0J1dHRvbkRlc2lnbiBUaGUgUHJvZ3Jlc3MgQnV0dG9uIERlc2lnblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRlc2lnbihkZXNpZ246IFByb2dyZXNzQnV0dG9uRGVzaWduKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZGVzaWduID0gZGVzaWduO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIFByb2dyZXNzIEJ1dHRvbiBEZXNpZ25cclxuICAgKi9cclxuICBnZXQgZGVzaWduKCk6IFByb2dyZXNzQnV0dG9uRGVzaWduIHtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZGVzaWduO1xyXG4gIH1cclxuXHJcbn1cclxuIl19