ng-devui
Version:
DevUI components based on Angular
129 lines • 21.1 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, forwardRef, HostBinding, HostListener, Input } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { DevConfigService, WithConfig } from 'ng-devui/utils';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/utils";
import * as i2 from "@angular/forms";
export class RadioComponent {
get name() {
return this._name;
}
set name(value) {
this._name = value;
}
get disabled() {
return this._disabled;
}
set disabled(value) {
this._disabled = value;
}
get value() {
return this.inputValue;
}
set value(value) {
this.inputValue = value;
if (value instanceof Object) {
this.id = '';
}
else {
this.id = `${this.name}-${value}`;
}
}
get hasGlowStyle() {
return this.showGlowStyle;
}
onRadioChange(event) {
event.preventDefault();
if (this.disabled) {
return;
}
this.canChange().then((change) => {
if (change) {
this._value = this.value;
this.onChange(this.value);
}
});
}
constructor(devConfigService) {
this.devConfigService = devConfigService;
this.showGlowStyle = true;
this.onChange = (_) => null;
this.onTouched = () => null;
}
registerHandleChange(fn) {
this.handleChange = fn;
}
writeValue(obj) {
this._value = obj;
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
handleModelChange($event, value) {
$event.stopPropagation();
this._value = value;
this.onTouched();
this.onChange(value);
}
canChange() {
let changeResult = Promise.resolve(true);
if (this.beforeChange) {
const result = this.beforeChange(this.value);
if (typeof result !== 'undefined') {
if (result.then) {
changeResult = result;
}
else if (result.subscribe) {
changeResult = result.toPromise();
}
else {
changeResult = Promise.resolve(result);
}
}
}
return changeResult;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioComponent, deps: [{ token: i1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RadioComponent, selector: "d-radio", inputs: { name: "name", disabled: "disabled", value: "value", beforeChange: "beforeChange", showGlowStyle: "showGlowStyle" }, host: { listeners: { "click": "onRadioChange($event)" }, properties: { "class.devui-glow-style": "this.hasGlowStyle" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioComponent),
multi: true,
},
], ngImport: i0, template: "<label class=\"devui-radio\" [class.active]=\"radioInput.checked\" [class.disabled]=\"disabled\">\n <input\n #radioInput\n type=\"radio\"\n class=\"devui-radio-input\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"id\"\n [ngModel]=\"_value\"\n (change)=\"handleModelChange($event, value)\"\n [value]=\"value\"\n />\n <span class=\"devui-radio-material\"></span>\n <span class=\"devui-radio-label\">\n <ng-content></ng-content>\n </span>\n</label>\n", styles: [".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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
}
__decorate([
WithConfig(),
__metadata("design:type", Object)
], RadioComponent.prototype, "showGlowStyle", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioComponent, decorators: [{
type: Component,
args: [{ selector: 'd-radio', providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => RadioComponent),
multi: true,
},
], preserveWhitespaces: false, template: "<label class=\"devui-radio\" [class.active]=\"radioInput.checked\" [class.disabled]=\"disabled\">\n <input\n #radioInput\n type=\"radio\"\n class=\"devui-radio-input\"\n [disabled]=\"disabled\"\n [name]=\"name\"\n [id]=\"id\"\n [ngModel]=\"_value\"\n (change)=\"handleModelChange($event, value)\"\n [value]=\"value\"\n />\n <span class=\"devui-radio-material\"></span>\n <span class=\"devui-radio-label\">\n <ng-content></ng-content>\n </span>\n</label>\n", styles: [".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
}], disabled: [{
type: Input
}], value: [{
type: Input
}], beforeChange: [{
type: Input
}], showGlowStyle: [{
type: Input
}], hasGlowStyle: [{
type: HostBinding,
args: ['class.devui-glow-style']
}], onRadioChange: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvcmFkaW8vcmFkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvcmFkaW8vcmFkaW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFnQjlELE1BQU0sT0FBTyxjQUFjO0lBS3pCLElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJ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QUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQzs0QkFDN0MsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsdUJBQ29CLEtBQUs7cUZBUXRCLElBQUk7c0JBRFAsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQWFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ2lCLGFBQWE7c0JBQW5DLEtBQUs7Z0JBQ3FDLFlBQVk7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUlyQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERldkNvbmZpZ1NlcnZpY2UsIFdpdGhDb25maWcgfSBmcm9tICduZy1kZXZ1aS91dGlscyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1yYWRpbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYWRpby5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIGlucHV0VmFsdWU6IHN0cmluZztcclxuICBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9uYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5wdXRWYWx1ZTtcclxuICB9XHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuaWQgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaWQgPSBgJHt0aGlzLm5hbWV9LSR7dmFsdWV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGJlZm9yZUNoYW5nZTogKHZhbHVlKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgQFdpdGhDb25maWcoKSBzaG93R2xvd1N0eWxlID0gdHJ1ZTtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWdsb3ctc3R5bGUnKSBnZXQgaGFzR2xvd1N0eWxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0dsb3dTdHlsZTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uUmFkaW9DaGFuZ2UoZXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbkNoYW5nZSgpLnRoZW4oKGNoYW5nZSkgPT4ge1xyXG4gICAgICBpZiAoY2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX3ZhbHVlOiBhbnk7XHJcbiAgaGFuZGxlQ2hhbmdlOiAoZXZlbnQ6IGFueSwgdmFsdWU6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IG51bGw7XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRldkNvbmZpZ1NlcnZpY2U6IERldkNvbmZpZ1NlcnZpY2UpIHt9XHJcblxyXG4gIHJlZ2lzdGVySGFuZGxlQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IG9iajtcclxuICB9XHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBoYW5kbGVNb2RlbENoYW5nZSgkZXZlbnQsIHZhbHVlKSB7XHJcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2FuQ2hhbmdlKCkge1xyXG4gICAgbGV0IGNoYW5nZVJlc3VsdDogUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5iZWZvcmVDaGFuZ2UpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5iZWZvcmVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGlmICgocmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbj4pLnRoZW4pIHtcclxuICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+KS5zdWJzY3JpYmUpIHtcclxuICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IChyZXN1bHQgYXMgT2JzZXJ2YWJsZTxib29sZWFuPikudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShyZXN1bHQgYXMgYm9vbGVhbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2hhbmdlUmVzdWx0O1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgY2xhc3M9XCJkZXZ1aS1yYWRpb1wiIFtjbGFzcy5hY3RpdmVdPVwicmFkaW9JbnB1dC5jaGVja2VkXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gIDxpbnB1dFxuICAgICNyYWRpb0lucHV0XG4gICAgdHlwZT1cInJhZGlvXCJcbiAgICBjbGFzcz1cImRldnVpLXJhZGlvLWlucHV0XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgIFtpZF09XCJpZFwiXG4gICAgW25nTW9kZWxdPVwiX3ZhbHVlXCJcbiAgICAoY2hhbmdlKT1cImhhbmRsZU1vZGVsQ2hhbmdlKCRldmVudCwgdmFsdWUpXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAvPlxuICA8c3BhbiBjbGFzcz1cImRldnVpLXJhZGlvLW1hdGVyaWFsXCI+PC9zcGFuPlxuICA8c3BhbiBjbGFzcz1cImRldnVpLXJhZGlvLWxhYmVsXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG48L2xhYmVsPlxuIl19