theme-lib
Version:
This is a simple example Angular Library published to npm.
354 lines • 24.6 kB
JavaScript
/**
* @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