UNPKG

ng-devui

Version:

DevUI components based on Angular

129 lines 21.1 kB
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