com.phloxui
Version:
PhloxUI Ng2+ Framework
997 lines (992 loc) • 81.7 kB
JavaScript
/**
* @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. -->
{{ ' ' }}
</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. -->
{{ ' ' }}
</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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