UNPKG

@ngx-performance-ui/ui

Version:
207 lines 17.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Injector, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { timer } from 'rxjs'; import { takeUntilDestroy } from '@ngx-performance-ui/core'; import { AbstractInputComponent } from '../../abstracts'; /** * @record */ export function AutocompleteItem() { } if (false) { /** @type {?} */ AutocompleteItem.prototype.text; /** @type {?} */ AutocompleteItem.prototype.value; } var AutocompleteComponent = /** @class */ (function (_super) { tslib_1.__extends(AutocompleteComponent, _super); function AutocompleteComponent(injector) { var _this = _super.call(this, injector) || this; _this.injector = injector; _this.items = []; _this.containerClasses = ''; _this.delay = 200; _this.select = new EventEmitter(); _this.placeholder = 'Type in here'; _this.autocomplete = 'nop'; _this.showList = false; _this.inputValue = ''; _this.valueFn = (/** * @param {?} value * @return {?} */ function (value) { if (!value) return value; _this.inputValue = value.text; return value; }); _this.trackByFn = (/** * @param {?} _ * @param {?} value * @return {?} */ function (_, value) { return value.text; }); return _this; } /** * @return {?} */ AutocompleteComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { }; /** * @param {?} event * @return {?} */ AutocompleteComponent.prototype.onBlur = /** * @param {?} event * @return {?} */ function (event) { var _this = this; timer(this.delay) .pipe(takeUntilDestroy(this)) .subscribe((/** * @return {?} */ function () { _this.showList = false; _this.inputValue = (_this.value || { text: '' }).text; _this.cdRef.detectChanges(); })); this.blur.emit(event); }; /** * @param {?} event * @return {?} */ AutocompleteComponent.prototype.onFocus = /** * @param {?} event * @return {?} */ function (event) { var _this = this; timer(this.delay) .pipe(takeUntilDestroy(this)) .subscribe((/** * @return {?} */ function () { _this.showList = true; _this.cdRef.detectChanges(); })); this.focus.emit(event); }; /** * @param {?} item * @return {?} */ AutocompleteComponent.prototype.onSelect = /** * @param {?} item * @return {?} */ function (item) { this.value = item; this.select.emit(item); }; /** * @param {?} value * @return {?} */ AutocompleteComponent.prototype.onChangeInputValue = /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var found = this.items.find((/** * @param {?} item * @return {?} */ function (item) { return item.text.toLocaleLowerCase() === value.toLocaleLowerCase(); })); if (found) { this.value = found; this.inputValue = found.text; return; } if (!value || value === '') this.value = undefined; }; /** * @return {?} */ AutocompleteComponent.prototype.clear = /** * @return {?} */ function () { this.value = undefined; this.inputValue = ''; this.showList = false; }; AutocompleteComponent.decorators = [ { type: Component, args: [{ selector: 'p-autocomplete', template: "\n <div class=\"autocomplete-container {{ containerClasses }}\">\n <label *ngIf=\"labelText\" class=\"{{ labelClasses }}\" [attr.for]=\"id\" [innerHTML]=\"labelText\"></label>\n <p-input\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"onChangeInputValue($event)\"\n class=\"w-100 {{ classes }}\"\n [id]=\"id\"\n [attr.type]=\"type\"\n [attr.placeholder]=\"placeholder\"\n [hidden]=\"hidden\"\n [name]=\"name\"\n [disabled]=\"disabled\"\n [attr.tabindex]=\"tabindex\"\n [required]=\"required\"\n [autofocus]=\"autofocus\"\n [autofocusDelay]=\"autofocusDelay\"\n autocomplete=\"nop\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"click.emit($event)\"\n ></p-input>\n <fa-icon *ngIf=\"value\" [icon]=\"['fas', 'times']\" class=\"text-secondary\" (click)=\"clear()\"></fa-icon>\n <div *ngIf=\"showList\" class=\"list-group\">\n <a\n [pHighlight]=\"inputValue\"\n [pHighlightHide]=\"true\"\n *ngFor=\"let item of items; trackBy: trackByFn\"\n class=\"list-group-item list-group-item-action\"\n [class.list-group-item-secondary]=\"value?.text === item.text\"\n (click)=\"onSelect(item)\"\n >\n {{ item.text }}\n </a>\n </div>\n </div>\n ", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return AutocompleteComponent; })), multi: true, }, ] }] } ]; /** @nocollapse */ AutocompleteComponent.ctorParameters = function () { return [ { type: Injector } ]; }; AutocompleteComponent.propDecorators = { items: [{ type: Input }], containerClasses: [{ type: Input }], delay: [{ type: Input }], select: [{ type: Output }], placeholder: [{ type: Input }], input: [{ type: ViewChild, args: ['input', { read: ElementRef },] }] }; return AutocompleteComponent; }(AbstractInputComponent)); export { AutocompleteComponent }; if (false) { /** @type {?} */ AutocompleteComponent.prototype.items; /** @type {?} */ AutocompleteComponent.prototype.containerClasses; /** @type {?} */ AutocompleteComponent.prototype.delay; /** @type {?} */ AutocompleteComponent.prototype.select; /** @type {?} */ AutocompleteComponent.prototype.placeholder; /** @type {?} */ AutocompleteComponent.prototype.input; /** @type {?} */ AutocompleteComponent.prototype.autocomplete; /** @type {?} */ AutocompleteComponent.prototype.showList; /** @type {?} */ AutocompleteComponent.prototype.inputValue; /** @type {?} */ AutocompleteComponent.prototype.valueFn; /** @type {?} */ AutocompleteComponent.prototype.trackByFn; /** @type {?} */ AutocompleteComponent.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtcGVyZm9ybWFuY2UtdWkvdWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUV6RCxzQ0FHQzs7O0lBRkMsZ0NBQWE7O0lBQ2IsaUNBQVc7O0FBR2I7SUFpRDJDLGlEQUF3QztJQTRCakYsK0JBQW1CLFFBQWtCO1FBQXJDLFlBQ0Usa0JBQU0sUUFBUSxDQUFDLFNBQ2hCO1FBRmtCLGNBQVEsR0FBUixRQUFRLENBQVU7UUEzQjVCLFdBQUssR0FBdUIsRUFBRSxDQUFDO1FBRS9CLHNCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUU5QixXQUFLLEdBQVcsR0FBRyxDQUFDO1FBRW5CLFlBQU0sR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUUvQyxpQkFBVyxHQUFXLGNBQWMsQ0FBQztRQUk5QyxrQkFBWSxHQUFXLEtBQUssQ0FBQztRQUU3QixjQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGdCQUFVLEdBQVcsRUFBRSxDQUFDO1FBRXhCLGFBQU87Ozs7UUFBb0YsVUFBQSxLQUFLO1lBQzlGLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXpCLEtBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM3QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBQztRQUVGLGVBQVM7Ozs7O1FBQXNDLFVBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSyxPQUFBLEtBQUssQ0FBQyxJQUFJLEVBQVYsQ0FBVSxFQUFDOztJQUl4RSxDQUFDOzs7O0lBRUQsMkNBQVc7OztJQUFYLGNBQXFCLENBQUM7Ozs7O0lBRXRCLHNDQUFNOzs7O0lBQU4sVUFBTyxLQUFpQjtRQUF4QixpQkFTQztRQVJDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCLFNBQVM7OztRQUFDO1lBQ1QsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsS0FBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDcEQsS0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLEVBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Ozs7O0lBRUQsdUNBQU87Ozs7SUFBUCxVQUFRLEtBQWlCO1FBQXpCLGlCQVFDO1FBUEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUIsU0FBUzs7O1FBQUM7WUFDVCxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixLQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsRUFBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCx3Q0FBUTs7OztJQUFSLFVBQVMsSUFBc0I7UUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCxrREFBa0I7Ozs7SUFBbEIsVUFBbUIsS0FBYTs7WUFDeEIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUEzRCxDQUEyRCxFQUFDO1FBQ2xHLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUNyRCxDQUFDOzs7O0lBRUQscUNBQUs7OztJQUFMO1FBQ0UsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7Z0JBNUhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsczNDQW9DVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxxQkFBcUIsRUFBckIsQ0FBcUIsRUFBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBakVDLFFBQVE7Ozt3QkFtRVAsS0FBSzttQ0FFTCxLQUFLO3dCQUVMLEtBQUs7eUJBRUwsTUFBTTs4QkFFTixLQUFLO3dCQUVMLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztJQWlFMUMsNEJBQUM7Q0FBQSxBQTdIRCxDQWlEMkMsc0JBQXNCLEdBNEVoRTtTQTVFWSxxQkFBcUI7OztJQUNoQyxzQ0FBd0M7O0lBRXhDLGlEQUF1Qzs7SUFFdkMsc0NBQTZCOztJQUU3Qix1Q0FBd0Q7O0lBRXhELDRDQUE4Qzs7SUFFOUMsc0NBQTREOztJQUU1RCw2Q0FBNkI7O0lBRTdCLHlDQUEwQjs7SUFFMUIsMkNBQXdCOztJQUV4Qix3Q0FLRTs7SUFFRiwwQ0FBd0U7O0lBRTVELHlDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95IH0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZUl0ZW0ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3AtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlLWNvbnRhaW5lciB7eyBjb250YWluZXJDbGFzc2VzIH19XCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFRleHRcIiBjbGFzcz1cInt7IGxhYmVsQ2xhc3NlcyB9fVwiIFthdHRyLmZvcl09XCJpZFwiIFtpbm5lckhUTUxdPVwibGFiZWxUZXh0XCI+PC9sYWJlbD5cbiAgICAgIDxwLWlucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlSW5wdXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJ3LTEwMCB7eyBjbGFzc2VzIH19XCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbaGlkZGVuXT1cImhpZGRlblwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgW2F1dG9mb2N1c0RlbGF5XT1cImF1dG9mb2N1c0RlbGF5XCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwibm9wXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9wLWlucHV0PlxuICAgICAgPGZhLWljb24gKm5nSWY9XCJ2YWx1ZVwiIFtpY29uXT1cIlsnZmFzJywgJ3RpbWVzJ11cIiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsZWFyKClcIj48L2ZhLWljb24+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xpc3RcIiBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBbcEhpZ2hsaWdodF09XCJpbnB1dFZhbHVlXCJcbiAgICAgICAgICBbcEhpZ2hsaWdodEhpZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXG4gICAgICAgICAgW2NsYXNzLmxpc3QtZ3JvdXAtaXRlbS1zZWNvbmRhcnldPVwidmFsdWU/LnRleHQgPT09IGl0ZW0udGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXRDb21wb25lbnQ8QXV0b2NvbXBsZXRlSXRlbT4ge1xuICBASW5wdXQoKSBpdGVtczogQXV0b2NvbXBsZXRlSXRlbVtdID0gW107XG5cbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3Nlczogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgZGVsYXk6IG51bWJlciA9IDIwMDtcblxuICBAT3V0cHV0KCkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVJdGVtPigpO1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnVHlwZSBpbiBoZXJlJztcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dDogRWxlbWVudFJlZjtcblxuICBhdXRvY29tcGxldGU6IHN0cmluZyA9ICdub3AnO1xuXG4gIHNob3dMaXN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgdmFsdWVGbjogKHZhbHVlOiBBdXRvY29tcGxldGVJdGVtLCBwcmV2aW91c1ZhbHVlPzogQXV0b2NvbXBsZXRlSXRlbSkgPT4gQXV0b2NvbXBsZXRlSXRlbSA9IHZhbHVlID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG5cbiAgICB0aGlzLmlucHV0VmFsdWUgPSB2YWx1ZS50ZXh0O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxBdXRvY29tcGxldGVJdGVtPiA9IChfLCB2YWx1ZSkgPT4gdmFsdWUudGV4dDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIG9uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIHRpbWVyKHRoaXMuZGVsYXkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95KHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gKHRoaXMudmFsdWUgfHwgeyB0ZXh0OiAnJyB9KS50ZXh0O1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aW1lcih0aGlzLmRlbGF5KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveSh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dMaXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3QoaXRlbTogQXV0b2NvbXBsZXRlSXRlbSkge1xuICAgIHRoaXMudmFsdWUgPSBpdGVtO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQoaXRlbSk7XG4gIH1cblxuICBvbkNoYW5nZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS50ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IGZvdW5kO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZm91bmQudGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5zaG93TGlzdCA9IGZhbHNlO1xuICB9XG59XG4iXX0=