@leoborel/ngx-ui-switch
Version:
switch button for angular4
188 lines • 25.2 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdWktc3dpdGNoL3VpLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3VpLXN3aXRjaC91aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFJdEQsTUFBTSxnQ0FBZ0MsR0FBUTtJQUM1QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBUUYsTUFBTSxPQUFPLGlCQUFpQjtJQXVFNUIsWUFDeUMsU0FBK0IsRUFBRSxFQUNoRSxHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWxCaEM7O1dBRUc7UUFDSCw0REFBNEQ7UUFDbEQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0M7O1dBRUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFdkQ7O1dBRUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFnRzVDLHNCQUFpQixHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQTNGeEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7SUFDaEUsQ0FBQztJQWxFRCxJQUNJLE9BQU8sQ0FBQyxDQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxDQUFVO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLE9BQU8sQ0FBQyxDQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNJLE9BQU8sQ0FBQyxDQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFrQ0QsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ2hCLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDNUI7UUFDRCxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ25GO1lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDbEY7UUFDRCxJQUFJLElBQUksS0FBSyxrQkFBa0IsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ3ZFO1FBQ0QsSUFBSSxJQUFJLEtBQUssb0JBQW9CLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUN2RTtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUN6RDtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3QixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdELFFBQVEsQ0FBQyxLQUFpQjtRQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUU7Z0JBQ3BFLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUN0QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUtELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNsQztJQUNILENBQUM7OzhHQTVLVSxpQkFBaUIsa0JBd0VsQixpQkFBaUI7a0dBeEVoQixpQkFBaUIsNmxCQUZqQixDQUFDLGdDQUFnQyxDQUFDLDBCQzNCL0Msc2tDQWdDQTsyRkRIYSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBRUUsV0FBVyxhQUVWLENBQUMsZ0NBQWdDLENBQUM7OzBCQTBFMUMsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7NEVBakU3QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBYUksTUFBTTtzQkFBZixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkEwRFAsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVSV9TV0lUQ0hfT1BUSU9OUyB9IGZyb20gJy4vdWktc3dpdGNoLnRva2VuJztcclxuaW1wb3J0IHsgVWlTd2l0Y2hNb2R1bGVDb25maWcgfSBmcm9tICcuL3VpLXN3aXRjaC5jb25maWcnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFVJX1NXSVRDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVWlTd2l0Y2hDb21wb25lbnQpLFxyXG4gIG11bHRpOiB0cnVlLFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3VpLXN3aXRjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICd1aS1zd2l0Y2guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1VJX1NXSVRDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpU3dpdGNoQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfY2hlY2tlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXZlcnNlOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2xvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYmVmb3JlQ2hhbmdlOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpIHNpemU7XHJcbiAgQElucHV0KCkgY29sb3I7XHJcbiAgQElucHV0KCkgc3dpdGNoT2ZmQ29sb3I7XHJcbiAgQElucHV0KCkgc3dpdGNoQ29sb3I7XHJcbiAgQElucHV0KCkgZGVmYXVsdEJnQ29sb3I7XHJcbiAgQElucHV0KCkgZGVmYXVsdEJvQ29sb3I7XHJcbiAgQElucHV0KCkgY2hlY2tlZExhYmVsO1xyXG4gIEBJbnB1dCgpIHVuY2hlY2tlZExhYmVsO1xyXG4gIEBJbnB1dCgpIGNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgQElucHV0KCkgdW5jaGVja2VkVGV4dENvbG9yO1xyXG4gIEBJbnB1dCgpIGJlZm9yZUNoYW5nZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2hlY2tlZCh2OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jaGVja2VkID0gdiAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgY2hlY2tlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2ICE9PSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJldmVyc2UodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmV2ZXJzZSA9IHYgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJldmVyc2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGxvYWRpbmcodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fbG9hZGluZyA9IHYgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvYWRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGNoYW5nZWQgdmFsdWVcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBET00gZXZlbnRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGNoYW5nZWQgdmFsdWVcclxuICAgKi9cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChVSV9TV0lUQ0hfT1BUSU9OUykgQE9wdGlvbmFsKCkgY29uZmlnOiBVaVN3aXRjaE1vZHVsZUNvbmZpZyA9IHt9LFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNpemUgPSAoY29uZmlnICYmIGNvbmZpZy5zaXplKSB8fCAnbWVkaXVtJztcclxuICAgIHRoaXMuY29sb3IgPSBjb25maWcgJiYgY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy5zd2l0Y2hPZmZDb2xvciA9IGNvbmZpZyAmJiBjb25maWcuc3dpdGNoT2ZmQ29sb3I7XHJcbiAgICB0aGlzLnN3aXRjaENvbG9yID0gY29uZmlnICYmIGNvbmZpZy5zd2l0Y2hDb2xvcjtcclxuICAgIHRoaXMuZGVmYXVsdEJnQ29sb3IgPSBjb25maWcgJiYgY29uZmlnLmRlZmF1bHRCZ0NvbG9yO1xyXG4gICAgdGhpcy5kZWZhdWx0Qm9Db2xvciA9IGNvbmZpZyAmJiBjb25maWcuZGVmYXVsdEJvQ29sb3I7XHJcbiAgICB0aGlzLmNoZWNrZWRMYWJlbCA9IGNvbmZpZyAmJiBjb25maWcuY2hlY2tlZExhYmVsO1xyXG4gICAgdGhpcy51bmNoZWNrZWRMYWJlbCA9IGNvbmZpZyAmJiBjb25maWcudW5jaGVja2VkTGFiZWw7XHJcbiAgICB0aGlzLmNoZWNrZWRUZXh0Q29sb3IgPSBjb25maWcgJiYgY29uZmlnLmNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgICB0aGlzLnVuY2hlY2tlZFRleHRDb2xvciA9IGNvbmZpZyAmJiBjb25maWcudW5jaGVja2VkVGV4dENvbG9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IoZmxhZyA9ICcnKSB7XHJcbiAgICBpZiAoZmxhZyA9PT0gJ2JvcmRlckNvbG9yJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9Db2xvcjtcclxuICAgIH1cclxuICAgIGlmIChmbGFnID09PSAnc3dpdGNoQ29sb3InKSB7XHJcbiAgICAgIGlmICh0aGlzLnJldmVyc2UpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuY2hlY2tlZCA/IHRoaXMuc3dpdGNoQ29sb3IgOiB0aGlzLnN3aXRjaE9mZkNvbG9yIHx8IHRoaXMuc3dpdGNoQ29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZCA/IHRoaXMuc3dpdGNoQ29sb3IgOiB0aGlzLnN3aXRjaE9mZkNvbG9yIHx8IHRoaXMuc3dpdGNoQ29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAoZmxhZyA9PT0gJ2NoZWNrZWRUZXh0Q29sb3InKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UgPyB0aGlzLnVuY2hlY2tlZFRleHRDb2xvciA6IHRoaXMuY2hlY2tlZFRleHRDb2xvcjtcclxuICAgIH1cclxuICAgIGlmIChmbGFnID09PSAndW5jaGVja2VkVGV4dENvbG9yJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlID8gdGhpcy5jaGVja2VkVGV4dENvbG9yIDogdGhpcy51bmNoZWNrZWRUZXh0Q29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXZlcnNlKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jaGVja2VkID8gdGhpcy5jb2xvciA6IHRoaXMuZGVmYXVsdEJnQ29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja2VkID8gdGhpcy5jb2xvciA6IHRoaXMuZGVmYXVsdEJnQ29sb3I7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrZWQgPSAhdGhpcy5jaGVja2VkO1xyXG5cclxuICAgIC8vIENvbXBvbmVudCBldmVudHNcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5jaGVja2VkKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICAvLyB2YWx1ZSBhY2Nlc3NvciBjYWxsYmFja3NcclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayh0aGlzLmNoZWNrZWQpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmJlZm9yZUNoYW5nZSkge1xyXG4gICAgICB0aGlzLl9iZWZvcmVDaGFuZ2UgPSB0aGlzLmJlZm9yZUNoYW5nZS5zdWJzY3JpYmUoKGNvbmZpcm06IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkNsaWNrKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChvYmogIT09IHRoaXMuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmNoZWNrZWQgPSAhIW9iajtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5jaGVja2VkKTtcclxuICAgIGlmICh0aGlzLmNkcikge1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjayA9ICh2OiBhbnkpID0+IHt9O1xyXG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjayA9ICh2OiBhbnkpID0+IHt9O1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLl9iZWZvcmVDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5fYmVmb3JlQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b25cclxuICB0eXBlPVwiYnV0dG9uXCJcclxuICBjbGFzcz1cInN3aXRjaFwiXHJcbiAgcm9sZT1cInN3aXRjaFwiXHJcbiAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gIFtjbGFzcy5jaGVja2VkXT1cImNoZWNrZWRcIlxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgW2NsYXNzLnN3aXRjaC1sYXJnZV09XCJzaXplID09PSAnbGFyZ2UnXCJcclxuICBbY2xhc3Muc3dpdGNoLW1lZGl1bV09XCJzaXplID09PSAnbWVkaXVtJ1wiXHJcbiAgW2NsYXNzLnN3aXRjaC1zbWFsbF09XCJzaXplID09PSAnc21hbGwnXCJcclxuICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRDb2xvcigpXCJcclxuICBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cImdldENvbG9yKCdib3JkZXJDb2xvcicpXCJcclxuPlxyXG4gIDxsYWJlbCBjbGFzcz1cInN3aXRjaC1wYW5lXCIgKm5nSWY9XCJjaGVja2VkTGFiZWwgfHwgdW5jaGVja2VkTGFiZWxcIj5cclxuICAgIDxzcGFuXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy5jaGVja2VkTGFiZWxcIlxyXG4gICAgICBjbGFzcz1cInN3aXRjaC1sYWJlbC1jaGVja2VkXCJcclxuICAgICAgW3N0eWxlLmNvbG9yXT1cImdldENvbG9yKCdjaGVja2VkVGV4dENvbG9yJylcIlxyXG4gICAgICA+e3sgdGhpcy5jaGVja2VkTGFiZWwgfX08L3NwYW5cclxuICAgID5cclxuICAgIDxzcGFuXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGhpcy51bmNoZWNrZWRMYWJlbFwiXHJcbiAgICAgIGNsYXNzPVwic3dpdGNoLWxhYmVsLXVuY2hlY2tlZFwiXHJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRDb2xvcigndW5jaGVja2VkVGV4dENvbG9yJylcIlxyXG4gICAgICA+e3sgdGhpcy51bmNoZWNrZWRMYWJlbCB9fTwvc3BhblxyXG4gICAgPlxyXG4gIDwvbGFiZWw+XHJcbiAgPHNtYWxsIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldENvbG9yKCdzd2l0Y2hDb2xvcicpXCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgPC9zbWFsbD5cclxuPC9idXR0b24+XHJcbiJdfQ==