ng-devui
Version:
DevUI components based on Angular
169 lines • 29.6 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ContentChildren, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, QueryList } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { DevConfigService, WithConfig } from 'ng-devui/utils';
import { RadioComponent } from './radio.component';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/utils";
import * as i2 from "@angular/common";
export class RadioGroupComponent {
/**
* @deprecated Use direction to replace.
*/
set cssStyle(direction) {
this.direction = direction;
}
get hasGlowStyle() {
return this.showGlowStyle;
}
onRadioChange(event) {
const target = event.target;
if (target.tagName.toLowerCase() === 'input') {
event.preventDefault();
if (this.disabled) {
return;
}
let value = target.value;
if (this.radios.length) {
const result = this.radios.find((item) => item.id === target.id);
value = result?.value || value;
}
this.canChange(value).then((change) => {
if (change) {
this._value = value;
this.onChange(value);
this.change.emit(value);
}
});
}
}
constructor(devConfigService) {
this.devConfigService = devConfigService;
this.showGlowStyle = true;
this.change = new EventEmitter();
this.radios = new QueryList();
}
ngAfterViewInit() {
this.radios.forEach((radio) => {
this.registerRadio(radio);
});
this.radios.changes.subscribe((newRadios) => {
newRadios.forEach((radio) => {
this.registerRadio(radio);
Promise.resolve(true).then(() => radio.writeValue(this._value));
});
});
this.radios.notifyOnChanges();
}
ngOnChanges(changes) {
if (changes && changes.name && this.radios) {
this.radios.forEach((radio) => {
radio.name = this.name;
});
}
if (changes && changes.disabled && this.radios) {
this.radios.forEach((radio) => {
radio.disabled = this.disabled;
});
}
if (changes && this.radios) {
this.radios.forEach((radio) => {
radio.disabled = this.disabled;
});
}
}
registerRadio(radio) {
radio.registerOnChange((value) => {
this.writeValue(value);
this.onChange(value);
Promise.resolve().then(() => this.onTouched());
this.change.emit(value);
});
}
canChange(value) {
let changeResult = Promise.resolve(true);
if (this.beforeChange) {
const result = this.beforeChange(value);
if (typeof result !== 'undefined') {
if (result.then) {
changeResult = result;
}
else if (result.subscribe) {
changeResult = result.toPromise();
}
else {
changeResult = Promise.resolve(result);
}
}
}
return changeResult;
}
handleChange($event, value) {
$event.stopPropagation();
this.writeValue(value);
this.onChange(value);
this.change.emit(value);
}
writeValue(value) {
this._value = value;
if (this.radios && this.radios.length > 0) {
this.radios.forEach((radio) => {
radio.writeValue(this._value);
});
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioGroupComponent, deps: [{ token: i1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RadioGroupComponent, selector: "d-radio-group", inputs: { name: "name", values: "values", cssStyle: "cssStyle", direction: "direction", disabled: "disabled", showGlowStyle: "showGlowStyle", beforeChange: "beforeChange" }, outputs: { change: "change" }, host: { listeners: { "click": "onRadioChange($event)" }, properties: { "class.devui-glow-style": "this.hasGlowStyle" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioGroupComponent),
multi: true,
},
], queries: [{ propertyName: "radios", predicate: RadioComponent }], usesOnChanges: true, ngImport: i0, template: "<div class=\"devui-radio-group\">\n <ul [class.devui-radio-horizontal]=\"direction === 'row'\">\n <ng-container *ngIf=\"radios.length === 0\">\n <li *ngFor=\"let value of values\" class=\"devui-radio-list-item\">\n <label class=\"devui-radio\" [class.active]=\"value == _value\" [class.disabled]=\"disabled\">\n <input\n type=\"radio\"\n class=\"devui-radio-input\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"name + '-' + value\"\n [value]=\"value\"\n [checked]=\"value == _value\"\n (change)=\"handleChange($event, value)\"\n />\n <span class=\"devui-radio-material\"></span>\n <span class=\"devui-radio-label\">{{ value }}</span>\n </label>\n </li>\n </ng-container>\n <ng-content select=\"d-radio\"></ng-content>\n </ul>\n</div>\n", styles: [".devui-radio-horizontal .devui-radio-list-item{display:inline-block}.devui-radio-horizontal .devui-radio-list-item:not(:last-child){padding-right:20px}.devui-radio-horizontal ::ng-deep d-radio{display:inline-block}.devui-radio-list-item{position:relative;line-height:28px}:host ::ng-deep d-radio{line-height:28px}:host.devui-glow-style .devui-radio-material{transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host.devui-glow-style .devui-radio-material:not(.disabled):hover .devui-radio-material,:host.devui-glow-style .devui-radio-material:not(.disabled):active .devui-radio-material{box-shadow:0 0 0 6px var(--devui-range-item-hover-bg, #cedefd)}\n", ".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{padding-right:20px;display:block;line-height:18px}.devui-radio{cursor:pointer;color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);font-weight:400;line-height:1.5;margin:0 auto}.devui-radio .devui-radio-material{width:16px;height:16px;display:inline-block;overflow:hidden;-webkit-user-select:none;user-select:none;vertical-align:middle;border:solid 1px var(--devui-shape-icon-fill, #c2c2c2);border-radius:var(--devui-border-radius-full, 100px);box-shadow:0 transparent;transform:translateY(-1px);transition:border var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-radio .devui-radio-label{color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);margin-left:8px}.devui-radio .devui-radio-input{opacity:0;z-index:-1;width:0;height:0;display:none;overflow:hidden;pointer-events:none}.devui-radio.active .devui-radio-material{border-width:4px;border-color:var(--devui-brand, #0a59f7)}.devui-radio.disabled{cursor:not-allowed}.devui-radio.disabled .devui-radio-label{color:var(--devui-disabled-text, #c2c2c2)}.devui-radio.disabled .devui-radio-material{border-color:var(--devui-shape-icon-fill, #c2c2c2);background-color:var(--devui-disabled-bg, #f3f3f3)}.devui-radio.disabled.active .devui-radio-material{border-color:var(--devui-icon-fill-active-disabled, #9dbdfc)}::ng-deep :root .devui-glow-style .devui-radio .devui-radio-material{transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}::ng-deep :root .devui-glow-style .devui-radio:not(.disabled):hover .devui-radio-material,::ng-deep :root .devui-glow-style .devui-radio:not(.disabled):active .devui-radio-material{box-shadow:0 0 0 6px var(--devui-range-item-hover-bg, #cedefd)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
}
__decorate([
WithConfig(),
__metadata("design:type", Object)
], RadioGroupComponent.prototype, "showGlowStyle", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioGroupComponent, decorators: [{
type: Component,
args: [{ selector: 'd-radio-group', providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioGroupComponent),
multi: true,
},
], preserveWhitespaces: false, template: "<div class=\"devui-radio-group\">\n <ul [class.devui-radio-horizontal]=\"direction === 'row'\">\n <ng-container *ngIf=\"radios.length === 0\">\n <li *ngFor=\"let value of values\" class=\"devui-radio-list-item\">\n <label class=\"devui-radio\" [class.active]=\"value == _value\" [class.disabled]=\"disabled\">\n <input\n type=\"radio\"\n class=\"devui-radio-input\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"name + '-' + value\"\n [value]=\"value\"\n [checked]=\"value == _value\"\n (change)=\"handleChange($event, value)\"\n />\n <span class=\"devui-radio-material\"></span>\n <span class=\"devui-radio-label\">{{ value }}</span>\n </label>\n </li>\n </ng-container>\n <ng-content select=\"d-radio\"></ng-content>\n </ul>\n</div>\n", styles: [".devui-radio-horizontal .devui-radio-list-item{display:inline-block}.devui-radio-horizontal .devui-radio-list-item:not(:last-child){padding-right:20px}.devui-radio-horizontal ::ng-deep d-radio{display:inline-block}.devui-radio-list-item{position:relative;line-height:28px}:host ::ng-deep d-radio{line-height:28px}:host.devui-glow-style .devui-radio-material{transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}:host.devui-glow-style .devui-radio-material:not(.disabled):hover .devui-radio-material,:host.devui-glow-style .devui-radio-material:not(.disabled):active .devui-radio-material{box-shadow:0 0 0 6px var(--devui-range-item-hover-bg, #cedefd)}\n", ".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}:host{padding-right:20px;display:block;line-height:18px}.devui-radio{cursor:pointer;color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);font-weight:400;line-height:1.5;margin:0 auto}.devui-radio .devui-radio-material{width:16px;height:16px;display:inline-block;overflow:hidden;-webkit-user-select:none;user-select:none;vertical-align:middle;border:solid 1px var(--devui-shape-icon-fill, #c2c2c2);border-radius:var(--devui-border-radius-full, 100px);box-shadow:0 transparent;transform:translateY(-1px);transition:border var(--devui-animation-duration-base, .2s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-radio .devui-radio-label{color:var(--devui-text, #191919);font-size:var(--devui-font-size, 12px);margin-left:8px}.devui-radio .devui-radio-input{opacity:0;z-index:-1;width:0;height:0;display:none;overflow:hidden;pointer-events:none}.devui-radio.active .devui-radio-material{border-width:4px;border-color:var(--devui-brand, #0a59f7)}.devui-radio.disabled{cursor:not-allowed}.devui-radio.disabled .devui-radio-label{color:var(--devui-disabled-text, #c2c2c2)}.devui-radio.disabled .devui-radio-material{border-color:var(--devui-shape-icon-fill, #c2c2c2);background-color:var(--devui-disabled-bg, #f3f3f3)}.devui-radio.disabled.active .devui-radio-material{border-color:var(--devui-icon-fill-active-disabled, #9dbdfc)}::ng-deep :root .devui-glow-style .devui-radio .devui-radio-material{transition:box-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out-smooth, cubic-bezier(.645, .045, .355, 1))}::ng-deep :root .devui-glow-style .devui-radio:not(.disabled):hover .devui-radio-material,::ng-deep :root .devui-glow-style .devui-radio:not(.disabled):active .devui-radio-material{box-shadow:0 0 0 6px var(--devui-range-item-hover-bg, #cedefd)}\n"] }]
}], ctorParameters: () => [{ type: i1.DevConfigService }], propDecorators: { name: [{
type: Input
}], values: [{
type: Input
}], cssStyle: [{
type: Input
}], direction: [{
type: Input
}], disabled: [{
type: Input
}], showGlowStyle: [{
type: Input
}], hasGlowStyle: [{
type: HostBinding,
args: ['class.devui-glow-style']
}], beforeChange: [{
type: Input
}], change: [{
type: Output
}], radios: [{
type: ContentChildren,
args: [RadioComponent]
}], onRadioChange: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvcmFkaW8vcmFkaW8tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvcmFkaW8vcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQWVuRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCOztPQUVHO0lBQ0gsSUFBYSxRQUFRLENBQUMsU0FBYztRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBSUQsSUFBMkMsWUFBWTtRQUNyRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQVNELGFBQWEsQ0FBQyxLQUFLO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFD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O3NCQUFkLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ2lCLGFBQWE7c0JBQW5DLEtBQUs7Z0JBQ3FDLFlBQVk7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUc1QixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDMEIsTUFBTTtzQkFBdEMsZUFBZTt1QkFBQyxjQUFjO2dCQU0vQixhQUFhO3NCQURaLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEZXZDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi9yYWRpby5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLXJhZGlvLWdyb3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5zY3NzJywgJy4vcmFkaW8uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhZGlvR3JvdXBDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBhbnlbXTtcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlyZWN0aW9uIHRvIHJlcGxhY2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGNzc1N0eWxlKGRpcmVjdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuICB9XHJcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2hvd0dsb3dTdHlsZSA9IHRydWU7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1nbG93LXN0eWxlJykgZ2V0IGhhc0dsb3dTdHlsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dHbG93U3R5bGU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGJlZm9yZUNoYW5nZTogKHZhbHVlKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oUmFkaW9Db21wb25lbnQpIHJhZGlvczogUXVlcnlMaXN0PFJhZGlvQ29tcG9uZW50PiA9IG5ldyBRdWVyeUxpc3Q8UmFkaW9Db21wb25lbnQ+KCk7XHJcblxyXG4gIF92YWx1ZTogYW55O1xyXG4gIG9uQ2hhbmdlOiAoXzogYW55KSA9PiBudWxsO1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gbnVsbDtcclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25SYWRpb0NoYW5nZShldmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgaWYgKHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHZhbHVlID0gdGFyZ2V0LnZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5yYWRpb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yYWRpb3MuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGFyZ2V0LmlkKTtcclxuICAgICAgICB2YWx1ZSA9IHJlc3VsdD8udmFsdWUgfHwgdmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYW5DaGFuZ2UodmFsdWUpLnRoZW4oKGNoYW5nZSkgPT4ge1xyXG4gICAgICAgIGlmIChjaGFuZ2UpIHtcclxuICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJSYWRpbyhyYWRpbyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJhZGlvcy5jaGFuZ2VzLnN1YnNjcmliZSgobmV3UmFkaW9zKSA9PiB7XHJcbiAgICAgIG5ld1JhZGlvcy5mb3JFYWNoKChyYWRpbzogUmFkaW9Db21wb25lbnQpID0+IHtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyUmFkaW8ocmFkaW8pO1xyXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh0cnVlKS50aGVuKCgpID0+IHJhZGlvLndyaXRlVmFsdWUodGhpcy5fdmFsdWUpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJhZGlvcy5ub3RpZnlPbkNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMubmFtZSAmJiB0aGlzLnJhZGlvcykge1xyXG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKChyYWRpbykgPT4ge1xyXG4gICAgICAgIHJhZGlvLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMuZGlzYWJsZWQgJiYgdGhpcy5yYWRpb3MpIHtcclxuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcclxuICAgICAgICByYWRpby5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzICYmIHRoaXMucmFkaW9zKSB7XHJcbiAgICAgIHRoaXMucmFkaW9zLmZvckVhY2goKHJhZGlvKSA9PiB7XHJcbiAgICAgICAgcmFkaW8uZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUmFkaW8ocmFkaW86IFJhZGlvQ29tcG9uZW50KSB7XHJcbiAgICByYWRpby5yZWdpc3Rlck9uQ2hhbmdlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMub25Ub3VjaGVkKCkpO1xyXG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBjaGFuZ2VSZXN1bHQgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5iZWZvcmVDaGFuZ2UpIHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmJlZm9yZUNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmIChyZXN1bHQudGhlbikge1xyXG4gICAgICAgICAgY2hhbmdlUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN1YnNjcmliZSkge1xyXG4gICAgICAgICAgY2hhbmdlUmVzdWx0ID0gKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KS50b1Byb21pc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2hhbmdlUmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhbmdlUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hhbmdlKCRldmVudCwgdmFsdWUpIHtcclxuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMucmFkaW9zICYmIHRoaXMucmFkaW9zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaCgocmFkaW8pID0+IHtcclxuICAgICAgICByYWRpby53cml0ZVZhbHVlKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZGV2dWktcmFkaW8tZ3JvdXBcIj5cbiAgPHVsIFtjbGFzcy5kZXZ1aS1yYWRpby1ob3Jpem9udGFsXT1cImRpcmVjdGlvbiA9PT0gJ3JvdydcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmFkaW9zLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB2YWx1ZXNcIiBjbGFzcz1cImRldnVpLXJhZGlvLWxpc3QtaXRlbVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJkZXZ1aS1yYWRpb1wiIFtjbGFzcy5hY3RpdmVdPVwidmFsdWUgPT0gX3ZhbHVlXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgY2xhc3M9XCJkZXZ1aS1yYWRpby1pbnB1dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICBbaWRdPVwibmFtZSArICctJyArIHZhbHVlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJ2YWx1ZSA9PSBfdmFsdWVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoJGV2ZW50LCB2YWx1ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXZ1aS1yYWRpby1tYXRlcmlhbFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldnVpLXJhZGlvLWxhYmVsXCI+e3sgdmFsdWUgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImQtcmFkaW9cIj48L25nLWNvbnRlbnQ+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==