UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

985 lines (984 loc) 92 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { AbstractDataView } from '../AbstractDataView'; import { DataUtils } from '../../../share/utils/DataUtils'; import { Option } from '../../../decorator/Option.decorator'; import { LOST_FOCUS_EVENT, FOCUS_EVENT, DATA_CHANGE_EVENT, BEFORE_DATA_CHANGE_EVENT, BEFORE_LOST_FOCUS_EVENT, BEFORE_FOCUS_EVENT, START_VALIDATE_EVENT, END_VALIDATE_EVENT } from '../../../share/CustomEventType'; import { ValidationStatus } from '../../validate/ValidationStatus'; import { EventUtils } from '../../../share/utils/EventUtils'; const /** @type {?} */ NORMAL = 'normal'; const /** @type {?} */ SUCCESS = 'success'; const /** @type {?} */ WARNING = 'warning'; const /** @type {?} */ ERROR = 'error'; const /** @type {?} */ TYPE_AUTO = 'auto'; const /** @type {?} */ READ_ONLY = 'read-only'; /** * @abstract */ export class AbstractInputDataView extends AbstractDataView { /** * @param {?} elementRef * @param {?} needFocusService */ constructor(elementRef, needFocusService) { super(elementRef); this.needFocusService = needFocusService; this.validators = []; this.startValidateEvent = new EventEmitter(); this.endValidateEvent = new EventEmitter(); this.lostFocusEvent = new EventEmitter(); this.focusEvent = new EventEmitter(); this.changeEvent = new EventEmitter(); this.beforeChangeEvent = new EventEmitter(); this.beforeLostFocusEvent = new EventEmitter(); this.beforeFocusEvent = new EventEmitter(); this.elementRef = elementRef; } /** * @return {?} */ get readOnly() { return this._readOnly; } /** * @param {?} readOnly * @return {?} */ set readOnly(readOnly) { this._readOnly = readOnly; this.injectReadOnlyStyleClass(); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); // Auto resolve type of data if (this.typeOfData === null || this.typeOfData === undefined || this.typeOfData.toLowerCase() === TYPE_AUTO) { let /** @type {?} */ inputVal = this.getInputValue(); if (inputVal !== null && inputVal !== undefined) { this.typeOfData = typeof inputVal; } } } /** * @param {?} $event * @return {?} */ emitLostFocusEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(LOST_FOCUS_EVENT, this, data, $event); if (this.lostFocusEvent !== null && this.lostFocusEvent !== undefined) { this.lostFocusEvent.emit(ev); } } /** * @param {?} $event * @return {?} */ emitFocusEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(FOCUS_EVENT, this, data, $event); if (this.focusEvent !== null && this.focusEvent !== undefined) { this.focusEvent.emit(ev); } } /** * @param {?} value * @return {?} */ doValidate(value) { let /** @type {?} */ result = []; if (this.validators !== null && typeof this.validators !== 'undefined') { for (let /** @type {?} */ vdt of this.validators) { let /** @type {?} */ vResult = vdt.validate(value); result.push(vResult); } } return result; } /** * @param {?} typeOfData * @param {?} inputVal * @return {?} */ _castValueToData(typeOfData, inputVal) { if (inputVal === null || inputVal === undefined) { return inputVal; } if (typeOfData === null || typeOfData === undefined || typeOfData.toLowerCase() === AbstractInputDataView.TYPE_AUTO) { // Auto resolve "typeOfData" of inputVal. typeOfData = typeof inputVal; } if (typeOfData === 'string') { return inputVal.toString(); } else if (typeOfData === 'number') { return Number(inputVal); } else if (typeOfData === 'boolean') { return Boolean(inputVal); } // Object or Array return inputVal; } /** * @param {?} inputVal * @return {?} */ _setValueToData(inputVal) { if (inputVal !== null && inputVal !== undefined) { if (this.typeOfData === null || this.typeOfData === undefined || this.typeOfData.toLowerCase() === AbstractInputDataView.TYPE_AUTO) { // Auto resolve "typeOfData" of inputVal. this.typeOfData = typeof inputVal; } } inputVal = this._castValueToData(this.typeOfData, inputVal); if (this.isMappingEnable()) { let /** @type {?} */ tempArray = []; let /** @type {?} */ dataArray = []; if (Array.isArray(this.data)) { dataArray = this.data; } else { dataArray.push(this.data); } let /** @type {?} */ index = 0; for (let /** @type {?} */ item of dataArray) { if (typeof item === 'object' && !Array.isArray(item)) { DataUtils.setDataValue(this.field, item, inputVal); } else { tempArray.push({ value: inputVal, index: index }); } index++; } // Update primitive values into dataArray members. for (let /** @type {?} */ item of tempArray) { let /** @type {?} */ idx = item.index; let /** @type {?} */ val = item.value; if (idx < dataArray.length) { dataArray[idx] = val; } } } else { this.data = inputVal; } // Update UI this.onDataChange(this.data, inputVal); this.validate(inputVal); } /** * @param {?} oldValue * @param {?} newValue * @param {?} valueChange * @param {?=} $event * @return {?} */ emitBeforeChangeEvent(oldValue, newValue, valueChange, $event) { let /** @type {?} */ eventData = { data: this.data, oldValue: oldValue, newValue: newValue, valueChange: valueChange }; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_DATA_CHANGE_EVENT, this, data, $event); // We've to emitBeforeChangeEvent() on parent first since it might be prevented from parent. // In this case, the child change event should be prevented also. let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent()); if (parent !== null && parent !== undefined) { if (typeof parent.getBeforeChangeEvent === 'function') { // In most cases, we'll emitBeforeChangeEvent() on parent with the same event object ("ev"). // to make it preventable from parent. parent.getBeforeChangeEvent().emit(ev); } else if (typeof parent.emitBeforeChangeEvent === 'function') { // Fall back method if parent doesn't have getBeforeChangeEvent() method. parent.emitBeforeChangeEvent(oldValue, newValue, $event); } } if (this.beforeChangeEvent !== null && this.beforeChangeEvent !== undefined) { this.beforeChangeEvent.emit(ev); } } /** * @param {?} oldValue * @param {?} newValue * @param {?} valueChange * @param {?=} $event * @return {?} */ emitChangeEvent(oldValue, newValue, valueChange, $event) { let /** @type {?} */ eventData = { data: this.data, oldValue: oldValue, newValue: newValue, valueChange: valueChange }; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_CHANGE_EVENT, this, data, $event); if (this.changeEvent !== null && this.changeEvent !== undefined) { this.changeEvent.emit(ev); } let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent()); if (parent !== null && parent !== undefined) { if (typeof parent.getChangeEvent === 'function') { // In most cases, we'll emitChangeEvent() on parent with the same event object ("ev"). parent.getChangeEvent().emit(ev); } else if (typeof parent.emitChangeEvent === 'function') { // Fall back method if parent doesn't have getChangeEvent() method. parent.emitChangeEvent(oldValue, newValue, $event); } } } /** * @param {?=} $event * @return {?} */ emitBeforeFocusEvent($event) { // emit event let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_FOCUS_EVENT, this, data, $event); if (this.beforeFocusEvent !== null && this.beforeFocusEvent !== undefined) { this.beforeFocusEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitBeforeLostFocusEvent($event) { // emit event let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LOST_FOCUS_EVENT, this, data, $event); if (this.beforeLostFocusEvent !== null && this.beforeLostFocusEvent !== undefined) { this.beforeLostFocusEvent.emit(ev); } } /** * @return {?} */ injectStyleClasses() { super.injectStyleClasses(); this.injectStatusStyleClass(); this.injectReadOnlyStyleClass(); } /** * @return {?} */ injectStatusStyleClass() { // Auto inject status css class. if (this.elementRef) { // First, clear all old status css classes. $(this.elementRef.nativeElement).removeClass(NORMAL); $(this.elementRef.nativeElement).removeClass(WARNING); $(this.elementRef.nativeElement).removeClass(ERROR); $(this.elementRef.nativeElement).removeClass(SUCCESS); // Then, add current status css class. if (this.status) { $(this.elementRef.nativeElement).addClass(this.status); } } } /** * @return {?} */ injectReadOnlyStyleClass() { // Auto inject read only css class. if (this.elementRef) { // First, clear old read only css class. $(this.elementRef.nativeElement).removeClass(READ_ONLY); // Then, add current read only css class. if (this.readOnly) { $(this.elementRef.nativeElement).addClass(READ_ONLY); } } } /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ onDataChangePrevented(oldValue, inputVal, data) { } /** * @return {?} */ isNormal() { let /** @type {?} */ statusName = this.getStatus(); return statusName === NORMAL; } /** * @return {?} */ isSuccess() { let /** @type {?} */ statusName = this.getStatus(); return statusName === SUCCESS; } /** * @return {?} */ isError() { let /** @type {?} */ statusName = this.getStatus(); return statusName === ERROR; } /** * @return {?} */ isWarning() { let /** @type {?} */ statusName = this.getStatus(); return statusName === WARNING; } /** * @return {?} */ focus() { if (this.needFocusService === null || this.needFocusService === undefined) { return; } this.needFocusService.setFocusingComponent(this, null); } /** * @return {?} */ getValidationResultMessage() { let /** @type {?} */ message = ""; if (this.validationResults === null || this.validationResults === undefined || this.validationResults.length === 0) { return message; } let /** @type {?} */ status = 0; if (this.getStatus() === ERROR) { status = ValidationStatus.ERROR; } else if (this.getStatus() === WARNING) { status = ValidationStatus.WARNING; } else if (this.getStatus() === SUCCESS) { status = ValidationStatus.SUCCESS; } else if (this.getStatus() === NORMAL) { status = ValidationStatus.NORMAL; } for (let /** @type {?} */ validationResult of this.validationResults) { if (validationResult.getStatus() === status) { let /** @type {?} */ mes = validationResult.getMessage(); if (mes === null || mes === undefined || mes === '') { continue; } message += mes + ", "; } } if (message.length > 0) { return message.substring(0, message.length - 2); } else { return null; } } /** * @return {?} */ isReadOnly() { return this.readOnly; } /** * @param {?} readOnly * @return {?} */ setReadOnly(readOnly) { this.readOnly = readOnly; } /** * @return {?} */ getName() { return this.name; } /** * @param {?} name * @return {?} */ setName(name) { this.name = name; } /** * @param {?} value * @return {?} */ validate(value) { // emit start validate let /** @type {?} */ dataStart = value; let /** @type {?} */ evStrat = EventUtils.newCustomEvent(START_VALIDATE_EVENT, this, dataStart, null); this.startValidateEvent.emit(evStrat); // validate let /** @type {?} */ result = this.doValidate(value); if (result === null || typeof result === undefined || !Array.isArray(result)) { result = []; } // Keep the last validation results to be shown in UI this.validationResults = result; // Append custom result to "this.validationResults". if (this.customValidationResult !== null && this.customValidationResult !== undefined) { this.validationResults.push(this.customValidationResult); } this.status = NORMAL; if (result !== null && result !== undefined && Array.isArray(result)) { for (let /** @type {?} */ re of result) { if (re === null || re === undefined) { continue; } let /** @type {?} */ status = re.getStatus(); if (status === ValidationStatus.ERROR) { this.status = ERROR; break; } if (status === ValidationStatus.WARNING) { this.status = WARNING; } else if (status === ValidationStatus.SUCCESS && this.status !== WARNING) { this.status = SUCCESS; } else if (status === ValidationStatus.NORMAL && this.status !== WARNING && this.status !== SUCCESS) { this.status = NORMAL; } } } this.onValidationEnd(value, result); this.injectStatusStyleClass(); // emit end validate let /** @type {?} */ dataEnd = { value: value, result: result, }; let /** @type {?} */ evEnd = EventUtils.newCustomEvent(END_VALIDATE_EVENT, this, dataEnd, null); this.endValidateEvent.emit(evEnd); return result; } /** * @return {?} */ selfValidateData() { let /** @type {?} */ inputVal = this.getInputValue(); let /** @type {?} */ results = this.validate(inputVal); return results; } /** * @param {?} validator * @return {?} */ addValidator(validator) { if (validator === null || typeof validator === 'undefined') { return; } // check contain if contain return false let /** @type {?} */ index = this.validators.indexOf(validator); if (index >= 0) { return false; } let /** @type {?} */ i18nValidator = /** @type {?} */ (validator); if (typeof this.i18nValue !== 'undefined' && typeof i18nValidator.applyI18N === 'function') { let /** @type {?} */ value = this.i18nValue; if (value === null) { i18nValidator.applyI18N(null); } else { if (value.validators !== null && typeof value.validators !== 'undefined') { let /** @type {?} */ bypass = false; if (typeof i18nValidator.isBypassKey === 'function') { bypass = i18nValidator.isBypassKey(); } if (bypass) { i18nValidator.applyI18N(value); } else { let /** @type {?} */ i18nCVal = value.validators[i18nValidator.getI18NKey()]; if (typeof i18nCVal !== 'undefined') { i18nValidator.applyI18N(i18nCVal); } } } } } this.validators.push(validator); return true; } /** * @param {?} validator * @return {?} */ removeValidator(validator) { if (validator === null || typeof validator === 'undefined') { return false; } let /** @type {?} */ index = this.validators.indexOf(validator); if (index < 0) { return false; } this.validators.splice(index, 1); return true; } /** * @return {?} */ getValidators() { return this.validators; } /** * @return {?} */ getStartValidateEvent() { return this.startValidateEvent; } /** * @param {?} event * @return {?} */ setStartValidateEvent(event) { this.startValidateEvent = event; } /** * @return {?} */ getEndValidateEvent() { return this.endValidateEvent; } /** * @param {?} event * @return {?} */ setEndValidateEvent(event) { this.endValidateEvent = event; } /** * @return {?} */ getBeforeLostFocusEvent() { return this.beforeLostFocusEvent; } /** * @param {?} event * @return {?} */ setBeforeLostFocusEvent(event) { this.beforeLostFocusEvent = event; } /** * @return {?} */ getLostFocusEvent() { return this.lostFocusEvent; } /** * @param {?} event * @return {?} */ setLostFocusEvent(event) { this.lostFocusEvent = event; } /** * @return {?} */ getBeforeFocusEvent() { return this.beforeFocusEvent; } /** * @param {?} event * @return {?} */ setBeforeFocusEvent(event) { this.beforeFocusEvent = event; } /** * @return {?} */ getFocusEvent() { return this.focusEvent; } /** * @param {?} event * @return {?} */ setFocusEvent(event) { this.focusEvent = event; } /** * @return {?} */ getBeforeChangeEvent() { return this.beforeChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeChangeEvent(event) { this.beforeChangeEvent = event; } /** * @return {?} */ getChangeEvent() { return this.changeEvent; } /** * @param {?} event * @return {?} */ setChangeEvent(event) { this.changeEvent = event; } /** * @return {?} */ getCustomValidationResult() { return this.customValidationResult; } /** * @param {?} customResult * @return {?} */ setCustomValidationResult(customResult) { this.customValidationResult = customResult; // Call validateData() to rebuild this.validationResults. this.validateData(); } /** * @param {?} data * @param {?=} $event * @param {?=} fireEvent * @return {?} */ setData(data, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } if (data === this.getData()) { // Call super super.setData(data); } else { let /** @type {?} */ oldValue = this.getInputValue(); // New input value let /** @type {?} */ inputVal = AbstractInputDataView.resolveInputValue(this.field, data); EventUtils.handleBrowserEvent(this, 'beforeChangeEvent', $event, fireEvent, ($event) => { // doEvent // Call super super.setData(data); // Update UI this.onDataChange(data, inputVal); // Auto validate this.validate(inputVal); }, ($event) => { // emitBeforeEvent this.emitBeforeChangeEvent(oldValue, inputVal, false, $event); }, ($event) => { // emitAfterEvent this.emitChangeEvent(oldValue, inputVal, false, $event); }, ($event) => { // doPrevented this.onDataChangePrevented(oldValue, inputVal, data); }, 'data'); } } /** * @param {?} field * @param {?} data * @return {?} */ static resolveInputValue(field, data) { return AbstractInputDataView.resolveMappedData(field, data); } /** * @return {?} */ getInputValue() { return AbstractInputDataView.resolveInputValue(this.field, this.data); } /** * @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 this.onDataChangePrevented(oldValue, inputVal); }, 'inputValue'); } /** * @param {?} value * @return {?} */ applyI18N(value) { if (typeof value === 'undefined') { return; } super.applyI18N(value); // iterate validator if (this.validators !== null && typeof this.validators !== 'undefined') { for (let /** @type {?} */ vt of this.validators) { let /** @type {?} */ validator = /** @type {?} */ (vt); // check if child is applicable if (typeof validator.applyI18N === 'function') { if (value === null) { validator.applyI18N(null); } else { if (value.validators !== null && typeof value.validators !== 'undefined') { let /** @type {?} */ bypass = false; if (typeof validator.isBypassKey === 'function' && validator.isBypassKey() === 'boolean') { bypass = validator.isBypassKey(); } if (bypass) { validator.applyI18N(value); } else { let /** @type {?} */ i18nCVal = value.validators[validator.getI18NKey()]; if (typeof i18nCVal !== 'undefined') { validator.applyI18N(i18nCVal); } } } } } } } } /** * @return {?} */ getI18NKey() { if (this.i18nKey === null || typeof this.i18nKey === 'undefined' || this.i18nKey === '') { if (this.name === null || typeof this.name === 'undefined' || this.name === '') { // lower case first charactor let /** @type {?} */ className = this.constructor.name; return className.charAt(0).toLowerCase() + className.slice(1); } return this.name; } return this.i18nKey; } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ onLostFocus($event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeLostFocusEvent', $event, fireEvent, ($event) => { // doEvent // Reset focus (blur()) on DOM this.doLostFocus($event); }, ($event) => { // emitBeforeEvent this.emitBeforeLostFocusEvent($event); }, ($event) => { // emitAfterEvent this.emitLostFocusEvent($event); }, ($event) => { // doPrevented // Regain focus back on DOM setTimeout(() => { this.doFocus($event); }, 5); }); } /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ onFocus($event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeFocusEvent', $event, fireEvent, ($event) => { // doEvent // Gain focus on DOM this.doFocus($event); }, ($event) => { // emitBeforeEvent this.emitBeforeFocusEvent($event); }, ($event) => { // emitAfterEvent this.emitFocusEvent($event); }, ($event) => { // doPrevented // Reset focus (blur()) on DOM setTimeout(() => { this.doLostFocus($event); }, 5); }); } /** * @return {?} */ getNeedFocusService() { return this.needFocusService; } /** * @return {?} */ getStatus() { return this.status; } /** * @param {?} status * @return {?} */ setStatus(status) { this.status = status; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @return {?} */ resetValidationResult() { this.setStatus(NORMAL); this.injectStatusStyleClass(); } } AbstractInputDataView.TYPE_AUTO = TYPE_AUTO; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], AbstractInputDataView.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], AbstractInputDataView.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option('readOnly'), tslib_1.__metadata("design:type", Boolean), tslib_1.__metadata("design:paramtypes", [Boolean]) ], AbstractInputDataView.prototype, "readOnly", null); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractInputDataView.prototype, "changeEvent", void 0); function AbstractInputDataView_tsickle_Closure_declarations() { /** @type {?} */ AbstractInputDataView.TYPE_AUTO; /** @type {?} */ AbstractInputDataView.prototype.name; /** @type {?} */ AbstractInputDataView.prototype.typeOfData; /** @type {?} */ AbstractInputDataView.prototype._readOnly; /** @type {?} */ AbstractInputDataView.prototype.startValidateEvent; /** @type {?} */ AbstractInputDataView.prototype.endValidateEvent; /** @type {?} */ AbstractInputDataView.prototype.beforeFocusEvent; /** @type {?} */ AbstractInputDataView.prototype.focusEvent; /** @type {?} */ AbstractInputDataView.prototype.beforeLostFocusEvent; /** @type {?} */ AbstractInputDataView.prototype.lostFocusEvent; /** @type {?} */ AbstractInputDataView.prototype.beforeChangeEvent; /** @type {?} */ AbstractInputDataView.prototype.changeEvent; /** @type {?} */ AbstractInputDataView.prototype.status; /** @type {?} */ AbstractInputDataView.prototype.needFocusService; /** @type {?} */ AbstractInputDataView.prototype.validationResults; /** @type {?} */ AbstractInputDataView.prototype.customValidationResult; /** @type {?} */ AbstractInputDataView.prototype.validators; /** * @abstract * @param {?} inputValue * @param {?} results * @return {?} */ AbstractInputDataView.prototype.onValidationEnd = function (inputValue, results) { }; /** * @abstract * @param {?} data * @param {?} inputVal * @return {?} */ AbstractInputDataView.prototype.onDataChange = function (data, inputVal) { }; /** * @abstract * @param {?} $event * @return {?} */ AbstractInputDataView.prototype.doFocus = function ($event) { }; /** * @abstract * @param {?} $event * @return {?} */ AbstractInputDataView.prototype.doLostFocus = function ($event) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbnB1dERhdGFWaWV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0Fic3RyYWN0SW5wdXREYXRhVmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBNEIsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBSTdELE9BQU8sRUFDTCxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQzFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFjLG9CQUFvQixFQUM3RSxrQkFBa0IsRUFDbkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJN0QsdUJBQU0sTUFBTSxHQUFXLFFBQVEsQ0FBQztBQUNoQyx1QkFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLHVCQUFNLE9BQU8sR0FBVyxTQUFTLENBQUM7QUFDbEMsdUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5Qix1QkFBTSxTQUFTLEdBQVcsTUFBTSxDQUFDO0FBQ2pDLHVCQUFNLFNBQVMsR0FBVyxXQUFXLENBQUM7Ozs7QUFFdEMsTUFBTSw0QkFBc0MsU0FBUSxnQkFBZ0I7Ozs7O2dCQTRDL0MsVUFBc0IsRUFBRSxnQkFBa0M7UUFDM0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJ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