UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

295 lines 22 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /* * @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> * ``` * */ export class NbRadioGroupComponent { /** * @param {?} cd * @param {?} hostElement * @param {?} platformId * @param {?} document */ constructor(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 = (value) => { }; this.onTouched = () => { }; } /** * @param {?} value * @return {?} */ set setValue(value) { this.value = value; this.updateValues(); } /** * @param {?} name * @return {?} */ set setName(name) { this.name = name; this.updateNames(); } /** * @param {?} disabled * @return {?} */ set setDisabled(disabled) { this.disabled = convertToBoolProperty(disabled); this.updateDisabled(); } /** * @return {?} */ ngAfterContentInit() { this.updateNames(); this.updateValues(); this.updateDisabled(); this.subscribeOnRadiosValueChange(); this.subscribeOnRadiosBlur(); } /** * @return {?} */ ngOnDestroy() { this.alive = false; } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @param {?} value * @return {?} */ writeValue(value) { this.value = value; if (typeof value !== 'undefined') { this.updateValues(); } } /** * @protected * @return {?} */ updateNames() { if (this.radios) { this.radios.forEach((radio) => radio.name = this.name); this.markRadiosForCheck(); } } /** * @protected * @return {?} */ updateValues() { if (this.radios && typeof this.value !== 'undefined') { this.radios.forEach((radio) => radio.checked = radio.value === this.value); this.markRadiosForCheck(); } } /** * @protected * @return {?} */ updateDisabled() { if (this.radios && typeof this.disabled !== 'undefined') { this.radios.forEach((radio) => radio.setDisabled = this.disabled); this.markRadiosForCheck(); } } /** * @protected * @return {?} */ subscribeOnRadiosValueChange() { merge(...this.radios.map((radio) => radio.valueChange)) .pipe(takeWhile(() => this.alive)) .subscribe((value) => { this.writeValue(value); this.propagateValue(value); }); } /** * @protected * @param {?} value * @return {?} */ propagateValue(value) { this.valueChange.emit(value); this.onChange(value); } /** * @protected * @return {?} */ markRadiosForCheck() { this.radios.forEach((radio) => radio.markForCheck()); } /** * @protected * @return {?} */ subscribeOnRadiosBlur() { if (!isPlatformBrowser(this.platformId)) { return; } /** @type {?} */ const hostElement = this.hostElement.nativeElement; fromEvent(hostElement, 'focusin') .pipe(filter(event => hostElement.contains((/** @type {?} */ (event.target)))), switchMap(() => merge(fromEvent(this.document, 'focusin'), fromEvent(this.document, 'click'))), filter(event => !hostElement.contains((/** @type {?} */ (event.target)))), take(1)) .subscribe(() => this.onTouched()); } } NbRadioGroupComponent.decorators = [ { type: Component, args: [{ selector: 'nb-radio-group', template: ` <ng-content select="nb-radio"></ng-content>`, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NbRadioGroupComponent), multi: true, }, ], changeDetection: ChangeDetectionStrategy.OnPush }] } ]; /** @nocollapse */ NbRadioGroupComponent.ctorParameters = () => [ { 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcmFkaW8vcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNEckQsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7OztJQStCaEMsWUFDWSxFQUFxQixFQUNyQixXQUFvQyxFQUNmLFVBQVUsRUFDVixRQUFRO1FBSDdCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNmLGVBQVUsR0FBVixVQUFVLENBQUE7UUFDVixhQUFRLEdBQVIsUUFBUSxDQUFBO1FBYi9C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cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgSW5qZWN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBOQl9ET0NVTUVOVCB9IGZyb20gJy4uLy4uL3RoZW1lLm9wdGlvbnMnO1xyXG5pbXBvcnQgeyBOYlJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby5jb21wb25lbnQnO1xyXG5cclxuXHJcbi8qXHJcbiAqIFRoZSBgTmJSYWRpb0dyb3VwQ29tcG9uZW50YCBpcyB0aGUgd3JhcHBlciBmb3IgYG5iLXJhZGlvYCBidXR0b24uXHJcbiAqIEl0IHByb3ZpZGVzIGZvcm0gYmluZGluZ3M6XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPG5iLXJhZGlvLWdyb3VwIFsobmdNb2RlbCldPVwic2VsZWN0ZWRPcHRpb25cIj5cclxuICogICA8bmItcmFkaW8+T3B0aW9uIDE8L25iLXJhZGlvPlxyXG4gKiAgIDxuYi1yYWRpbz5PcHRpb24gMjwvbmItcmFkaW8+XHJcbiAqICAgPG5iLXJhZGlvPk9wdGlvbiAzPC9uYi1yYWRpbz5cclxuICogPC9uYi1yYWRpby1ncm91cD5cclxuICogYGBgXHJcbiAqXHJcbiAqIEFsc28sIHlvdSBjYW4gdXNlIGB2YWx1ZWAgYW5kIGB2YWx1ZUNoYW5nZWAgZm9yIGJpbmRpbmcgd2l0aG91dCBmb3Jtcy5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8bmItcmFkaW8tZ3JvdXAgWyh2YWx1ZSldPVwic2VsZWN0ZWRPcHRpb25cIj5cclxuICogICA8bmItcmFkaW8+T3B0aW9uIDE8L25iLXJhZGlvPlxyXG4gKiAgIDxuYi1yYWRpbz5PcHRpb24gMjwvbmItcmFkaW8+XHJcbiAqICAgPG5iLXJhZGlvPk9wdGlvbiAzPC9uYi1yYWRpbz5cclxuICogPC9uYi1yYWRpby1ncm91cD5cclxuICogYGBgXHJcbiAqXHJcbiAqIFJhZGlvIGl0ZW1zIG5hbWUgaGFzIHRvIGJlIHByb3ZpZGVkIHRocm91Z2ggYG5hbWVgIGlucHV0IHByb3BlcnR5IG9mIHRoZSByYWRpbyBncm91cC5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8bmItcmFkaW8tZ3JvdXAgbmFtZT1cIm15LXJhZGlvLWdyb3VwXCI+XHJcbiAqICAgLi4uXHJcbiAqIDwvbmItcmFkaW8tZ3JvdXA+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBBbHNvLCB5b3UgY2FuIGRpc2FibGUgdGhlIHdob2xlIGdyb3VwIHVzaW5nIGBkaXNhYmxlZGAgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxuYi1yYWRpby1ncm91cCBkaXNhYmxlZD5cclxuICogICAuLi5cclxuICogPC9uYi1yYWRpby1ncm91cD5cclxuICogYGBgXHJcbiAqICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmItcmFkaW8tZ3JvdXAnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJuYi1yYWRpb1wiPjwvbmctY29udGVudD5gLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmJSYWRpb0dyb3VwQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYlJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihOYlJhZGlvQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJhZGlvczogUXVlcnlMaXN0PE5iUmFkaW9Db21wb25lbnQ+O1xyXG5cclxuICBASW5wdXQoJ3ZhbHVlJylcclxuICBzZXQgc2V0VmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgnbmFtZScpXHJcbiAgc2V0IHNldE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy51cGRhdGVOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCdkaXNhYmxlZCcpXHJcbiAgc2V0IHNldERpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gY29udmVydFRvQm9vbFByb3BlcnR5KGRpc2FibGVkKTtcclxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWQoKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcm90ZWN0ZWQgdmFsdWU6IGFueTtcclxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBhbGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJvdGVjdGVkIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHt9O1xyXG4gIHByb3RlY3RlZCBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJvdGVjdGVkIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybUlkLFxyXG4gICAgQEluamVjdChOQl9ET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50LFxyXG4gICkge31cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGVOYW1lcygpO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlT25SYWRpb3NWYWx1ZUNoYW5nZSgpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVPblJhZGlvc0JsdXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5hbGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVOYW1lcygpIHtcclxuICAgIGlmICh0aGlzLnJhZGlvcykge1xyXG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbzogTmJSYWRpb0NvbXBvbmVudCkgPT4gcmFkaW8ubmFtZSA9IHRoaXMubmFtZSk7XHJcbiAgICAgIHRoaXMubWFya1JhZGlvc0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMucmFkaW9zICYmIHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbzogTmJSYWRpb0NvbXBvbmVudCkgPT4gcmFkaW8uY2hlY2tlZCA9IHJhZGlvLnZhbHVlID09PSB0aGlzLnZhbHVlKTtcclxuICAgICAgdGhpcy5tYXJrUmFkaW9zRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVEaXNhYmxlZCgpIHtcclxuICAgIGlmICh0aGlzLnJhZGlvcyAmJiB0eXBlb2YgdGhpcy5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW86IE5iUmFkaW9Db21wb25lbnQpID0+IHJhZGlvLnNldERpc2FibGVkID0gdGhpcy5kaXNhYmxlZCk7XHJcbiAgICAgIHRoaXMubWFya1JhZGlvc0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25SYWRpb3NWYWx1ZUNoYW5nZSgpIHtcclxuICAgIG1lcmdlKC4uLnRoaXMucmFkaW9zLm1hcCgocmFkaW86IE5iUmFkaW9Db21wb25lbnQpID0+IHJhZGlvLnZhbHVlQ2hhbmdlKSlcclxuICAgICAgLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuYWxpdmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJvcGFnYXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1hcmtSYWRpb3NGb3JDaGVjaygpIHtcclxuICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvOiBOYlJhZGlvQ29tcG9uZW50KSA9PiByYWRpby5tYXJrRm9yQ2hlY2soKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3Vic2NyaWJlT25SYWRpb3NCbHVyKCkge1xyXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIGZyb21FdmVudDxFdmVudD4oaG9zdEVsZW1lbnQsICdmb2N1c2luJylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGhvc3RFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSksXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKFxyXG4gICAgICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmRvY3VtZW50LCAnZm9jdXNpbicpLFxyXG4gICAgICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmRvY3VtZW50LCAnY2xpY2snKSxcclxuICAgICAgICApKSxcclxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gIWhvc3RFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSksXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Ub3VjaGVkKCkpO1xyXG4gIH1cclxufVxyXG4iXX0=