UNPKG

ng-devui

Version:

DevUI components based on Angular

57 lines 25.8 kB
import { ChangeDetectorRef, Component, ElementRef, HostBinding, Input, Renderer2, TemplateRef } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class FormControlComponent { get extraInfoTemplate() { return this.extraInfo instanceof TemplateRef ? this.extraInfo : null; } get status() { return !!this.feedbackStatus; } get suffix() { return !!this.suffixTemplate; } /** * @desc Compatible with z-index of components that include dropdown menu, will be remove. * */ get dropdownOpen() { return !!this.elementRef.nativeElement.querySelector('.devui-dropdown-origin-open'); } constructor(elementRef, renderer, cdr) { this.elementRef = elementRef; this.cdr = cdr; renderer.addClass(elementRef.nativeElement, 'devui-form-controls'); } ngOnInit() { } updateErrorMessage(message) { this.errorMessage = message; this.cdr.detectChanges(); } updateFeedbackStatus(status) { this.feedbackStatus = status; this.cdr.detectChanges(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormControlComponent, selector: "d-form-control", inputs: { extraInfo: "extraInfo", feedbackStatus: "feedbackStatus", suffixTemplate: "suffixTemplate" }, host: { properties: { "class.devui-form-control-has-feedback": "this.status", "class.devui-form-control-has-suffix": "this.suffix", "class.devui-control-has-open-dropdown": "this.dropdownOpen" } }, ngImport: i0, template: "<div class=\"devui-form-control-container\">\n <ng-content></ng-content>\n <span *ngIf=\"suffixTemplate\" class=\"devui-form-item-suffix suffix\">\n <ng-template [ngTemplateOutlet]=\"suffixTemplate\"></ng-template>\n </span>\n\n <span [attr.class]=\"'devui-form-item-icon devui-form-item-icon-' + feedbackStatus\" *ngIf=\"feedbackStatus\">\n <svg *ngIf=\"feedbackStatus === 'error'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <polygon\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\n ></polygon>\n </g>\n </svg>\n <svg *ngIf=\"feedbackStatus === 'success'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <polygon\n points=\"6.53553391 9.77817459 12.1923882 4.12132034 13.6066017 5.53553391 6.53553391 12.6066017 3 9.07106781 4.41421356 7.65685425 6.53553391 9.77817459\"\n ></polygon>\n </g>\n </svg>\n <svg *ngIf=\"feedbackStatus === 'pending'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g id=\"loading\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n d=\"M8,0 C12.4,0 16,3.6 16,8 C16,12.4 12.4,16 8,16 C3.6,16 0,12.4 0,8 C0,3.6 3.6,0 8,0 Z M8,1 C4.15,1 1,4.15 1,8 C1,11.85 4.15,15 8,15 C11.85,15 15,11.85 15,8 C15,4.15 11.85,1 8,1 Z\"\n fill-rule=\"nonzero\"\n ></path>\n <path d=\"M8,0 C12.4,0 16,3.6 16,8 L15,8 C15,4.15 11.85,1 8,1 L8,0 Z\" fill-rule=\"nonzero\"></path>\n </g>\n </svg>\n </span>\n</div>\n<div class=\"devui-form-control-inner-content\">\n <div class=\"devui-form-message\" *ngIf=\"errorMessage\">\n <span class=\"devui-form-message-text\">\n <span>\n {{ errorMessage }}\n </span>\n </span>\n </div>\n <div *ngIf=\"extraInfo\" class=\"devui-form-control-extra-info\">\n <ng-template [ngTemplateOutlet]=\"extraInfoTemplate || defaultTemplate\"> </ng-template>\n <ng-template #defaultTemplate>\n {{ extraInfo }}\n </ng-template>\n </div>\n</div>\n", styles: [".mr-content-spacing{margin-right:4px}.padding-element-spacing{padding:16px!important}.ml-element-spacing{margin-left:16px}.mr-element-spacing{margin-right:16px}.mt-element-spacing{margin-top:16px}.mb-element-spacing{margin-bottom:16px}.mlr-element-spacing{margin-left:16px;margin-right:16px}.mtb-element-spacing{margin-top:16px;margin-bottom:16px}.m-element-spacing{margin:16px}.grid{letter-spacing:-.31em;*letter-spacing: normal;word-spacing:-.43em}.u,.u-1,.u-1-2,.u-1-3,.u-2-3,.u-1-4,.u-3-4,.u-1-5,.u-2-5,.u-3-5,.u-4-5,.u-1-6,.u-5-6,.u-1-8,.u-3-8,.u-5-8,.u-7-8,.u-1-12,.u-5-12,.u-7-12,.u-11-12,.u-1-24,.u-5-24,.u-7-24,.u-11-24,.u-13-24,.u-17-24,.u-19-24,.u-23-24{display:inline-block;*display: inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top}.u-1{display:block}.u-1-2{width:49.99999%}.u-1-3{width:33.33333%}.u-2-3{width:66.66666%}.u-1-4{width:24.99999%}.u-3-4{width:74.99999%}.u-1-5{width:19.99999%}.u-2-5{width:39.99999%}.u-3-5{width:59.99999%}.u-4-5{width:79.99999%}.u-1-6{width:16.64999%}.u-5-6{width:83.33333%}.u-1-8{width:12.49999%}.u-3-8{width:37.49999%}.u-5-8{width:62.49999%}.u-7-8{width:87.49999%}.u-1-12{width:8.33333%}.u-5-12{width:41.66666%}.u-7-12{width:58.33333%}.u-11-12{width:91.66666%}.u-1-24{width:4.16666%}.u-5-24{width:20.83333%}.u-7-24{width:29.16666%}.u-11-24{width:45.83333%}.u-13-24{width:54.16666%}.u-17-24{width:70.83333%}.u-19-24{width:79.16666%}.u-23-24{width:95.83333%}.u-content{padding:0 0 10px 10px}.devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-form-horizontal :host.devui-form-controls{flex:1 1 auto;margin-left:16px}.devui-form-vertical :host.devui-form-controls{flex:1 1 auto}.devui-form-columns :host.devui-form-controls{flex:1 1 auto;margin-right:24px}.devui-form-control-extra-info{font-size:var(--devui-font-size, 12px);color:var(--devui-aide-text, #595959);min-height:20px;line-height:1.5;text-align:justify}.devui-form-control-inner-content{line-height:1}.devui-form-message{display:inline-block;font-size:var(--devui-font-size, 12px);min-height:20px;position:relative;left:1px;color:var(--devui-danger, #e02128)}.devui-form-message .devui-form-message-text{display:inline-flex;align-items:center;line-height:1.5;border-top:1px solid transparent;border-bottom:1px solid transparent}.devui-form-message .devui-form-message-text .devui-form-message-svg{line-height:1}.devui-form-message .devui-icon.devui-icon-error{margin-right:4px}.devui-form-message .devui-icon.devui-icon-error>g>path{fill:var(--devui-danger, #e02128)}.devui-form-message .devui-icon.devui-icon-error>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-form-item-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:16px;text-align:center;visibility:visible;pointer-events:none;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}.devui-form-item-icon.devui-form-item-icon-error svg circle{fill:var(--devui-danger, #e02128)}.devui-form-item-icon.devui-form-item-icon-error svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form-item-icon.devui-form-item-icon-success svg circle{fill:var(--devui-success, #058358)}.devui-form-item-icon.devui-form-item-icon-success svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form-item-icon.devui-form-item-icon-pending svg{animation:devui-loading-keyframes 1s infinite linear}.devui-form-item-icon.devui-form-item-icon-pending svg path{fill:var(--devui-brand, #0a59f7)}:host.devui-form-control-has-feedback .devui-form-control-container,:host.devui-form-control-has-suffix .devui-form-control-container{position:relative}:host.devui-form-control-has-suffix .devui-form-item-suffix{position:absolute;top:50%;right:0;z-index:1;width:32px;height:16px;text-align:center;visibility:visible;pointer-events:auto;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}:host.devui-form-control-has-suffix .suffix{cursor:pointer}:host.devui-form-control-has-feedback.devui-form-control-has-suffix .devui-form-item-icon{right:32px}@keyframes devui-loading-keyframes{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, decorators: [{ type: Component, args: [{ selector: 'd-form-control', preserveWhitespaces: false, template: "<div class=\"devui-form-control-container\">\n <ng-content></ng-content>\n <span *ngIf=\"suffixTemplate\" class=\"devui-form-item-suffix suffix\">\n <ng-template [ngTemplateOutlet]=\"suffixTemplate\"></ng-template>\n </span>\n\n <span [attr.class]=\"'devui-form-item-icon devui-form-item-icon-' + feedbackStatus\" *ngIf=\"feedbackStatus\">\n <svg *ngIf=\"feedbackStatus === 'error'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <polygon\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\n ></polygon>\n </g>\n </svg>\n <svg *ngIf=\"feedbackStatus === 'success'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <circle cx=\"8\" cy=\"8\" r=\"8\"></circle>\n <polygon\n points=\"6.53553391 9.77817459 12.1923882 4.12132034 13.6066017 5.53553391 6.53553391 12.6066017 3 9.07106781 4.41421356 7.65685425 6.53553391 9.77817459\"\n ></polygon>\n </g>\n </svg>\n <svg *ngIf=\"feedbackStatus === 'pending'\" width=\"14px\" height=\"14px\" viewBox=\"0 0 16 16\">\n <g id=\"loading\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <path\n d=\"M8,0 C12.4,0 16,3.6 16,8 C16,12.4 12.4,16 8,16 C3.6,16 0,12.4 0,8 C0,3.6 3.6,0 8,0 Z M8,1 C4.15,1 1,4.15 1,8 C1,11.85 4.15,15 8,15 C11.85,15 15,11.85 15,8 C15,4.15 11.85,1 8,1 Z\"\n fill-rule=\"nonzero\"\n ></path>\n <path d=\"M8,0 C12.4,0 16,3.6 16,8 L15,8 C15,4.15 11.85,1 8,1 L8,0 Z\" fill-rule=\"nonzero\"></path>\n </g>\n </svg>\n </span>\n</div>\n<div class=\"devui-form-control-inner-content\">\n <div class=\"devui-form-message\" *ngIf=\"errorMessage\">\n <span class=\"devui-form-message-text\">\n <span>\n {{ errorMessage }}\n </span>\n </span>\n </div>\n <div *ngIf=\"extraInfo\" class=\"devui-form-control-extra-info\">\n <ng-template [ngTemplateOutlet]=\"extraInfoTemplate || defaultTemplate\"> </ng-template>\n <ng-template #defaultTemplate>\n {{ extraInfo }}\n </ng-template>\n </div>\n</div>\n", styles: [".mr-content-spacing{margin-right:4px}.padding-element-spacing{padding:16px!important}.ml-element-spacing{margin-left:16px}.mr-element-spacing{margin-right:16px}.mt-element-spacing{margin-top:16px}.mb-element-spacing{margin-bottom:16px}.mlr-element-spacing{margin-left:16px;margin-right:16px}.mtb-element-spacing{margin-top:16px;margin-bottom:16px}.m-element-spacing{margin:16px}.grid{letter-spacing:-.31em;*letter-spacing: normal;word-spacing:-.43em}.u,.u-1,.u-1-2,.u-1-3,.u-2-3,.u-1-4,.u-3-4,.u-1-5,.u-2-5,.u-3-5,.u-4-5,.u-1-6,.u-5-6,.u-1-8,.u-3-8,.u-5-8,.u-7-8,.u-1-12,.u-5-12,.u-7-12,.u-11-12,.u-1-24,.u-5-24,.u-7-24,.u-11-24,.u-13-24,.u-17-24,.u-19-24,.u-23-24{display:inline-block;*display: inline;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top}.u-1{display:block}.u-1-2{width:49.99999%}.u-1-3{width:33.33333%}.u-2-3{width:66.66666%}.u-1-4{width:24.99999%}.u-3-4{width:74.99999%}.u-1-5{width:19.99999%}.u-2-5{width:39.99999%}.u-3-5{width:59.99999%}.u-4-5{width:79.99999%}.u-1-6{width:16.64999%}.u-5-6{width:83.33333%}.u-1-8{width:12.49999%}.u-3-8{width:37.49999%}.u-5-8{width:62.49999%}.u-7-8{width:87.49999%}.u-1-12{width:8.33333%}.u-5-12{width:41.66666%}.u-7-12{width:58.33333%}.u-11-12{width:91.66666%}.u-1-24{width:4.16666%}.u-5-24{width:20.83333%}.u-7-24{width:29.16666%}.u-11-24{width:45.83333%}.u-13-24{width:54.16666%}.u-17-24{width:70.83333%}.u-19-24{width:79.16666%}.u-23-24{width:95.83333%}.u-content{padding:0 0 10px 10px}.devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-form-horizontal :host.devui-form-controls{flex:1 1 auto;margin-left:16px}.devui-form-vertical :host.devui-form-controls{flex:1 1 auto}.devui-form-columns :host.devui-form-controls{flex:1 1 auto;margin-right:24px}.devui-form-control-extra-info{font-size:var(--devui-font-size, 12px);color:var(--devui-aide-text, #595959);min-height:20px;line-height:1.5;text-align:justify}.devui-form-control-inner-content{line-height:1}.devui-form-message{display:inline-block;font-size:var(--devui-font-size, 12px);min-height:20px;position:relative;left:1px;color:var(--devui-danger, #e02128)}.devui-form-message .devui-form-message-text{display:inline-flex;align-items:center;line-height:1.5;border-top:1px solid transparent;border-bottom:1px solid transparent}.devui-form-message .devui-form-message-text .devui-form-message-svg{line-height:1}.devui-form-message .devui-icon.devui-icon-error{margin-right:4px}.devui-form-message .devui-icon.devui-icon-error>g>path{fill:var(--devui-danger, #e02128)}.devui-form-message .devui-icon.devui-icon-error>g>circle{fill:var(--devui-light-text, #ffffff)}.devui-form-item-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:16px;text-align:center;visibility:visible;pointer-events:none;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}.devui-form-item-icon.devui-form-item-icon-error svg circle{fill:var(--devui-danger, #e02128)}.devui-form-item-icon.devui-form-item-icon-error svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form-item-icon.devui-form-item-icon-success svg circle{fill:var(--devui-success, #058358)}.devui-form-item-icon.devui-form-item-icon-success svg polygon{fill:var(--devui-base-bg, #ffffff)}.devui-form-item-icon.devui-form-item-icon-pending svg{animation:devui-loading-keyframes 1s infinite linear}.devui-form-item-icon.devui-form-item-icon-pending svg path{fill:var(--devui-brand, #0a59f7)}:host.devui-form-control-has-feedback .devui-form-control-container,:host.devui-form-control-has-suffix .devui-form-control-container{position:relative}:host.devui-form-control-has-suffix .devui-form-item-suffix{position:absolute;top:50%;right:0;z-index:1;width:32px;height:16px;text-align:center;visibility:visible;pointer-events:auto;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}:host.devui-form-control-has-suffix .suffix{cursor:pointer}:host.devui-form-control-has-feedback.devui-form-control-has-suffix .devui-form-item-icon{right:32px}@keyframes devui-loading-keyframes{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { extraInfo: [{ type: Input }], feedbackStatus: [{ type: Input }], suffixTemplate: [{ type: Input }], status: [{ type: HostBinding, args: ['class.devui-form-control-has-feedback'] }], suffix: [{ type: HostBinding, args: ['class.devui-form-control-has-suffix'] }], dropdownOpen: [{ type: HostBinding, args: ['class.devui-control-has-open-dropdown'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2Zvcm0vZm9ybS1jb250cm9sLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2RldnVpL2Zvcm0vZm9ybS1jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUzdILE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZFLENBQUM7SUFPRCxJQUEwRCxNQUFNO1FBQzlELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQXdELE1BQU07UUFDNUQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBMEQsWUFBWTtRQUNwRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsWUFBb0IsVUFBc0IsRUFBRSxRQUFtQixFQUFVLEdBQXNCO1FBQTNFLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBK0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDN0YsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFFBQVEsS0FBSSxDQUFDO0lBRU4sa0JBQWtCLENBQUMsT0FBZTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxNQUFpQztRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBekNVLG9CQUFvQjttR0FBcEIsb0JBQW9CLG9XQ1RqQyxrOUVBaURBOzs0RkR4Q2Esb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGdCQUFnQix1QkFHTCxLQUFLO3VJQUdqQixTQUFTO3NCQUFqQixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFb0QsTUFBTTtzQkFBL0QsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBSUksTUFBTTtzQkFBN0QsV0FBVzt1QkFBQyxxQ0FBcUM7Z0JBUVEsWUFBWTtzQkFBckUsV0FBVzt1QkFBQyx1Q0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREZvcm1Db250cm9sU3RhdHVzIH0gZnJvbSAnLi92YWxpZGF0b3ItZGlyZWN0aXZlL3ZhbGlkYXRlLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkLWZvcm0tY29udHJvbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLWNvbnRyb2wuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZXh0cmFJbmZvOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICBnZXQgZXh0cmFJbmZvVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0cmFJbmZvIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYgPyB0aGlzLmV4dHJhSW5mbyA6IG51bGw7XG4gIH1cblxuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgQElucHV0KCkgZmVlZGJhY2tTdGF0dXM6IERGb3JtQ29udHJvbFN0YXR1cyB8IG51bGw7XG5cbiAgQElucHV0KCkgc3VmZml4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWNvbnRyb2wtaGFzLWZlZWRiYWNrJykgZ2V0IHN0YXR1cygpIHtcbiAgICByZXR1cm4gISF0aGlzLmZlZWRiYWNrU3RhdHVzO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1mb3JtLWNvbnRyb2wtaGFzLXN1ZmZpeCcpIGdldCBzdWZmaXgoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdWZmaXhUZW1wbGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzYyBDb21wYXRpYmxlIHdpdGggei1pbmRleCBvZiBjb21wb25lbnRzIHRoYXQgaW5jbHVkZSBkcm9wZG93biBtZW51LCB3aWxsIGJlIHJlbW92ZS5cbiAgICpcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktY29udHJvbC1oYXMtb3Blbi1kcm9wZG93bicpIGdldCBkcm9wZG93bk9wZW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRldnVpLWRyb3Bkb3duLW9yaWdpbi1vcGVuJyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2RldnVpLWZvcm0tY29udHJvbHMnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge31cblxuICBwdWJsaWMgdXBkYXRlRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmVlZGJhY2tTdGF0dXMoc3RhdHVzOiBERm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5mZWVkYmFja1N0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkZXZ1aS1mb3JtLWNvbnRyb2wtY29udGFpbmVyXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPHNwYW4gKm5nSWY9XCJzdWZmaXhUZW1wbGF0ZVwiIGNsYXNzPVwiZGV2dWktZm9ybS1pdGVtLXN1ZmZpeCBzdWZmaXhcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic3VmZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L3NwYW4+XG5cbiAgPHNwYW4gW2F0dHIuY2xhc3NdPVwiJ2RldnVpLWZvcm0taXRlbS1pY29uIGRldnVpLWZvcm0taXRlbS1pY29uLScgKyBmZWVkYmFja1N0YXR1c1wiICpuZ0lmPVwiZmVlZGJhY2tTdGF0dXNcIj5cbiAgICA8c3ZnICpuZ0lmPVwiZmVlZGJhY2tTdGF0dXMgPT09ICdlcnJvcidcIiB3aWR0aD1cIjE0cHhcIiBoZWlnaHQ9XCIxNHB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgPGcgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiOFwiPjwvY2lyY2xlPlxuICAgICAgICA8cG9seWdvblxuICAgICAgICAgIHBvaW50cz1cIjguMDcxMDY3ODEgNi42NTY4NTQyNSAxMC44OTk0OTQ5IDMuODI4NDI3MTIgMTIuMzEzNzA4NSA1LjI0MjY0MDY5IDkuNDg1MjgxMzcgOC4wNzEwNjc4MSAxMi4zMTM3MDg1IDEwLjg5OTQ5NDkgMTAuODk5NDk0OSAxMi4zMTM3MDg1IDguMDcxMDY3ODEgOS40ODUyODEzNyA1LjI0MjY0MDY5IDEyLjMxMzcwODUgMy44Mjg0MjcxMiAxMC44OTk0OTQ5IDYuNjU2ODU0MjUgOC4wNzEwNjc4MSAzLjgyODQyNzEyIDUuMjQyNjQwNjkgNS4yNDI2NDA2OSAzLjgyODQyNzEyXCJcbiAgICAgICAgPjwvcG9seWdvbj5cbiAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbiAgICA8c3ZnICpuZ0lmPVwiZmVlZGJhY2tTdGF0dXMgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMTRweFwiIGhlaWdodD1cIjE0cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCI+PC9jaXJjbGU+XG4gICAgICAgIDxwb2x5Z29uXG4gICAgICAgICAgcG9pbnRzPVwiNi41MzU1MzM5MSA5Ljc3ODE3NDU5IDEyLjE5MjM4ODIgNC4xMjEzMjAzNCAxMy42MDY2MDE3IDUuNTM1NTMzOTEgNi41MzU1MzM5MSAxMi42MDY2MDE3IDMgOS4wNzEwNjc4MSA0LjQxNDIxMzU2IDcuNjU2ODU0MjUgNi41MzU1MzM5MSA5Ljc3ODE3NDU5XCJcbiAgICAgICAgPjwvcG9seWdvbj5cbiAgICAgIDwvZz5cbiAgICA8L3N2Zz5cbiAgICA8c3ZnICpuZ0lmPVwiZmVlZGJhY2tTdGF0dXMgPT09ICdwZW5kaW5nJ1wiIHdpZHRoPVwiMTRweFwiIGhlaWdodD1cIjE0cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICA8ZyBpZD1cImxvYWRpbmdcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGQ9XCJNOCwwIEMxMi40LDAgMTYsMy42IDE2LDggQzE2LDEyLjQgMTIuNCwxNiA4LDE2IEMzLjYsMTYgMCwxMi40IDAsOCBDMCwzLjYgMy42LDAgOCwwIFogTTgsMSBDNC4xNSwxIDEsNC4xNSAxLDggQzEsMTEuODUgNC4xNSwxNSA4LDE1IEMxMS44NSwxNSAxNSwxMS44NSAxNSw4IEMxNSw0LjE1IDExLjg1LDEgOCwxIFpcIlxuICAgICAgICAgIGZpbGwtcnVsZT1cIm5vbnplcm9cIlxuICAgICAgICA+PC9wYXRoPlxuICAgICAgICA8cGF0aCBkPVwiTTgsMCBDMTIuNCwwIDE2LDMuNiAxNiw4IEwxNSw4IEMxNSw0LjE1IDExLjg1LDEgOCwxIEw4LDAgWlwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIj48L3BhdGg+XG4gICAgICA8L2c+XG4gICAgPC9zdmc+XG4gIDwvc3Bhbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImRldnVpLWZvcm0tY29udHJvbC1pbm5lci1jb250ZW50XCI+XG4gIDxkaXYgY2xhc3M9XCJkZXZ1aS1mb3JtLW1lc3NhZ2VcIiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGV2dWktZm9ybS1tZXNzYWdlLXRleHRcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXh0cmFJbmZvXCIgY2xhc3M9XCJkZXZ1aS1mb3JtLWNvbnRyb2wtZXh0cmEtaW5mb1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJleHRyYUluZm9UZW1wbGF0ZSB8fCBkZWZhdWx0VGVtcGxhdGVcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgIHt7IGV4dHJhSW5mbyB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=