com.phloxui
Version:
PhloxUI Ng2+ Framework
683 lines (682 loc) • 51.1 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 { FormatterFactory } from '../../../../../service/FormatterFactory.service';
var /** @type {?} */ TYPE_NAME = "material-text-box";
var /** @type {?} */ NORMAL = 'normal';
var /** @type {?} */ SUCCESS = 'success';
var /** @type {?} */ WARNING = 'warning';
var /** @type {?} */ ERROR = 'error';
var /** @type {?} */ DEFAULT_BUTTON_ICON = 'close';
var /** @type {?} */ DEFAULT_BUTTON_POSITION = 'suffix';
var MaterialTextBox = /** @class */ (function (_super) {
tslib_1.__extends(MaterialTextBox, _super);
function MaterialTextBox(elementRef, formatterFactory, needFocusService) {
var _this = _super.call(this, elementRef, formatterFactory, needFocusService) || this;
_this.active = false;
_this.clearFunc = function () { _this.formattedData = ''; };
return _this;
}
/**
* @return {?}
*/
MaterialTextBox.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
this.refreshActiveTextBox();
};
/**
* @return {?}
*/
MaterialTextBox.prototype._displayHelp = /**
* @return {?}
*/
function () {
var /** @type {?} */ hasHelp = this.hasHelp();
return hasHelp && this.isShowHelp();
};
/**
* @return {?}
*/
MaterialTextBox.prototype.refreshActiveTextBox = /**
* @return {?}
*/
function () {
var /** @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 {?}
*/
MaterialTextBox.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
MaterialTextBox.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
_super.prototype.onDataChange.call(this, data, inputVal);
this.refreshActiveTextBox();
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.doFocus.call(this, $event);
this.active = true;
this.classFocused = true;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.doLostFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.doLostFocus.call(this, $event);
this.refreshActiveTextBox();
this.classFocused = false;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getClassMatFocused = /**
* @return {?}
*/
function () {
return this.isReadOnly() ? { 'mat-focused': this._isClassFocused() } : {};
};
/**
* @return {?}
*/
MaterialTextBox.prototype._isActive = /**
* @return {?}
*/
function () {
return this.active;
};
/**
* @return {?}
*/
MaterialTextBox.prototype._isClassFocused = /**
* @return {?}
*/
function () {
return this.classFocused;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.onValueChanged = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.onValueChanged.call(this, $event);
this.refreshActiveTextBox();
};
/**
* @param {?} data
* @return {?}
*/
MaterialTextBox.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
_super.prototype.selfSaveData.call(this, data);
this.refreshActiveTextBox();
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getDescription = /**
* @return {?}
*/
function () {
return this.description;
};
/**
* @param {?} description
* @return {?}
*/
MaterialTextBox.prototype.setDescription = /**
* @param {?} description
* @return {?}
*/
function (description) {
this.description = description;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getLabel = /**
* @return {?}
*/
function () {
return this.label;
};
/**
* @param {?} label
* @return {?}
*/
MaterialTextBox.prototype.setLabel = /**
* @param {?} label
* @return {?}
*/
function (label) {
this.label = label;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.resetValidationResult = /**
* @return {?}
*/
function () {
_super.prototype.resetValidationResult.call(this);
this.active = false;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.onBtnClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (!this.isReadOnly() && !this.isDisabled()) {
this.setButtonHandler(this.showClearButton ? this.clearFunc : this.buttonHandler);
if (this.buttonHandler !== null && this.buttonHandler !== undefined) {
this.buttonHandler(this, $event);
}
}
};
/**
* @return {?}
*/
MaterialTextBox.prototype.isShowClearButton = /**
* @return {?}
*/
function () {
return this.showClearButton;
};
/**
* @param {?} showClearButton
* @return {?}
*/
MaterialTextBox.prototype.setShowClearButton = /**
* @param {?} showClearButton
* @return {?}
*/
function (showClearButton) {
this.showClearButton = showClearButton;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getButtonIcon = /**
* @return {?}
*/
function () {
return this.showClearButton ? DEFAULT_BUTTON_ICON : this.buttonIcon;
};
/**
* @param {?} buttonIcon
* @return {?}
*/
MaterialTextBox.prototype.setButtonIcon = /**
* @param {?} buttonIcon
* @return {?}
*/
function (buttonIcon) {
this.buttonIcon = buttonIcon;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getButtonPosition = /**
* @return {?}
*/
function () {
return this.showClearButton ? DEFAULT_BUTTON_POSITION : (!this.buttonPosition ? DEFAULT_BUTTON_POSITION : this.buttonPosition);
};
/**
* @param {?} buttonPosition
* @return {?}
*/
MaterialTextBox.prototype.setButtonPosition = /**
* @param {?} buttonPosition
* @return {?}
*/
function (buttonPosition) {
this.buttonPosition = buttonPosition;
};
/**
* @return {?}
*/
MaterialTextBox.prototype.getButtonHandler = /**
* @return {?}
*/
function () {
return this.showClearButton ? this.clearFunc : (!this.buttonHandler ? this.clearFunc : this.buttonHandler);
};
/**
* @param {?} buttonHandler
* @return {?}
*/
MaterialTextBox.prototype.setButtonHandler = /**
* @param {?} buttonHandler
* @return {?}
*/
function (buttonHandler) {
this.buttonHandler = buttonHandler;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.onKeyUp = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.isReadOnly() || this.isDisabled()) {
return;
}
_super.prototype.onKeyUp.call(this, $event);
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextBox.prototype.onKeyDown = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.isReadOnly() || this.isDisabled()) {
return;
}
_super.prototype.onKeyDown.call(this, $event);
};
MaterialTextBox.TYPE_NAME = TYPE_NAME;
MaterialTextBox.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"material-input material-text-box\" [style.width]=\"getWidth()\">\n\t<div class=\"textbox-wrapper\" [class.active]=\"_isActive()\">\n\t\t<mat-form-field [ngClass]=\"getClassMatFocused()\">\n\t\t\t<input matInput placeholder=\"{{getLabel() | phx_text}}\" [attr.maxlength]=\"getMaxLength()\" type=\"{{getType()}}\" class=\"form-control\" [disabled]=\"isDisabled()\" [readonly]=\"isReadOnly()\" [class.dirty]=\"isDataDirty()\" (change)=\"onValueChanged($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\" (keyup)=\"onKeyUp($event)\"\n\t\t\t (keydown)=\"onKeyDown($event)\" [value]=\"formattedData | phx_text\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'suffix' && !(isDisabled() || isReadOnly()))\" matSuffix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'prefix' && !(isDisabled() || isReadOnly()))\" matPrefix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'suffix' && (isDisabled() || isReadOnly()))\" disabled matSuffix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'prefix' && (isDisabled() || isReadOnly()))\" disabled matPrefix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t</mat-form-field>\n\t</div>\n\t<div class=\"validation\" [style.display]=\"getValidationResultMessage() ? undefined : 'none'\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t<ng-template [ngIf]=\"getValidationResultMessage()\" [ngIfElse]=\"validation_else\">\n\t\t\t{{getValidationResultMessage() | phx_text}}\n\t\t</ng-template>\n\t\t<ng-template #validation_else>\n\t\t\t<!-- We've to put whitespace if there is no validation msg to prevent empty dom -->\n\t\t\t<!-- since if validate msg's <div> dom is empty, the component positioning -->\n\t\t\t<!-- will be misplaced. -->\n\t\t\t{{ ' ' }}\n\t\t</ng-template>\n\t</div>\n\t<div class=\"description\" [style.display]=\"getValidationResultMessage() ? 'none' : undefined\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t<ng-template [ngIf]=\"getDescription()\" [ngIfElse]=\"description_else\">\n\t\t\t{{ getDescription() | phx_text }}\n\t\t</ng-template>\n\t\t<ng-template #description_else>\n\t\t\t<!-- We've to put whitespace if there is no description to prevent empty dom -->\n\t\t\t<!-- since if description's <div> dom is empty, the component positioning -->\n\t\t\t<!-- will be misplaced. -->\n\t\t\t{{ ' ' }}\n\t\t</ng-template>\n\t</div>\n\t<div class=\"help\">\n\t\t{{getHelp() | phx_text}}\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
MaterialTextBox.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: FormatterFactory, },
{ type: NeedFocusService, },
]; };
MaterialTextBox.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 },],
"label": [{ type: Input },],
"description": [{ type: Input },],
"maxLength": [{ type: Input, args: ['phxMaxLength',] },],
"buttonIcon": [{ type: Input },],
"buttonPosition": [{ type: Input },],
"buttonHandler": [{ type: Input },],
"showClearButton": [{ 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',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialTextBox.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialTextBox.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialTextBox.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialTextBox.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialTextBox.prototype, "help", void 0);
tslib_1.__decorate([
Option('formatter.instance'),
tslib_1.__metadata("design:type", Object)
], MaterialTextBox.prototype, "formatter", void 0);
tslib_1.__decorate([
Option('formatter.name'),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "formatterName", void 0);
tslib_1.__decorate([
Option('formatter.options'),
tslib_1.__metadata("design:type", Object)
], MaterialTextBox.prototype, "formatterOptions", void 0);
tslib_1.__decorate([
Option('formatter.usePropertyValue'),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "formatterUsePropertyValue", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "type", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "width", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "label", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "description", void 0);
tslib_1.__decorate([
Option('maxLength'),
tslib_1.__metadata("design:type", Number)
], MaterialTextBox.prototype, "maxLength", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "buttonIcon", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextBox.prototype, "buttonPosition", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialTextBox.prototype, "buttonHandler", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextBox.prototype, "showClearButton", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "beforeKeyUpEvent", void 0);
tslib_1.__decorate([
Option('keyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "keyUpEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "beforeKeyDownEvent", void 0);
tslib_1.__decorate([
Option('keyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextBox.prototype, "keyDownEvent", void 0);
return MaterialTextBox;
}(TextBox));
export { MaterialTextBox };
function MaterialTextBox_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MaterialTextBox.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MaterialTextBox.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
MaterialTextBox.propDecorators;
/** @type {?} */
MaterialTextBox.TYPE_NAME;
/** @type {?} */
MaterialTextBox.prototype.dataParent;
/** @type {?} */
MaterialTextBox.prototype.ignoreParentData;
/** @type {?} */
MaterialTextBox.prototype.data;
/** @type {?} */
MaterialTextBox.prototype.ignoreParentDisabled;
/** @type {?} */
MaterialTextBox.prototype.delegateHistory;
/** @type {?} */
MaterialTextBox.prototype.onDisabled;
/** @type {?} */
MaterialTextBox.prototype.onEnabled;
/** @type {?} */
MaterialTextBox.prototype.loadingEnabled;
/** @type {?} */
MaterialTextBox.prototype.i18nKey;
/** @type {?} */
MaterialTextBox.prototype.bypass;
/** @type {?} */
MaterialTextBox.prototype.options;
/** @type {?} */
MaterialTextBox.prototype.disabled;
/** @type {?} */
MaterialTextBox.prototype.field;
/** @type {?} */
MaterialTextBox.prototype.name;
/** @type {?} */
MaterialTextBox.prototype.typeOfData;
/** @type {?} */
MaterialTextBox.prototype.readOnly;
/** @type {?} */
MaterialTextBox.prototype.help;
/** @type {?} */
MaterialTextBox.prototype.formatter;
/** @type {?} */
MaterialTextBox.prototype.formatterName;
/** @type {?} */
MaterialTextBox.prototype.formatterOptions;
/** @type {?} */
MaterialTextBox.prototype.formatterUsePropertyValue;
/** @type {?} */
MaterialTextBox.prototype.type;
/** @type {?} */
MaterialTextBox.prototype.width;
/** @type {?} */
MaterialTextBox.prototype.label;
/** @type {?} */
MaterialTextBox.prototype.description;
/** @type {?} */
MaterialTextBox.prototype.maxLength;
/** @type {?} */
MaterialTextBox.prototype.buttonIcon;
/** @type {?} */
MaterialTextBox.prototype.buttonPosition;
/** @type {?} */
MaterialTextBox.prototype.buttonHandler;
/** @type {?} */
MaterialTextBox.prototype.showClearButton;
/** @type {?} */
MaterialTextBox.prototype.loadEvent;
/** @type {?} */
MaterialTextBox.prototype.startValidateEvent;
/** @type {?} */
MaterialTextBox.prototype.endValidateEvent;
/** @type {?} */
MaterialTextBox.prototype.beforeFocusEvent;
/** @type {?} */
MaterialTextBox.prototype.focusEvent;
/** @type {?} */
MaterialTextBox.prototype.beforeLostFocusEvent;
/** @type {?} */
MaterialTextBox.prototype.lostFocusEvent;
/** @type {?} */
MaterialTextBox.prototype.beforeChangeEvent;
/** @type {?} */
MaterialTextBox.prototype.changeEvent;
/** @type {?} */
MaterialTextBox.prototype.beforeKeyUpEvent;
/** @type {?} */
MaterialTextBox.prototype.keyUpEvent;
/** @type {?} */
MaterialTextBox.prototype.beforeKeyDownEvent;
/** @type {?} */
MaterialTextBox.prototype.keyDownEvent;
/** @type {?} */
MaterialTextBox.prototype.active;
/** @type {?} */
MaterialTextBox.prototype.classFocused;
/** @type {?} */
MaterialTextBox.prototype.clearFunc;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxUZXh0Qm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3RoZW1lL21hdGVyaWFsL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9NYXRlcmlhbFRleHRCb3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBR3BGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFLbkYscUJBQU0sU0FBUyxHQUFXLG1CQUFtQixDQUFDO0FBRTlDLHFCQUFNLE1BQU0sR0FBVyxRQUFRLENBQUM7QUFDaEMscUJBQU0sT0FBTyxHQUFXLFNBQVMsQ0FBQztBQUNsQyxxQkFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLHFCQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFFOUIscUJBQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLHFCQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQzs7SUFvREosMkNBQU87SUEwSjFDLHlCQUFZLFVBQXNCLEVBQUUsZ0JBQWtDLEVBQUUsZ0JBQWtDO1FBQTFHLFlBQ0Usa0JBQU0sVUFBVSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFNBS3REO1FBSEMsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsS0FBSSxDQUFDLFNBQVMsR0FB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QyxlQUFlLENBQUM7MENBRU0sWUFBWTs7O1FBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUM7MENBRU0sWUFBWTs7MEJBOU50QztFQTBFcUMsT0FBTztTQUEvQixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0RhdGEnO1xuaW1wb3J0IHsgVGV4dEJveCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9UZXh0Qm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgSUhhc0hlbHAgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0hlbHAnO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvcm1hdHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlL2Zvcm1hdHRlci9JRm9ybWF0dGVyJztcbmltcG9ydCB7IEZvcm1hdHRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlL0Zvcm1hdHRlckZhY3Rvcnkuc2VydmljZSc7XG5cblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwibWF0ZXJpYWwtdGV4dC1ib3hcIjtcblxuY29uc3QgTk9STUFMOiBzdHJpbmcgPSAnbm9ybWFsJztcbmNvbnN0IFNVQ0NFU1M6IHN0cmluZyA9ICdzdWNjZXNzJztcbmNvbnN0IFdBUk5JTkc6IHN0cmluZyA9ICd3YXJuaW5nJztcbmNvbnN0IEVSUk9SOiBzdHJpbmcgPSAnZXJyb3InO1xuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9JQ09OID0gJ2Nsb3NlJztcbmNvbnN0IERFRkFVTFRfQlVUVE9OX1BPU0lUSU9OID0gJ3N1ZmZpeCc7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1pbnB1dCBtYXRlcmlhbC10ZXh0LWJveFwiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCI+XG5cdDxkaXYgY2xhc3M9XCJ0ZXh0Ym94LXdyYXBwZXJcIiBbY2xhc3MuYWN0aXZlXT1cIl9pc0FjdGl2ZSgpXCI+XG5cdFx0PG1hdC1mb3JtLWZpZWxkIFtuZ0NsYXNzXT1cImdldENsYXNzTWF0Rm9jdXNlZCgpXCI+XG5cdFx0XHQ8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJ7e2dldExhYmVsKCkgfCBwaHhfdGV4dH19XCIgW2F0dHIubWF4bGVuZ3RoXT1cImdldE1heExlbmd0aCgpXCIgdHlwZT1cInt7Z2V0VHlwZSgpfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiBbcmVhZG9ubHldPVwiaXNSZWFkT25seSgpXCIgW2NsYXNzLmRpcnR5XT1cImlzRGF0YURpcnR5KClcIiAoY2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZm9jdXNpbik9XCJvbkZvY3VzaW5nKCRldmVudClcIiAoYmx1cik9XCJvbkxvc3RGb2N1c2luZygkZXZlbnQpXCIgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXG5cdFx0XHQgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgW3ZhbHVlXT1cImZvcm1hdHRlZERhdGEgfCBwaHhfdGV4dFwiIFtjbGFzcy5ub3JtYWxdPVwiaXNOb3JtYWwoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLnN1Y2Nlc3NdPVwiaXNTdWNjZXNzKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3MuZXJyb3JdPVwiaXNFcnJvcigpICYmICFpc0Rpc2FibGVkKClcIj5cblx0XHRcdFx0PGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiKGdldEJ1dHRvbkljb24oKSB8fCBpc1Nob3dDbGVhckJ1dHRvbigpKSAmJiAoZm9ybWF0dGVkRGF0YSAmJiBnZXRCdXR0b25Qb3NpdGlvbigpID09PSAnc3VmZml4JyAmJiAhKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpKVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50KVwiPlxuICAgIFx0XHRcdDxtYXQtaWNvbj57e2dldEJ1dHRvbkljb24oKX19PC9tYXQtaWNvbj5cblx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cIihnZXRCdXR0b25JY29uKCkgfHwgaXNTaG93Q2xlYXJCdXR0b24oKSkgJiYgKGZvcm1hdHRlZERhdGEgJiYgZ2V0QnV0dG9uUG9zaXRpb24oKSA9PT0gJ3ByZWZpeCcgJiYgIShpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBtYXRQcmVmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIoZ2V0QnV0dG9uSWNvbigpIHx8IGlzU2hvd0NsZWFyQnV0dG9uKCkpICYmIChmb3JtYXR0ZWREYXRhICYmIGdldEJ1dHRvblBvc2l0aW9uKCkgPT09ICdzdWZmaXgnICYmIChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBkaXNhYmxlZCBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIoZ2V0QnV0dG9uSWNvbigpIHx8IGlzU2hvd0NsZWFyQnV0dG9uKCkpICYmIChmb3JtYXR0ZWREYXRhICYmIGdldEJ1dHRvblBvc2l0aW9uKCkgPT09ICdwcmVmaXgnICYmIChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBkaXNhYmxlZCBtYXRQcmVmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvbWF0LWZvcm0tZmllbGQ+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwidmFsaWRhdGlvblwiIFtzdHlsZS5kaXNwbGF5XT1cImdldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKCkgPyB1bmRlZmluZWQgOiAnbm9uZSdcIiBbY2xhc3Mubm9ybWFsXT1cImlzTm9ybWFsKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy5zdWNjZXNzXT1cImlzU3VjY2VzcygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3Mud2FybmluZ109XCJpc1dhcm5pbmcoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLmVycm9yXT1cImlzRXJyb3IoKSAmJiAhaXNEaXNhYmxlZCgpXCI+XG5cdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKClcIiBbbmdJZkVsc2VdPVwidmFsaWRhdGlvbl9lbHNlXCI+XG5cdFx0XHR7e2dldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKCkgfCBwaHhfdGV4dH19XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8bmctdGVtcGxhdGUgI3ZhbGlkYXRpb25fZWxzZT5cblx0XHRcdDwhLS0gV2UndmUgdG8gcHV0IHdoaXRlc3BhY2UgaWYgdGhlcmUgaXMgbm8gdmFsaWRhdGlvbiBtc2cgdG8gcHJldmVudCBlbXB0eSBkb20gLS0+XG5cdFx0XHQ8IS0tIHNpbmNlIGlmIHZhbGlkYXRlIG1zZydzIDxkaXY+IGRvbSBpcyBlbXB0eSwgdGhlIGNvbXBvbmVudCBwb3NpdGlvbmluZyAtLT5cblx0XHRcdDwhLS0gd2lsbCBiZSBtaXNwbGFjZWQuIC0tPlxuXHRcdFx0e3sgJyZuYnNwOycgfX1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW3N0eWxlLmRpc3BsYXldPVwiZ2V0VmFsaWRhdGlvblJlc3VsdE1lc3NhZ2UoKSA/ICdub25lJyA6IHVuZGVmaW5lZFwiIFtjbGFzcy5ub3JtYWxdPVwiaXNOb3JtYWwoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLnN1Y2Nlc3NdPVwiaXNTdWNjZXNzKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3MuZXJyb3JdPVwiaXNFcnJvcigpICYmICFpc0Rpc2FibGVkKClcIj5cblx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0RGVzY3JpcHRpb24oKVwiIFtuZ0lmRWxzZV09XCJkZXNjcmlwdGlvbl9lbHNlXCI+XG5cdFx0XHR7eyBnZXREZXNjcmlwdGlvbigpIHwgcGh4X3RleHQgfX1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDxuZy10ZW1wbGF0ZSAjZGVzY3JpcHRpb25fZWxzZT5cblx0XHRcdDwhLS0gV2UndmUgdG8gcHV0IHdoaXRlc3BhY2UgaWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gdG8gcHJldmVudCBlbXB0eSBkb20gLS0+XG5cdFx0XHQ8IS0tIHNpbmNlIGlmIGRlc2NyaXB0aW9uJ3MgPGRpdj4gZG9tIGlzIGVtcHR5LCB0aGUgY29tcG9uZW50IHBvc2l0aW9uaW5nIC0tPlxuXHRcdFx0PCEtLSB3aWxsIGJlIG1pc3BsYWNlZC4gLS0+XG5cdFx0XHR7eyAnJm5ic3A7JyB9fVxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaGVscFwiPlxuXHRcdHt7Z2V0SGVscCgpIHwgcGh4X3RleHR9fVxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRleHRCb3ggZXh0ZW5kcyBUZXh0Qm94IGltcGxlbWVudHMgT25Jbml0LCBJSGFzSGVscCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHR5cGVPZkRhdGE6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgnZm9ybWF0dGVyJylcbiAgQE9wdGlvbignZm9ybWF0dGVyLmluc3RhbmNlJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlcjogSUZvcm1hdHRlcjtcbiAgQElucHV0KCdmb3JtYXR0ZXJOYW1lJylcbiAgQE9wdGlvbignZm9ybWF0dGVyLm5hbWUnKVxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyTmFtZTogc3RyaW5nO1xuICBASW5wdXQoJ2Zvcm1hdHRlck9wdGlvbnMnKVxuICBAT3B0aW9uKCdmb3JtYXR0ZXIub3B0aW9ucycpXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJPcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgnZm9ybWF0dGVyVXNlUHJvcGVydHlWYWx1ZScpXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci51c2VQcm9wZXJ0eVZhbHVlJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlclVzZVByb3BlcnR5VmFsdWU6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIFRleHRCb3hcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB0eXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgLy8gLS0tIHNlbGZcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGxhYmVsOiBzdHJpbmc7XG4gIEBJMThOKClcbiAgQE9wdGlvbigpXG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBAT3B0aW9uKCdtYXhMZW5ndGgnKVxuICBASW5wdXQoJ3BoeE1heExlbmd0aCcpXG4gIHByb3RlY3RlZCBtYXhMZW5ndGg6IG51bWJlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBidXR0b25JY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgYnV0dG9uUG9zaXRpb246IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBidXR0b25IYW5kbGVyOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW47XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBAT3V0cHV0KCdwaHhMb2FkJylcbiAgQE9wdGlvbignbG9hZCcpXG4gIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICBAT3V0cHV0KCdwaHhTdGFydFZhbGlkYXRlJylcbiAgQE9wdGlvbignc3RhcnRWYWxpZGF0ZScpXG4gIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhFbmRWYWxpZGF0ZScpXG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcbiAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhGb2N1cycpXG4gIEBPcHRpb24oJ2ZvY3VzJylcbiAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdiZWZvcmVMb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdsb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVDaGFuZ2UnKVxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICBAT3B0aW9uKCdjaGFuZ2UnKVxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0Zvcm1hdHRlcklucHV0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gVGV4dEJveFxuICBAT3B0aW9uKCdiZWZvcmVLZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUtleVVwJylcbiAgcHJvdGVjdGVkIGJlZm9yZUtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEtleVVwJylcbiAgcHJvdGVjdGVkIGtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVLZXlEb3duJylcbiAgQE91dHB1dCgncGh4QmVmb3JlS2V5RG93bicpXG4gIHByb3RlY3RlZCBiZWZvcmVLZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlEb3duJylcbiAgQE91dHB1dCgncGh4S2V5RG93bicpXG4gIHByb3RlY3RlZCBrZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIHByaXZhdGUgYWN0aXZlOiBib29sZWFuO1xuICBwcml2YXRlIGNsYXNzRm9jdXNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjbGVhckZ1bmM6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3Rvcnk6IEZvcm1hdHRlckZhY3RvcnksIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBmb3JtYXR0ZXJGYWN0b3J5LCBuZWVkRm9jdXNTZXJ2aWNlKTtcblxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckZ1bmMgPSAoKSA9PiB7IHRoaXMuZm9ybWF0dGVkRGF0YSA9ICcnOyB9O1xuXG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnJlZnJlc2hBY3RpdmVUZXh0Qm94KCk7XG4gIH1cblxuICBwdWJsaWMgX2Rpc3BsYXlIZWxwKCk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNIZWxwID0gdGhpcy5oYXNIZWxwKCk7XG5cbiAgICByZXR1cm4gaGFzSGVscCAmJiB0aGlzLmlzU2hvd0hlbHAoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaEFjdGl2ZVRleHRCb3goKTogdm9pZCB7XG4gICAgbGV0IHZhbCA9IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuXG4gICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH0gXG5cbiAgcHJvdGVjdGVkIG9uVmFsaWRhdGlvbkVuZChpbnB1dFZhbHVlOiBhbnksIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQge1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5vbkRhdGFDaGFuZ2UoZGF0YSwgaW5wdXRWYWwpO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlVGV4dEJveCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvRm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmRvRm9jdXMoJGV2ZW50KTtcblxuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Mb3N0Rm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmRvTG9zdEZvY3VzKCRldmVudCk7XG5cbiAgICB0aGlzLnJlZnJlc2hBY3RpdmVUZXh0Qm94KCk7XG4gICAgdGhpcy5jbGFzc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc01hdEZvY3VzZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5KCkgPyB7ICdtYXQtZm9jdXNlZCc6IHRoaXMuX2lzQ2xhc3NGb2N1c2VkKCkgfSA6IHt9O1xuICB9XG5cbiAgcHVibGljIF9pc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgX2lzQ2xhc3NGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsYXNzRm9jdXNlZDtcbiAgfVxuXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlZCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoJGV2ZW50KTtcblxuICAgIHRoaXMucmVmcmVzaEFjdGl2ZVRleHRCb3goKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuc2VsZlNhdmVEYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlVGV4dEJveCgpO1xuICB9XG5cbiAgcHVibGljIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhYmVsO1xuICB9XG5cbiAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRWYWxpZGF0aW9uUmVzdWx0KCk6IHZvaWQge1xuICAgIHN1cGVyLnJlc2V0VmFsaWRhdGlvblJlc3VsdCgpO1xuXG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKCRldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSgpICYmICF0aGlzLmlzRGlzYWJsZWQoKSkge1xuXG4gICAgICB0aGlzLnNldEJ1dHRvbkhhbmRsZXIodGhpcy5zaG93Q2xlYXJCdXR0b24gPyB0aGlzLmNsZWFyRnVuYyA6IHRoaXMuYnV0dG9uSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLmJ1dHRvbkhhbmRsZXIgIT09IG51bGwgJiYgdGhpcy5idXR0b25IYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5idXR0b25IYW5kbGVyKHRoaXMsICRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dDbGVhckJ1dHRvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93Q2xlYXJCdXR0b24oc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q2xlYXJCdXR0b24gPSBzaG93Q2xlYXJCdXR0b247XG4gIH1cblxuICBwdWJsaWMgZ2V0QnV0dG9uSWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNob3dDbGVhckJ1dHRvbiA/IERFRkFVTFRfQlVUVE9OX0lDT04gOiB0aGlzLmJ1dHRvbkljb247XG4gIH1cblxuICBwdWJsaWMgc2V0QnV0dG9uSWNvbihidXR0b25JY29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmJ1dHRvbkljb24gPSBidXR0b25JY29uO1xuICB9XG5cbiAgcHVibGljIGdldEJ1dHRvblBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyQnV0dG9uID8g