UNPKG

ngx-slice-kit

Version:

[![npm version](https://badge.fury.io/js/ngx-slice-kit.svg)](https://badge.fury.io/js/ngx-slice-kit)

181 lines 32.5 kB
import { Component, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import * as i0 from "@angular/core"; import * as i1 from "../../core/layout-control/layout-control.service"; import * as i2 from "@angular/common"; export class InputComponent { constructor(layoutControlService, // private themeService: ThemeService, elementRef, renderer) { this.layoutControlService = layoutControlService; this.elementRef = elementRef; this.renderer = renderer; this.req = false; this.type = 'text'; this.autocomplete = 'off'; this.placeholder = ''; this.tabindex = undefined; // @Input() valueMask: string = undefined; this.autofocus = false; this.iconPosition = 'left'; this.small = false; this.error = undefined; this.disabled = false; this.focusEvent = new EventEmitter(); this.blurEvent = new EventEmitter(); this.value = undefined; this.focused = false; this.inputId = this.layoutControlService.generateLayoutElementHash(); } set required(val) { this.req = val === '' || val === true; } get required() { return this.req; } get iconPositionClass() { return this.icon ? `sdk-input__input--icon-${this.iconPosition}` : ''; } emitFocus() { const event = { target: this.elementRef.nativeElement, eventName: 'focus', value: this.value || '' }; this.focused = true; this.focusEvent.emit(event); } emitBlur() { const event = { target: this.elementRef.nativeElement, eventName: 'blur', value: this.value || '' }; this.focused = false; this.blurEvent.emit(event); } get iconUrl() { return this.icon ? `url(${this.icon})` : ''; } focus() { this.focused = true; this.inputElementRef.nativeElement.focus(); } blur() { this.focused = false; this.inputElementRef.nativeElement.blur(); } change(target) { this.writeValue(target.value); this.onTouched(); } onChange(value) { } onTouched() { } writeValue(value) { if (this.type === 'number') { if (value < this.min) { value = this.min; } else if (value > this.max) { value = this.max; } } this.value = value; this.onChange(this.value); } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } setSizeClass() { const availableSizeClasses = ['wide', 'full-width']; if (availableSizeClasses.includes(this.size)) { this.renderer.addClass(this.elementRef.nativeElement, `sdk-input--${this.size}`); } } ngOnInit() { if (!!this.size) { this.setSizeClass(); } } ngAfterContentInit() { if (this.autofocus && !this.disabled) { this.inputElementRef.nativeElement.focus(); } } ngOnDestroy() { this.focusEvent.complete(); this.blurEvent.complete(); } } InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: InputComponent, deps: [{ token: i1.LayoutControlService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: InputComponent, selector: "sdk-input, [sdk-input], [sdkInput]", inputs: { required: "required", type: "type", autocomplete: "autocomplete", placeholder: "placeholder", tabindex: "tabindex", autofocus: "autofocus", min: "min", max: "max", icon: "icon", iconPosition: "iconPosition", small: "small", size: "size", caption: "caption", label: "label", error: "error", disabled: "disabled" }, outputs: { focusEvent: "focusEvent", blurEvent: "blurEvent" }, host: { properties: { "class.sdk-input--warn": "this.error", "class.disabled": "this.disabled" } }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputComponent), multi: true, } ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<label class=\"sdk-input__label flex-row layout-start-center\" for=\"{{inputId}}\"\n [class.sdk-input__label--focused]=\"focused\"\n [class.sdk-input__label--small]=\"small\">\n <ng-container *ngIf=\"label\">\n {{label}}\n </ng-container>\n <ng-container *ngIf=\"!label\">\n <ng-content></ng-content>\n </ng-container>\n <span *ngIf=\"required\" class=\"sdk-input__label-required-mark\">&nbsp;*</span>\n</label>\n<div class=\"sdk-input-wrap flex-row layout-center-stretch\"\n [class.sdk-input-wrap--warn]=\"error\"\n [class.sdk-input-wrap--focused]=\"focused\">\n <input class=\"sdk-input__input\" id=\"{{inputId}}\"\n [autocomplete]=\"autocomplete\"\n [type]=\"type\"\n [style.backgroundImage]=\"icon ? icon : ''\"\n [ngClass]=\"iconPositionClass\"\n [class.sdk-input__input--small]=\"small\"\n [placeholder]=\"placeholder\"\n [tabindex]=\"tabindex\"\n [required]=\"required\"\n (focus)=\"emitFocus()\"\n (blur)=\"emitBlur()\"\n (keyup)=\"change($event.target)\"\n [value]=\"value ? value : ''\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n #input/>\n</div>\n<small class=\"sdk-input__caption\" *ngIf=\"caption\">{{caption}}</small>\n<small class=\"sdk-input__error\" *ngIf=\"error\" (click)=\"input.focus()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M3.41421 0.585786C3.78929 0.210713 4.29799 0 4.82843 0H7.17157C7.70201 0 8.21071 0.210714 8.58579 0.585786L11.4142 3.41421C11.7893 3.78929 12 4.29799 12 4.82843V7.17157C12 7.70201 11.7893 8.21071 11.4142 8.58579L8.58579 11.4142C8.21071 11.7893 7.70201 12 7.17157 12H4.82843C4.29799 12 3.78929 11.7893 3.41421 11.4142L0.585786 8.58579C0.210713 8.21071 0 7.70201 0 7.17157V4.82843C0 4.29799 0.210714 3.78929 0.585786 3.41421L3.41421 0.585786ZM6 2C6.49981 2 6.90499 2.40518 6.90499 2.90499C6.90499 2.93506 6.90349 2.96511 6.9005 2.99504L6.54975 6.50248C6.52151 6.78492 6.28384 7 6 7C5.71616 7 5.47849 6.78492 5.45025 6.50248L5.0995 2.99504C5.04977 2.49771 5.41262 2.05422 5.90995 2.00449C5.93987 2.0015 5.96993 2 6 2ZM7 9C7 8.44771 6.55228 8 6 8C5.44772 8 5 8.44771 5 9C5 9.55229 5.44772 10 6 10C6.55228 10 7 9.55229 7 9Z\"\n fill=\"var(--warn-a90)\"/>\n </svg>\n {{error ? error : ''}}\n</small>\n", styles: [".sdk-inputs-caption,.sdk-input__caption,.sdk-input__error{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;margin-left:4px;font-size:13px;line-height:14px;margin-top:4px;cursor:default}:host{position:relative;display:flex;flex-direction:column;align-items:flex-start}.disabled .sdk-input__label{opacity:.6}.sdk-input--wide{min-width:288px;max-width:none}.sdk-input--wide .sdk-input-wrap{max-width:100%}.sdk-input--full-width{width:100%;max-width:none}.sdk-input--full-width .sdk-input-wrap{max-width:100%}.sdk-input__label-required-mark{color:var(--warn-a50)}.sdk-input__label{color:var(--base-a50);transition:all .2s;font-size:17px;margin-bottom:2px}.sdk-input__label--small{font-size:15px}.sdk-input__label--focused{color:var(--base-a90)}.sdk-input__label--accent{color:var(--accent)}.sdk-input__label--warn{color:var(--warn)}.sdk-input-wrap{background-color:var(--background-a90);border-radius:6px;border-color:var(--regular-a50);border-width:1px;border-style:solid;min-width:160px;max-width:288px;transition:.4s}.sdk-input-wrap--focused{border-color:var(--regular-a100)}.sdk-input-wrap--warn{border-color:var(--warn-a100)}.sdk-input-wrap--accent{border-color:var(--accent)}.sdk-input__input{color:var(--base-a90);background-color:transparent;box-sizing:border-box;flex-grow:1;font-size:17px;font-weight:400;line-height:24px;height:42px;outline:none;border:none;font-family:Inter,sans-serif;padding:8px 16px;width:100%}.sdk-input__input--icon-right{background-size:24px 24px;background-repeat:no-repeat;background-position:right 8px center;padding-right:40px}.sdk-input__input--icon-left{background-size:24px 24px;background-repeat:no-repeat;background-position:left 8px center;padding-left:40px}.sdk-input__input.sdk-input__input--small{height:30px;font-size:15px;padding:4px 8px}.sdk-input__input.sdk-input__input--small.sdk-input__input--icon-left{background-position:left 4px center;padding-left:24px;background-size:16px 16px}.sdk-input__input.sdk-input__input--small.sdk-input__input--icon-right{background-size:16px 16px;background-position:right 4px center;padding-right:24px}.sdk-input__input::placeholder{color:var(--base-a50)}.sdk-input__error{color:var(--warn-a90)}.sdk-input__error svg{margin-right:4px}.sdk-input__caption{color:var(--base-a70);cursor:default}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: InputComponent, decorators: [{ type: Component, args: [{ selector: 'sdk-input, [sdk-input], [sdkInput]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => InputComponent), multi: true, } ], encapsulation: ViewEncapsulation.None, template: "<label class=\"sdk-input__label flex-row layout-start-center\" for=\"{{inputId}}\"\n [class.sdk-input__label--focused]=\"focused\"\n [class.sdk-input__label--small]=\"small\">\n <ng-container *ngIf=\"label\">\n {{label}}\n </ng-container>\n <ng-container *ngIf=\"!label\">\n <ng-content></ng-content>\n </ng-container>\n <span *ngIf=\"required\" class=\"sdk-input__label-required-mark\">&nbsp;*</span>\n</label>\n<div class=\"sdk-input-wrap flex-row layout-center-stretch\"\n [class.sdk-input-wrap--warn]=\"error\"\n [class.sdk-input-wrap--focused]=\"focused\">\n <input class=\"sdk-input__input\" id=\"{{inputId}}\"\n [autocomplete]=\"autocomplete\"\n [type]=\"type\"\n [style.backgroundImage]=\"icon ? icon : ''\"\n [ngClass]=\"iconPositionClass\"\n [class.sdk-input__input--small]=\"small\"\n [placeholder]=\"placeholder\"\n [tabindex]=\"tabindex\"\n [required]=\"required\"\n (focus)=\"emitFocus()\"\n (blur)=\"emitBlur()\"\n (keyup)=\"change($event.target)\"\n [value]=\"value ? value : ''\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n #input/>\n</div>\n<small class=\"sdk-input__caption\" *ngIf=\"caption\">{{caption}}</small>\n<small class=\"sdk-input__error\" *ngIf=\"error\" (click)=\"input.focus()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M3.41421 0.585786C3.78929 0.210713 4.29799 0 4.82843 0H7.17157C7.70201 0 8.21071 0.210714 8.58579 0.585786L11.4142 3.41421C11.7893 3.78929 12 4.29799 12 4.82843V7.17157C12 7.70201 11.7893 8.21071 11.4142 8.58579L8.58579 11.4142C8.21071 11.7893 7.70201 12 7.17157 12H4.82843C4.29799 12 3.78929 11.7893 3.41421 11.4142L0.585786 8.58579C0.210713 8.21071 0 7.70201 0 7.17157V4.82843C0 4.29799 0.210714 3.78929 0.585786 3.41421L3.41421 0.585786ZM6 2C6.49981 2 6.90499 2.40518 6.90499 2.90499C6.90499 2.93506 6.90349 2.96511 6.9005 2.99504L6.54975 6.50248C6.52151 6.78492 6.28384 7 6 7C5.71616 7 5.47849 6.78492 5.45025 6.50248L5.0995 2.99504C5.04977 2.49771 5.41262 2.05422 5.90995 2.00449C5.93987 2.0015 5.96993 2 6 2ZM7 9C7 8.44771 6.55228 8 6 8C5.44772 8 5 8.44771 5 9C5 9.55229 5.44772 10 6 10C6.55228 10 7 9.55229 7 9Z\"\n fill=\"var(--warn-a90)\"/>\n </svg>\n {{error ? error : ''}}\n</small>\n", styles: [".sdk-inputs-caption,.sdk-input__caption,.sdk-input__error{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;margin-left:4px;font-size:13px;line-height:14px;margin-top:4px;cursor:default}:host{position:relative;display:flex;flex-direction:column;align-items:flex-start}.disabled .sdk-input__label{opacity:.6}.sdk-input--wide{min-width:288px;max-width:none}.sdk-input--wide .sdk-input-wrap{max-width:100%}.sdk-input--full-width{width:100%;max-width:none}.sdk-input--full-width .sdk-input-wrap{max-width:100%}.sdk-input__label-required-mark{color:var(--warn-a50)}.sdk-input__label{color:var(--base-a50);transition:all .2s;font-size:17px;margin-bottom:2px}.sdk-input__label--small{font-size:15px}.sdk-input__label--focused{color:var(--base-a90)}.sdk-input__label--accent{color:var(--accent)}.sdk-input__label--warn{color:var(--warn)}.sdk-input-wrap{background-color:var(--background-a90);border-radius:6px;border-color:var(--regular-a50);border-width:1px;border-style:solid;min-width:160px;max-width:288px;transition:.4s}.sdk-input-wrap--focused{border-color:var(--regular-a100)}.sdk-input-wrap--warn{border-color:var(--warn-a100)}.sdk-input-wrap--accent{border-color:var(--accent)}.sdk-input__input{color:var(--base-a90);background-color:transparent;box-sizing:border-box;flex-grow:1;font-size:17px;font-weight:400;line-height:24px;height:42px;outline:none;border:none;font-family:Inter,sans-serif;padding:8px 16px;width:100%}.sdk-input__input--icon-right{background-size:24px 24px;background-repeat:no-repeat;background-position:right 8px center;padding-right:40px}.sdk-input__input--icon-left{background-size:24px 24px;background-repeat:no-repeat;background-position:left 8px center;padding-left:40px}.sdk-input__input.sdk-input__input--small{height:30px;font-size:15px;padding:4px 8px}.sdk-input__input.sdk-input__input--small.sdk-input__input--icon-left{background-position:left 4px center;padding-left:24px;background-size:16px 16px}.sdk-input__input.sdk-input__input--small.sdk-input__input--icon-right{background-size:16px 16px;background-position:right 4px center;padding-right:24px}.sdk-input__input::placeholder{color:var(--base-a50)}.sdk-input__error{color:var(--warn-a90)}.sdk-input__error svg{margin-right:4px}.sdk-input__caption{color:var(--base-a70);cursor:default}\n"] }] }], ctorParameters: function () { return [{ type: i1.LayoutControlService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { required: [{ type: Input }], type: [{ type: Input }], autocomplete: [{ type: Input }], placeholder: [{ type: Input }], tabindex: [{ type: Input }], autofocus: [{ type: Input }], min: [{ type: Input }], max: [{ type: Input }], icon: [{ type: Input }], iconPosition: [{ type: Input }], small: [{ type: Input }], size: [{ type: Input }], caption: [{ type: Input }], label: [{ type: Input }], error: [{ type: Input }, { type: HostBinding, args: ['class.sdk-input--warn'] }], disabled: [{ type: Input }, { type: HostBinding, args: ['class.disabled'] }], focusEvent: [{ type: Output }], blurEvent: [{ type: Output }], inputElementRef: [{ type: ViewChild, args: ['input', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtc2xpY2Uta2l0L3NyYy9saWIvaW5wdXRzL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXNsaWNlLWtpdC9zcmMvbGliL2lucHV0cy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFnQnpFLE1BQU0sT0FBTyxjQUFjO0lBd0N2QixZQUNZLG9CQUEwQztJQUNsRCxzQ0FBc0M7SUFDOUIsVUFBc0IsRUFDdEIsUUFBbUI7UUFIbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUUxQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUEzQ3ZCLFFBQUcsR0FBWSxLQUFLLENBQUM7UUFVYixTQUFJLEdBQVcsTUFBTSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsS0FBSyxDQUFDO1FBQzdCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGFBQVEsR0FBVyxTQUFTLENBQUM7UUFDN0MsMENBQTBDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFJM0IsaUJBQVksR0FBcUIsTUFBTSxDQUFDO1FBQ3hDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFNaEMsVUFBSyxHQUFXLFNBQVMsQ0FBQztRQUUxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRWhCLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRCxjQUFT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b0MsYUFHbkM7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDOzRCQUM3QyxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzRKQUtqQixRQUFRO3NCQUEzQixLQUFLO2dCQVFVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxHQUFHO3NCQUFsQixLQUFLO2dCQUNVLEdBQUc7c0JBQWxCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLHVCQUF1QjtnQkFHdEMsUUFBUTtzQkFEZCxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLGdCQUFnQjtnQkFHckIsVUFBVTtzQkFBMUIsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUVvQyxlQUFlO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExheW91dENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9sYXlvdXQtY29udHJvbC9sYXlvdXQtY29udHJvbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZGstaW5wdXQsIFtzZGstaW5wdXRdLCBbc2RrSW5wdXRdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBwcml2YXRlIHJlcTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcHVibGljIHNldCByZXF1aXJlZCh2YWw6IGFueSkge1xuICAgICAgICB0aGlzLnJlcSA9IHZhbCA9PT0gJycgfHwgdmFsID09PSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyB0eXBlOiBzdHJpbmcgPSAndGV4dCc7XG4gICAgQElucHV0KCkgcHVibGljIGF1dG9jb21wbGV0ZTogc3RyaW5nID0gJ29mZic7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFiaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgICAvLyBASW5wdXQoKSB2YWx1ZU1hc2s6IHN0cmluZyA9IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIG1pbjogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uUG9zaXRpb246ICdyaWdodCcgfCAnbGVmdCcgPSAnbGVmdCc7XG4gICAgQElucHV0KCkgcHVibGljIHNtYWxsOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHNpemU6ICd3aWRlJyB8ICdmdWxsLXdpZHRoJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FwdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZGstaW5wdXQtLXdhcm4nKVxuICAgIHB1YmxpYyBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgaW5wdXRFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyB2YWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaW5wdXRJZDogc3RyaW5nID0gdGhpcy5sYXlvdXRDb250cm9sU2VydmljZS5nZW5lcmF0ZUxheW91dEVsZW1lbnRIYXNoKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRDb250cm9sU2VydmljZTogTGF5b3V0Q29udHJvbFNlcnZpY2UsXG4gICAgICAgIC8vIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICkge1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvblBvc2l0aW9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbiA/IGBzZGstaW5wdXRfX2lucHV0LS1pY29uLSR7dGhpcy5pY29uUG9zaXRpb259YCA6ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50TmFtZTogJ2ZvY3VzJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdEJsdXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGV2ZW50TmFtZTogJ2JsdXInLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUgfHwgJydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvblVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uID8gYHVybCgke3RoaXMuaWNvbn0pYCA6ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBibHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh0YXJnZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRhcmdldC52YWx1ZSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hhbmdlKHZhbHVlKTogdm9pZCB7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5taW47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTaXplQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVNpemVDbGFzc2VzID0gWyd3aWRlJywgJ2Z1bGwtd2lkdGgnXTtcbiAgICAgICAgaWYgKGF2YWlsYWJsZVNpemVDbGFzc2VzLmluY2x1ZGVzKHRoaXMuc2l6ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGBzZGstaW5wdXQtLSR7dGhpcy5zaXplfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoISF0aGlzLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2l6ZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hdXRvZm9jdXMgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuYmx1ckV2ZW50LmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGxhYmVsIGNsYXNzPVwic2RrLWlucHV0X19sYWJlbCBmbGV4LXJvdyBsYXlvdXQtc3RhcnQtY2VudGVyXCIgZm9yPVwie3tpbnB1dElkfX1cIlxuICAgICAgIFtjbGFzcy5zZGstaW5wdXRfX2xhYmVsLS1mb2N1c2VkXT1cImZvY3VzZWRcIlxuICAgICAgIFtjbGFzcy5zZGstaW5wdXRfX2xhYmVsLS1zbWFsbF09XCJzbWFsbFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAgICB7e2xhYmVsfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhYmVsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c3BhbiAqbmdJZj1cInJlcXVpcmVkXCIgY2xhc3M9XCJzZGstaW5wdXRfX2xhYmVsLXJlcXVpcmVkLW1hcmtcIj4mbmJzcDsqPC9zcGFuPlxuPC9sYWJlbD5cbjxkaXYgY2xhc3M9XCJzZGstaW5wdXQtd3JhcCBmbGV4LXJvdyBsYXlvdXQtY2VudGVyLXN0cmV0Y2hcIlxuICAgICBbY2xhc3Muc2RrLWlucHV0LXdyYXAtLXdhcm5dPVwiZXJyb3JcIlxuICAgICBbY2xhc3Muc2RrLWlucHV0LXdyYXAtLWZvY3VzZWRdPVwiZm9jdXNlZFwiPlxuICAgIDxpbnB1dCBjbGFzcz1cInNkay1pbnB1dF9faW5wdXRcIiBpZD1cInt7aW5wdXRJZH19XCJcbiAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCJpY29uID8gaWNvbiA6ICcnXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvblBvc2l0aW9uQ2xhc3NcIlxuICAgICAgICAgICBbY2xhc3Muc2RrLWlucHV0X19pbnB1dC0tc21hbGxdPVwic21hbGxcIlxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAoZm9jdXMpPVwiZW1pdEZvY3VzKClcIlxuICAgICAgICAgICAoYmx1cik9XCJlbWl0Qmx1cigpXCJcbiAgICAgICAgICAgKGtleXVwKT1cImNoYW5nZSgkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSA/IHZhbHVlIDogJydcIlxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICNpbnB1dC8+XG48L2Rpdj5cbjxzbWFsbCBjbGFzcz1cInNkay1pbnB1dF9fY2FwdGlvblwiICpuZ0lmPVwiY2FwdGlvblwiPnt7Y2FwdGlvbn19PC9zbWFsbD5cbjxzbWFsbCBjbGFzcz1cInNkay1pbnB1dF9fZXJyb3JcIiAqbmdJZj1cImVycm9yXCIgKGNsaWNrKT1cImlucHV0LmZvY3VzKClcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTMuNDE0MjEgMC41ODU3ODZDMy43ODkyOSAwLjIxMDcxMyA0LjI5Nzk5IDAgNC44Mjg0MyAwSDcuMTcxNTdDNy43MDIwMSAwIDguMjEwNzEgMC4yMTA3MTQgOC41ODU3OSAwLjU4NTc4NkwxMS40MTQyIDMuNDE0MjFDMTEuNzg5MyAzLjc4OTI5IDEyIDQuMjk3OTkgMTIgNC44Mjg0M1Y3LjE3MTU3QzEyIDcuNzAyMDEgMTEuNzg5MyA4LjIxMDcxIDExLjQxNDIgOC41ODU3OUw4LjU4NTc5IDExLjQxNDJDOC4yMTA3MSAxMS43ODkzIDcuNzAyMDEgMTIgNy4xNzE1NyAxMkg0LjgyODQzQzQuMjk3OTkgMTIgMy43ODkyOSAxMS43ODkzIDMuNDE0MjEgMTEuNDE0MkwwLjU4NTc4NiA4LjU4NTc5QzAuMjEwNzEzIDguMjEwNzEgMCA3LjcwMjAxIDAgNy4xNzE1N1Y0LjgyODQzQzAgNC4yOTc5OSAwLjIxMDcxNCAzLjc4OTI5IDAuNTg1Nzg2IDMuNDE0MjFMMy40MTQyMSAwLjU4NTc4NlpNNiAyQzYuNDk5ODEgMiA2LjkwNDk5IDIuNDA1MTggNi45MDQ5OSAyLjkwNDk5QzYuOTA0OTkgMi45MzUwNiA2LjkwMzQ5IDIuOTY1MTEgNi45MDA1IDIuOTk1MDRMNi41NDk3NSA2LjUwMjQ4QzYuNTIxNTEgNi43ODQ5MiA2LjI4Mzg0IDcgNiA3QzUuNzE2MTYgNyA1LjQ3ODQ5IDYuNzg0OTIgNS40NTAyNSA2LjUwMjQ4TDUuMDk5NSAyLjk5NTA0QzUuMDQ5NzcgMi40OTc3MSA1LjQxMjYyIDIuMDU0MjIgNS45MDk5NSAyLjAwNDQ5QzUuOTM5ODcgMi4wMDE1IDUuOTY5OTMgMiA2IDJaTTcgOUM3IDguNDQ3NzEgNi41NTIyOCA4IDYgOEM1LjQ0NzcyIDggNSA4LjQ0NzcxIDUgOUM1IDkuNTUyMjkgNS40NDc3MiAxMCA2IDEwQzYuNTUyMjggMTAgNyA5LjU1MjI5IDcgOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwidmFyKC0td2Fybi1hOTApXCIvPlxuICAgIDwvc3ZnPlxuICAgIHt7ZXJyb3IgPyBlcnJvciA6ICcnfX1cbjwvc21hbGw+XG4iXX0=