UNPKG

@neocomplexx/ngx-neo-completer-mat

Version:
564 lines 61.1 kB
import { ChangeDetectorRef, Component, Input, Output, EventEmitter, ViewChild, forwardRef, ElementRef } from '@angular/core'; import { FormControl, NG_VALUE_ACCESSOR, Validators, NgForm } from '@angular/forms'; import { CtrCompleter } from '../directives/ctr-completer'; import { CompleterService } from '../services/completer-service'; import { MAX_CHARS, MIN_SEARCH_LENGTH, PAUSE, TEXT_SEARCHING, TEXT_NO_RESULTS } from '../globals'; import * as i0 from "@angular/core"; import * as i1 from "../services/completer-service"; import * as i2 from "@angular/material/form-field"; import * as i3 from "@angular/common"; import * as i4 from "../directives/ctr-completer"; import * as i5 from "@angular/material/input"; import * as i6 from "@angular/forms"; import * as i7 from "../directives/ctr-input"; import * as i8 from "../directives/ctr-list"; import * as i9 from "../directives/ctr-dropdown"; import * as i10 from "../directives/ctr-row"; import * as i11 from "./completer-list-item-cmp"; import * as i12 from "@angular/material/chips"; import * as i13 from "@angular/material/icon"; const _c0 = ["ctrInput"]; function CompleterCmp_mat_label_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-label"); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r0.placeholder); } } function CompleterCmp_div_7_div_1_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 15); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r10 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r10._textSearching); } } function CompleterCmp_div_7_div_1_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 16); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r11 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r11._textNoResults); } } function CompleterCmp_div_7_div_1_div_3_div_2_img_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "img", 26); } if (rf & 2) { const item_r13 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵpropertyInterpolate("src", item_r13.image, i0.ɵɵsanitizeUrl); } } function CompleterCmp_div_7_div_1_div_3_div_2_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "div", 27); } } function CompleterCmp_div_7_div_1_div_3_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 23); i0.ɵɵtemplate(1, CompleterCmp_div_7_div_1_div_3_div_2_img_1_Template, 1, 1, "img", 24); i0.ɵɵtemplate(2, CompleterCmp_div_7_div_1_div_3_div_2_div_2_Template, 1, 0, "div", 25); i0.ɵɵelementEnd(); } if (rf & 2) { const item_r13 = i0.ɵɵnextContext().$implicit; i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", item_r13.image != ""); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", item_r13.image === ""); } } function CompleterCmp_div_7_div_1_div_3_completer_list_item_5_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "completer-list-item", 28); } if (rf & 2) { const item_r13 = i0.ɵɵnextContext().$implicit; const ctx_r16 = i0.ɵɵnextContext(3); i0.ɵɵproperty("text", item_r13.description)("matchClass", ctx_r16.matchClass)("searchStr", ctx_r16.searchStr)("type", "description"); } } const _c1 = function (a0) { return { "completer-item-text-image": a0 }; }; function CompleterCmp_div_7_div_1_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 17); i0.ɵɵelementStart(1, "div", 18); i0.ɵɵtemplate(2, CompleterCmp_div_7_div_1_div_3_div_2_Template, 3, 2, "div", 19); i0.ɵɵelementStart(3, "div", 20); i0.ɵɵelement(4, "completer-list-item", 21); i0.ɵɵtemplate(5, CompleterCmp_div_7_div_1_div_3_completer_list_item_5_Template, 1, 4, "completer-list-item", 22); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { const item_r13 = ctx.$implicit; const rowIndex_r14 = ctx.index; const ctx_r12 = i0.ɵɵnextContext(3); i0.ɵɵadvance(1); i0.ɵɵproperty("ctrRow", rowIndex_r14)("dataItem", item_r13); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", item_r13.image || item_r13.image === ""); i0.ɵɵadvance(1); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(9, _c1, item_r13.image || item_r13.image === "")); i0.ɵɵadvance(1); i0.ɵɵproperty("text", item_r13.title)("matchClass", ctx_r12.matchClass)("searchStr", ctx_r12.searchStr)("type", "title"); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", item_r13.description && item_r13.description != ""); } } function CompleterCmp_div_7_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 11); i0.ɵɵtemplate(1, CompleterCmp_div_7_div_1_div_1_Template, 2, 1, "div", 12); i0.ɵɵtemplate(2, CompleterCmp_div_7_div_1_div_2_Template, 2, 1, "div", 13); i0.ɵɵtemplate(3, CompleterCmp_div_7_div_1_div_3_Template, 6, 11, "div", 14); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r22 = i0.ɵɵnextContext(); const searchActive_r6 = ctx_r22.searching; const items_r5 = ctx_r22.results; const ctx_r9 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", searchActive_r6 && ctx_r9.displaySearching); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !searchActive_r6 && (!items_r5 || (items_r5 == null ? null : items_r5.length) === 0)); i0.ɵɵadvance(1); i0.ɵɵproperty("ngForOf", items_r5); } } function CompleterCmp_div_7_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 9); i0.ɵɵtemplate(1, CompleterCmp_div_7_div_1_Template, 4, 3, "div", 10); i0.ɵɵelementEnd(); } if (rf & 2) { const items_r5 = ctx.results; const searchActive_r6 = ctx.searching; const isInitialized_r7 = ctx.searchInitialized; const isOpen_r8 = ctx.isOpen; const ctx_r3 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", isInitialized_r7 && isOpen_r8 && ((items_r5 == null ? null : items_r5.length) > 0 || ctx_r3.displayNoResults && !searchActive_r6 || searchActive_r6 && ctx_r3.displaySearching)); } } function CompleterCmp_div_8_Template(rf, ctx) { if (rf & 1) { const _r24 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 29); i0.ɵɵelementStart(1, "mat-chip-list", 30); i0.ɵɵelementStart(2, "mat-chip", 31); i0.ɵɵlistener("removed", function CompleterCmp_div_8_Template_mat_chip_removed_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.removeItem(); }); i0.ɵɵelementStart(3, "span", 32); i0.ɵɵtext(4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(5, "mat-icon", 33); i0.ɵɵtext(6, "cancel"); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(); const _r2 = i0.ɵɵreference(6); i0.ɵɵadvance(1); i0.ɵɵproperty("disabled", _r2.disabled); i0.ɵɵadvance(1); i0.ɵɵproperty("selectable", true)("removable", true); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.completerItem == null ? null : ctx_r4.completerItem.title); } } 'use strict'; const noop = () => { }; const COMPLETER_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CompleterCmp), multi: true }; // tslint:disable-next-line:component-class-suffix export class CompleterCmp { constructor(completerService, cdr) { this.completerService = completerService; this.cdr = cdr; this.inputName = ''; this.inputId = ''; this.pause = PAUSE; this.minSearchLength = MIN_SEARCH_LENGTH; this.maxChars = MAX_CHARS; this.overrideSuggested = false; this.clearSelected = false; this.clearUnselected = false; this.fillHighlighted = true; this.placeholder = ''; this.autoMatch = false; this.disableInput = false; this.autofocus = false; this.openOnFocus = false; this.openOnClick = false; this.selectOnClick = false; this.autoHighlight = false; this.autoSelectOnEnter = true; this.appearance = ''; this.selected = new EventEmitter(); this.highlighted = new EventEmitter(); // tslint:disable:no-output-rename this.blurEvent = new EventEmitter(); this.click = new EventEmitter(); this.focusEvent = new EventEmitter(); this.opened = new EventEmitter(); this.keyup = new EventEmitter(); this.keydown = new EventEmitter(); this.searchStr = ''; this.control = new FormControl(''); this.displaySearching = true; this.displayNoResults = true; this._textNoResults = TEXT_NO_RESULTS; this._textSearching = TEXT_SEARCHING; this._onTouchedCallback = noop; this._onChangeCallback = noop; this._focus = false; this._open = false; this._onlyOnInit = true; } get value() { return (this.completerItem) ? this.completerItem.originalObject : this.searchStr; } set value(v) { if (typeof (v) === 'string') { this.searchStr = v; } else { this.completerItem = v; } } ngAfterViewInit() { if (this.autofocus) { this._focus = true; } } ngAfterViewChecked() { if (this._focus) { setTimeout(() => { if (this.ctrInput) { this.ctrInput.nativeElement.focus(); this._focus = false; } }, 0); } } onTouched() { this._onTouchedCallback(); } writeValue(value) { if (value && (value.id === 0 || value.id === 0)) value = null; if (value && this.dataService.convertToItem) { this.completerItem = this.dataService.convertToItem(value); this.searchStr = this.completerItem.title; } else { this.completerItem = null; this.searchStr = null; } } registerOnChange(fn) { this._onChangeCallback = fn; } registerOnTouched(fn) { this._onTouchedCallback = fn; } setDisabledState(isDisabled) { this.disableInput = isDisabled; if (!this.form) { if (isDisabled) { this.control.disable({ onlySelf: false, emitEvent: true }); } else { this.control.enable({ onlySelf: false, emitEvent: true }); } } } set datasource(source) { if (source) { if (source instanceof Array) { this.dataService = this.completerService.local(source); } else if (typeof (source) === 'string') { this.dataService = this.completerService.remote(source); } else { this.dataService = source; } } } set textNoResults(text) { if (this._textNoResults !== text) { this._textNoResults = text; this.displayNoResults = !!this._textNoResults && this._textNoResults !== 'false'; } } set textSearching(text) { if (this._textSearching !== text) { this._textSearching = text; this.displaySearching = !!this._textSearching && this._textSearching !== 'false'; } } ngOnInit() { if (this.required === '') this.required = true; if (this.required) { this.control.setValidators(Validators.required); } if (this.form) { this.form.control.addControl(this.name, this.control); this.form.control.get(this.name).updateValueAndValidity(); } this.completer.selected.subscribe((item) => { this.completerItem = item; if (!this.completerItem) this.searchStr = undefined; this._onChangeCallback((this.completerItem) ? this.completerItem.originalObject : null); this.selected.emit(item); }); this.completer.highlighted.subscribe((item) => { this.highlighted.emit(item); }); this.completer.opened.subscribe((isOpen) => { this._open = isOpen; this.opened.emit(isOpen); }); } removeItem() { this.completerItem = undefined; this.searchStr = undefined; this._onChangeCallback((this.completerItem) ? this.completerItem.originalObject : null); this.selected.emit(null); setTimeout(() => { if (this.ctrInput) { this.ctrInput.nativeElement.focus(); this._focus = false; } }, 10); } onBlur() { this.blurEvent.emit(); this.onTouched(); this.cdr.detectChanges(); } onFocus() { this.focusEvent.emit(); //this.onTouched(); } onClick(event) { this.click.emit(event); this.onTouched(); } onKeyup(event) { this.keyup.emit(event); } onKeydown(event) { this._onlyOnInit = false; this.keydown.emit(event); } onChange(value) { this.value = value; } open() { this.completer.open(); } close() { this.completer.clear(); } focus() { if (this.ctrInput) { this.ctrInput.nativeElement.focus(); } else { this._focus = true; } } blur() { if (this.ctrInput) { this.ctrInput.nativeElement.blur(); } else { this._focus = false; } } isOpen() { return this._open; } } CompleterCmp.ɵfac = function CompleterCmp_Factory(t) { return new (t || CompleterCmp)(i0.ɵɵdirectiveInject(i1.CompleterService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; CompleterCmp.ɵcmp = i0.ɵɵdefineComponent({ type: CompleterCmp, selectors: [["neo-completer-mat"]], viewQuery: function CompleterCmp_Query(rf, ctx) { if (rf & 1) { i0.ɵɵstaticViewQuery(CtrCompleter, true); i0.ɵɵstaticViewQuery(_c0, true); } if (rf & 2) { var _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.completer = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.ctrInput = _t.first); } }, inputs: { dataService: "dataService", required: "required", name: "name", inputName: "inputName", inputId: "inputId", pause: "pause", minSearchLength: "minSearchLength", maxChars: "maxChars", overrideSuggested: "overrideSuggested", clearSelected: "clearSelected", clearUnselected: "clearUnselected", fillHighlighted: "fillHighlighted", placeholder: "placeholder", matchClass: "matchClass", fieldTabindex: "fieldTabindex", autoMatch: "autoMatch", disableInput: "disableInput", inputClass: "inputClass", formFieldClass: "formFieldClass", autofocus: "autofocus", openOnFocus: "openOnFocus", openOnClick: "openOnClick", selectOnClick: "selectOnClick", initialValue: "initialValue", autoHighlight: "autoHighlight", autoSelectOnEnter: "autoSelectOnEnter", appearance: "appearance", form: "form", datasource: "datasource", textNoResults: "textNoResults", textSearching: "textSearching" }, outputs: { selected: "selected", highlighted: "highlighted", blurEvent: "blur", click: "click", focusEvent: "focus", opened: "opened", keyup: "keyup", keydown: "keydown" }, features: [i0.ɵɵProvidersFeature([COMPLETER_CONTROL_VALUE_ACCESSOR])], decls: 9, vars: 33, consts: [[3, "ngClass", "appearance"], [4, "ngIf"], ["ctrCompleter", "", 1, "completer-holder"], ["matInput", "", "type", "search", "ctrInput", "", "autocomplete", "off", "autocorrect", "off", "autocapitalize", "off", 1, "completer-input", 3, "required", "ngClass", "ngModel", "placeholder", "tabindex", "disabled", "clearSelected", "clearUnselected", "overrideSuggested", "openOnFocus", "fillHighlighted", "openOnClick", "selectOnClick", "autoSelectOnEnter", "ngModelChange", "blur", "focus", "keyup", "keydown", "click"], ["ctrInput", ""], ["matInput", "", 3, "formControl"], ["ctrInputHidden", ""], ["class", "completer-dropdown-holder", 4, "ctrList", "ctrListMinSearchLength", "ctrListPause", "ctrListAutoMatch", "ctrListInitialValue", "ctrListAutoHighlight", "ctrListDisplaySearching"], ["class", "completer-holder", 4, "ngIf"], [1, "completer-dropdown-holder"], ["class", "completer-dropdown", "ctrDropdown", "", 4, "ngIf"], ["ctrDropdown", "", 1, "completer-dropdown"], ["class", "completer-searching", 4, "ngIf"], ["class", "completer-no-results", 4, "ngIf"], ["class", "completer-row-wrapper", 4, "ngFor", "ngForOf"], [1, "completer-searching"], [1, "completer-no-results"], [1, "completer-row-wrapper"], [1, "completer-row", 3, "ctrRow", "dataItem"], ["class", "completer-image-holder", 4, "ngIf"], [1, "completer-item-text", 3, "ngClass"], [1, "completer-title", 3, "text", "matchClass", "searchStr", "type"], ["class", "completer-description", 3, "text", "matchClass", "searchStr", "type", 4, "ngIf"], [1, "completer-image-holder"], ["class", "completer-image", 3, "src", 4, "ngIf"], ["class", "completer-image-default", 4, "ngIf"], [1, "completer-image", 3, "src"], [1, "completer-image-default"], [1, "completer-description", 3, "text", "matchClass", "searchStr", "type"], [1, "completer-holder"], [3, "disabled"], ["id", "chip-badge", 3, "selectable", "removable", "removed"], [1, ""], ["matChipRemove", ""]], template: function CompleterCmp_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "mat-form-field", 0); i0.ɵɵtemplate(1, CompleterCmp_mat_label_1_Template, 2, 1, "mat-label", 1); i0.ɵɵelementStart(2, "div", 2); i0.ɵɵelementStart(3, "input", 3, 4); i0.ɵɵlistener("ngModelChange", function CompleterCmp_Template_input_ngModelChange_3_listener($event) { return ctx.searchStr = $event; })("ngModelChange", function CompleterCmp_Template_input_ngModelChange_3_listener($event) { return ctx.onChange($event); })("blur", function CompleterCmp_Template_input_blur_3_listener() { return ctx.onBlur(); })("focus", function CompleterCmp_Template_input_focus_3_listener() { return ctx.onFocus(); })("keyup", function CompleterCmp_Template_input_keyup_3_listener($event) { return ctx.onKeyup($event); })("keydown", function CompleterCmp_Template_input_keydown_3_listener($event) { return ctx.onKeydown($event); })("click", function CompleterCmp_Template_input_click_3_listener($event) { return ctx.onClick($event); }); i0.ɵɵelementEnd(); i0.ɵɵelement(5, "input", 5, 6); i0.ɵɵtemplate(7, CompleterCmp_div_7_Template, 2, 1, "div", 7); i0.ɵɵelementEnd(); i0.ɵɵtemplate(8, CompleterCmp_div_8_Template, 7, 4, "div", 8); i0.ɵɵelementEnd(); } if (rf & 2) { const _r2 = i0.ɵɵreference(6); i0.ɵɵproperty("ngClass", ctx.formFieldClass)("appearance", ctx.appearance); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.appearance); i0.ɵɵadvance(2); i0.ɵɵclassProp("none-display", ctx.completerItem); i0.ɵɵproperty("required", ctx.required)("ngClass", ctx.inputClass)("ngModel", ctx.searchStr)("placeholder", ctx.placeholder)("tabindex", ctx.fieldTabindex)("disabled", _r2.disabled)("clearSelected", ctx.clearSelected)("clearUnselected", ctx.clearUnselected)("overrideSuggested", ctx.overrideSuggested)("openOnFocus", ctx.openOnFocus)("fillHighlighted", ctx.fillHighlighted)("openOnClick", ctx.openOnClick)("selectOnClick", ctx.selectOnClick)("autoSelectOnEnter", ctx.autoSelectOnEnter); i0.ɵɵattribute("id", ctx.inputId.length > 0 ? ctx.inputId : null)("name", ctx.inputName)("maxlength", ctx.maxChars); i0.ɵɵadvance(2); i0.ɵɵclassProp("none-display", true); i0.ɵɵproperty("formControl", ctx.control); i0.ɵɵadvance(2); i0.ɵɵproperty("ctrList", ctx.dataService)("ctrListMinSearchLength", ctx.minSearchLength)("ctrListPause", ctx.pause)("ctrListAutoMatch", ctx.autoMatch)("ctrListInitialValue", ctx.initialValue)("ctrListAutoHighlight", ctx.autoHighlight)("ctrListDisplaySearching", ctx.displaySearching); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.completerItem); } }, directives: [i2.MatFormField, i3.NgClass, i3.NgIf, i4.CtrCompleter, i5.MatInput, i6.DefaultValueAccessor, i7.CtrInput, i6.RequiredValidator, i6.NgControlStatus, i6.NgModel, i6.MaxLengthValidator, i6.FormControlDirective, i8.CtrList, i2.MatLabel, i9.CtrDropdown, i3.NgForOf, i10.CtrRow, i11.CompleterListItemCmp, i12.MatChipList, i12.MatChip, i13.MatIcon, i12.MatChipRemove], styles: [".completer-dropdown[_ngcontent-%COMP%]{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12);width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px;margin-top:10px;cursor:pointer;z-index:9999;position:absolute;background-color:#fff;max-height:200px;height:200px;overflow-y:auto;overflow-x:hidden}.completer-row[_ngcontent-%COMP%]:hover{background:rgba(0,0,0,.04)}.completer-row[_ngcontent-%COMP%]{line-height:48px;height:48px;color:#000;width:100%;text-overflow:ellipsis;text-align:left;padding:0 16px}.completer-row-wrapper[_ngcontent-%COMP%]{text-overflow:ellipsis}.completer-selected-row[_ngcontent-%COMP%]{background:rgba(0,0,0,.04)}.completer-description[_ngcontent-%COMP%]{font-size:14px}.completer-image-default[_ngcontent-%COMP%]{width:16px;height:16px}.completer-image-holder[_ngcontent-%COMP%]{float:left;width:10%}.completer-item-text-image[_ngcontent-%COMP%]{float:right;width:90%}.none-display[_ngcontent-%COMP%]{display:none}.mat-standard-chip[_ngcontent-%COMP%] .mat-chip-remove.mat-icon[_ngcontent-%COMP%]{width:16px!important;height:16px!important}.mat-chip[_ngcontent-%COMP%] .mat-chip-remove.mat-icon[_ngcontent-%COMP%], .mat-chip[_ngcontent-%COMP%] .mat-chip-trailing-icon.mat-icon[_ngcontent-%COMP%]{font-size:16px!important}.mat-standard-chip[_ngcontent-%COMP%]{min-height:24px!important;font-size:14px!important}mat-chip-list[_ngcontent-%COMP%] .mat-chip-list-wrapper[_ngcontent-%COMP%]{margin:-7px!important}#chip-badge[_ngcontent-%COMP%]{margin:1px!important}"] }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CompleterCmp, [{ type: Component, args: [{ // tslint:disable:max-line-length selector: 'neo-completer-mat', template: ` <mat-form-field [ngClass]="formFieldClass" [appearance]="appearance"> <mat-label *ngIf="appearance">{{placeholder}}</mat-label> <div class="completer-holder" ctrCompleter> <input #ctrInput [class.none-display]="completerItem" [required]="required" matInput [attr.id]="inputId.length > 0 ? inputId : null" type="search" class="completer-input" ctrInput [ngClass]="inputClass" [(ngModel)]="searchStr" (ngModelChange)="onChange($event)" [attr.name]="inputName" [placeholder]="placeholder" [attr.maxlength]="maxChars" [tabindex]="fieldTabindex" [disabled]="ctrInputHidden.disabled" [clearSelected]="clearSelected" [clearUnselected]="clearUnselected" [overrideSuggested]="overrideSuggested" [openOnFocus]="openOnFocus" [fillHighlighted]="fillHighlighted" [openOnClick]="openOnClick" [selectOnClick]="selectOnClick" [autoSelectOnEnter]="autoSelectOnEnter" (blur)="onBlur()" (focus)="onFocus()" (keyup)="onKeyup($event)" (keydown)="onKeydown($event)" (click)="onClick($event)" autocomplete="off" autocorrect="off" autocapitalize="off" /> <input #ctrInputHidden [class.none-display]="true" matInput [formControl]="control"/> <div class="completer-dropdown-holder" *ctrList="dataService; minSearchLength: minSearchLength; pause: pause; autoMatch: autoMatch; initialValue: initialValue; autoHighlight: autoHighlight; displaySearching: displaySearching; let items = results; let searchActive = searching; let isInitialized = searchInitialized; let isOpen = isOpen;"> <div class="completer-dropdown" ctrDropdown *ngIf="isInitialized && isOpen && (( items?.length > 0|| (displayNoResults && !searchActive)) || (searchActive && displaySearching))"> <div *ngIf="searchActive && displaySearching" class="completer-searching">{{_textSearching}}</div> <div *ngIf="!searchActive && (!items || items?.length === 0)" class="completer-no-results">{{_textNoResults}}</div> <div class="completer-row-wrapper" *ngFor="let item of items; let rowIndex=index"> <div class="completer-row" [ctrRow]="rowIndex" [dataItem]="item"> <div *ngIf="item.image || item.image === ''" class="completer-image-holder"> <img *ngIf="item.image != ''" src="{{item.image}}" class="completer-image" /> <div *ngIf="item.image === ''" class="completer-image-default"></div> </div> <div class="completer-item-text" [ngClass]="{'completer-item-text-image': item.image || item.image === '' }"> <completer-list-item class="completer-title" [text]="item.title" [matchClass]="matchClass" [searchStr]="searchStr" [type]="'title'"></completer-list-item> <completer-list-item *ngIf="item.description && item.description != ''" class="completer-description" [text]="item.description" [matchClass]="matchClass" [searchStr]="searchStr" [type]="'description'"> </completer-list-item> </div> </div> </div> </div> </div> </div> <div *ngIf="completerItem" class="completer-holder"> <mat-chip-list [disabled]="ctrInputHidden.disabled"> <mat-chip id="chip-badge" [selectable]="true" [removable]="true" (removed)="removeItem()"> <span class="">{{completerItem?.title}}</span> <mat-icon matChipRemove>cancel</mat-icon> </mat-chip> </mat-chip-list> </div> </mat-form-field> `, styleUrls: ['completer-cmp.scss'], providers: [COMPLETER_CONTROL_VALUE_ACCESSOR] }] }], function () { return [{ type: i1.CompleterService }, { type: i0.ChangeDetectorRef }]; }, { dataService: [{ type: Input }], required: [{ type: Input }], name: [{ type: Input }], inputName: [{ type: Input }], inputId: [{ type: Input }], pause: [{ type: Input }], minSearchLength: [{ type: Input }], maxChars: [{ type: Input }], overrideSuggested: [{ type: Input }], clearSelected: [{ type: Input }], clearUnselected: [{ type: Input }], fillHighlighted: [{ type: Input }], placeholder: [{ type: Input }], matchClass: [{ type: Input }], fieldTabindex: [{ type: Input }], autoMatch: [{ type: Input }], disableInput: [{ type: Input }], inputClass: [{ type: Input }], formFieldClass: [{ type: Input }], autofocus: [{ type: Input }], openOnFocus: [{ type: Input }], openOnClick: [{ type: Input }], selectOnClick: [{ type: Input }], initialValue: [{ type: Input }], autoHighlight: [{ type: Input }], autoSelectOnEnter: [{ type: Input }], appearance: [{ type: Input }], form: [{ type: Input }], selected: [{ type: Output }], highlighted: [{ type: Output }], blurEvent: [{ type: Output, args: ['blur'] }], click: [{ type: Output }], focusEvent: [{ type: Output, args: ['focus'] }], opened: [{ type: Output }], keyup: [{ type: Output }], keydown: [{ type: Output }], completer: [{ type: ViewChild, args: [CtrCompleter, { static: true }] }], ctrInput: [{ type: ViewChild, args: ['ctrInput', { static: true }] }], datasource: [{ type: Input }], textNoResults: [{ type: Input }], textSearching: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWNtcC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci1tYXQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jb21wbGV0ZXItY21wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQ3pELFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUNwQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0IxRixpQ0FBOEI7SUFBQSxZQUFlO0lBQUEsaUJBQVk7OztJQUEzQixlQUFlO0lBQWYsd0NBQWU7OztJQXdCakMsK0JBQTBFO0lBQUEsWUFBa0I7SUFBQSxpQkFBTTs7O0lBQXhCLGVBQWtCO0lBQWxCLDRDQUFrQjs7O0lBQzVGLCtCQUEyRjtJQUFBLFlBQWtCO0lBQUEsaUJBQU07OztJQUF4QixlQUFrQjtJQUFsQiw0Q0FBa0I7OztJQUlqRywwQkFDQTs7O0lBRDhCLGlFQUFvQjs7O0lBQ2xELDBCQUFxRTs7O0lBRnpFLCtCQUNJO0lBQUEsc0ZBQ0E7SUFBQSxzRkFBK0Q7SUFDbkUsaUJBQU07OztJQUZHLGVBQXdCO0lBQXhCLDJDQUF3QjtJQUN4QixlQUF5QjtJQUF6Qiw0Q0FBeUI7OztJQUk5QiwwQ0FFc0I7Ozs7SUFGZ0YsMkNB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TCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFDTCxLQUFLOztrQkFFTCxNQUFNOztrQkFDTixNQUFNOztrQkFFTixNQUFNO21CQUFDLE1BQU07O2tCQUNiLE1BQU07O2tCQUNOLE1BQU07bUJBQUMsT0FBTzs7a0JBQ2QsTUFBTTs7a0JBQ04sTUFBTTs7a0JBQ04sTUFBTTs7a0JBRU4sU0FBUzttQkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztrQkFDeEMsU0FBUzttQkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztrQkFtRnRDLEtBQUs7O2tCQWFMLEtBQUs7O2tCQVFMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXHJcbiAgICBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0NoZWNrZWQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBDdHJDb21wbGV0ZXIgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2N0ci1jb21wbGV0ZXInO1xyXG5pbXBvcnQgeyBDb21wbGV0ZXJEYXRhIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcGxldGVyLWRhdGEnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tcGxldGVyLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZXJJdGVtIH0gZnJvbSAnLi9jb21wbGV0ZXItaXRlbSc7XHJcbmltcG9ydCB7IE1BWF9DSEFSUywgTUlOX1NFQVJDSF9MRU5HVEgsIFBBVVNFLCBURVhUX1NFQVJDSElORywgVEVYVF9OT19SRVNVTFRTIH0gZnJvbSAnLi4vZ2xvYmFscyc7XHJcblxyXG5jb25zdCBub29wID0gKCkgPT4geyB9O1xyXG5cclxuY29uc3QgQ09NUExFVEVSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IgPSB7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbXBsZXRlckNtcCksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgICBzZWxlY3RvcjogJ25lby1jb21wbGV0ZXItbWF0JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgW25nQ2xhc3NdPVwiZm9ybUZpZWxkQ2xhc3NcIiBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cImFwcGVhcmFuY2VcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGxldGVyLWhvbGRlclwiIGN0ckNvbXBsZXRlcj5cclxuICAgICAgICAgICAgPGlucHV0ICNjdHJJbnB1dCBbY2xhc3Mubm9uZS1kaXNwbGF5XT1cImNvbXBsZXRlckl0ZW1cIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBtYXRJbnB1dCBbYXR0ci5pZF09XCJpbnB1dElkLmxlbmd0aCA+IDAgPyBpbnB1dElkIDogbnVsbFwiIHR5cGU9XCJzZWFyY2hcIiBjbGFzcz1cImNvbXBsZXRlci1pbnB1dFwiIGN0cklucHV0IFtuZ0NsYXNzXT1cImlucHV0Q2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hTdHJcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgW2F0dHIubmFtZV09XCJpbnB1dE5hbWVcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm1heENoYXJzXCIgW3RhYmluZGV4XT1cImZpZWxkVGFiaW5kZXhcIiBbZGlzYWJsZWRdPVwiY3RySW5wdXRIaWRkZW4uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsZWFyU2VsZWN0ZWRdPVwiY2xlYXJTZWxlY3RlZFwiIFtjbGVhclVuc2VsZWN0ZWRdPVwiY2xlYXJVbnNlbGVjdGVkXCIgXHJcbiAgICAgICAgICAgICAgICBbb3ZlcnJpZGVTdWdnZXN0ZWRdPVwib3ZlcnJpZGVTdWdnZXN0ZWRcIiBbb3Blbk9uRm9jdXNdPVwib3Blbk9uRm9jdXNcIiBbZmlsbEhpZ2hsaWdodGVkXT1cImZpbGxIaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICBbb3Blbk9uQ2xpY2tdPVwib3Blbk9uQ2xpY2tcIiBbc2VsZWN0T25DbGlja109XCJzZWxlY3RPbkNsaWNrXCIgW2F1dG9TZWxlY3RPbkVudGVyXT1cImF1dG9TZWxlY3RPbkVudGVyXCJcclxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChrZXl1cCk9XCJvbktleXVwKCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjY3RySW5wdXRIaWRkZW4gW2NsYXNzLm5vbmUtZGlzcGxheV09XCJ0cnVlXCIgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIi8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wbGV0ZXItZHJvcGRvd24taG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICpjdHJMaXN0PVwiZGF0YVNlcnZpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluU2VhcmNoTGVuZ3RoOiBtaW5TZWFyY2hMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF1c2U6IHBhdXNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9NYXRjaDogYXV0b01hdGNoO1xyXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dG9IaWdobGlnaHQ6IGF1dG9IaWdobGlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVNlYXJjaGluZzogZGlzcGxheVNlYXJjaGluZztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZWFyY2hBY3RpdmUgPSBzZWFyY2hpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzSW5pdGlhbGl6ZWQgPSBzZWFyY2hJbml0aWFsaXplZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNPcGVuID0gaXNPcGVuO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBsZXRlci1kcm9wZG93blwiIGN0ckRyb3Bkb3duICpuZ0lmPVwiaXNJbml0aWFsaXplZCAmJiBpc09wZW4gJiYgKCggaXRlbXM/Lmxlbmd0aCA+IDB8fCAoZGlzcGxheU5vUmVzdWx0cyAmJiAhc2VhcmNoQWN0aXZlKSkgfHwgKHNlYXJjaEFjdGl2ZSAmJiBkaXNwbGF5U2VhcmNoaW5nKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoQWN0aXZlICYmIGRpc3BsYXlTZWFyY2hpbmdcIiBjbGFzcz1cImNvbXBsZXRlci1zZWFyY2hpbmdcIj57e190ZXh0U2VhcmNoaW5nfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlYXJjaEFjdGl2ZSAmJiAoIWl0ZW1zIHx8IGl0ZW1zPy5sZW5ndGggPT09IDApXCIgY2xhc3M9XCJjb21wbGV0ZXItbm8tcmVzdWx0c1wiPnt7X3RleHROb1Jlc3VsdHN9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wbGV0ZXItcm93LXdyYXBwZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgbGV0IHJvd0luZGV4PWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wbGV0ZXItcm93XCIgW2N0clJvd109XCJyb3dJbmRleFwiIFtkYXRhSXRlbV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5pbWFnZSB8fCBpdGVtLmltYWdlID09PSAnJ1wiIGNsYXNzPVwiY29tcGxldGVyLWltYWdlLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpdGVtLmltYWdlICE9ICcnXCIgc3JjPVwie3tpdGVtLmltYWdlfX1cIiBjbGFzcz1cImNvbXBsZXRlci1pbWFnZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uaW1hZ2UgPT09ICcnXCIgY2xhc3M9XCJjb21wbGV0ZXItaW1hZ2UtZGVmYXVsdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGxldGVyLWl0ZW0tdGV4dFwiIFtuZ0NsYXNzXT1cInsnY29tcGxldGVyLWl0ZW0tdGV4dC1pbWFnZSc6IGl0ZW0uaW1hZ2UgfHwgaXRlbS5pbWFnZSA9PT0gJycgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV0ZXItbGlzdC1pdGVtIGNsYXNzPVwiY29tcGxldGVyLXRpdGxlXCIgW3RleHRdPVwiaXRlbS50aXRsZVwiIFttYXRjaENsYXNzXT1cIm1hdGNoQ2xhc3NcIiBbc2VhcmNoU3RyXT1cInNlYXJjaFN0clwiIFt0eXBlXT1cIid0aXRsZSdcIj48L2NvbXBsZXRlci1saXN0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBsZXRlci1saXN0LWl0ZW0gKm5nSWY9XCJpdGVtLmRlc2NyaXB0aW9uICYmIGl0ZW0uZGVzY3JpcHRpb24gIT0gJydcIiBjbGFzcz1cImNvbXBsZXRlci1kZXNjcmlwdGlvblwiIFt0ZXh0XT1cIml0ZW0uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0Y2hDbGFzc109XCJtYXRjaENsYXNzXCIgW3NlYXJjaFN0cl09XCJzZWFyY2hTdHJcIiBbdHlwZV09XCInZGVzY3JpcHRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV0ZXItbGlzdC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb21wbGV0ZXJJdGVtXCIgY2xhc3M9XCJjb21wbGV0ZXItaG9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0IFtkaXNhYmxlZF09XCJjdHJJbnB1dEhpZGRlbi5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGlkPVwiY2hpcC1iYWRnZVwiIFtzZWxlY3RhYmxlXT1cInRydWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJyZW1vdmVJdGVtKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlwiPnt7Y29tcGxldGVySXRlbT8udGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIGAsXHJcbiAgICBzdHlsZVVybHM6IFsnY29tcGxldGVyLWNtcC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDT01QTEVURVJfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl1cclxufSlcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGNsYXNzIENvbXBsZXRlckNtcCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQge1xyXG4gICAgQElucHV0KCkgcHVibGljIGRhdGFTZXJ2aWNlOiBDb21wbGV0ZXJEYXRhO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZzsgICAgXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5wdXROYW1lID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZCA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIHBhdXNlID0gUEFVU0U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWluU2V