com.phloxui
Version:
PhloxUI Ng2+ Framework
893 lines (892 loc) • 59.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, EventEmitter, ElementRef } from '@angular/core';
import { AbstractHasFormatterInputDataView } from './AbstractHasFormatterInputDataView';
import { BEFORE_KEY_UP_EVENT, KEY_UP_EVENT, BEFORE_KEY_DOWN_EVENT, KEY_DOWN_EVENT } from '../../../share/CustomEventType';
import { Option } from '../../../decorator/Option.decorator';
import { I18N } from '../../../decorator/I18N.decorator';
import { NeedFocusService } from '../../../service/NeedFocusService.service';
import { EventUtils } from '../../../share/utils/EventUtils';
import { FormatterFactory } from '../../../service/FormatterFactory.service';
var /** @type {?} */ TYPE_NAME = "phx-text-box";
var TextBox = /** @class */ (function (_super) {
tslib_1.__extends(TextBox, _super);
function TextBox(elementRef, formatterFactory, needFocusService) {
var _this = _super.call(this, elementRef, formatterFactory, needFocusService) || this;
_this.beforeKeyUpEvent = new EventEmitter();
_this.keyUpEvent = new EventEmitter();
_this.beforeKeyDownEvent = new EventEmitter();
_this.keyDownEvent = new EventEmitter();
return _this;
}
/**
* @return {?}
*/
TextBox.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
this.checkType();
};
/**
* @return {?}
*/
TextBox.prototype.revertOriginalToData = /**
* @return {?}
*/
function () {
this.formattedData = this.originalValue;
};
/**
* @return {?}
*/
TextBox.prototype.checkType = /**
* @return {?}
*/
function () {
if (this.type === null || this.type === undefined || typeof this.type !== 'string' || this.type === '') {
this.type = 'text';
}
if (this.type.trim().toLowerCase() !== 'text'
&& this.type.trim().toLowerCase() !== 'password'
&& this.type.trim().toLowerCase() !== 'number') {
// Only allow to possible values.
// If not, use default value as "text".
this.type = 'text';
}
};
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
TextBox.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
//! do sthing
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
TextBox.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.elementRef) {
$(this.elementRef.nativeElement).find('input').focus();
}
};
/**
* @param {?} inputVal
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
TextBox.prototype.setInputValue = /**
* @param {?} inputVal
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
function (inputVal, $event, fireEvent) {
var _this = this;
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
var /** @type {?} */ oldValue = this.getInputValue();
EventUtils.handleBrowserEvent(this, 'beforeChangeEvent', $event, fireEvent, function ($event) {
// doEvent
// Set input value into data object.
// doEvent
// Set input value into data object.
_this._setValueToData(inputVal);
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeChangeEvent(oldValue, inputVal, true, $event);
}, function ($event) {
// emitAfterEvent
// emitAfterEvent
_this.emitChangeEvent(oldValue, inputVal, true, $event);
}, function ($event) {
// doPrevented
if ($event !== null && $event !== undefined) {
(/** @type {?} */ ($event.target)).value = (oldValue !== null && oldValue !== undefined) ? oldValue : "";
}
}, 'inputValue');
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.doLostFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.doKeyUp = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.doKeyDown = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.emitBeforeKeyUpEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
var /** @type {?} */ data = {
data: this.data,
value: inputText
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_KEY_UP_EVENT, this, data, $event);
this.beforeKeyUpEvent.emit(ev);
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.emitKeyUpEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
var /** @type {?} */ data = {
data: this.data,
value: inputText
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(KEY_UP_EVENT, this, data, $event);
this.keyUpEvent.emit(ev);
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.emitBeforeKeyDownEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
var /** @type {?} */ data = {
data: this.data,
value: inputText
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_KEY_DOWN_EVENT, this, data, $event);
this.beforeKeyDownEvent.emit(ev);
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.emitKeyDownEvent = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
var /** @type {?} */ data = {
data: this.data,
value: inputText
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(KEY_DOWN_EVENT, this, data, $event);
this.keyDownEvent.emit(ev);
};
/**
* @param {?} $event
* @param {?=} fireEvent
* @return {?}
*/
TextBox.prototype.onKeyUp = /**
* @param {?} $event
* @param {?=} fireEvent
* @return {?}
*/
function ($event, fireEvent) {
var _this = this;
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeKeyUpEvent', $event, fireEvent, function ($event) {
// doEvent
// doEvent
_this.doKeyUp($event);
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeKeyUpEvent($event);
}, function ($event, result) {
// emitAfterEvent
// emitAfterEvent
_this.emitKeyUpEvent($event);
}, function ($event) {
// doPrevented
});
};
/**
* @param {?} $event
* @param {?=} fireEvent
* @return {?}
*/
TextBox.prototype.onKeyDown = /**
* @param {?} $event
* @param {?=} fireEvent
* @return {?}
*/
function ($event, fireEvent) {
var _this = this;
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeKeyDownEvent', $event, fireEvent, function ($event) {
// doEvent
// doEvent
_this.doKeyDown($event);
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeKeyDownEvent($event);
}, function ($event, result) {
// emitAfterEvent
// emitAfterEvent
_this.emitKeyDownEvent($event);
}, function ($event) {
// doPrevented
});
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.onValueChanged = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ inputText = null;
try {
inputText = (/** @type {?} */ ($event.target)).value.toString();
}
catch (/** @type {?} */ e) {
}
this.setFormattedData(inputText, $event);
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.onFocusing = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.needFocusService.setFocusingComponent(this, $event);
};
/**
* @param {?} $event
* @return {?}
*/
TextBox.prototype.onLostFocusing = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.needFocusService.resetFocusingComponent($event);
};
/**
* @return {?}
*/
TextBox.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
var /** @type {?} */ d1 = (this.originalValue === null || typeof this.originalValue === 'undefined') ? '' : this.originalValue;
var /** @type {?} */ d2 = (this.formattedData === null || typeof this.formattedData === 'undefined') ? '' : this.formattedData;
// check array open this is u want to check array
try {
var /** @type {?} */ jsonD1 = JSON.stringify(d1);
var /** @type {?} */ jsonD2 = JSON.stringify(d2);
if (jsonD1 !== jsonD2) {
return true;
}
else {
return false;
}
}
catch (/** @type {?} */ error) {
// error
}
if (d1 !== d2) {
return true;
}
return false;
};
/**
* @param {?} data
* @return {?}
*/
TextBox.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
_super.prototype.setData.call(this, data);
if (!this._isSetOriginal) {
this.originalValue = AbstractHasFormatterInputDataView.resolveFormattedData(this.formatter, AbstractHasFormatterInputDataView.resolveInputValue(this.field, data));
this._isSetOriginal = true;
}
};
/**
* @param {?} data
* @return {?}
*/
TextBox.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
this.originalValue = AbstractHasFormatterInputDataView.resolveFormattedData(this.formatter, AbstractHasFormatterInputDataView.resolveInputValue(this.field, data));
};
/**
* @return {?}
*/
TextBox.prototype.selfResetData = /**
* @return {?}
*/
function () {
this.revertOriginalToData();
};
/**
* @return {?}
*/
TextBox.prototype.resetOriginalData = /**
* @return {?}
*/
function () {
this._isSetOriginal = false;
this.originalValue = undefined;
};
/**
* @param {?} options
* @return {?}
*/
TextBox.prototype.setOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
_super.prototype.setOptions.call(this, options);
this.checkType();
};
/**
* @return {?}
*/
TextBox.prototype.getType = /**
* @return {?}
*/
function () {
return this.type;
};
/**
* @param {?} type
* @return {?}
*/
TextBox.prototype.setType = /**
* @param {?} type
* @return {?}
*/
function (type) {
this.type = type;
this.checkType();
};
/**
* @return {?}
*/
TextBox.prototype.getWidth = /**
* @return {?}
*/
function () {
return this.width;
};
/**
* @param {?} width
* @return {?}
*/
TextBox.prototype.setWidth = /**
* @param {?} width
* @return {?}
*/
function (width) {
this.width = width;
};
/**
* @return {?}
*/
TextBox.prototype.getHeight = /**
* @return {?}
*/
function () {
return this.height;
};
/**
* @param {?} height
* @return {?}
*/
TextBox.prototype.setHeight = /**
* @param {?} height
* @return {?}
*/
function (height) {
this.height = height;
};
/**
* @return {?}
*/
TextBox.prototype.getBeforeKeyDownEvent = /**
* @return {?}
*/
function () {
return this.beforeKeyDownEvent;
};
/**
* @param {?} event
* @return {?}
*/
TextBox.prototype.setBeforeKeyDownEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeKeyDownEvent = event;
};
/**
* @return {?}
*/
TextBox.prototype.getKeyDownEvent = /**
* @return {?}
*/
function () {
return this.keyDownEvent;
};
/**
* @param {?} event
* @return {?}
*/
TextBox.prototype.setKeyDownEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.keyDownEvent = event;
};
/**
* @return {?}
*/
TextBox.prototype.getBeforeKeyUpEvent = /**
* @return {?}
*/
function () {
return this.beforeKeyUpEvent;
};
/**
* @param {?} event
* @return {?}
*/
TextBox.prototype.setBeforeKeyUpEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeKeyUpEvent = event;
};
/**
* @return {?}
*/
TextBox.prototype.getKeyUpEvent = /**
* @return {?}
*/
function () {
return this.keyUpEvent;
};
/**
* @param {?} event
* @return {?}
*/
TextBox.prototype.setKeyUpEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.keyUpEvent = event;
};
/**
* @return {?}
*/
TextBox.prototype.getMaxLength = /**
* @return {?}
*/
function () {
return this.maxLength;
};
TextBox.TYPE_NAME = TYPE_NAME;
TextBox.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-text-box\">\n\t<div class=\"table-wrapper\">\n\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t<input [attr.maxlength]=\"getMaxLength()\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\" type=\"{{getType()}}\" class=\"form-control\" [disabled]=\"isDisabled()\" [readonly]=\"isReadOnly()\" [class.dirty]=\"isDataDirty()\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\" (change)=\"onValueChanged($event)\" [value]=\"(formattedData === undefined || formattedData === null) ? '' : formattedData\">\n\t\t</div>\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
TextBox.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: FormatterFactory, },
{ type: NeedFocusService, },
]; };
TextBox.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',] },],
"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',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TextBox.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TextBox.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], TextBox.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], TextBox.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], TextBox.prototype, "help", void 0);
tslib_1.__decorate([
Option('formatter.instance'),
tslib_1.__metadata("design:type", Object)
], TextBox.prototype, "formatter", void 0);
tslib_1.__decorate([
Option('formatter.name'),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "formatterName", void 0);
tslib_1.__decorate([
Option('formatter.options'),
tslib_1.__metadata("design:type", Object)
], TextBox.prototype, "formatterOptions", void 0);
tslib_1.__decorate([
Option('formatter.usePropertyValue'),
tslib_1.__metadata("design:type", Boolean)
], TextBox.prototype, "formatterUsePropertyValue", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "type", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], TextBox.prototype, "height", void 0);
tslib_1.__decorate([
Option('maxLength'),
tslib_1.__metadata("design:type", Number)
], TextBox.prototype, "maxLength", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "beforeKeyUpEvent", void 0);
tslib_1.__decorate([
Option('keyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "keyUpEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "beforeKeyDownEvent", void 0);
tslib_1.__decorate([
Option('keyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], TextBox.prototype, "keyDownEvent", void 0);
return TextBox;
}(AbstractHasFormatterInputDataView));
export { TextBox };
function TextBox_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TextBox.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TextBox.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TextBox.propDecorators;
/** @type {?} */
TextBox.TYPE_NAME;
/** @type {?} */
TextBox.prototype.dataParent;
/** @type {?} */
TextBox.prototype.ignoreParentData;
/** @type {?} */
TextBox.prototype.data;
/** @type {?} */
TextBox.prototype.ignoreParentDisabled;
/** @type {?} */
TextBox.prototype.delegateHistory;
/** @type {?} */
TextBox.prototype.onDisabled;
/** @type {?} */
TextBox.prototype.onEnabled;
/** @type {?} */
TextBox.prototype.loadingEnabled;
/** @type {?} */
TextBox.prototype.i18nKey;
/** @type {?} */
TextBox.prototype.bypass;
/** @type {?} */
TextBox.prototype.options;
/** @type {?} */
TextBox.prototype.disabled;
/** @type {?} */
TextBox.prototype.field;
/** @type {?} */
TextBox.prototype.name;
/** @type {?} */
TextBox.prototype.typeOfData;
/** @type {?} */
TextBox.prototype.readOnly;
/** @type {?} */
TextBox.prototype.help;
/** @type {?} */
TextBox.prototype.formatter;
/** @type {?} */
TextBox.prototype.formatterName;
/** @type {?} */
TextBox.prototype.formatterOptions;
/** @type {?} */
TextBox.prototype.formatterUsePropertyValue;
/** @type {?} */
TextBox.prototype.type;
/** @type {?} */
TextBox.prototype.width;
/** @type {?} */
TextBox.prototype.height;
/** @type {?} */
TextBox.prototype.maxLength;
/** @type {?} */
TextBox.prototype.loadEvent;
/** @type {?} */
TextBox.prototype.startValidateEvent;
/** @type {?} */
TextBox.prototype.endValidateEvent;
/** @type {?} */
TextBox.prototype.beforeFocusEvent;
/** @type {?} */
TextBox.prototype.focusEvent;
/** @type {?} */
TextBox.prototype.beforeLostFocusEvent;
/** @type {?} */
TextBox.prototype.lostFocusEvent;
/** @type {?} */
TextBox.prototype.beforeChangeEvent;
/** @type {?} */
TextBox.prototype.changeEvent;
/** @type {?} */
TextBox.prototype.beforeKeyUpEvent;
/** @type {?} */
TextBox.prototype.keyUpEvent;
/** @type {?} */
TextBox.prototype.beforeKeyDownEvent;
/** @type {?} */
TextBox.prototype.keyDownEvent;
/** @type {?} */
TextBox.prototype.originalValue;
/** @type {?} */
TextBox.prototype._isSetOriginal;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvVGV4dEJveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTdFLHFCQUFNLFNBQVMsR0FBVyxjQUFjLENBQUM7O0lBY1osbUNBQWlDO0lBc0k1RCxpQkFBWSxVQUFzQixFQUFFLGdCQUFrQyxFQUFFLGdCQUFrQztRQUExRyxZQUNFLGtCQUFNLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxTQU10RDtRQUpDLEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyQyxLQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QyxLQUFJLENBQUMsWUFBWSxHQUFH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Q0FBQzswQ0FDTSxZQUFZOzs7UUFFM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFckMsTUFBTSxDQUFDLGNBQWMsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFHbEMsTUFBTSxDQUFDLGFBQWEsQ0FBQzswQ0FFTSxZQUFZOzs7UUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQzswQ0FFTSxZQUFZOzs7UUFDakMsTUFBTSxDQUFDLGVBQWUsQ0FBQzswQ0FFTSxZQUFZOzs7UUFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQzswQ0FFTSxZQUFZOztrQkE1SnRDO0VBMEI2QixpQ0FBaUM7U0FBakQsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlldyB9IGZyb20gJy4vQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3JztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgQkVGT1JFX0tFWV9VUF9FVkVOVCwgS0VZX1VQX0VWRU5ULCBCRUZPUkVfS0VZX0RPV05fRVZFTlQsIEtFWV9ET1dOX0VWRU5UIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3IvSTE4Ti5kZWNvcmF0b3InO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcbmltcG9ydCB7IElGb3JtYXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZS9mb3JtYXR0ZXIvSUZvcm1hdHRlcic7XG5pbXBvcnQgeyBGb3JtYXR0ZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9Gb3JtYXR0ZXJGYWN0b3J5LnNlcnZpY2UnO1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LXRleHQtYm94XCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtdGV4dC1ib3hcIj5cblx0PGRpdiBjbGFzcz1cInRhYmxlLXdyYXBwZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiPlxuXHRcdFx0PGlucHV0IFthdHRyLm1heGxlbmd0aF09XCJnZXRNYXhMZW5ndGgoKVwiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCIgW3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIHR5cGU9XCJ7e2dldFR5cGUoKX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgW3JlYWRvbmx5XT1cImlzUmVhZE9ubHkoKVwiIFtjbGFzcy5kaXJ0eV09XCJpc0RhdGFEaXJ0eSgpXCIgKGZvY3VzaW4pPVwib25Gb2N1c2luZygkZXZlbnQpXCIgKGJsdXIpPVwib25Mb3N0Rm9jdXNpbmcoJGV2ZW50KVwiIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIFt2YWx1ZV09XCIoZm9ybWF0dGVkRGF0YSA9PT0gdW5kZWZpbmVkIHx8IGZvcm1hdHRlZERhdGEgPT09IG51bGwpID8gJycgOiBmb3JtYXR0ZWREYXRhXCI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIFRleHRCb3ggZXh0ZW5kcyBBYnN0cmFjdEhhc0Zvcm1hdHRlcklucHV0RGF0YVZpZXcgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGZpZWxkOiBzdHJpbmc7XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB0eXBlT2ZEYXRhOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgcmVhZE9ubHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBJMThOKClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBoZWxwOiBhbnk7XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlld1xuICBASW5wdXQoJ2Zvcm1hdHRlcicpXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci5pbnN0YW5jZScpXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXI6IElGb3JtYXR0ZXI7XG4gIEBJbnB1dCgnZm9ybWF0dGVyTmFtZScpXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci5uYW1lJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlck5hbWU6IHN0cmluZztcbiAgQElucHV0KCdmb3JtYXR0ZXJPcHRpb25zJylcbiAgQE9wdGlvbignZm9ybWF0dGVyLm9wdGlvbnMnKVxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyT3B0aW9uczogYW55O1xuICBASW5wdXQoJ2Zvcm1hdHRlclVzZVByb3BlcnR5VmFsdWUnKVxuICBAT3B0aW9uKCdmb3JtYXR0ZXIudXNlUHJvcGVydHlWYWx1ZScpXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJVc2VQcm9wZXJ0eVZhbHVlOiBib29sZWFuO1xuICAvLyAtLS0gc2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHR5cGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuICBASW5wdXQoJ21heExlbmd0aCcpXG4gIEBPcHRpb24oJ21heExlbmd0aCcpXG4gIHByb3RlY3RlZCBtYXhMZW5ndGg6IG51bWJlcjtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBPdXRwdXQoJ3BoeExvYWQnKVxuICBAT3B0aW9uKCdsb2FkJylcbiAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgQE9wdGlvbignZm9jdXMnKVxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gIEBPcHRpb24oJ2NoYW5nZScpXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlld1xuICAvLyAtLS0gc2VsZlxuICBAT3B0aW9uKCdiZWZvcmVLZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUtleVVwJylcbiAgcHJvdGVjdGVkIGJlZm9yZUtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEtleVVwJylcbiAgcHJvdGVjdGVkIGtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVLZXlEb3duJylcbiAgQE91dHB1dCgncGh4QmVmb3JlS2V5RG93bicpXG4gIHByb3RlY3RlZCBiZWZvcmVLZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlEb3duJylcbiAgQE91dHB1dCgncGh4S2V5RG93bicpXG4gIHByb3RlY3RlZCBrZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBwcm90ZWN0ZWQgb3JpZ2luYWxWYWx1ZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2lzU2V0T3JpZ2luYWw6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZm9ybWF0dGVyRmFjdG9yeTogRm9ybWF0dGVyRmFjdG9yeSwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3RvcnksIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgdGhpcy5iZWZvcmVLZXlVcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMua2V5VXBFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmJlZm9yZUtleURvd25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmtleURvd25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgdGhpcy5jaGVja1R5cGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2ZXJ0T3JpZ2luYWxUb0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXR0ZWREYXRhID0gdGhpcy5vcmlnaW5hbFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gbnVsbCB8fCB0aGlzLnR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdGhpcy50eXBlICE9PSAnc3RyaW5nJyB8fCB0aGlzLnR5cGUgPT09ICcnKSB7XG4gICAgICB0aGlzLnR5cGUgPSAndGV4dCc7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09ICd0ZXh0J1xuICAgICAgJiYgdGhpcy50eXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9PSAncGFzc3dvcmQnXG4gICAgICAmJiB0aGlzLnR5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCkgIT09ICdudW1iZXInKSB7XG4gICAgICAvLyBPbmx5IGFsbG93IHRvIHBvc3NpYmxlIHZhbHVlcy5cbiAgICAgIC8vIElmIG5vdCwgdXNlIGRlZmF1bHQgdmFsdWUgYXMgXCJ0ZXh0XCIuXG4gICAgICB0aGlzLnR5cGUgPSAndGV4dCdcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IGFueSwgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogdm9pZCB7XG4gICAgLy8hIGRvIHN0aGluZ1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbGVtZW50UmVmKSB7XG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCdpbnB1dCcpLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJldmVudERlZmF1bHRcbiAgcHVibGljIHNldElucHV0VmFsdWUoaW5wdXRWYWw6IGFueSwgJGV2ZW50PzogRXZlbnQsIGZpcmVFdmVudD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaXJlRXZlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBvbGRWYWx1ZTogY