UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

354 lines 24.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /* * @license * Copyright Akveo. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, QueryList, PLATFORM_ID, Inject, ElementRef, } from '@angular/core'; import { isPlatformBrowser } from '@angular/common'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { fromEvent, merge } from 'rxjs'; import { filter, switchMap, take, takeWhile } from 'rxjs/operators'; import { convertToBoolProperty } from '../helpers'; import { NB_DOCUMENT } from '../../theme.options'; import { NbRadioComponent } from './radio.component'; /* * The `NbRadioGroupComponent` is the wrapper for `nb-radio` button. * It provides form bindings: * * ```html * <nb-radio-group [(ngModel)]="selectedOption"> * <nb-radio>Option 1</nb-radio> * <nb-radio>Option 2</nb-radio> * <nb-radio>Option 3</nb-radio> * </nb-radio-group> * ``` * * Also, you can use `value` and `valueChange` for binding without forms. * * ```html * <nb-radio-group [(value)]="selectedOption"> * <nb-radio>Option 1</nb-radio> * <nb-radio>Option 2</nb-radio> * <nb-radio>Option 3</nb-radio> * </nb-radio-group> * ``` * * Radio items name has to be provided through `name` input property of the radio group. * * ```html * <nb-radio-group name="my-radio-group"> * ... * </nb-radio-group> * ``` * * Also, you can disable the whole group using `disabled` attribute. * * ```html * <nb-radio-group disabled> * ... * </nb-radio-group> * ``` * */ var NbRadioGroupComponent = /** @class */ (function () { function NbRadioGroupComponent(cd, hostElement, platformId, document) { this.cd = cd; this.hostElement = hostElement; this.platformId = platformId; this.document = document; this.valueChange = new EventEmitter(); this.alive = true; this.onChange = function (value) { }; this.onTouched = function () { }; } Object.defineProperty(NbRadioGroupComponent.prototype, "setValue", { set: /** * @param {?} value * @return {?} */ function (value) { this.value = value; this.updateValues(); }, enumerable: true, configurable: true }); Object.defineProperty(NbRadioGroupComponent.prototype, "setName", { set: /** * @param {?} name * @return {?} */ function (name) { this.name = name; this.updateNames(); }, enumerable: true, configurable: true }); Object.defineProperty(NbRadioGroupComponent.prototype, "setDisabled", { set: /** * @param {?} disabled * @return {?} */ function (disabled) { this.disabled = convertToBoolProperty(disabled); this.updateDisabled(); }, enumerable: true, configurable: true }); /** * @return {?} */ NbRadioGroupComponent.prototype.ngAfterContentInit = /** * @return {?} */ function () { this.updateNames(); this.updateValues(); this.updateDisabled(); this.subscribeOnRadiosValueChange(); this.subscribeOnRadiosBlur(); }; /** * @return {?} */ NbRadioGroupComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.alive = false; }; /** * @param {?} fn * @return {?} */ NbRadioGroupComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @param {?} fn * @return {?} */ NbRadioGroupComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouched = fn; }; /** * @param {?} value * @return {?} */ NbRadioGroupComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { this.value = value; if (typeof value !== 'undefined') { this.updateValues(); } }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.updateNames = /** * @protected * @return {?} */ function () { var _this = this; if (this.radios) { this.radios.forEach(function (radio) { return radio.name = _this.name; }); this.markRadiosForCheck(); } }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.updateValues = /** * @protected * @return {?} */ function () { var _this = this; if (this.radios && typeof this.value !== 'undefined') { this.radios.forEach(function (radio) { return radio.checked = radio.value === _this.value; }); this.markRadiosForCheck(); } }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.updateDisabled = /** * @protected * @return {?} */ function () { var _this = this; if (this.radios && typeof this.disabled !== 'undefined') { this.radios.forEach(function (radio) { return radio.setDisabled = _this.disabled; }); this.markRadiosForCheck(); } }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.subscribeOnRadiosValueChange = /** * @protected * @return {?} */ function () { var _this = this; merge.apply(void 0, tslib_1.__spread(this.radios.map(function (radio) { return radio.valueChange; }))).pipe(takeWhile(function () { return _this.alive; })) .subscribe(function (value) { _this.writeValue(value); _this.propagateValue(value); }); }; /** * @protected * @param {?} value * @return {?} */ NbRadioGroupComponent.prototype.propagateValue = /** * @protected * @param {?} value * @return {?} */ function (value) { this.valueChange.emit(value); this.onChange(value); }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.markRadiosForCheck = /** * @protected * @return {?} */ function () { this.radios.forEach(function (radio) { return radio.markForCheck(); }); }; /** * @protected * @return {?} */ NbRadioGroupComponent.prototype.subscribeOnRadiosBlur = /** * @protected * @return {?} */ function () { var _this = this; if (!isPlatformBrowser(this.platformId)) { return; } /** @type {?} */ var hostElement = this.hostElement.nativeElement; fromEvent(hostElement, 'focusin') .pipe(filter(function (event) { return hostElement.contains((/** @type {?} */ (event.target))); }), switchMap(function () { return merge(fromEvent(_this.document, 'focusin'), fromEvent(_this.document, 'click')); }), filter(function (event) { return !hostElement.contains((/** @type {?} */ (event.target))); }), take(1)) .subscribe(function () { return _this.onTouched(); }); }; NbRadioGroupComponent.decorators = [ { type: Component, args: [{ selector: 'nb-radio-group', template: "\n <ng-content select=\"nb-radio\"></ng-content>", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return NbRadioGroupComponent; }), multi: true, }, ], changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ NbRadioGroupComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, { type: undefined, decorators: [{ type: Inject, args: [NB_DOCUMENT,] }] } ]; }; NbRadioGroupComponent.propDecorators = { radios: [{ type: ContentChildren, args: [NbRadioComponent, { descendants: true },] }], setValue: [{ type: Input, args: ['value',] }], setName: [{ type: Input, args: ['name',] }], setDisabled: [{ type: Input, args: ['disabled',] }], valueChange: [{ type: Output }] }; return NbRadioGroupComponent; }()); export { NbRadioGroupComponent }; if (false) { /** @type {?} */ NbRadioGroupComponent.prototype.radios; /** @type {?} */ NbRadioGroupComponent.prototype.valueChange; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.disabled; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.value; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.name; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.alive; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.onChange; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.onTouched; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.cd; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.hostElement; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.platformId; /** * @type {?} * @protected */ NbRadioGroupComponent.prototype.document; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Q3JEO0lBNENFLCtCQUNZLEVBQXFCLEVBQ3JCLFdBQW9DLEVBQ2YsVUFBVSxFQUNWLFFBQVE7UUFIN0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBQTtRQUNWLGFBQVEsR0FBUixRQUFRLENBQUE7UUFiL0IsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZ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LEFBeElELElBd0lDO1NBM0hZLHFCQUFxQjs7O0lBRWhDLHVDQUE4Rjs7SUFvQjlGLDRDQUE4RDs7Ozs7SUFFOUQseUNBQTRCOzs7OztJQUM1QixzQ0FBcUI7Ozs7O0lBQ3JCLHFDQUF1Qjs7Ozs7SUFDdkIsc0NBQWdDOzs7OztJQUNoQyx5Q0FBd0M7Ozs7O0lBQ3hDLDBDQUErQjs7Ozs7SUFHN0IsbUNBQStCOzs7OztJQUMvQiw0Q0FBOEM7Ozs7O0lBQzlDLDJDQUF5Qzs7Ozs7SUFDekMseUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIEluamVjdCxcclxuICBFbGVtZW50UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sUHJvcGVydHkgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgTkJfRE9DVU1FTlQgfSBmcm9tICcuLi8uLi90aGVtZS5vcHRpb25zJztcclxuaW1wb3J0IHsgTmJSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcclxuXHJcblxyXG4vKlxyXG4gKiBUaGUgYE5iUmFkaW9Hcm91cENvbXBvbmVudGAgaXMgdGhlIHdyYXBwZXIgZm9yIGBuYi1yYWRpb2AgYnV0dG9uLlxyXG4gKiBJdCBwcm92aWRlcyBmb3JtIGJpbmRpbmdzOlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxuYi1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkT3B0aW9uXCI+XHJcbiAqICAgPG5iLXJhZGlvPk9wdGlvbiAxPC9uYi1yYWRpbz5cclxuICogICA8bmItcmFkaW8+T3B0aW9uIDI8L25iLXJhZGlvPlxyXG4gKiAgIDxuYi1yYWRpbz5PcHRpb24gMzwvbmItcmFkaW8+XHJcbiAqIDwvbmItcmFkaW8tZ3JvdXA+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBBbHNvLCB5b3UgY2FuIHVzZSBgdmFsdWVgIGFuZCBgdmFsdWVDaGFuZ2VgIGZvciBiaW5kaW5nIHdpdGhvdXQgZm9ybXMuXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPG5iLXJhZGlvLWdyb3VwIFsodmFsdWUpXT1cInNlbGVjdGVkT3B0aW9uXCI+XHJcbiAqICAgPG5iLXJhZGlvPk9wdGlvbiAxPC9uYi1yYWRpbz5cclxuICogICA8bmItcmFkaW8+T3B0aW9uIDI8L25iLXJhZGlvPlxyXG4gKiAgIDxuYi1yYWRpbz5PcHRpb24gMzwvbmItcmFkaW8+XHJcbiAqIDwvbmItcmFkaW8tZ3JvdXA+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBSYWRpbyBpdGVtcyBuYW1lIGhhcyB0byBiZSBwcm92aWRlZCB0aHJvdWdoIGBuYW1lYCBpbnB1dCBwcm9wZXJ0eSBvZiB0aGUgcmFkaW8gZ3JvdXAuXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPG5iLXJhZGlvLWdyb3VwIG5hbWU9XCJteS1yYWRpby1ncm91cFwiPlxyXG4gKiAgIC4uLlxyXG4gKiA8L25iLXJhZGlvLWdyb3VwPlxyXG4gKiBgYGBcclxuICpcclxuICogQWxzbywgeW91IGNhbiBkaXNhYmxlIHRoZSB3aG9sZSBncm91cCB1c2luZyBgZGlzYWJsZWRgIGF0dHJpYnV0ZS5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8bmItcmFkaW8tZ3JvdXAgZGlzYWJsZWQ+XHJcbiAqICAgLi4uXHJcbiAqIDwvbmItcmFkaW8tZ3JvdXA+XHJcbiAqIGBgYFxyXG4gKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLXJhZGlvLWdyb3VwJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibmItcmFkaW9cIj48L25nLWNvbnRlbnQ+YCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5iUmFkaW9Hcm91cENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJSYWRpb0dyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTmJSYWRpb0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByYWRpb3M6IFF1ZXJ5TGlzdDxOYlJhZGlvQ29tcG9uZW50PjtcclxuXHJcbiAgQElucHV0KCd2YWx1ZScpXHJcbiAgc2V0IHNldFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoJ25hbWUnKVxyXG4gIHNldCBzZXROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudXBkYXRlTmFtZXMoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxyXG4gIHNldCBzZXREaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eShkaXNhYmxlZCk7XHJcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHJvdGVjdGVkIHZhbHVlOiBhbnk7XHJcbiAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgYWxpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByb3RlY3RlZCBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcclxuICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCkgPT4ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByb3RlY3RlZCBob3N0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcm90ZWN0ZWQgcGxhdGZvcm1JZCxcclxuICAgIEBJbmplY3QoTkJfRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudCxcclxuICApIHt9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMudXBkYXRlTmFtZXMoKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZU9uUmFkaW9zVmFsdWVDaGFuZ2UoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlT25SYWRpb3NCbHVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlTmFtZXMoKSB7XHJcbiAgICBpZiAodGhpcy5yYWRpb3MpIHtcclxuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW86IE5iUmFkaW9Db21wb25lbnQpID0+IHJhZGlvLm5hbWUgPSB0aGlzLm5hbWUpO1xyXG4gICAgICB0aGlzLm1hcmtSYWRpb3NGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLnJhZGlvcyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW86IE5iUmFkaW9Db21wb25lbnQpID0+IHJhZGlvLmNoZWNrZWQgPSByYWRpby52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XHJcbiAgICAgIHRoaXMubWFya1JhZGlvc0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlRGlzYWJsZWQoKSB7XHJcbiAgICBpZiAodGhpcy5yYWRpb3MgJiYgdHlwZW9mIHRoaXMuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvOiBOYlJhZGlvQ29tcG9uZW50KSA9PiByYWRpby5zZXREaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQpO1xyXG4gICAgICB0aGlzLm1hcmtSYWRpb3NGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uUmFkaW9zVmFsdWVDaGFuZ2UoKSB7XHJcbiAgICBtZXJnZSguLi50aGlzLnJhZGlvcy5tYXAoKHJhZGlvOiBOYlJhZGlvQ29tcG9uZW50KSA9PiByYWRpby52YWx1ZUNoYW5nZSkpXHJcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb3BhZ2F0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtYXJrUmFkaW9zRm9yQ2hlY2soKSB7XHJcbiAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbzogTmJSYWRpb0NvbXBvbmVudCkgPT4gcmFkaW8ubWFya0ZvckNoZWNrKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uUmFkaW9zQmx1cigpIHtcclxuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBmcm9tRXZlbnQ8RXZlbnQ+KGhvc3RFbGVtZW50LCAnZm9jdXNpbicpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihldmVudCA9PiBob3N0RWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBtZXJnZShcclxuICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5kb2N1bWVudCwgJ2ZvY3VzaW4nKSxcclxuICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5kb2N1bWVudCwgJ2NsaWNrJyksXHJcbiAgICAgICAgKSksXHJcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+ICFob3N0RWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpLFxyXG4gICAgICAgIHRha2UoMSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcclxuICB9XHJcbn1cclxuIl19