UNPKG

materialize-angular

Version:
388 lines 29.8 kB
/** * @fileoverview added by tsickle * Generated from: app/completed-components/select/select.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Workylab. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE */ import { Component, ContentChildren, ElementRef, EventEmitter, forwardRef, Input, Output, QueryList, Renderer2, ViewChild } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { config } from '../../config'; import { SelectOptionComponent } from './select-option/select-option.component'; var SelectComponent = /** @class */ (function () { function SelectComponent(renderer) { this.renderer = renderer; this.className = SelectComponent.defaultProps.className; this.disabled = SelectComponent.defaultProps.disabled; this.floatLabel = SelectComponent.defaultProps.floatLabel; this.id = SelectComponent.defaultProps.id; this.isNativeControl = SelectComponent.defaultProps.isNativeControl; this.name = SelectComponent.defaultProps.name; this.required = SelectComponent.defaultProps.required; this.value = SelectComponent.defaultProps.value; this.prefix = config.components.prefix; this.isFocused = false; this.isOpen = false; this.onChangeEmitter = new EventEmitter(); this.addBackdropListener = this.addBackdropListener.bind(this); this.onChangeOption = this.onChangeOption.bind(this); this.registerOptions = this.registerOptions.bind(this); } /** * @return {?} */ SelectComponent.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; setTimeout(this.registerOptions, 0); this.options.changes.subscribe((/** * @param {?} changes * @return {?} */ function (changes) { setTimeout(_this.registerOptions, 0); })); }; /** * @return {?} */ SelectComponent.prototype.registerOptions = /** * @return {?} */ function () { var _this = this; this.options.forEach((/** * @param {?} option * @return {?} */ function (option) { option.isActive = (option.value === _this.value); option.onClickEmitter.subscribe(_this.onChangeOption); })); this.updateControl(this.value); }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.updateControl = /** * @param {?} value * @return {?} */ function (value) { this.value = value; this.isOpen = false; this.activeSelectedOption(this.value); }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.onChangeOption = /** * @param {?} value * @return {?} */ function (value) { this.updateControl(value); this.onChangeEmitter.emit(this.value); this.onChange(this.value); }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.activeSelectedOption = /** * @param {?} value * @return {?} */ function (value) { var _this = this; this.options.forEach((/** * @param {?} option * @return {?} */ function (option) { if (option.value === value) { option.isActive = true; _this.activeSelectClass(option); _this.cloneOption(option); } else { option.isActive = false; } })); }; /** * @param {?} selectedOption * @return {?} */ SelectComponent.prototype.cloneOption = /** * @param {?} selectedOption * @return {?} */ function (selectedOption) { if (!this.labelContainerRef) { return; } var labelContainer = this.labelContainerRef.nativeElement; var optionTemplateRef = selectedOption.optionTemplateRef, disabled = selectedOption.disabled; if (labelContainer.firstChild) { this.renderer.removeChild(labelContainer, labelContainer.firstChild); } if (optionTemplateRef) { var firstChild = optionTemplateRef.nativeElement.firstChild; /** @type {?} */ var cloned = firstChild.cloneNode(true); if (disabled) { this.renderer.addClass(cloned, 'option-disabled'); } this.renderer.appendChild(labelContainer, cloned); } }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onChangeNativeOption = /** * @param {?} event * @return {?} */ function (event) { var selectedOptions = event.target.selectedOptions; var value = selectedOptions[0].value; this.value = value; this.activeSelectClass(selectedOptions[0]); this.onChangeEmitter.emit(this.value); this.onChange(this.value); }; /** * @return {?} */ SelectComponent.prototype.onBlur = /** * @return {?} */ function () { this.isFocused = false; }; /** * @return {?} */ SelectComponent.prototype.onFocus = /** * @return {?} */ function () { if (!this.disabled) { this.isFocused = true; this.onTouched(); } }; /** * @return {?} */ SelectComponent.prototype.onClick = /** * @return {?} */ function () { if (!this.disabled) { this.isFocused = true; this.isOpen = true; if (!this.isNativeControl) { setTimeout(this.addBackdropListener, 0); } } }; /** * @return {?} */ SelectComponent.prototype.addBackdropListener = /** * @return {?} */ function () { var _this = this; this.backdropRef.nativeElement.addEventListener('click', (/** * @return {?} */ function () { _this.isOpen = false; })); }; /** * @param {?} isDisabled * @return {?} */ SelectComponent.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.disabled = isDisabled; }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { var _this = this; this.value = value; setTimeout((/** * @return {?} */ function () { _this.updateControl(_this.value); }), 0); }; /** * @param {?} fn * @return {?} */ SelectComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @param {?} fn * @return {?} */ SelectComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouched = fn; }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.onChange = /** * @param {?} value * @return {?} */ function (value) { }; /** * @return {?} */ SelectComponent.prototype.onTouched = /** * @return {?} */ function () { }; /** * @param {?} selectedOption * @return {?} */ SelectComponent.prototype.activeSelectClass = /** * @param {?} selectedOption * @return {?} */ function (selectedOption) { if (this.selectElementRef && selectedOption.disabled) { this.renderer.addClass(this.selectElementRef.nativeElement, 'option-disabled'); } else if (this.selectElementRef && !selectedOption.disabled) { this.renderer.removeClass(this.selectElementRef.nativeElement, 'option-disabled'); } }; SelectComponent.defaultProps = { className: '', disabled: false, floatLabel: '', id: null, isNativeControl: false, name: '', required: false, value: null }; SelectComponent.decorators = [ { type: Component, args: [{ providers: [{ multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return SelectComponent; })) }], selector: config.components.prefix + "-select }", template: "<div [ngClass]=\"[className, prefix + '-form-control-select-container']\" *ngIf=\"isNativeControl\">\n <div [ngClass]=\"prefix + '-form-control-container'\"\n [class.float-label]=\"floatLabel\"\n [class.active]=\"value\"\n [class.focused]=\"isFocused\"\n [class.disabled]=\"disabled\"\n >\n <div [ngClass]=\"prefix + '-form-control-wrapper'\">\n <div [ngClass]=\"prefix + '-form-control-label'\">{{ floatLabel }}</div>\n\n <select #selectElement (blur)=\"onBlur()\" (click)=\"onClick()\" (focus)=\"onFocus()\" (input)=\"onChangeNativeOption($event)\"\n [ngClass]=\"prefix + '-form-control'\"\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [required]=\"required\"\n [value]=\"value\"\n >\n <option\n [selected]=\"option.value === value\"\n [value]=\"option.value\"\n [disabled]=\"option.disabled\"\n *ngFor=\"let option of options\">\n {{ option.content }}\n </option>\n </select>\n </div>\n\n <materialize-icon [className]=\"prefix + '-form-control-select-icon'\" size=\"lg\">arrow_drop_down</materialize-icon>\n </div>\n</div>\n\n\n<div (focus)=\"onFocus()\" (blur)=\"onBlur()\" *ngIf=\"!isNativeControl\"\n [ngClass]=\"[className, prefix + '-form-control-select-container']\"\n [class.open]=\"isOpen\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n>\n <div #backdrop *ngIf=\"isOpen\" [ngClass]=\"prefix + '-form-control-select-backdrop'\"></div>\n\n <div (click)=\"onClick()\"\n [ngClass]=\"[prefix + '-form-control-container' , className]\"\n [class.float-label]=\"floatLabel\"\n [class.active]=\"value\"\n [class.focused]=\"isFocused\"\n [class.disabled]=\"disabled\"\n >\n <div [ngClass]=\"prefix + '-form-control-wrapper'\">\n <div [ngClass]=\"prefix + '-form-control-label'\">{{ floatLabel }}</div>\n <div [ngClass]=\"prefix + '-form-control'\" #labelContainer>&nbsp;</div>\n </div>\n\n <materialize-icon [className]=\"prefix + '-form-control-select-icon'\" size=\"lg\">arrow_drop_down</materialize-icon>\n </div>\n\n <div [className]=\"prefix + '-form-control-select-menu'\">\n <ng-content select=\"materialize-select-option\"></ng-content>\n </div>\n</div>\n" }] } ]; /** @nocollapse */ SelectComponent.ctorParameters = function () { return [ { type: Renderer2 } ]; }; SelectComponent.propDecorators = { backdropRef: [{ type: ViewChild, args: ['backdrop', { static: false },] }], labelContainerRef: [{ type: ViewChild, args: ['labelContainer', { static: false },] }], selectElementRef: [{ type: ViewChild, args: ['selectElement', { static: false },] }], options: [{ type: ContentChildren, args: [SelectOptionComponent,] }], onChangeEmitter: [{ type: Output, args: ['onChange',] }], className: [{ type: Input }], disabled: [{ type: Input }], floatLabel: [{ type: Input }], id: [{ type: Input }], isNativeControl: [{ type: Input }], name: [{ type: Input }], required: [{ type: Input }], value: [{ type: Input }] }; return SelectComponent; }()); export { SelectComponent }; if (false) { /** @type {?} */ SelectComponent.defaultProps; /** @type {?} */ SelectComponent.prototype.backdropRef; /** @type {?} */ SelectComponent.prototype.labelContainerRef; /** @type {?} */ SelectComponent.prototype.selectElementRef; /** @type {?} */ SelectComponent.prototype.options; /** @type {?} */ SelectComponent.prototype.onChangeEmitter; /** @type {?} */ SelectComponent.prototype.className; /** @type {?} */ SelectComponent.prototype.disabled; /** @type {?} */ SelectComponent.prototype.floatLabel; /** @type {?} */ SelectComponent.prototype.id; /** @type {?} */ SelectComponent.prototype.isNativeControl; /** @type {?} */ SelectComponent.prototype.name; /** @type {?} */ SelectComponent.prototype.required; /** @type {?} */ SelectComponent.prototype.value; /** @type {?} */ SelectComponent.prototype.prefix; /** @type {?} */ SelectComponent.prototype.isFocused; /** @type {?} */ SelectComponent.prototype.isOpen; /** @type {?} */ SelectComponent.prototype.valueLabel; /** * @type {?} * @private */ SelectComponent.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21hdGVyaWFsaXplLWFuZ3VsYXIvIiwic291cmNlcyI6WyJhcHAvY29tcGxldGVkLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUdoRjtJQTRDRSx5QkFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWY5QixjQUFTLEdBQVcsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0QsYUFBUSxHQUFZLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQzFELGVBQVUsR0FBVyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUM3RCxPQUFFLEdBQWtCLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3BELG9CQUFlLEdBQVksZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDeEUsU0FBSSxHQUFXLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2pELGFBQVEsR0FBWSxlQUFlLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUMxRCxVQUFLLEdBQXFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRS9FLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQU92QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7Ozs7SUFFRCw0Q0FBa0I7OztJQUFsQjtRQUFBLGlCQU1DO1FBTEMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsT0FBTztZQUNwQyxVQUFVLENBQUMsS0FBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCx5Q0FBZTs7O0lBQWY7UUFBQSxpQkFRQztRQVBDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsTUFBTTtZQUN6QixNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFaEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsRUFBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7Ozs7SUFFRCx1Q0FBYTs7OztJQUFiLFVBQWMsS0FBdUM7UUFDbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7OztJQUVELHdDQUFjOzs7O0lBQWQsVUFBZSxLQUF1QztRQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDOzs7OztJQUVELDhDQUFvQjs7OztJQUFwQixVQUFxQixLQUF1QztRQUE1RCxpQkFZQztRQVhDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsTUFBTTtZQUN6QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUMxQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFdkIsS0FBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUvQixLQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVELHFDQUFXOzs7O0lBQVgsVUFBWSxjQUFxQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLE9BQU87U0FDUjtRQUVPLElBQUEscURBQTZCO1FBQzdCLElBQUEsb0RBQWlCLEVBQUUsa0NBQVE7UUFFbkMsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEU7UUFFRCxJQUFJLGlCQUFpQixFQUFFO1lBQ2IsSUFBQSx1REFBVTs7Z0JBQ1osTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBRXpDLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQzs7Ozs7SUFFRCw4Q0FBb0I7Ozs7SUFBcEIsVUFBcUIsS0FBVTtRQUNyQixJQUFBLDhDQUFlO1FBQ2YsSUFBQSxnQ0FBSztRQUViLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7OztJQUVELGdDQUFNOzs7SUFBTjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7Ozs7SUFFRCxpQ0FBTzs7O0lBQVA7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUV0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDOzs7O0lBRUQsaUNBQU87OztJQUFQO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7Ozs7SUFFRCw2Q0FBbUI7OztJQUFuQjtRQUFBLGlCQUlDO1FBSEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTzs7O1FBQUU7WUFDdkQsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVELDBDQUFnQjs7OztJQUFoQixVQUFpQixVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDOzs7OztJQUVELG9DQUFVOzs7O0lBQVYsVUFBVyxLQUF1QztRQUFsRCxpQkFNQztRQUxDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLFVBQVU7OztRQUFDO1lBQ1QsS0FBSSxDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7Ozs7SUFFRCwwQ0FBZ0I7Ozs7SUFBaEIsVUFBaUIsRUFBcUQ7UUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCwyQ0FBaUI7Ozs7SUFBakIsVUFBa0IsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7OztJQUVELGtDQUFROzs7O0lBQVIsVUFBUyxLQUF1QyxJQUFTLENBQUM7Ozs7SUFFMUQsbUNBQVM7OztJQUFULGNBQW1CLENBQUM7Ozs7O0lBRXBCLDJDQUFpQjs7OztJQUFqQixVQUFrQixjQUFpQztRQUNqRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFO1lBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUNoRjthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDbkY7SUFDSCxDQUFDO0lBeExlLDRCQUFZLEdBQWdCO1FBQzFDLFNBQVMsRUFBRSxFQUFFO1FBQ2IsUUFBUSxFQUFFLEtBQUs7UUFDZixVQUFVLEVBQUUsRUFBRTtRQUNkLEVBQUUsRUFBRSxJQUFJO1FBQ1IsZUFBZSxFQUFFLEtBQUs7UUFDdEIsSUFBSSxFQUFFLEVBQUU7UUFDUixRQUFRLEVBQUUsS0FBSztRQUNmLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQzs7Z0JBbkJILFNBQVMsU0FBQztvQkFDVCxTQUFTLEVBQUUsQ0FBQzs0QkFDVixLQUFLLEVBQUUsSUFBSTs0QkFDWCxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxlQUFlLEVBQWYsQ0FBZSxFQUFDO3lCQUMvQyxDQUFDO29CQUNGLFFBQVEsRUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sY0FBWTtvQkFDbEQsMHVFQUFzQztpQkFDdkM7Ozs7Z0JBakJDLFNBQVM7Ozs4QkE4QlIsU0FBUyxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7b0NBQ3ZDLFNBQVMsU0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7bUNBQzdDLFNBQVMsU0FBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzBCQUU1QyxlQUFlLFNBQUMscUJBQXFCO2tDQUVyQyxNQUFNLFNBQUMsVUFBVTs0QkFFakIsS0FBSzsyQkFDTCxLQUFLOzZCQUNMLEtBQUs7cUJBQ0wsS0FBSztrQ0FDTCxLQUFLO3VCQUNMLEtBQUs7MkJBQ0wsS0FBSzt3QkFDTCxLQUFLOztJQStKUixzQkFBQztDQUFBLEFBbk1ELElBbU1DO1NBMUxZLGVBQWU7OztJQUMxQiw2QkFTRTs7SUFFRixzQ0FBa0U7O0lBQ2xFLDRDQUE4RTs7SUFDOUUsMkNBQTRFOztJQUU1RSxrQ0FBa0Y7O0lBRWxGLDBDQUFvRjs7SUFFcEYsb0NBQW9FOztJQUNwRSxtQ0FBbUU7O0lBQ25FLHFDQUFzRTs7SUFDdEUsNkJBQTZEOztJQUM3RCwwQ0FBaUY7O0lBQ2pGLCtCQUEwRDs7SUFDMUQsbUNBQW1FOztJQUNuRSxnQ0FBc0Y7O0lBRXRGLGlDQUF5Qzs7SUFFekMsb0NBQTBCOztJQUMxQixpQ0FBdUI7O0lBQ3ZCLHFDQUEwQjs7Ozs7SUFFZCxtQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgV29ya3lsYWIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3dvcmt5bGFiL21hdGVyaWFsaXplLWFuZ3VsYXIvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFNlbGVjdE1vZGVsIH0gZnJvbSAnLi9zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbk1vZGVsIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgcHJvdmlkZXJzOiBbe1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudClcbiAgfV0sXG4gIHNlbGVjdG9yOiBgJHsgY29uZmlnLmNvbXBvbmVudHMucHJlZml4IH0tc2VsZWN0IH1gLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJDb250ZW50SW5pdCwgU2VsZWN0TW9kZWwge1xuICBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzOiBTZWxlY3RNb2RlbCA9IHtcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBmbG9hdExhYmVsOiAnJyxcbiAgICBpZDogbnVsbCxcbiAgICBpc05hdGl2ZUNvbnRyb2w6IGZhbHNlLFxuICAgIG5hbWU6ICcnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB2YWx1ZTogbnVsbFxuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJywgeyBzdGF0aWM6IGZhbHNlIH0pIGJhY2tkcm9wUmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsYWJlbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBsYWJlbENvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWxlY3RFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2VsZWN0T3B0aW9uQ29tcG9uZW50KSBvcHRpb25zOiBRdWVyeUxpc3Q8U2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcblxuICBAT3V0cHV0KCdvbkNoYW5nZScpIG9uQ2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsPjtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZGlzYWJsZWQ7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IHN0cmluZyA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMuZmxvYXRMYWJlbDtcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IG51bGwgPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlkO1xuICBASW5wdXQoKSBpc05hdGl2ZUNvbnRyb2w6IGJvb2xlYW4gPSBTZWxlY3RDb21wb25lbnQuZGVmYXVsdFByb3BzLmlzTmF0aXZlQ29udHJvbDtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gU2VsZWN0Q29tcG9uZW50LmRlZmF1bHRQcm9wcy5uYW1lO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMucmVxdWlyZWQ7XG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCA9IFNlbGVjdENvbXBvbmVudC5kZWZhdWx0UHJvcHMudmFsdWU7XG5cbiAgcHVibGljIHByZWZpeCA9IGNvbmZpZy5jb21wb25lbnRzLnByZWZpeDtcblxuICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuICBwdWJsaWMgaXNPcGVuOiBib29sZWFuO1xuICBwdWJsaWMgdmFsdWVMYWJlbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciA9IHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25DaGFuZ2VPcHRpb24gPSB0aGlzLm9uQ2hhbmdlT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWdpc3Rlck9wdGlvbnMgPSB0aGlzLnJlZ2lzdGVyT3B0aW9ucy5iaW5kKHRoaXMpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldFRpbWVvdXQodGhpcy5yZWdpc3Rlck9wdGlvbnMsIDApO1xuXG4gICAgdGhpcy5vcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xuICAgICAgc2V0VGltZW91dCh0aGlzLnJlZ2lzdGVyT3B0aW9ucywgMCk7XG4gICAgfSk7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IChvcHRpb24udmFsdWUgPT09IHRoaXMudmFsdWUpO1xuXG4gICAgICBvcHRpb24ub25DbGlja0VtaXR0ZXIuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VPcHRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlQ29udHJvbCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRPcHRpb24odGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZU9wdGlvbih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnRyb2wodmFsdWUpO1xuXG4gICAgdGhpcy5vbkNoYW5nZUVtaXR0ZXIuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYWN0aXZlU2VsZWN0ZWRPcHRpb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RDbGFzcyhvcHRpb24pO1xuXG4gICAgICAgIHRoaXMuY2xvbmVPcHRpb24ob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xvbmVPcHRpb24oc2VsZWN0ZWRPcHRpb246IFNlbGVjdE9wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghdGhpcy5sYWJlbENvbnRhaW5lclJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudDogbGFiZWxDb250YWluZXIgfSA9IHRoaXMubGFiZWxDb250YWluZXJSZWY7XG4gICAgY29uc3QgeyBvcHRpb25UZW1wbGF0ZVJlZiwgZGlzYWJsZWQgfSA9IHNlbGVjdGVkT3B0aW9uO1xuXG4gICAgaWYgKGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQobGFiZWxDb250YWluZXIsIGxhYmVsQ29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgY29uc3QgeyBmaXJzdENoaWxkIH0gPSBvcHRpb25UZW1wbGF0ZVJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgY2xvbmVkID0gZmlyc3RDaGlsZC5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNsb25lZCwgJ29wdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChsYWJlbENvbnRhaW5lciwgY2xvbmVkKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZU5hdGl2ZU9wdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMgfSA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBzZWxlY3RlZE9wdGlvbnNbMF07XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLmFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uc1swXSk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlRW1pdHRlci5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGljaygpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcblxuICAgICAgaWYgKCF0aGlzLmlzTmF0aXZlQ29udHJvbCkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMuYWRkQmFja2Ryb3BMaXN0ZW5lciwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQmFja2Ryb3BMaXN0ZW5lcigpIHtcbiAgICB0aGlzLmJhY2tkcm9wUmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb250cm9sKHRoaXMudmFsdWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIG9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCk6IHZvaWQge31cblxuICBvblRvdWNoZWQoKTogdm9pZCB7fVxuXG4gIGFjdGl2ZVNlbGVjdENsYXNzKHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RPcHRpb25Nb2RlbCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEVsZW1lbnRSZWYgJiYgc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0RWxlbWVudFJlZiAmJiAhc2VsZWN0ZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5zZWxlY3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdvcHRpb24tZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==