UNPKG

ng-devui

Version:

DevUI components based on Angular

169 lines 29.6 kB
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==