UNPKG

@leoborel/ngx-ui-switch

Version:
188 lines 25.2 kB
import { Component, Input, Output, EventEmitter, HostListener, forwardRef, Inject, Optional, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { UI_SWITCH_OPTIONS } from './ui-switch.token'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; const UI_SWITCH_CONTROL_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => UiSwitchComponent), multi: true, }; export class UiSwitchComponent { constructor(config = {}, cdr) { this.cdr = cdr; /** * Emits changed value */ // eslint-disable-next-line @angular-eslint/no-output-native this.change = new EventEmitter(); /** * Emits DOM event */ this.changeEvent = new EventEmitter(); /** * Emits changed value */ this.valueChange = new EventEmitter(); this.onTouchedCallback = (v) => { }; this.onChangeCallback = (v) => { }; this.size = (config && config.size) || 'medium'; this.color = config && config.color; this.switchOffColor = config && config.switchOffColor; this.switchColor = config && config.switchColor; this.defaultBgColor = config && config.defaultBgColor; this.defaultBoColor = config && config.defaultBoColor; this.checkedLabel = config && config.checkedLabel; this.uncheckedLabel = config && config.uncheckedLabel; this.checkedTextColor = config && config.checkedTextColor; this.uncheckedTextColor = config && config.uncheckedTextColor; } set checked(v) { this._checked = v !== false; } get checked() { return this._checked; } set disabled(v) { this._disabled = v !== false; } get disabled() { return this._disabled; } set reverse(v) { this._reverse = v !== false; } get reverse() { return this._reverse; } set loading(v) { this._loading = v !== false; } get loading() { return this._loading; } getColor(flag = '') { if (flag === 'borderColor') { return this.defaultBoColor; } if (flag === 'switchColor') { if (this.reverse) { return !this.checked ? this.switchColor : this.switchOffColor || this.switchColor; } return this.checked ? this.switchColor : this.switchOffColor || this.switchColor; } if (flag === 'checkedTextColor') { return this.reverse ? this.uncheckedTextColor : this.checkedTextColor; } if (flag === 'uncheckedTextColor') { return this.reverse ? this.checkedTextColor : this.uncheckedTextColor; } if (this.reverse) { return !this.checked ? this.color : this.defaultBgColor; } return this.checked ? this.color : this.defaultBgColor; } onClick(event) { if (this.disabled) { return; } this.checked = !this.checked; // Component events this.change.emit(this.checked); this.valueChange.emit(this.checked); this.changeEvent.emit(event); // value accessor callbacks this.onChangeCallback(this.checked); this.onTouchedCallback(this.checked); this.cdr.markForCheck(); } onToggle(event) { if (this.disabled) { return; } if (this.beforeChange) { this._beforeChange = this.beforeChange.subscribe((confirm) => { if (confirm) { this.onClick(event); } }); } else { this.onClick(event); } } writeValue(obj) { if (obj !== this.checked) { this.checked = !!obj; } this.onChangeCallback(this.checked); if (this.cdr) { this.cdr.markForCheck(); } } registerOnChange(fn) { this.onChangeCallback = fn; } registerOnTouched(fn) { this.onTouchedCallback = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } ngOnDestroy() { if (this._beforeChange) { this._beforeChange.unsubscribe(); } } } UiSwitchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UiSwitchComponent, deps: [{ token: UI_SWITCH_OPTIONS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); UiSwitchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UiSwitchComponent, selector: "ui-switch", inputs: { size: "size", color: "color", switchOffColor: "switchOffColor", switchColor: "switchColor", defaultBgColor: "defaultBgColor", defaultBoColor: "defaultBoColor", checkedLabel: "checkedLabel", uncheckedLabel: "uncheckedLabel", checkedTextColor: "checkedTextColor", uncheckedTextColor: "uncheckedTextColor", beforeChange: "beforeChange", checked: "checked", disabled: "disabled", reverse: "reverse", loading: "loading" }, outputs: { change: "change", changeEvent: "changeEvent", valueChange: "valueChange" }, host: { listeners: { "click": "onToggle($event)" } }, providers: [UI_SWITCH_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<button\r\n type=\"button\"\r\n class=\"switch\"\r\n role=\"switch\"\r\n [attr.aria-checked]=\"checked\"\r\n [class.checked]=\"checked\"\r\n [class.disabled]=\"disabled\"\r\n [class.loading]=\"loading\"\r\n [class.switch-large]=\"size === 'large'\"\r\n [class.switch-medium]=\"size === 'medium'\"\r\n [class.switch-small]=\"size === 'small'\"\r\n [style.background-color]=\"getColor()\"\r\n [style.border-color]=\"getColor('borderColor')\"\r\n>\r\n <label class=\"switch-pane\" *ngIf=\"checkedLabel || uncheckedLabel\">\r\n <span\r\n [attr.aria-label]=\"this.checkedLabel\"\r\n class=\"switch-label-checked\"\r\n [style.color]=\"getColor('checkedTextColor')\"\r\n >{{ this.checkedLabel }}</span\r\n >\r\n <span\r\n [attr.aria-label]=\"this.uncheckedLabel\"\r\n class=\"switch-label-unchecked\"\r\n [style.color]=\"getColor('uncheckedTextColor')\"\r\n >{{ this.uncheckedLabel }}</span\r\n >\r\n </label>\r\n <small [style.background]=\"getColor('switchColor')\">\r\n <ng-content></ng-content>\r\n </small>\r\n</button>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UiSwitchComponent, decorators: [{ type: Component, args: [{ selector: 'ui-switch', providers: [UI_SWITCH_CONTROL_VALUE_ACCESSOR], template: "<button\r\n type=\"button\"\r\n class=\"switch\"\r\n role=\"switch\"\r\n [attr.aria-checked]=\"checked\"\r\n [class.checked]=\"checked\"\r\n [class.disabled]=\"disabled\"\r\n [class.loading]=\"loading\"\r\n [class.switch-large]=\"size === 'large'\"\r\n [class.switch-medium]=\"size === 'medium'\"\r\n [class.switch-small]=\"size === 'small'\"\r\n [style.background-color]=\"getColor()\"\r\n [style.border-color]=\"getColor('borderColor')\"\r\n>\r\n <label class=\"switch-pane\" *ngIf=\"checkedLabel || uncheckedLabel\">\r\n <span\r\n [attr.aria-label]=\"this.checkedLabel\"\r\n class=\"switch-label-checked\"\r\n [style.color]=\"getColor('checkedTextColor')\"\r\n >{{ this.checkedLabel }}</span\r\n >\r\n <span\r\n [attr.aria-label]=\"this.uncheckedLabel\"\r\n class=\"switch-label-unchecked\"\r\n [style.color]=\"getColor('uncheckedTextColor')\"\r\n >{{ this.uncheckedLabel }}</span\r\n >\r\n </label>\r\n <small [style.background]=\"getColor('switchColor')\">\r\n <ng-content></ng-content>\r\n </small>\r\n</button>\r\n" }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [UI_SWITCH_OPTIONS] }, { type: Optional }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { size: [{ type: Input }], color: [{ type: Input }], switchOffColor: [{ type: Input }], switchColor: [{ type: Input }], defaultBgColor: [{ type: Input }], defaultBoColor: [{ type: Input }], checkedLabel: [{ type: Input }], uncheckedLabel: [{ type: Input }], checkedTextColor: [{ type: Input }], uncheckedTextColor: [{ type: Input }], beforeChange: [{ type: Input }], checked: [{ type: Input }], disabled: [{ type: Input }], reverse: [{ type: Input }], loading: [{ type: Input }], change: [{ type: Output }], changeEvent: [{ type: Output }], valueChange: [{ type: Output }], onToggle: [{ type: HostListener, args: ['click', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdWktc3dpdGNoL3VpLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3VpLXN3aXRjaC91aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFJdEQsTUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBUUYsTUFBTSxPQUFPLGlCQUFpQjtJQXVFNUIsWUFDeUMsU0FBK0IsRUFBRSxFQUNoRSxHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWxCaEM7O1dBRUc7UUFDSCw0REFBNEQ7UUFDbEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0M7O1dBRUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFdkQ7O1dBRUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFnRzVDLHNCQUFpQixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQTNGeEMsSUFB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QUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBYUksTUFBTTtzQkFBZixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkEwRFAsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVSV9TV0lUQ0hfT1BUSU9OUyB9IGZyb20gJy4vdWktc3dpdGNoLnRva2VuJztcclxuaW1wb3J0IHsgVWlTd2l0Y2hNb2R1bGVDb25maWcgfSBmcm9tICcuL3VpLXN3aXRjaC5jb25maWcnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFVJX1NXSVRDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVWlTd2l0Y2hDb21wb25lbnQpLFxyXG4gIG11bHRpOiB0cnVlLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3VpLXN3aXRjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICd1aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1VJX1NXSVRDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpU3dpdGNoQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXZlcnNlOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2xvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYmVmb3JlQ2hhbmdlOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpIHNpemU7XHJcbiAgQElucHV0KCkgY29sb3I7XHJcbiAgQElucHV0KCkgc3dpdGNoT2ZmQ29sb3I7XHJcbiAgQElucHV0KCkgc3dpdGNoQ29sb3I7XHJcbiAgQElucHV0KCkgZGVmYXVsdEJnQ29sb3I7XHJcbiAgQElucHV0KCkgZGVmYXVsdEJvQ29sb3I7XHJcbiAgQElucHV0KCkgY2hlY2tlZExhYmVsO1xyXG4gIEBJbnB1dCgpIHVuY2hlY2tlZExhYmVsO1xyXG4gIEBJbnB1dCgpIGNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgQElucHV0KCkgdW5jaGVja2VkVGV4dENvbG9yO1xyXG4gIEBJbnB1dCgpIGJlZm9yZUNoYW5nZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2hlY2tlZCh2OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jaGVja2VkID0gdiAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hlY2tlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2ICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJldmVyc2UodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmV2ZXJzZSA9IHYgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldmVyc2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbG9hZGluZyA9IHYgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvYWRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGNoYW5nZWQgdmFsdWVcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBET00gZXZlbnRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGNoYW5nZWQgdmFsdWVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChVSV9TV0lUQ0hfT1BUSU9OUykgQE9wdGlvbmFsKCkgY29uZmlnOiBVaVN3aXRjaE1vZHVsZUNvbmZpZyA9IHt9LFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNpemUgPSAoY29uZmlnICYmIGNvbmZpZy5zaXplKSB8fCAnbWVkaXVtJztcclxuICAgIHRoaXMuY29sb3IgPSBjb25maWcgJiYgY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy5zd2l0Y2hPZmZDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuc3dpdGNoT2ZmQ29sb3I7XHJcbiAgICB0aGlzLnN3aXRjaENvbG9yID0gY29uZmlnICYmIGNvbmZpZy5zd2l0Y2hDb2xvcjtcclxuICAgIHRoaXMuZGVmYXVsdEJnQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRCZ0NvbG9yO1xyXG4gICAgdGhpcy5kZWZhdWx0Qm9Db2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEJvQ29sb3I7XHJcbiAgICB0aGlzLmNoZWNrZWRMYWJlbCA9IGNvbmZpZyAmJiBjb25maWcuY2hlY2tlZExhYmVsO1xyXG4gICAgdGhpcy51bmNoZWNrZWRMYWJlbCA9IGNvbmZpZyAmJiBjb25maWcudW5jaGVja2VkTGFiZWw7XHJcbiAgICB0aGlzLmNoZWNrZWRUZXh0Q29sb3IgPSBjb25maWcgJiYgY29uZmlnLmNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgICB0aGlzLnVuY2hlY2tlZFRleHRDb2xvciA9IGNvbmZpZyAmJiBjb25maWcudW5jaGVja2VkVGV4dENvbG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IoZmxhZyA9ICcnKSB7XHJcbiAgICBpZiAoZmxhZyA9PT0gJ2JvcmRlckNvbG9yJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9Db2xvcjtcclxuICAgIH1cclxuICAgIGlmIChmbGFnID09PSAnc3dpdGNoQ29sb3InKSB7XHJcbiAgICAgIGlmICh0aGlzLnJldmVyc2UpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuY2hlY2tlZCA/IHRoaXMuc3dpdGNoQ29sb3IgOiB0aGlzLnN3aXRjaE9mZkNvbG9yIHx8IHRoaXMuc3dpdGNoQ29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA/IHRoaXMuc3dpdGNoQ29sb3IgOiB0aGlzLnN3aXRjaE9mZkNvbG9yIHx8IHRoaXMuc3dpdGNoQ29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAoZmxhZyA9PT0gJ2NoZWNrZWRUZXh0Q29sb3InKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UgPyB0aGlzLnVuY2hlY2tlZFRleHRDb2xvciA6IHRoaXMuY2hlY2tlZFRleHRDb2xvcjtcclxuICAgIH1cclxuICAgIGlmIChmbGFnID09PSAndW5jaGVja2VkVGV4dENvbG9yJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlID8gdGhpcy5jaGVja2VkVGV4dENvbG9yIDogdGhpcy51bmNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXZlcnNlKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jaGVja2VkID8gdGhpcy5jb2xvciA6IHRoaXMuZGVmYXVsdEJnQ29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja2VkID8gdGhpcy5jb2xvciA6IHRoaXMuZGVmYXVsdEJnQ29sb3I7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xyXG5cclxuICAgIC8vIENvbXBvbmVudCBldmVudHNcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICAvLyB2YWx1ZSBhY2Nlc3NvciBjYWxsYmFja3NcclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJlZm9yZUNoYW5nZSkge1xyXG4gICAgICB0aGlzLl9iZWZvcmVDaGFuZ2UgPSB0aGlzLmJlZm9yZUNoYW5nZS5zdWJzY3JpYmUoKGNvbmZpcm06IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChvYmogIT09IHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmNoZWNrZWQgPSAhIW9iajtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5jaGVja2VkKTtcclxuICAgIGlmICh0aGlzLmNkcikge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjayA9ICh2OiBhbnkpID0+IHt9O1xyXG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjayA9ICh2OiBhbnkpID0+IHt9O1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLl9iZWZvcmVDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5fYmVmb3JlQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b25cclxuICB0eXBlPVwiYnV0dG9uXCJcclxuICBjbGFzcz1cInN3aXRjaFwiXHJcbiAgcm9sZT1cInN3aXRjaFwiXHJcbiAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gIFtjbGFzcy5jaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgW2NsYXNzLnN3aXRjaC1sYXJnZV09XCJzaXplID09PSAnbGFyZ2UnXCJcclxuICBbY2xhc3Muc3dpdGNoLW1lZGl1bV09XCJzaXplID09PSAnbWVkaXVtJ1wiXHJcbiAgW2NsYXNzLnN3aXRjaC1zbWFsbF09XCJzaXplID09PSAnc21hbGwnXCJcclxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRDb2xvcigpXCJcclxuICBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImdldENvbG9yKCdib3JkZXJDb2xvcicpXCJcclxuPlxyXG4gIDxsYWJlbCBjbGFzcz1cInN3aXRjaC1wYW5lXCIgKm5nSWY9XCJjaGVja2VkTGFiZWwgfHwgdW5jaGVja2VkTGFiZWxcIj5cclxuICAgIDxzcGFuXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy5jaGVja2VkTGFiZWxcIlxyXG4gICAgICBjbGFzcz1cInN3aXRjaC1sYWJlbC1jaGVja2VkXCJcclxuICAgICAgW3N0eWxlLmNvbG9yXT1cImdldENvbG9yKCdjaGVja2VkVGV4dENvbG9yJylcIlxyXG4gICAgICA+e3sgdGhpcy5jaGVja2VkTGFiZWwgfX08L3NwYW5cclxuICAgID5cclxuICAgIDxzcGFuXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy51bmNoZWNrZWRMYWJlbFwiXHJcbiAgICAgIGNsYXNzPVwic3dpdGNoLWxhYmVsLXVuY2hlY2tlZFwiXHJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRDb2xvcigndW5jaGVja2VkVGV4dENvbG9yJylcIlxyXG4gICAgICA+e3sgdGhpcy51bmNoZWNrZWRMYWJlbCB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbGFiZWw+XHJcbiAgPHNtYWxsIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldENvbG9yKCdzd2l0Y2hDb2xvcicpXCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9zbWFsbD5cclxuPC9idXR0b24+XHJcbiJdfQ==