UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

997 lines (992 loc) 81.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { TextBox } from '../../../../../component/dataview/input/TextBox.component'; import { I18N } from '../../../../../decorator/I18N.decorator'; import { Option } from '../../../../../decorator/Option.decorator'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; import { EventUtils } from '../../../../../share/utils/EventUtils'; import { BEFORE_VIEW_HIDE_EVENT, VIEW_HIDE_EVENT, BEFORE_VIEW_SHOW_EVENT, VIEW_SHOW_EVENT, BEFORE_SELECT_EVENT, SELECT_EVENT } from '../../../../../share/CustomEventType'; import { FormatterFactory } from '../../../../../service/FormatterFactory.service'; import { FormControl } from '@angular/forms'; import { Observable } from 'rxjs'; import { startWith } from 'rxjs/operators'; import { AbstractHasFormatterInputDataView } from '../../../../../component/dataview/input/AbstractHasFormatterInputDataView'; import { MaterialAutocompleteModel } from '../../model/MaterialAutocompleteModel'; const /** @type {?} */ TYPE_NAME = "material-autocomplete"; const /** @type {?} */ NORMAL = 'normal'; const /** @type {?} */ SUCCESS = 'success'; const /** @type {?} */ WARNING = 'warning'; const /** @type {?} */ ERROR = 'error'; export class MaterialAutocomplete extends TextBox { /** * @param {?} elementRef * @param {?} formatterFactory * @param {?} needFocusService */ constructor(elementRef, formatterFactory, needFocusService) { super(elementRef, formatterFactory, needFocusService); this.beforeViewShowEvent = new EventEmitter(); this.viewShowEvent = new EventEmitter(); this.beforeViewHideEvent = new EventEmitter(); this.viewHideEvent = new EventEmitter(); this.beforeSelectEvent = new EventEmitter(); this.selectEvent = new EventEmitter(); this.formControl = new FormControl(); this._formControl = new FormControl(); this.active = false; this.filteredItems = new Observable((observer) => { let /** @type {?} */ func = (text) => { if (this.isDisabled()) { return []; } if (this.handler && typeof this.handler === 'function') { let /** @type {?} */ result = this.handler(text); if (result === null || result === undefined) { return []; } else if (Array.isArray(result)) { return result; } else if (result instanceof Promise) { return result.then((result) => { if (result === null || result === undefined) { return []; } else if (Array.isArray(result)) { return result; } else { return [result]; } }); } else { return [result]; } } else { return []; } }; this._formControl.valueChanges.pipe(startWith('')).subscribe((text) => { // "func" will only return array or Promise of array. let /** @type {?} */ result = func(text); if (result instanceof Promise) { result.then((result) => { observer.next(result); }); } else { observer.next(result); } }); }); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); if (!this.model) { this.model = new MaterialAutocompleteModel(); } this.refreshActiveTextBox(); } /** * @return {?} */ getClassMatFocused() { return this.isReadOnly() ? { 'mat-focused': this._isClassFocused() } : {}; } /** * @return {?} */ _displayHelp() { let /** @type {?} */ hasHelp = this.hasHelp(); return hasHelp && this.isShowHelp(); } /** * @return {?} */ refreshActiveTextBox() { let /** @type {?} */ val = this.getFormattedData(); if (val !== null && typeof val !== 'undefined') { if (typeof val === 'string' && val === '') { this.active = false; } else { this.active = true; } } else { this.active = false; } } /** * @param {?} inputValue * @param {?} results * @return {?} */ onValidationEnd(inputValue, results) { } /** * @param {?} data * @param {?} inputVal * @return {?} */ onDataChange(data, inputVal) { super.onDataChange(data, inputVal); this.refreshActiveTextBox(); } /** * @param {?} $event * @return {?} */ doFocus($event) { super.doFocus($event); this.active = true; this.classFocused = true; } /** * @param {?} $event * @return {?} */ doLostFocus($event) { super.doLostFocus($event); this.refreshActiveTextBox(); this.classFocused = false; } /** * @return {?} */ _isActive() { return this.active; } /** * @param {?} $event * @return {?} */ onValueChanged($event) { super.onValueChanged($event); this.refreshActiveTextBox(); } /** * @param {?} data * @return {?} */ selfSaveData(data) { super.selfSaveData(data); this.refreshActiveTextBox(); } /** * @return {?} */ _isClassFocused() { return this.classFocused; } /** * @return {?} */ getDescription() { return this.description; } /** * @param {?} description * @return {?} */ setDescription(description) { this.description = description; } /** * @return {?} */ getLabel() { return this.label; } /** * @param {?} label * @return {?} */ setLabel(label) { this.label = label; } /** * @return {?} */ getPanelWidth() { return this.panelWidth; } /** * @param {?} panelWidth * @return {?} */ setPanelWidth(panelWidth) { this.panelWidth = panelWidth; } /** * @return {?} */ isAutoActiveFirstOption() { return this.autoActiveFirstOption; } /** * @param {?} autoActiveFirstOption * @return {?} */ setAutoActiveFirstOption(autoActiveFirstOption) { this.autoActiveFirstOption = autoActiveFirstOption; } /** * @return {?} */ isDisableRipple() { return this.disableRipple; } /** * @param {?} disableRipple * @return {?} */ setDisableRipple(disableRipple) { this.disableRipple = disableRipple; } /** * @return {?} */ getFilteredItems() { return this.filteredItems; } /** * @return {?} */ getModel() { return this.model; } /** * @param {?} model * @return {?} */ setModel(model) { this.model = model; } /** * @param {?} item * @return {?} */ getItemLabel(item) { let /** @type {?} */ label = AbstractHasFormatterInputDataView.resolveFormattedData(this.formatter, item); if (!label) { return ''; } else { return label; } } /** * @return {?} */ resetValidationResult() { super.resetValidationResult(); this.active = false; } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ onOpened($event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeViewShowEvent', $event, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeViewShowEvent($event); }, ($event, result) => { // emitAfterEvent this.emitViewShowEvent($event); }, ($event) => { // doPrevented }); } /** * @param {?=} $event * @return {?} */ emitBeforeViewShowEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_VIEW_SHOW_EVENT, this, data, $event); this.beforeViewShowEvent.emit(ev); } /** * @param {?=} $event * @return {?} */ emitViewShowEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(VIEW_SHOW_EVENT, this, data, $event); this.viewShowEvent.emit(ev); } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ onClosed($event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeViewHideEvent', $event, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeViewHideEvent($event); }, ($event, result) => { // emitAfterEvent this.emitViewHideEvent($event); }, ($event) => { // doPrevented }); } /** * @param {?=} $event * @return {?} */ emitBeforeViewHideEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_VIEW_HIDE_EVENT, this, data, $event); this.beforeViewHideEvent.emit(ev); } /** * @param {?=} $event * @return {?} */ emitViewHideEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(VIEW_HIDE_EVENT, this, data, $event); this.viewHideEvent.emit(ev); } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ onOptionSelected($event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeSelectEvent', $event, fireEvent, ($event) => { // doEvent this.setFormattedData($event.option.value); }, ($event) => { // emitBeforeEvent this.emitBeforeSelectEvent($event.option.value, $event); }, ($event, result) => { // emitAfterEvent this.emitSelectEvent($event.option.value, $event); }, ($event) => { // doPrevented }); } /** * @param {?} inputVal * @param {?=} $event * @param {?=} fireEvent * @return {?} */ setInputValue(inputVal, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } let /** @type {?} */ oldValue = this.getInputValue(); EventUtils.handleBrowserEvent(this, 'beforeChangeEvent', $event, fireEvent, ($event) => { // doEvent // Set input value into data object. this._setValueToData(inputVal); }, ($event) => { // emitBeforeEvent this.emitBeforeChangeEvent(oldValue, inputVal, true, $event); }, ($event) => { // emitAfterEvent this.emitChangeEvent(oldValue, inputVal, true, $event); }, ($event) => { // doPrevented if (typeof oldValue === "object") { oldValue = null; } this.formControl.setValue(oldValue); }, 'inputValue'); this._formattedData = this.getFormattedData(); } /** * @param {?} value * @param {?=} $event * @return {?} */ emitBeforeSelectEvent(value, $event) { let /** @type {?} */ eventData = value; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SELECT_EVENT, this, data, $event); if (this.beforeSelectEvent !== null && this.beforeSelectEvent !== undefined) { this.beforeSelectEvent.emit(ev); } } /** * @param {?} value * @param {?=} $event * @return {?} */ emitSelectEvent(value, $event) { let /** @type {?} */ eventData = value; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(SELECT_EVENT, this, data, $event); if (this.selectEvent !== null && this.selectEvent !== undefined) { this.selectEvent.emit(ev); } } /** * @param {?} $event * @return {?} */ onKeyUp($event) { if (this.isReadOnly() || this.isDisabled()) { return; } super.onKeyUp($event); } /** * @param {?} $event * @return {?} */ onKeyDown($event) { if (this.isReadOnly() || this.isDisabled()) { return; } super.onKeyDown($event); } /** * @return {?} */ getBeforeViewHideEvent() { return this.beforeViewHideEvent; } /** * @param {?} event * @return {?} */ setBeforeViewHideEvent(event) { this.beforeViewHideEvent = event; } /** * @return {?} */ getViewHideEvent() { return this.viewHideEvent; } /** * @param {?} event * @return {?} */ setViewHideEvent(event) { this.viewHideEvent = event; } /** * @return {?} */ getBeforeViewShowEvent() { return this.beforeViewShowEvent; } /** * @param {?} event * @return {?} */ setBeforeViewShowEvent(event) { this.beforeViewShowEvent = event; } /** * @return {?} */ getViewShowEvent() { return this.viewShowEvent; } /** * @param {?} event * @return {?} */ setViewShowEvent(event) { this.viewShowEvent = event; } /** * @return {?} */ getBeforeSelectEvent() { return this.beforeSelectEvent; } /** * @param {?} event * @return {?} */ setBeforeSelectEvent(event) { this.beforeSelectEvent = event; } /** * @return {?} */ getSelectEvent() { return this.selectEvent; } /** * @param {?} event * @return {?} */ setSelectEvent(event) { this.selectEvent = event; } } MaterialAutocomplete.TYPE_NAME = TYPE_NAME; MaterialAutocomplete.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="material-input material-autocomplete" [style.width]="getWidth()"> <div class="autocomplete-wrapper" [class.active]="_isActive()"> <mat-form-field [ngClass]="getClassMatFocused()"> <input matInput [matAutocomplete]="auto" *ngIf="isDisabled()" [disabled]="isDisabled()" placeholder="{{getLabel() | phx_text}}" [attr.maxlength]="getMaxLength()" type="{{getType()}}" class="form-control" [readonly]="isReadOnly()" [class.dirty]="isDataDirty()" (change)="onValueChanged($event)" (focusin)="onFocusing($event)" (blur)="onLostFocusing($event)" (keyup)="onKeyUp($event)" (keydown)="onKeyDown($event)" [class.normal]="isNormal() && !isDisabled()" [class.success]="isSuccess() && !isDisabled()" [class.warning]="isWarning() && !isDisabled()" [class.error]="isError() && !isDisabled()" [value]="this.getInputValue() | phx_text"> <input matInput [matAutocomplete]="auto" [formControl]="formControl" *ngIf="!isDisabled()" placeholder="{{getLabel() | phx_text}}" [attr.maxlength]="getMaxLength()" type="{{getType()}}" class="form-control" [readonly]="isReadOnly()" [class.dirty]="isDataDirty()" (change)="onValueChanged($event)" (focusin)="onFocusing($event)" (blur)="onLostFocusing($event)" (keyup)="onKeyUp($event)" (keydown)="onKeyDown($event)" [class.normal]="isNormal() && !isDisabled()" [class.success]="isSuccess() && !isDisabled()" [class.warning]="isWarning() && !isDisabled()" [class.error]="isError() && !isDisabled()"> <mat-autocomplete #auto="matAutocomplete" [panelWidth]="getPanelWidth()" [disableRipple]="isDisableRipple()" [autoActiveFirstOption]="isAutoActiveFirstOption()" (opened)="onOpened($event)" (closed)="onClosed($event)" (optionSelected)="onOptionSelected($event)"> <mat-option *ngFor="let item of getFilteredItems() | async" [value]="getItemLabel(item)"> <phx-component-wrapper [type]="getModel().componentType" [model]="getModel().componentModel" [dataParent]="this" [data]="item" [setting]="getModel().componentSetting" [handler]="getModel().componentHandler" [options]="getModel().componentOptions" [ignoreParentData]="true"></phx-component-wrapper> </mat-option> </mat-autocomplete> </mat-form-field> </div> <div class="validation" [style.display]="getValidationResultMessage() ? undefined : 'none'" [class.normal]="isNormal() && !isDisabled()" [class.success]="isSuccess() && !isDisabled()" [class.warning]="isWarning() && !isDisabled()" [class.error]="isError() && !isDisabled()"> <ng-template [ngIf]="getValidationResultMessage()" [ngIfElse]="validation_else"> {{getValidationResultMessage() | phx_text}} </ng-template> <ng-template #validation_else> <!-- We've to put whitespace if there is no validation msg to prevent empty dom --> <!-- since if validate msg's <div> dom is empty, the component positioning --> <!-- will be misplaced. --> {{ '&nbsp;' }} </ng-template> </div> <div class="description" [style.display]="getValidationResultMessage() ? 'none' : undefined" [class.normal]="isNormal() && !isDisabled()" [class.success]="isSuccess() && !isDisabled()" [class.warning]="isWarning() && !isDisabled()" [class.error]="isError() && !isDisabled()"> <ng-template [ngIf]="getDescription()" [ngIfElse]="description_else"> {{ getDescription() | phx_text }} </ng-template> <ng-template #description_else> <!-- We've to put whitespace if there is no description to prevent empty dom --> <!-- since if description's <div> dom is empty, the component positioning --> <!-- will be misplaced. --> {{ '&nbsp;' }} </ng-template> </div> <div class="help"> {{getHelp() | phx_text}} </div> </div> ` },] }, ]; /** @nocollapse */ MaterialAutocomplete.ctorParameters = () => [ { type: ElementRef, }, { type: FormatterFactory, }, { type: NeedFocusService, }, ]; MaterialAutocomplete.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "formatter": [{ type: Input, args: ['formatter',] },], "formatterName": [{ type: Input, args: ['formatterName',] },], "formatterOptions": [{ type: Input, args: ['formatterOptions',] },], "formatterUsePropertyValue": [{ type: Input, args: ['formatterUsePropertyValue',] },], "type": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "maxLength": [{ type: Input, args: ['maxLength',] },], "label": [{ type: Input },], "description": [{ type: Input },], "autoActiveFirstOption": [{ type: Input },], "disableRipple": [{ type: Input },], "panelWidth": [{ type: Input },], "handler": [{ type: Input },], "model": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeKeyUpEvent": [{ type: Output, args: ['phxBeforeKeyUp',] },], "keyUpEvent": [{ type: Output, args: ['phxKeyUp',] },], "beforeKeyDownEvent": [{ type: Output, args: ['phxBeforeKeyDown',] },], "keyDownEvent": [{ type: Output, args: ['phxKeyDown',] },], "beforeViewHideEvent": [{ type: Output, args: ['phxBeforeViewHide',] },], "viewHideEvent": [{ type: Output, args: ['phxViewHide',] },], "beforeViewShowEvent": [{ type: Output, args: ['phxBeforeViewShow',] },], "viewShowEvent": [{ type: Output, args: ['phxViewShow',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialAutocomplete.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialAutocomplete.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "help", void 0); tslib_1.__decorate([ Option('formatter.instance'), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "formatter", void 0); tslib_1.__decorate([ Option('formatter.name'), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "formatterName", void 0); tslib_1.__decorate([ Option('formatter.options'), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "formatterOptions", void 0); tslib_1.__decorate([ Option('formatter.usePropertyValue'), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "formatterUsePropertyValue", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "type", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "height", void 0); tslib_1.__decorate([ Option('maxLength'), tslib_1.__metadata("design:type", Number) ], MaterialAutocomplete.prototype, "maxLength", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "label", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialAutocomplete.prototype, "description", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "autoActiveFirstOption", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialAutocomplete.prototype, "disableRipple", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialAutocomplete.prototype, "panelWidth", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialAutocomplete.prototype, "handler", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", MaterialAutocompleteModel) ], MaterialAutocomplete.prototype, "model", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeKeyUp'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeKeyUpEvent", void 0); tslib_1.__decorate([ Option('keyUp'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "keyUpEvent", void 0); tslib_1.__decorate([ Option('beforeKeyDown'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeKeyDownEvent", void 0); tslib_1.__decorate([ Option('keyDown'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "keyDownEvent", void 0); tslib_1.__decorate([ Option('beforeViewHide'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeViewHideEvent", void 0); tslib_1.__decorate([ Option('viewHide'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "viewHideEvent", void 0); tslib_1.__decorate([ Option('beforeViewShow'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeViewShowEvent", void 0); tslib_1.__decorate([ Option('viewShow'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "viewShowEvent", void 0); tslib_1.__decorate([ Option('beforeSelect'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option('select'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialAutocomplete.prototype, "selectEvent", void 0); function MaterialAutocomplete_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialAutocomplete.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialAutocomplete.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialAutocomplete.propDecorators; /** @type {?} */ MaterialAutocomplete.TYPE_NAME; /** @type {?} */ MaterialAutocomplete.prototype.dataParent; /** @type {?} */ MaterialAutocomplete.prototype.ignoreParentData; /** @type {?} */ MaterialAutocomplete.prototype.data; /** @type {?} */ MaterialAutocomplete.prototype.ignoreParentDisabled; /** @type {?} */ MaterialAutocomplete.prototype.delegateHistory; /** @type {?} */ MaterialAutocomplete.prototype.onDisabled; /** @type {?} */ MaterialAutocomplete.prototype.onEnabled; /** @type {?} */ MaterialAutocomplete.prototype.loadingEnabled; /** @type {?} */ MaterialAutocomplete.prototype.i18nKey; /** @type {?} */ MaterialAutocomplete.prototype.bypass; /** @type {?} */ MaterialAutocomplete.prototype.options; /** @type {?} */ MaterialAutocomplete.prototype.disabled; /** @type {?} */ MaterialAutocomplete.prototype.field; /** @type {?} */ MaterialAutocomplete.prototype.name; /** @type {?} */ MaterialAutocomplete.prototype.typeOfData; /** @type {?} */ MaterialAutocomplete.prototype.readOnly; /** @type {?} */ MaterialAutocomplete.prototype.help; /** @type {?} */ MaterialAutocomplete.prototype.formatter; /** @type {?} */ MaterialAutocomplete.prototype.formatterName; /** @type {?} */ MaterialAutocomplete.prototype.formatterOptions; /** @type {?} */ MaterialAutocomplete.prototype.formatterUsePropertyValue; /** @type {?} */ MaterialAutocomplete.prototype.type; /** @type {?} */ MaterialAutocomplete.prototype.width; /** @type {?} */ MaterialAutocomplete.prototype.height; /** @type {?} */ MaterialAutocomplete.prototype.maxLength; /** @type {?} */ MaterialAutocomplete.prototype.label; /** @type {?} */ MaterialAutocomplete.prototype.description; /** @type {?} */ MaterialAutocomplete.prototype.autoActiveFirstOption; /** @type {?} */ MaterialAutocomplete.prototype.disableRipple; /** @type {?} */ MaterialAutocomplete.prototype.panelWidth; /** @type {?} */ MaterialAutocomplete.prototype.handler; /** @type {?} */ MaterialAutocomplete.prototype.model; /** @type {?} */ MaterialAutocomplete.prototype.formControl; /** @type {?} */ MaterialAutocomplete.prototype.loadEvent; /** @type {?} */ MaterialAutocomplete.prototype.startValidateEvent; /** @type {?} */ MaterialAutocomplete.prototype.endValidateEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeFocusEvent; /** @type {?} */ MaterialAutocomplete.prototype.focusEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialAutocomplete.prototype.lostFocusEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeChangeEvent; /** @type {?} */ MaterialAutocomplete.prototype.changeEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeKeyUpEvent; /** @type {?} */ MaterialAutocomplete.prototype.keyUpEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeKeyDownEvent; /** @type {?} */ MaterialAutocomplete.prototype.keyDownEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeViewHideEvent; /** @type {?} */ MaterialAutocomplete.prototype.viewHideEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeViewShowEvent; /** @type {?} */ MaterialAutocomplete.prototype.viewShowEvent; /** @type {?} */ MaterialAutocomplete.prototype.beforeSelectEvent; /** @type {?} */ MaterialAutocomplete.prototype.selectEvent; /** @type {?} */ MaterialAutocomplete.prototype._formControl; /** @type {?} */ MaterialAutocomplete.prototype.active; /** @type {?} */ MaterialAutocomplete.prototype.classFocused; /** @type {?} */ MaterialAutocomplete.prototype.filteredItems; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxBdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsQXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUdwRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzSyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDOUgsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFNbEYsdUJBQU0sU0FBUyxHQUFXLHVCQUF1QixDQUFD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