com.phloxui
Version:
PhloxUI Ng2+ Framework
682 lines (681 loc) • 50.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, ElementRef, EventEmitter } from '@angular/core';
import { TextArea } from '../../../../../component/dataview/input/TextArea.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-area";
var /** @type {?} */ NORMAL = 'normal';
var /** @type {?} */ SUCCESS = 'success';
var /** @type {?} */ WARNING = 'warning';
var /** @type {?} */ ERROR = 'error';
var MaterialTextArea = /** @class */ (function (_super) {
tslib_1.__extends(MaterialTextArea, _super);
// private _autoExpand: boolean;
function MaterialTextArea(elementRef, formatterFactory, needFocusService) {
var _this = _super.call(this, elementRef, formatterFactory, needFocusService) || this;
_this.active = false;
return _this;
}
/**
* @return {?}
*/
MaterialTextArea.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
this.refreshActiveTextArea();
};
/**
* @return {?}
*/
MaterialTextArea.prototype.refreshActiveTextArea = /**
* @return {?}
*/
function () {
var /** @type {?} */ val = this.formattedData;
if (val !== null && typeof val !== 'undefined') {
if (typeof val === 'string' && val === '') {
this.active = false;
return;
}
if (!this.active) {
this.active = true;
}
}
else {
this.active = false;
}
};
/**
* @return {?}
*/
MaterialTextArea.prototype.doExpand = /**
* @return {?}
*/
function () {
if (this.elementRef && typeof $(this.elementRef.nativeElement).find('.material-text-area') !== 'undefined') {
var /** @type {?} */ ele = $(this.elementRef.nativeElement).find('.material-text-area');
if (typeof $(ele).find('textarea') !== 'undefined') {
var /** @type {?} */ textarea = $(ele).find('textarea');
if (textarea[0].clientHeight < textarea[0].scrollHeight) {
textarea.height((textarea[0].scrollHeight));
}
}
}
};
/**
* @return {?}
*/
MaterialTextArea.prototype.getClassMatFocused = /**
* @return {?}
*/
function () {
return this.isReadOnly() ? { 'mat-focused': this._isClassFocused() } : {};
};
/**
* @return {?}
*/
MaterialTextArea.prototype._hasLabel = /**
* @return {?}
*/
function () {
if (this.label !== null && typeof this.label === 'string') {
return true;
}
return false;
};
/**
* @return {?}
*/
MaterialTextArea.prototype._hasDescription = /**
* @return {?}
*/
function () {
if (this.description !== null && typeof this.description === 'string' && this.description !== '') {
return true;
}
return false;
};
/**
* @return {?}
*/
MaterialTextArea.prototype._displayHelp = /**
* @return {?}
*/
function () {
var /** @type {?} */ hasHelp = this.hasHelp();
return hasHelp;
};
/**
* @return {?}
*/
MaterialTextArea.prototype._isActive = /**
* @return {?}
*/
function () {
return this.active;
};
/**
* @return {?}
*/
MaterialTextArea.prototype._isClassFocused = /**
* @return {?}
*/
function () {
return this.classFocused;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.onKeyUp = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
// emit event
_super.prototype.onKeyUp.call(this, $event);
};
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
MaterialTextArea.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
MaterialTextArea.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
_super.prototype.onDataChange.call(this, data, inputVal);
this.refreshActiveTextArea();
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.doFocus.call(this, $event);
this.active = true;
this.classFocused = true;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.doLostFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.doLostFocus.call(this, $event);
this.refreshActiveTextArea();
this.classFocused = false;
};
/**
* @param {?} event
* @return {?}
*/
MaterialTextArea.prototype.onFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
_super.prototype.onFocus.call(this, event);
this.active = true;
this.classFocused = true;
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.onFocusing = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.needFocusService.setFocusingComponent(this, $event);
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.onLostFocusing = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.needFocusService.resetFocusingComponent($event);
};
/**
* @param {?} $event
* @return {?}
*/
MaterialTextArea.prototype.onValueChanged = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
_super.prototype.onValueChanged.call(this, $event);
this.refreshActiveTextArea();
};
/**
* @return {?}
*/
MaterialTextArea.prototype.getDescription = /**
* @return {?}
*/
function () {
return this.description;
};
/**
* @param {?} description
* @return {?}
*/
MaterialTextArea.prototype.setDescription = /**
* @param {?} description
* @return {?}
*/
function (description) {
this.description = description;
};
/**
* @return {?}
*/
MaterialTextArea.prototype.getLabel = /**
* @return {?}
*/
function () {
return this.label;
};
/**
* @param {?} label
* @return {?}
*/
MaterialTextArea.prototype.setLabel = /**
* @param {?} label
* @return {?}
*/
function (label) {
this.label = label;
};
/**
* @return {?}
*/
MaterialTextArea.prototype.isAutosize = /**
* @return {?}
*/
function () {
return this.autosize;
};
/**
* @param {?} autosize
* @return {?}
*/
MaterialTextArea.prototype.setAutosize = /**
* @param {?} autosize
* @return {?}
*/
function (autosize) {
this.autosize = autosize;
};
/**
* @return {?}
*/
MaterialTextArea.prototype.getMatAutosizeMinRows = /**
* @return {?}
*/
function () {
return this.matAutosizeMinRows;
};
/**
* @param {?} matAutosizeMinRows
* @return {?}
*/
MaterialTextArea.prototype.setMatAutosizeMinRows = /**
* @param {?} matAutosizeMinRows
* @return {?}
*/
function (matAutosizeMinRows) {
this.matAutosizeMinRows = matAutosizeMinRows;
};
/**
* @return {?}
*/
MaterialTextArea.prototype.getMatAutosizeMaxRows = /**
* @return {?}
*/
function () {
return this.matAutosizeMaxRows;
};
/**
* @param {?} matAutosizeMaxRows
* @return {?}
*/
MaterialTextArea.prototype.setMatAutosizeMaxRows = /**
* @param {?} matAutosizeMaxRows
* @return {?}
*/
function (matAutosizeMaxRows) {
this.matAutosizeMaxRows = matAutosizeMaxRows;
};
MaterialTextArea.TYPE_NAME = TYPE_NAME;
MaterialTextArea.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"material-input material-text-area\" [style.width]=\"getWidth()\">\n\t<div class=\"textarea-wrapper\" [class.active]=\"_isActive()\">\n\t\t<mat-form-field [ngClass]=\"getClassMatFocused()\">\n\t\t\t<textarea *ngIf=\"isAutosize() !== null && isAutosize() !== undefined && isAutosize()\" matInput placeholder=\"{{getLabel() | phx_text}}\" [disabled]=\"isDisabled()\" [readonly]=\"isReadOnly()\" [class.dirty]=\"isDataDirty()\" (change)=\"onValueChanged($event)\"\n\t\t\t (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\" [value]=\"formattedData | phx_text\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\"\n\t\t\t [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\" [mat-autosize]=\"isAutosize()\" [matAutosizeMinRows]=\"getMatAutosizeMinRows()\" [matAutosizeMaxRows]=\"getMatAutosizeMaxRows()\"></textarea>\n\t\t\t<textarea *ngIf=\"isAutosize() === null || isAutosize() === undefined || !isAutosize()\" matInput placeholder=\"{{getLabel() | phx_text}}\" [disabled]=\"isDisabled()\" [readonly]=\"isReadOnly()\" [class.dirty]=\"isDataDirty()\"\n\t\t\t (change)=\"onValueChanged($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\" (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\" [value]=\"formattedData | phx_text\" [class.normal]=\"isNormal() && !isDisabled()\"\n\t\t\t [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\"></textarea>\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 */
MaterialTextArea.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: FormatterFactory, },
{ type: NeedFocusService, },
]; };
MaterialTextArea.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 },],
"cols": [{ type: Input },],
"rows": [{ type: Input },],
"label": [{ type: Input },],
"description": [{ type: Input },],
"autosize": [{ type: Input },],
"matAutosizeMinRows": [{ type: Input },],
"matAutosizeMaxRows": [{ 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)
], MaterialTextArea.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialTextArea.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialTextArea.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialTextArea.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialTextArea.prototype, "help", void 0);
tslib_1.__decorate([
Option('formatter.instance'),
tslib_1.__metadata("design:type", Object)
], MaterialTextArea.prototype, "formatter", void 0);
tslib_1.__decorate([
Option('formatter.name'),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "formatterName", void 0);
tslib_1.__decorate([
Option('formatter.options'),
tslib_1.__metadata("design:type", Object)
], MaterialTextArea.prototype, "formatterOptions", void 0);
tslib_1.__decorate([
Option('formatter.usePropertyValue'),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "formatterUsePropertyValue", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "type", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialTextArea.prototype, "cols", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialTextArea.prototype, "rows", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "label", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialTextArea.prototype, "description", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialTextArea.prototype, "autosize", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialTextArea.prototype, "matAutosizeMinRows", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialTextArea.prototype, "matAutosizeMaxRows", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "beforeKeyUpEvent", void 0);
tslib_1.__decorate([
Option('keyUp'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "keyUpEvent", void 0);
tslib_1.__decorate([
Option('beforeKeyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "beforeKeyDownEvent", void 0);
tslib_1.__decorate([
Option('keyDown'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialTextArea.prototype, "keyDownEvent", void 0);
return MaterialTextArea;
}(TextArea));
export { MaterialTextArea };
function MaterialTextArea_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MaterialTextArea.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MaterialTextArea.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
MaterialTextArea.propDecorators;
/** @type {?} */
MaterialTextArea.TYPE_NAME;
/** @type {?} */
MaterialTextArea.prototype.dataParent;
/** @type {?} */
MaterialTextArea.prototype.ignoreParentData;
/** @type {?} */
MaterialTextArea.prototype.data;
/** @type {?} */
MaterialTextArea.prototype.ignoreParentDisabled;
/** @type {?} */
MaterialTextArea.prototype.delegateHistory;
/** @type {?} */
MaterialTextArea.prototype.onDisabled;
/** @type {?} */
MaterialTextArea.prototype.onEnabled;
/** @type {?} */
MaterialTextArea.prototype.loadingEnabled;
/** @type {?} */
MaterialTextArea.prototype.i18nKey;
/** @type {?} */
MaterialTextArea.prototype.bypass;
/** @type {?} */
MaterialTextArea.prototype.options;
/** @type {?} */
MaterialTextArea.prototype.disabled;
/** @type {?} */
MaterialTextArea.prototype.field;
/** @type {?} */
MaterialTextArea.prototype.name;
/** @type {?} */
MaterialTextArea.prototype.typeOfData;
/** @type {?} */
MaterialTextArea.prototype.readOnly;
/** @type {?} */
MaterialTextArea.prototype.help;
/** @type {?} */
MaterialTextArea.prototype.formatter;
/** @type {?} */
MaterialTextArea.prototype.formatterName;
/** @type {?} */
MaterialTextArea.prototype.formatterOptions;
/** @type {?} */
MaterialTextArea.prototype.formatterUsePropertyValue;
/** @type {?} */
MaterialTextArea.prototype.type;
/** @type {?} */
MaterialTextArea.prototype.width;
/** @type {?} */
MaterialTextArea.prototype.cols;
/** @type {?} */
MaterialTextArea.prototype.rows;
/** @type {?} */
MaterialTextArea.prototype.label;
/** @type {?} */
MaterialTextArea.prototype.description;
/** @type {?} */
MaterialTextArea.prototype.autosize;
/** @type {?} */
MaterialTextArea.prototype.matAutosizeMinRows;
/** @type {?} */
MaterialTextArea.prototype.matAutosizeMaxRows;
/** @type {?} */
MaterialTextArea.prototype.loadEvent;
/** @type {?} */
MaterialTextArea.prototype.startValidateEvent;
/** @type {?} */
MaterialTextArea.prototype.endValidateEvent;
/** @type {?} */
MaterialTextArea.prototype.beforeFocusEvent;
/** @type {?} */
MaterialTextArea.prototype.focusEvent;
/** @type {?} */
MaterialTextArea.prototype.beforeLostFocusEvent;
/** @type {?} */
MaterialTextArea.prototype.lostFocusEvent;
/** @type {?} */
MaterialTextArea.prototype.beforeChangeEvent;
/** @type {?} */
MaterialTextArea.prototype.changeEvent;
/** @type {?} */
MaterialTextArea.prototype.beforeKeyUpEvent;
/** @type {?} */
MaterialTextArea.prototype.keyUpEvent;
/** @type {?} */
MaterialTextArea.prototype.beforeKeyDownEvent;
/** @type {?} */
MaterialTextArea.prototype.keyDownEvent;
/** @type {?} */
MaterialTextArea.prototype.active;
/** @type {?} */
MaterialTextArea.prototype.classFocused;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxUZXh0QXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi90aGVtZS9tYXRlcmlhbC9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvTWF0ZXJpYWxUZXh0QXJlYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFJdEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUtuRixxQkFBTSxTQUFTLEdBQVcsb0JBQW9CLENBQUM7QUFFL0MscUJBQU0sTUFBTSxHQUFXLFFBQVEsQ0FBQztBQUNoQyxxQkFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLHFCQUFNLE9BQU8sR0FBVyxTQUFTLENBQUM7QUFDbEMscUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQzs7SUE0Q1EsNENBQVE7SUEwSjVDLGdDQUFnQztJQUVoQywwQkFBWSxVQUFzQixFQUFFLGdCQUFrQyxFQUFFLGdCQUFrQztRQUExRyxZQUNFLGtCQUFNLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxTQUd0RDtRQURDLEtBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOztLQUNyQjs7OztJQUVNLG1DQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLHFCQUFxQixFQUFF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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZXh0QXJlYSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9UZXh0QXJlYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JSGFzRGF0YSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvbW9kZWwvVmFsaWRhdGlvblJlc3VsdCc7XHJcbmltcG9ydCB7IElIYXNIZWxwIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L0lIYXNIZWxwJztcclxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvRm9ybWF0dGVyRmFjdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUZvcm1hdHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlL2Zvcm1hdHRlci9JRm9ybWF0dGVyJztcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJtYXRlcmlhbC10ZXh0LWFyZWFcIjtcclxuXHJcbmNvbnN0IE5PUk1BTDogc3RyaW5nID0gJ25vcm1hbCc7XHJcbmNvbnN0IFNVQ0NFU1M6IHN0cmluZyA9ICdzdWNjZXNzJztcclxuY29uc3QgV0FSTklORzogc3RyaW5nID0gJ3dhcm5pbmcnO1xyXG5jb25zdCBFUlJPUjogc3RyaW5nID0gJ2Vycm9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXHJcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1pbnB1dCBtYXRlcmlhbC10ZXh0LWFyZWFcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiPlxyXG5cdDxkaXYgY2xhc3M9XCJ0ZXh0YXJlYS13cmFwcGVyXCIgW2NsYXNzLmFjdGl2ZV09XCJfaXNBY3RpdmUoKVwiPlxyXG5cdFx0PG1hdC1mb3JtLWZpZWxkIFtuZ0NsYXNzXT1cImdldENsYXNzTWF0Rm9jdXNlZCgpXCI+XHJcblx0XHRcdDx0ZXh0YXJlYSAqbmdJZj1cImlzQXV0b3NpemUoKSAhPT0gbnVsbCAmJiBpc0F1dG9zaXplKCkgIT09IHVuZGVmaW5lZCAmJiBpc0F1dG9zaXplKClcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7Z2V0TGFiZWwoKSB8IHBoeF90ZXh0fX1cIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgW3JlYWRvbmx5XT1cImlzUmVhZE9ubHkoKVwiIFtjbGFzcy5kaXJ0eV09XCJpc0RhdGFEaXJ0eSgpXCIgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuXHRcdFx0ICAoZm9jdXNpbik9XCJvbkZvY3VzaW5nKCRldmVudClcIiAoYmx1cik9XCJvbkxvc3RGb2N1c2luZygkZXZlbnQpXCIgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgW3ZhbHVlXT1cImZvcm1hdHRlZERhdGEgfCBwaHhfdGV4dFwiIFtjbGFzcy5ub3JtYWxdPVwiaXNOb3JtYWwoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLnN1Y2Nlc3NdPVwiaXNTdWNjZXNzKCkgJiYgIWlzRGlzYWJsZWQoKVwiXHJcblx0XHRcdCAgW2NsYXNzLndhcm5pbmddPVwiaXNXYXJuaW5nKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy5lcnJvcl09XCJpc0Vycm9yKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFttYXQtYXV0b3NpemVdPVwiaXNBdXRvc2l6ZSgpXCIgW21hdEF1dG9zaXplTWluUm93c109XCJnZXRNYXRBdXRvc2l6ZU1pblJvd3MoKVwiIFttYXRBdXRvc2l6ZU1heFJvd3NdPVwiZ2V0TWF0QXV0b3NpemVNYXhSb3dzKClcIj48L3RleHRhcmVhPlxyXG5cdFx0XHQ8dGV4dGFyZWEgKm5nSWY9XCJpc0F1dG9zaXplKCkgPT09IG51bGwgfHwgaXNBdXRvc2l6ZSgpID09PSB1bmRlZmluZWQgfHwgIWlzQXV0b3NpemUoKVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3tnZXRMYWJlbCgpIHwgcGh4X3RleHR9fVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiBbcmVhZG9ubHldPVwiaXNSZWFkT25seSgpXCIgW2NsYXNzLmRpcnR5XT1cImlzRGF0YURpcnR5KClcIlxyXG5cdFx0XHQgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChmb2N1c2luKT1cIm9uRm9jdXNpbmcoJGV2ZW50KVwiIChibHVyKT1cIm9uTG9zdEZvY3VzaW5nKCRldmVudClcIiAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiBbdmFsdWVdPVwiZm9ybWF0dGVkRGF0YSB8IHBoeF90ZXh0XCIgW2NsYXNzLm5vcm1hbF09XCJpc05vcm1hbCgpICYmICFpc0Rpc2FibGVkKClcIlxyXG5cdFx0XHQgIFtjbGFzcy5zdWNjZXNzXT1cImlzU3VjY2VzcygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3Mud2FybmluZ109XCJpc1dhcm5pbmcoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLmVycm9yXT1cImlzRXJyb3IoKSAmJiAhaXNEaXNhYmxlZCgpXCI+PC90ZXh0YXJlYT5cclxuXHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cInZhbGlkYXRpb25cIiBbc3R5bGUuZGlzcGxheV09XCJnZXRWYWxpZGF0aW9uUmVzdWx0TWVzc2FnZSgpID8gdW5kZWZpbmVkIDogJ25vbmUnXCIgW2NsYXNzLm5vcm1hbF09XCJpc05vcm1hbCgpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3Muc3VjY2Vzc109XCJpc1N1Y2Nlc3MoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLndhcm5pbmddPVwiaXNXYXJuaW5nKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy5lcnJvcl09XCJpc0Vycm9yKCkgJiYgIWlzRGlzYWJsZWQoKVwiPlxyXG5cdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKClcIiBbbmdJZkVsc2VdPVwidmFsaWRhdGlvbl9lbHNlXCI+XHJcblx0XHRcdHt7Z2V0VmFsaWRhdGlvblJlc3VsdE1lc3NhZ2UoKSB8IHBoeF90ZXh0fX1cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHQ8bmctdGVtcGxhdGUgI3ZhbGlkYXRpb25fZWxzZT5cclxuXHRcdFx0PCEtLSBXZSd2ZSB0byBwdXQgd2hpdGVzcGFjZSBpZiB0aGVyZSBpcyBubyB2YWxpZGF0aW9uIG1zZyB0byBwcmV2ZW50IGVtcHR5IGRvbSAtLT5cclxuXHRcdFx0PCEtLSBzaW5jZSBpZiB2YWxpZGF0ZSBtc2cncyA8ZGl2PiBkb20gaXMgZW1wdHksIHRoZSBjb21wb25lbnQgcG9zaXRpb25pbmcgLS0+XHJcblx0XHRcdDwhLS0gd2lsbCBiZSBtaXNwbGFjZWQuIC0tPlxyXG5cdFx0XHR7eyAnJm5ic3A7JyB9fVxyXG5cdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiBbc3R5bGUuZGlzcGxheV09XCJnZXRWYWxpZGF0aW9uUmVzdWx0TWVzc2FnZSgpID8gJ25vbmUnIDogdW5kZWZpbmVkXCIgW2NsYXNzLm5vcm1hbF09XCJpc05vcm1hbCgpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3Muc3VjY2Vzc109XCJpc1N1Y2Nlc3MoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLndhcm5pbmddPVwiaXNXYXJuaW5nKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy5lcnJvcl09XCJpc0Vycm9yKCkgJiYgIWlzRGlzYWJsZWQoKVwiPlxyXG5cdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldERlc2NyaXB0aW9uKClcIiBbbmdJZkVsc2VdPVwiZGVzY3JpcHRpb25fZWxzZVwiPlxyXG5cdFx0XHR7eyBnZXREZXNjcmlwdGlvbigpIHwgcGh4X3RleHQgfX1cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHQ8bmctdGVtcGxhdGUgI2Rlc2NyaXB0aW9uX2Vsc2U+XHJcblx0XHRcdDwhLS0gV2UndmUgdG8gcHV0IHdoaXRlc3BhY2UgaWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gdG8gcHJldmVudCBlbXB0eSBkb20gLS0+XHJcblx0XHRcdDwhLS0gc2luY2UgaWYgZGVzY3JpcHRpb24ncyA8ZGl2PiBkb20gaXMgZW1wdHksIHRoZSBjb21wb25lbnQgcG9zaXRpb25pbmcgLS0+XHJcblx0XHRcdDwhLS0gd2lsbCBiZSBtaXNwbGFjZWQuIC0tPlxyXG5cdFx0XHR7eyAnJm5ic3A7JyB9fVxyXG5cdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwiaGVscFwiPlxyXG5cdFx0e3tnZXRIZWxwKCkgfCBwaHhfdGV4dH19XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRleHRBcmVhIGV4dGVuZHMgVGV4dEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIElIYXNIZWxwIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdpMThuQnlwYXNzJylcclxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcclxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQEkxOE4oKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBoZWxwOiBhbnk7XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3XHJcbiAgQElucHV0KCdmb3JtYXR0ZXInKVxyXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci5pbnN0YW5jZScpXHJcbiAgcHJvdGVjdGVkIGZvcm1hdHRlcjogSUZvcm1hdHRlcjtcclxuICBASW5wdXQoJ2Zvcm1hdHRlck5hbWUnKVxyXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci5uYW1lJylcclxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyTmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZm9ybWF0dGVyT3B0aW9ucycpXHJcbiAgQE9wdGlvbignZm9ybWF0dGVyLm9wdGlvbnMnKVxyXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJPcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KCdmb3JtYXR0ZXJVc2VQcm9wZXJ0eVZhbHVlJylcclxuICBAT3B0aW9uKCdmb3JtYXR0ZXIudXNlUHJvcGVydHlWYWx1ZScpXHJcbiAgcHJvdGVjdGVkIGZvcm1hdHRlclVzZVByb3BlcnR5VmFsdWU6IGJvb2xlYW47XHJcbiAgLy8gLS0tIGZyb20gVGV4dEJveFxyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIHR5cGU6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xyXG4gIC8vIC0tLSBmcm9tIFRleHRBcmVhXHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgY29sczogbnVtYmVyO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIHJvd3M6IG51bWJlcjtcclxuICAvLyAtLS0gc2VsZlxyXG4gIEBJbnB1dCgpXHJcbiAgQEkxOE4oKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBsYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQEkxOE4oKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGF1dG9zaXplOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG1hdEF1dG9zaXplTWluUm93czogbnVtYmVyO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG1hdEF1dG9zaXplTWF4Um93czogbnVtYmVyO1xyXG5cclxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcclxuICBAT3V0cHV0KCdwaHhMb2FkJylcclxuICBAT3B0aW9uKCdsb2FkJylcclxuICBwcm90ZWN0ZWQgbG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XHJcbiAgQE91dHB1dCgncGh4U3RhcnRWYWxpZGF0ZScpXHJcbiAgQE9wdGlvbignc3RhcnRWYWxpZGF0ZScpXHJcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4RW5kVmFsaWRhdGUnKVxyXG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcclxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxyXG4gIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4Rm9jdXMnKVxyXG4gIEBPcHRpb24oJ2ZvY3VzJylcclxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlTG9zdEZvY3VzJylcclxuICBAT3B0aW9uKCdiZWZvcmVMb3N0Rm9jdXMnKVxyXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4TG9zdEZvY3VzJylcclxuICBAT3B0aW9uKCdsb3N0Rm9jdXMnKVxyXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlQ2hhbmdlJylcclxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxyXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4Q2hhbmdlJykgXHJcbiAgQE9wdGlvbignY2hhbmdlJylcclxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlld1xyXG4gIC8vIC0tLSBmcm9tIFRleHRCb3hcclxuICBAT3B0aW9uKCdiZWZvcmVLZXlVcCcpXHJcbiAgQE91dHB1dCgncGh4QmVmb3JlS2V5VXAnKVxyXG4gIHByb3RlY3RlZCBiZWZvcmVLZXlVcEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdrZXlVcCcpXHJcbiAgQE91dHB1dCgncGh4S2V5VXAnKVxyXG4gIHByb3RlY3RlZCBrZXlVcEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVLZXlEb3duJylcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVLZXlEb3duJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlS2V5RG93bkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdrZXlEb3duJylcclxuICBAT3V0cHV0KCdwaHhLZXlEb3duJylcclxuICBwcm90ZWN0ZWQga2V5RG93bkV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgLy8gLS0tIGZyb20gU2VsZlxyXG4gIHByaXZhdGUgYWN0aXZlOiBib29sZWFuO1xyXG4gIHByaXZhdGUgY2xhc3NGb2N1c2VkOiBib29sZWFuO1xyXG4gIC8vIHByaXZhdGUgX2F1dG9FeHBhbmQ6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3Rvcnk6IEZvcm1hdHRlckZhY3RvcnksIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3RvcnksIG5lZWRGb2N1c1NlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaEFjdGl2ZVRleHRBcmVhKCk7XHJcbiAgfSBcclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoQWN0aXZlVGV4dEFyZWEoKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsID0gdGhpcy5mb3JtYXR0ZWREYXRhO1xyXG5cclxuICAgIGlmICh2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCA9PT0gJycpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb0V4cGFuZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgJiYgdHlwZW9mICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5tYXRlcmlhbC10ZXh0LWFyZWEnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgbGV0IGVsZSA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5tYXRlcmlhbC10ZXh0LWFyZWEnKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgJChlbGUpLmZpbmQoJ3RleHRhcmVhJykgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbGV0IHRleHRhcmVhID0gJChlbGUpLmZpbmQoJ3RleHRhcmVhJyk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0YXJlYVswXS5jbGllbnRIZWlnaHQgPCB0ZXh0YXJlYVswXS5zY3JvbGxIZWlnaHQpIHtcclxuICAgICAgICAgIHRleHRhcmVhLmhlaWdodCgodGV4dGFyZWFbMF0uc2Nyb2xsSGVpZ2h0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2xhc3NNYXRGb2N1c2VkKCk6IGFueXtcclxuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkoKSA/IHsnbWF0LWZvY3VzZWQnOiB0aGlzLl9pc0NsYXNzRm9jdXNlZCgpfSA6IHt9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIF9oYXNMYWJlbCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmxhYmVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmxhYmVsID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBfaGFzRGVzY3JpcHRpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kZXNjcmlwdGlvbiA9PT0gJ3N0cmluZycgJiYgdGhpcy5kZXNjcmlwdGlvbiAhPT0gJycpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgX2Rpc3BsYXlIZWxwKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGhhc0hlbHAgPSB0aGlzLmhhc0hlbHAoKTtcclxuXHJcbiAgICByZXR1cm4gaGFzSGVscDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBfaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgX2lzQ2xhc3NGb2N1c2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xhc3NGb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgLy8gVG8gYXV0byBleHBhbmQgdGV4dGFyZWFcclxuICBwdWJsaWMgb25LZXlVcCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBlbWl0IGV2ZW50XHJcbiAgICBzdXBlci5vbktleVVwKCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IGFueSwgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25EYXRhQ2hhbmdlKGRhdGE6IGFueSwgaW5wdXRWYWw6IGFueSk6IHZvaWQge1xyXG4gICAgc3VwZXIub25EYXRhQ2hhbmdlKGRhdGEsIGlucHV0VmFsKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2hBY3RpdmVUZXh0QXJlYSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRvRm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgc3VwZXIuZG9Gb2N1cygkZXZlbnQpO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuY2xhc3NGb2N1c2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkb0xvc3RGb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBzdXBlci5kb0xvc3RGb2N1cygkZXZlbnQpO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaEFjdGl2ZVRleHRBcmVhKCk7XHJcbiAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuICBwdWJsaWMgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBzdXBlci5vbkZvY3VzKGV2ZW50KTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Gb2N1c2luZygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2Uuc2V0Rm9jdXNpbmdDb21wb25lbnQodGhpcywgJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkxvc3RGb2N1c2luZygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UucmVzZXRGb2N1c2luZ0NvbXBvbmVudCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKCRldmVudDogRXZlbnQpIHtcclxuICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKCRldmVudCk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlVGV4dEFyZWEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxhYmVsID0gbG