@xw-components/condition-editor 18.1.0 → 18.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, input, output } from '@angular/core';
2
+ import { Component, inject, input } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { NzButtonModule } from 'ng-zorro-antd/button';
5
5
  import { NzFormModule } from 'ng-zorro-antd/form';
@@ -8,6 +8,7 @@ import { NzModalModule } from 'ng-zorro-antd/modal';
8
8
  import { NzSelectModule } from 'ng-zorro-antd/select';
9
9
  import { ConditionGroupType } from '../condition-editor.model';
10
10
  import { ConditionItemComponent } from '../condition-item/condition-item.component';
11
+ import { ConditionEditorService } from '../condition-editor.service';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "ng-zorro-antd/select";
13
14
  import * as i2 from "@angular/forms";
@@ -18,13 +19,13 @@ import * as i6 from "@angular/common";
18
19
  import * as i7 from "ng-zorro-antd/icon";
19
20
  export class ConditionGroupComponent {
20
21
  constructor() {
22
+ this.conditionEditorService = inject(ConditionEditorService);
21
23
  this.groupData = input({
22
24
  groupType: ConditionGroupType.AND,
23
25
  conditions: []
24
26
  });
25
27
  this.parentData = input(null);
26
28
  this.showLine = input(true);
27
- this.dataChange = output();
28
29
  }
29
30
  addConditionItem() {
30
31
  this.groupData().conditions.push({
@@ -32,27 +33,26 @@ export class ConditionGroupComponent {
32
33
  operator: '',
33
34
  value: ''
34
35
  });
36
+ this.conditionEditorService.changeSub.next();
35
37
  }
36
38
  addConditionGroup() {
37
39
  this.groupData().conditions.push({
38
40
  groupType: ConditionGroupType.AND,
39
41
  conditions: []
40
42
  });
41
- this.dataChange.emit();
43
+ this.conditionEditorService.changeSub.next();
42
44
  }
43
45
  removeConditionGroup() {
44
46
  if (this.parentData()) {
45
47
  this.parentData().conditions = this.parentData().conditions.filter(item => item !== this.groupData());
46
- this.dataChange.emit();
48
+ this.conditionEditorService.changeSub.next();
47
49
  }
48
50
  }
49
- submitForm() { }
50
- handleOk() { }
51
51
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
52
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ConditionGroupComponent, isStandalone: true, selector: "app-condition-group", inputs: { groupData: { classPropertyName: "groupData", publicName: "groupData", isSignal: true, isRequired: false, transformFunction: null }, parentData: { classPropertyName: "parentData", publicName: "parentData", isSignal: true, isRequired: false, transformFunction: null }, showLine: { classPropertyName: "showLine", publicName: "showLine", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataChange: "dataChange" }, ngImport: i0, template: "@if (groupData()) {\n <div class=\"condition-group\">\n <nz-select class=\"condition-group-type\" [ngClass]=\"{ 'no-line': !showLine() }\" [(ngModel)]=\"groupData().groupType\">\n <nz-option nzValue=\"AND\" nzLabel=\"\u4E14\"></nz-option>\n <nz-option nzValue=\"OR\" nzLabel=\"\u6216\"></nz-option>\n </nz-select>\n\n <div class=\"condition-group-content\">\n @for (condition of groupData().conditions; track condition) {\n @if ($any(condition).groupType) {\n <app-condition-group\n class=\"hide-first\"\n [groupData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n (dataChange)=\"dataChange.emit()\"\n ></app-condition-group>\n } @else {\n <app-condition-item\n class=\"condition-content-item hide-first\"\n [conditionData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n (dataChange)=\"dataChange.emit()\"\n ></app-condition-item>\n }\n }\n <div class=\"condition-content-item hide-first\">\n <button nz-button (click)=\"addConditionItem()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6</button>\n <button nz-button (click)=\"addConditionGroup()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6\u7EC4</button>\n @if (groupData().conditions.length === 0 && parentData()) {\n <button nz-button nzDanger (click)=\"removeConditionGroup()\"\n ><span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\u5220\u9664\u6761\u4EF6\u7EC4</button\n >\n }\n </div>\n </div>\n </div>\n}\n", styles: [":host{display:block}:host .condition-group{display:flex;flex-direction:row;align-items:center}:host .condition-group .condition-group-type{position:relative;width:80px;height:fit-content;margin-right:24px}:host .condition-group .condition-group-type:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-type:after{position:absolute;top:16px;right:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .no-line:before{content:none!important}:host .condition-group .condition-group-content{position:relative;display:flex;flex-direction:column;gap:8px}:host .condition-group .condition-group-content:before{position:absolute;top:16px;left:-12px;width:0;height:calc(100% - 32px);border-left:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-content .hide-first{position:relative}:host .condition-group .condition-group-content .hide-first:first-child:after{position:absolute;top:16px;left:-12px;width:0;height:calc(50% - 16px);border-left:1px solid #fff;content:\"\"}:host .condition-group .condition-group-content .condition-content-item{position:relative;height:32px;line-height:32px}:host .condition-group .condition-group-content .condition-content-item:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}\n"], dependencies: [{ kind: "component", type: ConditionGroupComponent, selector: "app-condition-group", inputs: ["groupData", "parentData", "showLine"], outputs: ["dataChange"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i1.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i1.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "ngmodule", type: FormsModule }, { 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"] }, { kind: "component", type: ConditionItemComponent, selector: "app-condition-item", inputs: ["conditionData", "parentData"], outputs: ["dataChange"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i5.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "ngmodule", type: NzFormModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ConditionGroupComponent, isStandalone: true, selector: "app-condition-group", inputs: { groupData: { classPropertyName: "groupData", publicName: "groupData", isSignal: true, isRequired: false, transformFunction: null }, parentData: { classPropertyName: "parentData", publicName: "parentData", isSignal: true, isRequired: false, transformFunction: null }, showLine: { classPropertyName: "showLine", publicName: "showLine", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (groupData()) {\n <div class=\"condition-group\">\n <nz-select class=\"condition-group-type\" [ngClass]=\"{ 'no-line': !showLine() }\" [(ngModel)]=\"groupData().groupType\">\n @for (logicGate of conditionEditorService.logicGates(); track logicGate) {\n <nz-option [nzValue]=\"logicGate.value\" [nzLabel]=\"logicGate.label\"></nz-option>\n }\n </nz-select>\n\n <div class=\"condition-group-content\">\n @for (condition of groupData().conditions; track condition) {\n @if ($any(condition).groupType) {\n <app-condition-group class=\"hide-first\" [groupData]=\"$any(condition)\" [parentData]=\"groupData()\"></app-condition-group>\n } @else {\n <app-condition-item\n class=\"condition-content-item hide-first\"\n [conditionData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n ></app-condition-item>\n }\n }\n <div class=\"condition-content-item hide-first\">\n <button nz-button (click)=\"addConditionItem()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6</button>\n <button nz-button (click)=\"addConditionGroup()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6\u7EC4</button>\n @if (groupData().conditions.length === 0 && parentData()) {\n <button nz-button nzDanger (click)=\"removeConditionGroup()\"\n ><span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\u5220\u9664\u6761\u4EF6\u7EC4</button\n >\n }\n </div>\n </div>\n </div>\n}\n", styles: [":host{display:block}:host .condition-group{display:flex;flex-direction:row;align-items:center}:host .condition-group .condition-group-type{position:relative;width:80px;height:fit-content;margin-right:24px}:host .condition-group .condition-group-type:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-type:after{position:absolute;top:16px;right:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .no-line:before{content:none!important}:host .condition-group .condition-group-content{position:relative;display:flex;flex-direction:column;gap:8px}:host .condition-group .condition-group-content:before{position:absolute;top:16px;left:-12px;width:0;height:calc(100% - 32px);border-left:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-content .hide-first{position:relative}:host .condition-group .condition-group-content .hide-first:first-child:after{position:absolute;top:16px;left:-12px;width:0;height:calc(50% - 16px);border-left:1px solid #fff;content:\"\"}:host .condition-group .condition-group-content .condition-content-item{position:relative;height:32px;line-height:32px}:host .condition-group .condition-group-content .condition-content-item:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}\n"], dependencies: [{ kind: "component", type: ConditionGroupComponent, selector: "app-condition-group", inputs: ["groupData", "parentData", "showLine"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i1.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i1.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "ngmodule", type: FormsModule }, { 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"] }, { kind: "component", type: ConditionItemComponent, selector: "app-condition-item", inputs: ["conditionData", "parentData"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i5.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "ngmodule", type: NzFormModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i7.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
53
53
  }
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionGroupComponent, decorators: [{
55
55
  type: Component,
56
- args: [{ selector: 'app-condition-group', standalone: true, imports: [NzSelectModule, FormsModule, ConditionItemComponent, NzButtonModule, NzModalModule, NzFormModule, CommonModule, NzIconModule], template: "@if (groupData()) {\n <div class=\"condition-group\">\n <nz-select class=\"condition-group-type\" [ngClass]=\"{ 'no-line': !showLine() }\" [(ngModel)]=\"groupData().groupType\">\n <nz-option nzValue=\"AND\" nzLabel=\"\u4E14\"></nz-option>\n <nz-option nzValue=\"OR\" nzLabel=\"\u6216\"></nz-option>\n </nz-select>\n\n <div class=\"condition-group-content\">\n @for (condition of groupData().conditions; track condition) {\n @if ($any(condition).groupType) {\n <app-condition-group\n class=\"hide-first\"\n [groupData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n (dataChange)=\"dataChange.emit()\"\n ></app-condition-group>\n } @else {\n <app-condition-item\n class=\"condition-content-item hide-first\"\n [conditionData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n (dataChange)=\"dataChange.emit()\"\n ></app-condition-item>\n }\n }\n <div class=\"condition-content-item hide-first\">\n <button nz-button (click)=\"addConditionItem()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6</button>\n <button nz-button (click)=\"addConditionGroup()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6\u7EC4</button>\n @if (groupData().conditions.length === 0 && parentData()) {\n <button nz-button nzDanger (click)=\"removeConditionGroup()\"\n ><span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\u5220\u9664\u6761\u4EF6\u7EC4</button\n >\n }\n </div>\n </div>\n </div>\n}\n", styles: [":host{display:block}:host .condition-group{display:flex;flex-direction:row;align-items:center}:host .condition-group .condition-group-type{position:relative;width:80px;height:fit-content;margin-right:24px}:host .condition-group .condition-group-type:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-type:after{position:absolute;top:16px;right:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .no-line:before{content:none!important}:host .condition-group .condition-group-content{position:relative;display:flex;flex-direction:column;gap:8px}:host .condition-group .condition-group-content:before{position:absolute;top:16px;left:-12px;width:0;height:calc(100% - 32px);border-left:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-content .hide-first{position:relative}:host .condition-group .condition-group-content .hide-first:first-child:after{position:absolute;top:16px;left:-12px;width:0;height:calc(50% - 16px);border-left:1px solid #fff;content:\"\"}:host .condition-group .condition-group-content .condition-content-item{position:relative;height:32px;line-height:32px}:host .condition-group .condition-group-content .condition-content-item:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}\n"] }]
56
+ args: [{ selector: 'app-condition-group', standalone: true, imports: [NzSelectModule, FormsModule, ConditionItemComponent, NzButtonModule, NzModalModule, NzFormModule, CommonModule, NzIconModule], template: "@if (groupData()) {\n <div class=\"condition-group\">\n <nz-select class=\"condition-group-type\" [ngClass]=\"{ 'no-line': !showLine() }\" [(ngModel)]=\"groupData().groupType\">\n @for (logicGate of conditionEditorService.logicGates(); track logicGate) {\n <nz-option [nzValue]=\"logicGate.value\" [nzLabel]=\"logicGate.label\"></nz-option>\n }\n </nz-select>\n\n <div class=\"condition-group-content\">\n @for (condition of groupData().conditions; track condition) {\n @if ($any(condition).groupType) {\n <app-condition-group class=\"hide-first\" [groupData]=\"$any(condition)\" [parentData]=\"groupData()\"></app-condition-group>\n } @else {\n <app-condition-item\n class=\"condition-content-item hide-first\"\n [conditionData]=\"$any(condition)\"\n [parentData]=\"groupData()\"\n ></app-condition-item>\n }\n }\n <div class=\"condition-content-item hide-first\">\n <button nz-button (click)=\"addConditionItem()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6</button>\n <button nz-button (click)=\"addConditionGroup()\"><span nz-icon nzType=\"plus\" nzTheme=\"outline\"></span>\u6DFB\u52A0\u6761\u4EF6\u7EC4</button>\n @if (groupData().conditions.length === 0 && parentData()) {\n <button nz-button nzDanger (click)=\"removeConditionGroup()\"\n ><span nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\u5220\u9664\u6761\u4EF6\u7EC4</button\n >\n }\n </div>\n </div>\n </div>\n}\n", styles: [":host{display:block}:host .condition-group{display:flex;flex-direction:row;align-items:center}:host .condition-group .condition-group-type{position:relative;width:80px;height:fit-content;margin-right:24px}:host .condition-group .condition-group-type:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-type:after{position:absolute;top:16px;right:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}:host .condition-group .no-line:before{content:none!important}:host .condition-group .condition-group-content{position:relative;display:flex;flex-direction:column;gap:8px}:host .condition-group .condition-group-content:before{position:absolute;top:16px;left:-12px;width:0;height:calc(100% - 32px);border-left:1px solid #9a9a9a;content:\"\"}:host .condition-group .condition-group-content .hide-first{position:relative}:host .condition-group .condition-group-content .hide-first:first-child:after{position:absolute;top:16px;left:-12px;width:0;height:calc(50% - 16px);border-left:1px solid #fff;content:\"\"}:host .condition-group .condition-group-content .condition-content-item{position:relative;height:32px;line-height:32px}:host .condition-group .condition-group-content .condition-content-item:before{position:absolute;top:16px;left:-12px;width:12px;height:0;border-top:1px solid #9a9a9a;content:\"\"}\n"] }]
57
57
  }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZ3JvdXAvY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZ3JvdXAvY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFrQixrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7QUFTcEYsTUFBTSxPQUFPLHVCQUF1QjtJQVBwQztRQVFFLGNBQVMsR0FBRyxLQUFLLENBQWlCO1lBQ2hDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHO1lBQ2pDLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBd0IsSUFBSSxDQUFDLENBQUM7UUFDaEQsYUFBUSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUV2QixlQUFVLEdBQUcsTUFBTSxFQUFRLENBQUM7S0E0QnRDO0lBMUJDLGdCQUFnQjtRQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMvQixTQUFTLEVBQUUsa0JBQWtCLENBQUMsR0FBRztZQUNqQyxVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLEVBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsS0FBSSxDQUFDO0lBRWYsUUFBUSxLQUFJLENBQUM7K0dBcENGLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhnQkNuQnBDLDRxREFxQ0EsaThDRGxCYSx1QkFBdUIseUlBSnhCLGNBQWMsOGhDQUFFLFdBQVcsK1ZBQUUsc0JBQXNCLGdJQUFFLGNBQWMsK3FCQUFFLGFBQWEsOEJBQUUsWUFBWSw4QkFBRSxZQUFZLDRIQUFFLFlBQVk7OzRGQUkzSCx1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnpCdXR0b25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2J1dHRvbic7XG5pbXBvcnQgeyBOekZvcm1Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2Zvcm0nO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56TW9kYWxNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL21vZGFsJztcbmltcG9ydCB7IE56U2VsZWN0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zZWxlY3QnO1xuXG5pbXBvcnQgeyBDb25kaXRpb25Hcm91cCwgQ29uZGl0aW9uR3JvdXBUeXBlIH0gZnJvbSAnLi4vY29uZGl0aW9uLWVkaXRvci5tb2RlbCc7XG5pbXBvcnQgeyBDb25kaXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZGl0aW9uLWl0ZW0vY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbmRpdGlvbi1ncm91cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOelNlbGVjdE1vZHVsZSwgRm9ybXNNb2R1bGUsIENvbmRpdGlvbkl0ZW1Db21wb25lbnQsIE56QnV0dG9uTW9kdWxlLCBOek1vZGFsTW9kdWxlLCBOekZvcm1Nb2R1bGUsIENvbW1vbk1vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50Lmxlc3MnXG59KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkdyb3VwQ29tcG9uZW50IHtcbiAgZ3JvdXBEYXRhID0gaW5wdXQ8Q29uZGl0aW9uR3JvdXA+KHtcbiAgICBncm91cFR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZS5BTkQsXG4gICAgY29uZGl0aW9uczogW11cbiAgfSk7XG5cbiAgcGFyZW50RGF0YSA9IGlucHV0PENvbmRpdGlvbkdyb3VwIHwgbnVsbD4obnVsbCk7XG4gIHNob3dMaW5lID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgZGF0YUNoYW5nZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGFkZENvbmRpdGlvbkl0ZW0oKSB7XG4gICAgdGhpcy5ncm91cERhdGEoKS5jb25kaXRpb25zLnB1c2goe1xuICAgICAga2V5czogW10sXG4gICAgICBvcGVyYXRvcjogJycsXG4gICAgICB2YWx1ZTogJydcbiAgICB9KTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbkdyb3VwKCkge1xuICAgIHRoaXMuZ3JvdXBEYXRhKCkuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlLkFORCxcbiAgICAgIGNvbmRpdGlvbnM6IFtdXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbkdyb3VwKCkge1xuICAgIGlmICh0aGlzLnBhcmVudERhdGEoKSkge1xuICAgICAgdGhpcy5wYXJlbnREYXRhKCkhLmNvbmRpdGlvbnMgPSB0aGlzLnBhcmVudERhdGEoKSEuY29uZGl0aW9ucy5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSB0aGlzLmdyb3VwRGF0YSgpKTtcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0Rm9ybSgpIHt9XG5cbiAgaGFuZGxlT2soKSB7fVxufVxuIiwiQGlmIChncm91cERhdGEoKSkge1xuICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWdyb3VwXCI+XG4gICAgPG56LXNlbGVjdCBjbGFzcz1cImNvbmRpdGlvbi1ncm91cC10eXBlXCIgW25nQ2xhc3NdPVwieyAnbm8tbGluZSc6ICFzaG93TGluZSgpIH1cIiBbKG5nTW9kZWwpXT1cImdyb3VwRGF0YSgpLmdyb3VwVHlwZVwiPlxuICAgICAgPG56LW9wdGlvbiBuelZhbHVlPVwiQU5EXCIgbnpMYWJlbD1cIuS4lFwiPjwvbnotb3B0aW9uPlxuICAgICAgPG56LW9wdGlvbiBuelZhbHVlPVwiT1JcIiBuekxhYmVsPVwi5oiWXCI+PC9uei1vcHRpb24+XG4gICAgPC9uei1zZWxlY3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWdyb3VwLWNvbnRlbnRcIj5cbiAgICAgIEBmb3IgKGNvbmRpdGlvbiBvZiBncm91cERhdGEoKS5jb25kaXRpb25zOyB0cmFjayBjb25kaXRpb24pIHtcbiAgICAgICAgQGlmICgkYW55KGNvbmRpdGlvbikuZ3JvdXBUeXBlKSB7XG4gICAgICAgICAgPGFwcC1jb25kaXRpb24tZ3JvdXBcbiAgICAgICAgICAgIGNsYXNzPVwiaGlkZS1maXJzdFwiXG4gICAgICAgICAgICBbZ3JvdXBEYXRhXT1cIiRhbnkoY29uZGl0aW9uKVwiXG4gICAgICAgICAgICBbcGFyZW50RGF0YV09XCJncm91cERhdGEoKVwiXG4gICAgICAgICAgICAoZGF0YUNoYW5nZSk9XCJkYXRhQ2hhbmdlLmVtaXQoKVwiXG4gICAgICAgICAgPjwvYXBwLWNvbmRpdGlvbi1ncm91cD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGFwcC1jb25kaXRpb24taXRlbVxuICAgICAgICAgICAgY2xhc3M9XCJjb25kaXRpb24tY29udGVudC1pdGVtIGhpZGUtZmlyc3RcIlxuICAgICAgICAgICAgW2NvbmRpdGlvbkRhdGFdPVwiJGFueShjb25kaXRpb24pXCJcbiAgICAgICAgICAgIFtwYXJlbnREYXRhXT1cImdyb3VwRGF0YSgpXCJcbiAgICAgICAgICAgIChkYXRhQ2hhbmdlKT1cImRhdGFDaGFuZ2UuZW1pdCgpXCJcbiAgICAgICAgICA+PC9hcHAtY29uZGl0aW9uLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tY29udGVudC1pdGVtIGhpZGUtZmlyc3RcIj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gKGNsaWNrKT1cImFkZENvbmRpdGlvbkl0ZW0oKVwiPjxzcGFuIG56LWljb24gbnpUeXBlPVwicGx1c1wiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPua3u+WKoOadoeS7tjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwiYWRkQ29uZGl0aW9uR3JvdXAoKVwiPjxzcGFuIG56LWljb24gbnpUeXBlPVwicGx1c1wiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPua3u+WKoOadoeS7tue7hDwvYnV0dG9uPlxuICAgICAgICBAaWYgKGdyb3VwRGF0YSgpLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwICYmIHBhcmVudERhdGEoKSkge1xuICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56RGFuZ2VyIChjbGljayk9XCJyZW1vdmVDb25kaXRpb25Hcm91cCgpXCJcbiAgICAgICAgICAgID48c3BhbiBuei1pY29uIG56VHlwZT1cImRlbGV0ZVwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPuWIoOmZpOadoeS7tue7hDwvYnV0dG9uXG4gICAgICAgICAgPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZ3JvdXAvY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZ3JvdXAvY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFrQixrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7QUFTckUsTUFBTSxPQUFPLHVCQUF1QjtJQVBwQztRQVFXLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLGNBQVMsR0FBRyxLQUFLLENBQWlCO1lBQ2hDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHO1lBQ2pDLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBd0IsSUFBSSxDQUFDLENBQUM7UUFDaEQsYUFBUSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztLQXlCakM7SUF2QkMsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDL0IsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDL0IsU0FBUyxFQUFFLGtCQUFrQixDQUFDLEdBQUc7WUFDakMsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7K0dBaENVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHVlQ3BCcEMsOGtEQWdDQSxpOENEWmEsdUJBQXVCLGdIQUp4QixjQUFjLDhoQ0FBRSxXQUFXLCtWQUFFLHNCQUFzQix1R0FBRSxjQUFjLCtxQkFBRSxhQUFhLDhCQUFFLFlBQVksOEJBQUUsWUFBWSw0SEFBRSxZQUFZOzs0RkFJM0gsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnpCdXR0b25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2J1dHRvbic7XG5pbXBvcnQgeyBOekZvcm1Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2Zvcm0nO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56TW9kYWxNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL21vZGFsJztcbmltcG9ydCB7IE56U2VsZWN0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zZWxlY3QnO1xuXG5pbXBvcnQgeyBDb25kaXRpb25Hcm91cCwgQ29uZGl0aW9uR3JvdXBUeXBlIH0gZnJvbSAnLi4vY29uZGl0aW9uLWVkaXRvci5tb2RlbCc7XG5pbXBvcnQgeyBDb25kaXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZGl0aW9uLWl0ZW0vY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbmRpdGlvbkVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9jb25kaXRpb24tZWRpdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29uZGl0aW9uLWdyb3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW056U2VsZWN0TW9kdWxlLCBGb3Jtc01vZHVsZSwgQ29uZGl0aW9uSXRlbUNvbXBvbmVudCwgTnpCdXR0b25Nb2R1bGUsIE56TW9kYWxNb2R1bGUsIE56Rm9ybU1vZHVsZSwgQ29tbW9uTW9kdWxlLCBOekljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvbmRpdGlvbi1ncm91cC5jb21wb25lbnQubGVzcydcbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uR3JvdXBDb21wb25lbnQge1xuICByZWFkb25seSBjb25kaXRpb25FZGl0b3JTZXJ2aWNlID0gaW5qZWN0KENvbmRpdGlvbkVkaXRvclNlcnZpY2UpO1xuICBncm91cERhdGEgPSBpbnB1dDxDb25kaXRpb25Hcm91cD4oe1xuICAgIGdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlLkFORCxcbiAgICBjb25kaXRpb25zOiBbXVxuICB9KTtcblxuICBwYXJlbnREYXRhID0gaW5wdXQ8Q29uZGl0aW9uR3JvdXAgfCBudWxsPihudWxsKTtcbiAgc2hvd0xpbmUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICBhZGRDb25kaXRpb25JdGVtKCkge1xuICAgIHRoaXMuZ3JvdXBEYXRhKCkuY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGtleXM6IFtdLFxuICAgICAgb3BlcmF0b3I6ICcnLFxuICAgICAgdmFsdWU6ICcnXG4gICAgfSk7XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmNoYW5nZVN1Yi5uZXh0KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb25Hcm91cCgpIHtcbiAgICB0aGlzLmdyb3VwRGF0YSgpLmNvbmRpdGlvbnMucHVzaCh7XG4gICAgICBncm91cFR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZS5BTkQsXG4gICAgICBjb25kaXRpb25zOiBbXVxuICAgIH0pO1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5jaGFuZ2VTdWIubmV4dCgpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMucGFyZW50RGF0YSgpKSB7XG4gICAgICB0aGlzLnBhcmVudERhdGEoKSEuY29uZGl0aW9ucyA9IHRoaXMucGFyZW50RGF0YSgpIS5jb25kaXRpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHRoaXMuZ3JvdXBEYXRhKCkpO1xuICAgICAgdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmNoYW5nZVN1Yi5uZXh0KCk7XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKGdyb3VwRGF0YSgpKSB7XG4gIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tZ3JvdXBcIj5cbiAgICA8bnotc2VsZWN0IGNsYXNzPVwiY29uZGl0aW9uLWdyb3VwLXR5cGVcIiBbbmdDbGFzc109XCJ7ICduby1saW5lJzogIXNob3dMaW5lKCkgfVwiIFsobmdNb2RlbCldPVwiZ3JvdXBEYXRhKCkuZ3JvdXBUeXBlXCI+XG4gICAgICBAZm9yIChsb2dpY0dhdGUgb2YgY29uZGl0aW9uRWRpdG9yU2VydmljZS5sb2dpY0dhdGVzKCk7IHRyYWNrIGxvZ2ljR2F0ZSkge1xuICAgICAgICA8bnotb3B0aW9uIFtuelZhbHVlXT1cImxvZ2ljR2F0ZS52YWx1ZVwiIFtuekxhYmVsXT1cImxvZ2ljR2F0ZS5sYWJlbFwiPjwvbnotb3B0aW9uPlxuICAgICAgfVxuICAgIDwvbnotc2VsZWN0PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1ncm91cC1jb250ZW50XCI+XG4gICAgICBAZm9yIChjb25kaXRpb24gb2YgZ3JvdXBEYXRhKCkuY29uZGl0aW9uczsgdHJhY2sgY29uZGl0aW9uKSB7XG4gICAgICAgIEBpZiAoJGFueShjb25kaXRpb24pLmdyb3VwVHlwZSkge1xuICAgICAgICAgIDxhcHAtY29uZGl0aW9uLWdyb3VwIGNsYXNzPVwiaGlkZS1maXJzdFwiIFtncm91cERhdGFdPVwiJGFueShjb25kaXRpb24pXCIgW3BhcmVudERhdGFdPVwiZ3JvdXBEYXRhKClcIj48L2FwcC1jb25kaXRpb24tZ3JvdXA+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxhcHAtY29uZGl0aW9uLWl0ZW1cbiAgICAgICAgICAgIGNsYXNzPVwiY29uZGl0aW9uLWNvbnRlbnQtaXRlbSBoaWRlLWZpcnN0XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25EYXRhXT1cIiRhbnkoY29uZGl0aW9uKVwiXG4gICAgICAgICAgICBbcGFyZW50RGF0YV09XCJncm91cERhdGEoKVwiXG4gICAgICAgICAgPjwvYXBwLWNvbmRpdGlvbi1pdGVtPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWNvbnRlbnQtaXRlbSBoaWRlLWZpcnN0XCI+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJhZGRDb25kaXRpb25JdGVtKClcIj48c3BhbiBuei1pY29uIG56VHlwZT1cInBsdXNcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj7mt7vliqDmnaHku7Y8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gKGNsaWNrKT1cImFkZENvbmRpdGlvbkdyb3VwKClcIj48c3BhbiBuei1pY29uIG56VHlwZT1cInBsdXNcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj7mt7vliqDmnaHku7bnu4Q8L2J1dHRvbj5cbiAgICAgICAgQGlmIChncm91cERhdGEoKS5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCAmJiBwYXJlbnREYXRhKCkpIHtcbiAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuekRhbmdlciAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uR3JvdXAoKVwiXG4gICAgICAgICAgICA+PHNwYW4gbnotaWNvbiBuelR5cGU9XCJkZWxldGVcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj7liKDpmaTmnaHku7bnu4Q8L2J1dHRvblxuICAgICAgICAgID5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Component, inject, input, output } from '@angular/core';
1
+ import { Component, inject, input, effect, signal } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
3
  import { NzButtonModule } from 'ng-zorro-antd/button';
4
4
  import { NzIconModule } from 'ng-zorro-antd/icon';
@@ -27,25 +27,32 @@ export class ConditionItemComponent {
27
27
  this.dictOptions = [];
28
28
  this.selectNumbers = [];
29
29
  this.options = [];
30
- this.dataChange = output();
31
- }
32
- ngOnInit() {
33
- this.firstSelectOptionsSub = this.conditionEditorService.firstSelectOptionsSub.subscribe(options => {
34
- this.options[0] = options || [];
30
+ this.optionsSignal = signal([]);
31
+ this.changeIndex = null;
32
+ effect(() => {
33
+ const firstSelectOptions = this.conditionEditorService.firstSelectOptions();
34
+ if (firstSelectOptions !== undefined) {
35
+ this.options[0] = firstSelectOptions || [];
36
+ }
35
37
  });
36
- this.showSelectNumberSub = this.conditionEditorService.showSelectNumberSub.subscribe(showSelectNumber => {
37
- this.selectNumbers = Array.from({ length: showSelectNumber }, (_, i) => i);
38
- for (let i = 0; i < this.selectNumbers.length; i++) {
39
- if (this.conditionData().keys[i]) {
40
- continue;
38
+ effect(() => {
39
+ const showSelectNumber = this.conditionEditorService.showSelectNumber();
40
+ if (showSelectNumber !== undefined) {
41
+ this.selectNumbers = Array.from({ length: showSelectNumber }, (_, i) => i);
42
+ for (let i = 0; i < this.selectNumbers.length; i++) {
43
+ if (this.conditionData().keys[i]) {
44
+ continue;
45
+ }
46
+ this.conditionData().keys[i] = { label: '', value: '' };
41
47
  }
42
- this.conditionData().keys[i] = { label: '', value: '' };
43
48
  }
44
49
  });
45
- }
46
- ngOnDestroy() {
47
- this.firstSelectOptionsSub?.unsubscribe();
48
- this.showSelectNumberSub?.unsubscribe();
50
+ effect(() => {
51
+ const options = this.optionsSignal();
52
+ if (this.changeIndex === null)
53
+ return;
54
+ this.options[this.changeIndex] = options || [];
55
+ });
49
56
  }
50
57
  getIconfontByValue(value, option) {
51
58
  return this.conditionEditorService.getIconFunc?.(option.find(item => item.value === value)?.fieldType || '') || '';
@@ -56,11 +63,12 @@ export class ConditionItemComponent {
56
63
  removeConditionItem() {
57
64
  if (this.parentData()) {
58
65
  this.parentData().conditions = this.parentData().conditions.filter(item => item !== this.conditionData());
59
- this.dataChange.emit();
66
+ this.conditionEditorService.changeSub.next();
60
67
  }
61
68
  }
62
69
  onSelectChange(index, event) {
63
70
  this.conditionData().keys[index].label = this.options[index].find(item => item.value === event)?.label || '';
71
+ this.conditionEditorService.changeSub.next();
64
72
  if (index >= this.selectNumbers.length - 1) {
65
73
  return;
66
74
  }
@@ -73,9 +81,8 @@ export class ConditionItemComponent {
73
81
  this.options[i] = [];
74
82
  }
75
83
  });
76
- this.conditionEditorRequestService.getSelectOptions(values).then(options => {
77
- this.options[index + 1] = options;
78
- });
84
+ this.changeIndex = index + 1;
85
+ this.conditionEditorRequestService.getSelectOptions(values, this.optionsSignal);
79
86
  }
80
87
  onSelectOpenChange(index) {
81
88
  if (this.options[index] && this.options[index].length > 0) {
@@ -89,15 +96,17 @@ export class ConditionItemComponent {
89
96
  }
90
97
  return;
91
98
  }
92
- this.conditionEditorRequestService.getSelectOptions(values).then(options => {
93
- this.options[index] = options;
94
- });
99
+ this.changeIndex = index;
100
+ this.conditionEditorRequestService.getSelectOptions(values, this.optionsSignal);
101
+ }
102
+ onOperatorChange() {
103
+ this.conditionEditorService.changeSub.next();
95
104
  }
96
105
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ConditionItemComponent, isStandalone: true, selector: "app-condition-item", inputs: { conditionData: { classPropertyName: "conditionData", publicName: "conditionData", isSignal: true, isRequired: false, transformFunction: null }, parentData: { classPropertyName: "parentData", publicName: "parentData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataChange: "dataChange" }, ngImport: i0, template: "<div class=\"condition-item\">\n @for (i of selectNumbers; track $index; let currentIndex = $index) {\n <nz-select\n class=\"condition-item-key\"\n [nzNotFoundContent]=\"searchingContent\"\n [nzDisabled]=\"currentIndex > 0 && !conditionData().keys[currentIndex - 1].value\"\n [nzPlaceHolder]=\"conditionData().keys[currentIndex].label || ''\"\n [(ngModel)]=\"conditionData().keys[currentIndex].value\"\n (ngModelChange)=\"onSelectChange(currentIndex, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(currentIndex)\"\n [nzCustomTemplate]=\"defaultTemplate\"\n >\n @for (operator of options[currentIndex] || []; track operator) {\n <nz-option\n [nzValue]=\"operator.value\"\n [nzLabel]=\"operator.label\"\n [nzCustomContent]=\"!!conditionEditorService.getIconFunc && operator.fieldType\"\n >\n <span class=\"tag-select-option\">\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(operator.value, options[currentIndex])\"></span>\n <span>{{ operator.label }}</span>\n </span>\n </nz-option>\n }\n </nz-select>\n <ng-template #defaultTemplate let-selected>\n @if (!!conditionEditorService.getIconFunc && hasIcon(options[currentIndex])) {\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(selected.nzValue, options[currentIndex]) || ''\"></span>\n }\n <span>{{ selected.nzLabel }}</span>\n </ng-template>\n }\n <ng-template #searchingContent>\n <nz-spin nzTip=\"\u52A0\u8F7D\u4E2D\" style=\"margin: auto; height: 100px\"></nz-spin>\n </ng-template>\n <nz-select class=\"condition-item-operator\" [(ngModel)]=\"conditionData().operator\">\n @for (operator of conditionEditorService.operators || []; track operator.value) {\n <nz-option [nzValue]=\"operator.value\" [nzLabel]=\"operator.label\"></nz-option>\n }\n </nz-select>\n <input class=\"condition-item-value\" nz-input [(ngModel)]=\"conditionData().value\" />\n\n <span (click)=\"removeConditionItem()\" class=\"condition-item-delete\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\n</div>\n", styles: [":host ::ng-deep .ant-select-selection-placeholder{color:#000000d9}:host .condition-item{position:relative;display:flex;flex-direction:row;gap:8px}:host .condition-item .condition-item-key{width:150px}:host .condition-item .condition-item-operator{width:120px}:host .condition-item .condition-item-value{width:180px}:host .condition-item .condition-item-delete{cursor:pointer}:host .condition-item .condition-item-delete:hover{color:#ff4d4f}\n"], dependencies: [{ kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i1.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i1.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "ngmodule", type: FormsModule }, { 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.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"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i3.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzSpinModule }, { kind: "component", type: i5.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
106
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ConditionItemComponent, isStandalone: true, selector: "app-condition-item", inputs: { conditionData: { classPropertyName: "conditionData", publicName: "conditionData", isSignal: true, isRequired: false, transformFunction: null }, parentData: { classPropertyName: "parentData", publicName: "parentData", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"condition-item\">\n @for (i of selectNumbers; track $index; let currentIndex = $index) {\n <nz-select\n class=\"condition-item-key\"\n [nzNotFoundContent]=\"searchingContent\"\n [nzDisabled]=\"currentIndex > 0 && !conditionData().keys[currentIndex - 1].value\"\n [nzPlaceHolder]=\"conditionData().keys[currentIndex].label || ''\"\n [(ngModel)]=\"conditionData().keys[currentIndex].value\"\n (ngModelChange)=\"onSelectChange(currentIndex, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(currentIndex)\"\n [nzCustomTemplate]=\"defaultTemplate\"\n >\n @for (operator of options[currentIndex] || []; track operator) {\n <nz-option\n [nzValue]=\"operator.value\"\n [nzLabel]=\"operator.label\"\n [nzCustomContent]=\"!!conditionEditorService.getIconFunc && operator.fieldType\"\n >\n <span class=\"tag-select-option\">\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(operator.value, options[currentIndex])\"></span>\n <span>{{ operator.label }}</span>\n </span>\n </nz-option>\n }\n </nz-select>\n <ng-template #defaultTemplate let-selected>\n @if (!!conditionEditorService.getIconFunc && hasIcon(options[currentIndex])) {\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(selected.nzValue, options[currentIndex]) || ''\"></span>\n }\n <span>{{ selected.nzLabel }}</span>\n </ng-template>\n }\n <ng-template #searchingContent>\n <nz-spin nzTip=\"\u52A0\u8F7D\u4E2D\" style=\"margin: auto; height: 100px\"></nz-spin>\n </ng-template>\n <nz-select class=\"condition-item-operator\" [(ngModel)]=\"conditionData().operator\" (ngModelChange)=\"onOperatorChange()\">\n @for (operator of conditionEditorService.operators() || []; track operator.value) {\n <nz-option [nzValue]=\"operator.value\" [nzLabel]=\"operator.label\"></nz-option>\n }\n </nz-select>\n <input class=\"condition-item-value\" nz-input [(ngModel)]=\"conditionData().value\" (ngModelChange)=\"onOperatorChange()\" />\n\n <span (click)=\"removeConditionItem()\" class=\"condition-item-delete\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\n</div>\n", styles: [":host ::ng-deep .ant-select-selection-placeholder{color:#000000d9}:host .condition-item{position:relative;display:flex;flex-direction:row;gap:8px}:host .condition-item .condition-item-key{width:150px}:host .condition-item .condition-item-operator{width:120px}:host .condition-item .condition-item-value{width:180px}:host .condition-item .condition-item-delete{cursor:pointer;color:#ff4d4f}:host .condition-item .condition-item-delete:hover{color:#ff4d4faa}\n"], dependencies: [{ kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i1.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i1.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "ngmodule", type: FormsModule }, { 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.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"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i3.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzSpinModule }, { kind: "component", type: i5.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
98
107
  }
99
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionItemComponent, decorators: [{
100
109
  type: Component,
101
- args: [{ selector: 'app-condition-item', standalone: true, imports: [NzSelectModule, FormsModule, NzInputModule, NzButtonModule, NzSpinModule, NzIconModule], template: "<div class=\"condition-item\">\n @for (i of selectNumbers; track $index; let currentIndex = $index) {\n <nz-select\n class=\"condition-item-key\"\n [nzNotFoundContent]=\"searchingContent\"\n [nzDisabled]=\"currentIndex > 0 && !conditionData().keys[currentIndex - 1].value\"\n [nzPlaceHolder]=\"conditionData().keys[currentIndex].label || ''\"\n [(ngModel)]=\"conditionData().keys[currentIndex].value\"\n (ngModelChange)=\"onSelectChange(currentIndex, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(currentIndex)\"\n [nzCustomTemplate]=\"defaultTemplate\"\n >\n @for (operator of options[currentIndex] || []; track operator) {\n <nz-option\n [nzValue]=\"operator.value\"\n [nzLabel]=\"operator.label\"\n [nzCustomContent]=\"!!conditionEditorService.getIconFunc && operator.fieldType\"\n >\n <span class=\"tag-select-option\">\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(operator.value, options[currentIndex])\"></span>\n <span>{{ operator.label }}</span>\n </span>\n </nz-option>\n }\n </nz-select>\n <ng-template #defaultTemplate let-selected>\n @if (!!conditionEditorService.getIconFunc && hasIcon(options[currentIndex])) {\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(selected.nzValue, options[currentIndex]) || ''\"></span>\n }\n <span>{{ selected.nzLabel }}</span>\n </ng-template>\n }\n <ng-template #searchingContent>\n <nz-spin nzTip=\"\u52A0\u8F7D\u4E2D\" style=\"margin: auto; height: 100px\"></nz-spin>\n </ng-template>\n <nz-select class=\"condition-item-operator\" [(ngModel)]=\"conditionData().operator\">\n @for (operator of conditionEditorService.operators || []; track operator.value) {\n <nz-option [nzValue]=\"operator.value\" [nzLabel]=\"operator.label\"></nz-option>\n }\n </nz-select>\n <input class=\"condition-item-value\" nz-input [(ngModel)]=\"conditionData().value\" />\n\n <span (click)=\"removeConditionItem()\" class=\"condition-item-delete\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\n</div>\n", styles: [":host ::ng-deep .ant-select-selection-placeholder{color:#000000d9}:host .condition-item{position:relative;display:flex;flex-direction:row;gap:8px}:host .condition-item .condition-item-key{width:150px}:host .condition-item .condition-item-operator{width:120px}:host .condition-item .condition-item-value{width:180px}:host .condition-item .condition-item-delete{cursor:pointer}:host .condition-item .condition-item-delete:hover{color:#ff4d4f}\n"] }]
102
- }] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb25kaXRpb24tZWRpdG9yL2NvbmRpdGlvbi1pdGVtL2NvbmRpdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24taXRlbS9jb25kaXRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdsRCxPQUFPLEVBQWlDLGtDQUFrQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBU3JFLE1BQU0sT0FBTyxzQkFBc0I7SUFQbkM7UUFRVywyQkFBc0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNoRCxrQ0FBNkIsR0FBRyxNQUFNLENBQWdDLGtDQUFrQyxDQUFDLENBQUM7UUFDM0gsa0JBQWEsR0FBRyxLQUFLLENBQVk7WUFDL0IsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLEtB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QUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELFNBQVM7WUFDWCxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F4RlUsc0JBQXNCO21HQUF0QixzQkFBc0Isd1pDcEJuQywwcEVBNENBLG1mRDVCWSxjQUFjLDhoQ0FBRSxXQUFXLDhtQkFBRSxhQUFhLG9PQUFFLGNBQWMsZ1FBQUUsWUFBWSwyTUFBRSxZQUFZOzs0RkFJckYsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOekJ1dHRvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvYnV0dG9uJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBOeklucHV0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pbnB1dCc7XG5pbXBvcnQgeyBOelNlbGVjdE1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc2VsZWN0JztcbmltcG9ydCB7IE56U3Bpbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvc3Bpbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UsIENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4gfSBmcm9tICcuLi9jb25kaXRpb24tZWRpdG9yLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBDb25kaXRpb24sIENvbmRpdGlvbkdyb3VwLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi9jb25kaXRpb24tZWRpdG9yLm1vZGVsJztcbmltcG9ydCB7IENvbmRpdGlvbkVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9jb25kaXRpb24tZWRpdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29uZGl0aW9uLWl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTnpTZWxlY3RNb2R1bGUsIEZvcm1zTW9kdWxlLCBOeklucHV0TW9kdWxlLCBOekJ1dHRvbk1vZHVsZSwgTnpTcGluTW9kdWxlLCBOekljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50Lmxlc3MnXG59KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbkVkaXRvclNlcnZpY2UgPSBpbmplY3QoQ29uZGl0aW9uRWRpdG9yU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UgPSBpbmplY3Q8Q29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2U+KENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4pO1xuICBjb25kaXRpb25EYXRhID0gaW5wdXQ8Q29uZGl0aW9uPih7XG4gICAga2V5czogW10sXG4gICAgb3BlcmF0b3I6ICcnLFxuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xuICBwYXJlbnREYXRhID0gaW5wdXQ8Q29uZGl0aW9uR3JvdXAgfCBudWxsPihudWxsKTtcblxuICBkaWN0T3B0aW9ucyA9IFtdO1xuXG4gIHNlbGVjdE51bWJlcnM6IG51bWJlcltdID0gW107XG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdW10gPSBbXTtcbiAgZmlyc3RTZWxlY3RPcHRpb25zU3ViPzogU3Vic2NyaXB0aW9uO1xuICBzaG93U2VsZWN0TnVtYmVyU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIHJlYWRvbmx5IGRhdGFDaGFuZ2UgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpcnN0U2VsZWN0T3B0aW9uc1N1YiA9IHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5maXJzdFNlbGVjdE9wdGlvbnNTdWIuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zWzBdID0gb3B0aW9ucyB8fCBbXTtcbiAgICB9KTtcbiAgICB0aGlzLnNob3dTZWxlY3ROdW1iZXJTdWIgPSB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2Uuc2hvd1NlbGVjdE51bWJlclN1Yi5zdWJzY3JpYmUoc2hvd1NlbGVjdE51bWJlciA9PiB7XG4gICAgICB0aGlzLnNlbGVjdE51bWJlcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBzaG93U2VsZWN0TnVtYmVyIH0sIChfLCBpKSA9PiBpKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3ROdW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2ldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25kaXRpb25EYXRhKCkua2V5c1tpXSA9IHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZmlyc3RTZWxlY3RPcHRpb25zU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2hvd1NlbGVjdE51bWJlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldEljb25mb250QnlWYWx1ZSh2YWx1ZTogc3RyaW5nLCBvcHRpb246IFNlbGVjdE9wdGlvbltdKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5nZXRJY29uRnVuYz8uKG9wdGlvbi5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gdmFsdWUpPy5maWVsZFR5cGUgfHwgJycpIHx8ICcnO1xuICB9XG5cbiAgaGFzSWNvbihvcHRpb246IFNlbGVjdE9wdGlvbltdKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZFR5cGUpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uSXRlbSgpIHtcbiAgICBpZiAodGhpcy5wYXJlbnREYXRhKCkpIHtcbiAgICAgIHRoaXMucGFyZW50RGF0YSgpIS5jb25kaXRpb25zID0gdGhpcy5wYXJlbnREYXRhKCkhLmNvbmRpdGlvbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdGhpcy5jb25kaXRpb25EYXRhKCkpO1xuICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvblNlbGVjdENoYW5nZShpbmRleDogbnVtYmVyLCBldmVudDogYW55KSB7XG4gICAgdGhpcy5jb25kaXRpb25EYXRhKCkua2V5c1tpbmRleF0ubGFiZWwgPSB0aGlzLm9wdGlvbnNbaW5kZXhdLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBldmVudCk/LmxhYmVsIHx8ICcnO1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnNlbGVjdE51bWJlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmNvbmRpdGlvbkRhdGEoKVxuICAgICAgLmtleXMuc2xpY2UoMCwgaW5kZXggKyAxKVxuICAgICAgLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgIHRoaXMuY29uZGl0aW9uRGF0YSgpLmtleXMuZm9yRWFjaCgoXywgaSkgPT4ge1xuICAgICAgaWYgKGkgPiBpbmRleCkge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2ldID0geyBsYWJlbDogJycsIHZhbHVlOiAnJyB9O1xuICAgICAgICB0aGlzLm9wdGlvbnNbaV0gPSBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlLmdldFNlbGVjdE9wdGlvbnModmFsdWVzKS50aGVuKG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zW2luZGV4ICsgMV0gPSBvcHRpb25zO1xuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RPcGVuQ2hhbmdlKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zW2luZGV4XSAmJiB0aGlzLm9wdGlvbnNbaW5kZXhdLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2ldKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuY29uZGl0aW9uRGF0YSgpLmtleXNbaV0udmFsdWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZS5nZXRTZWxlY3RPcHRpb25zKHZhbHVlcykudGhlbihvcHRpb25zID0+IHtcbiAgICAgIHRoaXMub3B0aW9uc1tpbmRleF0gPSBvcHRpb25zO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWl0ZW1cIj5cbiAgQGZvciAoaSBvZiBzZWxlY3ROdW1iZXJzOyB0cmFjayAkaW5kZXg7IGxldCBjdXJyZW50SW5kZXggPSAkaW5kZXgpIHtcbiAgICA8bnotc2VsZWN0XG4gICAgICBjbGFzcz1cImNvbmRpdGlvbi1pdGVtLWtleVwiXG4gICAgICBbbnpOb3RGb3VuZENvbnRlbnRdPVwic2VhcmNoaW5nQ29udGVudFwiXG4gICAgICBbbnpEaXNhYmxlZF09XCJjdXJyZW50SW5kZXggPiAwICYmICFjb25kaXRpb25EYXRhKCkua2V5c1tjdXJyZW50SW5kZXggLSAxXS52YWx1ZVwiXG4gICAgICBbbnpQbGFjZUhvbGRlcl09XCJjb25kaXRpb25EYXRhKCkua2V5c1tjdXJyZW50SW5kZXhdLmxhYmVsIHx8ICcnXCJcbiAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uRGF0YSgpLmtleXNbY3VycmVudEluZGV4XS52YWx1ZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdENoYW5nZShjdXJyZW50SW5kZXgsICRldmVudClcIlxuICAgICAgKG56T3BlbkNoYW5nZSk9XCJvblNlbGVjdE9wZW5DaGFuZ2UoY3VycmVudEluZGV4KVwiXG4gICAgICBbbnpDdXN0b21UZW1wbGF0ZV09XCJkZWZhdWx0VGVtcGxhdGVcIlxuICAgID5cbiAgICAgIEBmb3IgKG9wZXJhdG9yIG9mIG9wdGlvbnNbY3VycmVudEluZGV4XSB8fCBbXTsgdHJhY2sgb3BlcmF0b3IpIHtcbiAgICAgICAgPG56LW9wdGlvblxuICAgICAgICAgIFtuelZhbHVlXT1cIm9wZXJhdG9yLnZhbHVlXCJcbiAgICAgICAgICBbbnpMYWJlbF09XCJvcGVyYXRvci5sYWJlbFwiXG4gICAgICAgICAgW256Q3VzdG9tQ29udGVudF09XCIhIWNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZ2V0SWNvbkZ1bmMgJiYgb3BlcmF0b3IuZmllbGRUeXBlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnLXNlbGVjdC1vcHRpb25cIj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHhcIiBuei1pY29uIFtuekljb25mb250XT1cImdldEljb25mb250QnlWYWx1ZShvcGVyYXRvci52YWx1ZSwgb3B0aW9uc1tjdXJyZW50SW5kZXhdKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IG9wZXJhdG9yLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uei1vcHRpb24+XG4gICAgICB9XG4gICAgPC9uei1zZWxlY3Q+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LXNlbGVjdGVkPlxuICAgICAgQGlmICghIWNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZ2V0SWNvbkZ1bmMgJiYgaGFzSWNvbihvcHRpb25zW2N1cnJlbnRJbmRleF0pKSB7XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA0cHhcIiBuei1pY29uIFtuekljb25mb250XT1cImdldEljb25mb250QnlWYWx1ZShzZWxlY3RlZC5uelZhbHVlLCBvcHRpb25zW2N1cnJlbnRJbmRleF0pIHx8ICcnXCI+PC9zcGFuPlxuICAgICAgfVxuICAgICAgPHNwYW4+e3sgc2VsZWN0ZWQubnpMYWJlbCB9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICB9XG4gIDxuZy10ZW1wbGF0ZSAjc2VhcmNoaW5nQ29udGVudD5cbiAgICA8bnotc3BpbiBuelRpcD1cIuWKoOi9veS4rVwiIHN0eWxlPVwibWFyZ2luOiBhdXRvOyBoZWlnaHQ6IDEwMHB4XCI+PC9uei1zcGluPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bnotc2VsZWN0IGNsYXNzPVwiY29uZGl0aW9uLWl0ZW0tb3BlcmF0b3JcIiBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbkRhdGEoKS5vcGVyYXRvclwiPlxuICAgIEBmb3IgKG9wZXJhdG9yIG9mIGNvbmRpdGlvbkVkaXRvclNlcnZpY2Uub3BlcmF0b3JzIHx8IFtdOyB0cmFjayBvcGVyYXRvci52YWx1ZSkge1xuICAgICAgPG56LW9wdGlvbiBbbnpWYWx1ZV09XCJvcGVyYXRvci52YWx1ZVwiIFtuekxhYmVsXT1cIm9wZXJhdG9yLmxhYmVsXCI+PC9uei1vcHRpb24+XG4gICAgfVxuICA8L256LXNlbGVjdD5cbiAgPGlucHV0IGNsYXNzPVwiY29uZGl0aW9uLWl0ZW0tdmFsdWVcIiBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbkRhdGEoKS52YWx1ZVwiIC8+XG5cbiAgPHNwYW4gKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbkl0ZW0oKVwiIGNsYXNzPVwiY29uZGl0aW9uLWl0ZW0tZGVsZXRlXCIgbnotaWNvbiBuelR5cGU9XCJkZWxldGVcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbjwvZGl2PlxuIl19
110
+ args: [{ selector: 'app-condition-item', standalone: true, imports: [NzSelectModule, FormsModule, NzInputModule, NzButtonModule, NzSpinModule, NzIconModule], template: "<div class=\"condition-item\">\n @for (i of selectNumbers; track $index; let currentIndex = $index) {\n <nz-select\n class=\"condition-item-key\"\n [nzNotFoundContent]=\"searchingContent\"\n [nzDisabled]=\"currentIndex > 0 && !conditionData().keys[currentIndex - 1].value\"\n [nzPlaceHolder]=\"conditionData().keys[currentIndex].label || ''\"\n [(ngModel)]=\"conditionData().keys[currentIndex].value\"\n (ngModelChange)=\"onSelectChange(currentIndex, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(currentIndex)\"\n [nzCustomTemplate]=\"defaultTemplate\"\n >\n @for (operator of options[currentIndex] || []; track operator) {\n <nz-option\n [nzValue]=\"operator.value\"\n [nzLabel]=\"operator.label\"\n [nzCustomContent]=\"!!conditionEditorService.getIconFunc && operator.fieldType\"\n >\n <span class=\"tag-select-option\">\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(operator.value, options[currentIndex])\"></span>\n <span>{{ operator.label }}</span>\n </span>\n </nz-option>\n }\n </nz-select>\n <ng-template #defaultTemplate let-selected>\n @if (!!conditionEditorService.getIconFunc && hasIcon(options[currentIndex])) {\n <span style=\"margin-right: 4px\" nz-icon [nzIconfont]=\"getIconfontByValue(selected.nzValue, options[currentIndex]) || ''\"></span>\n }\n <span>{{ selected.nzLabel }}</span>\n </ng-template>\n }\n <ng-template #searchingContent>\n <nz-spin nzTip=\"\u52A0\u8F7D\u4E2D\" style=\"margin: auto; height: 100px\"></nz-spin>\n </ng-template>\n <nz-select class=\"condition-item-operator\" [(ngModel)]=\"conditionData().operator\" (ngModelChange)=\"onOperatorChange()\">\n @for (operator of conditionEditorService.operators() || []; track operator.value) {\n <nz-option [nzValue]=\"operator.value\" [nzLabel]=\"operator.label\"></nz-option>\n }\n </nz-select>\n <input class=\"condition-item-value\" nz-input [(ngModel)]=\"conditionData().value\" (ngModelChange)=\"onOperatorChange()\" />\n\n <span (click)=\"removeConditionItem()\" class=\"condition-item-delete\" nz-icon nzType=\"delete\" nzTheme=\"outline\"></span>\n</div>\n", styles: [":host ::ng-deep .ant-select-selection-placeholder{color:#000000d9}:host .condition-item{position:relative;display:flex;flex-direction:row;gap:8px}:host .condition-item .condition-item-key{width:150px}:host .condition-item .condition-item-operator{width:120px}:host .condition-item .condition-item-value{width:180px}:host .condition-item .condition-item-delete{cursor:pointer;color:#ff4d4f}:host .condition-item .condition-item-delete:hover{color:#ff4d4faa}\n"] }]
111
+ }], ctorParameters: () => [] });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb25kaXRpb24tZWRpdG9yL2NvbmRpdGlvbi1pdGVtL2NvbmRpdGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24taXRlbS9jb25kaXRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQTZCLE1BQU0sRUFBRSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE9BQU8sRUFBaUMsa0NBQWtDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7QUFTckUsTUFBTSxPQUFPLHNCQUFzQjtJQW1CakM7UUFsQlMsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEQsa0NBQTZCLEdBQUcsTUFBTSxDQUFnQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzNILGtCQUFhLEdBQUcsS0FBSyxDQUFZO1lBQy9CLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFF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QUNsQixJQUFJLFdBQ1AsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBPbkluaXQsIE9uRGVzdHJveSwgZWZmZWN0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE56QnV0dG9uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9idXR0b24nO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IE56SW5wdXRNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2lucHV0JztcbmltcG9ydCB7IE56U2VsZWN0TW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zZWxlY3QnO1xuaW1wb3J0IHsgTnpTcGluTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9zcGluJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZSwgQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2VUb2tlbiB9IGZyb20gJy4uL2NvbmRpdGlvbi1lZGl0b3ItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmRpdGlvbiwgQ29uZGl0aW9uR3JvdXAsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL2NvbmRpdGlvbi1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL2NvbmRpdGlvbi1lZGl0b3Iuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb25kaXRpb24taXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOelNlbGVjdE1vZHVsZSwgRm9ybXNNb2R1bGUsIE56SW5wdXRNb2R1bGUsIE56QnV0dG9uTW9kdWxlLCBOelNwaW5Nb2R1bGUsIE56SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25kaXRpb24taXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb25kaXRpb24taXRlbS5jb21wb25lbnQubGVzcydcbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uSXRlbUNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbkVkaXRvclNlcnZpY2UgPSBpbmplY3QoQ29uZGl0aW9uRWRpdG9yU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UgPSBpbmplY3Q8Q29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2U+KENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4pO1xuICBjb25kaXRpb25EYXRhID0gaW5wdXQ8Q29uZGl0aW9uPih7XG4gICAga2V5czogW10sXG4gICAgb3BlcmF0b3I6ICcnLFxuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xuICBwYXJlbnREYXRhID0gaW5wdXQ8Q29uZGl0aW9uR3JvdXAgfCBudWxsPihudWxsKTtcblxuICBkaWN0T3B0aW9ucyA9IFtdO1xuXG4gIHNlbGVjdE51bWJlcnM6IG51bWJlcltdID0gW107XG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdW10gPSBbXTtcblxuICBvcHRpb25zU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxTZWxlY3RPcHRpb25bXT4gPSBzaWduYWwoW10pO1xuXG4gIGNoYW5nZUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3RTZWxlY3RPcHRpb25zID0gdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmZpcnN0U2VsZWN0T3B0aW9ucygpO1xuICAgICAgaWYgKGZpcnN0U2VsZWN0T3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc1swXSA9IGZpcnN0U2VsZWN0T3B0aW9ucyB8fCBbXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzaG93U2VsZWN0TnVtYmVyID0gdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLnNob3dTZWxlY3ROdW1iZXIoKTtcbiAgICAgIGlmIChzaG93U2VsZWN0TnVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3ROdW1iZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogc2hvd1NlbGVjdE51bWJlciB9LCAoXywgaSkgPT4gaSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3ROdW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uRGF0YSgpLmtleXNbaV0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2ldID0geyBsYWJlbDogJycsIHZhbHVlOiAnJyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1NpZ25hbCgpO1xuICAgICAgaWYgKHRoaXMuY2hhbmdlSW5kZXggPT09IG51bGwpIHJldHVybjtcbiAgICAgIHRoaXMub3B0aW9uc1t0aGlzLmNoYW5nZUluZGV4XSA9IG9wdGlvbnMgfHwgW107XG4gICAgfSk7XG4gIH1cblxuICBnZXRJY29uZm9udEJ5VmFsdWUodmFsdWU6IHN0cmluZywgb3B0aW9uOiBTZWxlY3RPcHRpb25bXSkge1xuICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZ2V0SWNvbkZ1bmM/LihvcHRpb24uZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8uZmllbGRUeXBlIHx8ICcnKSB8fCAnJztcbiAgfVxuXG4gIGhhc0ljb24ob3B0aW9uOiBTZWxlY3RPcHRpb25bXSkge1xuICAgIHJldHVybiBvcHRpb24uc29tZShpdGVtID0+IGl0ZW0uZmllbGRUeXBlKTtcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbkl0ZW0oKSB7XG4gICAgaWYgKHRoaXMucGFyZW50RGF0YSgpKSB7XG4gICAgICB0aGlzLnBhcmVudERhdGEoKSEuY29uZGl0aW9ucyA9IHRoaXMucGFyZW50RGF0YSgpIS5jb25kaXRpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHRoaXMuY29uZGl0aW9uRGF0YSgpKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5jaGFuZ2VTdWIubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0Q2hhbmdlKGluZGV4OiBudW1iZXIsIGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2luZGV4XS5sYWJlbCA9IHRoaXMub3B0aW9uc1tpbmRleF0uZmluZChpdGVtID0+IGl0ZW0udmFsdWUgPT09IGV2ZW50KT8ubGFiZWwgfHwgJyc7XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmNoYW5nZVN1Yi5uZXh0KCk7XG4gICAgaWYgKGluZGV4ID49IHRoaXMuc2VsZWN0TnVtYmVycy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuY29uZGl0aW9uRGF0YSgpXG4gICAgICAua2V5cy5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgdGhpcy5jb25kaXRpb25EYXRhKCkua2V5cy5mb3JFYWNoKChfLCBpKSA9PiB7XG4gICAgICBpZiAoaSA+IGluZGV4KSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uRGF0YSgpLmtleXNbaV0gPSB7IGxhYmVsOiAnJywgdmFsdWU6ICcnIH07XG4gICAgICAgIHRoaXMub3B0aW9uc1tpXSA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlSW5kZXggPSBpbmRleCArIDE7XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZS5nZXRTZWxlY3RPcHRpb25zKHZhbHVlcywgdGhpcy5vcHRpb25zU2lnbmFsKTtcbiAgfVxuXG4gIG9uU2VsZWN0T3BlbkNoYW5nZShpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc1tpbmRleF0gJiYgdGhpcy5vcHRpb25zW2luZGV4XS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb25kaXRpb25EYXRhKCkua2V5c1tpXSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLmNvbmRpdGlvbkRhdGEoKS5rZXlzW2ldLnZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlLmdldFNlbGVjdE9wdGlvbnModmFsdWVzLCB0aGlzLm9wdGlvbnNTaWduYWwpO1xuICB9XG5cbiAgb25PcGVyYXRvckNoYW5nZSgpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2UuY2hhbmdlU3ViLm5leHQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1pdGVtXCI+XG4gIEBmb3IgKGkgb2Ygc2VsZWN0TnVtYmVyczsgdHJhY2sgJGluZGV4OyBsZXQgY3VycmVudEluZGV4ID0gJGluZGV4KSB7XG4gICAgPG56LXNlbGVjdFxuICAgICAgY2xhc3M9XCJjb25kaXRpb24taXRlbS1rZXlcIlxuICAgICAgW256Tm90Rm91bmRDb250ZW50XT1cInNlYXJjaGluZ0NvbnRlbnRcIlxuICAgICAgW256RGlzYWJsZWRdPVwiY3VycmVudEluZGV4ID4gMCAmJiAhY29uZGl0aW9uRGF0YSgpLmtleXNbY3VycmVudEluZGV4IC0gMV0udmFsdWVcIlxuICAgICAgW256UGxhY2VIb2xkZXJdPVwiY29uZGl0aW9uRGF0YSgpLmtleXNbY3VycmVudEluZGV4XS5sYWJlbCB8fCAnJ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbkRhdGEoKS5rZXlzW2N1cnJlbnRJbmRleF0udmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UoY3VycmVudEluZGV4LCAkZXZlbnQpXCJcbiAgICAgIChuek9wZW5DaGFuZ2UpPVwib25TZWxlY3RPcGVuQ2hhbmdlKGN1cnJlbnRJbmRleClcIlxuICAgICAgW256Q3VzdG9tVGVtcGxhdGVdPVwiZGVmYXVsdFRlbXBsYXRlXCJcbiAgICA+XG4gICAgICBAZm9yIChvcGVyYXRvciBvZiBvcHRpb25zW2N1cnJlbnRJbmRleF0gfHwgW107IHRyYWNrIG9wZXJhdG9yKSB7XG4gICAgICAgIDxuei1vcHRpb25cbiAgICAgICAgICBbbnpWYWx1ZV09XCJvcGVyYXRvci52YWx1ZVwiXG4gICAgICAgICAgW256TGFiZWxdPVwib3BlcmF0b3IubGFiZWxcIlxuICAgICAgICAgIFtuekN1c3RvbUNvbnRlbnRdPVwiISFjb25kaXRpb25FZGl0b3JTZXJ2aWNlLmdldEljb25GdW5jICYmIG9wZXJhdG9yLmZpZWxkVHlwZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZy1zZWxlY3Qtb3B0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNHB4XCIgbnotaWNvbiBbbnpJY29uZm9udF09XCJnZXRJY29uZm9udEJ5VmFsdWUob3BlcmF0b3IudmFsdWUsIG9wdGlvbnNbY3VycmVudEluZGV4XSlcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBvcGVyYXRvci5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbnotb3B0aW9uPlxuICAgICAgfVxuICAgIDwvbnotc2VsZWN0PlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1zZWxlY3RlZD5cbiAgICAgIEBpZiAoISFjb25kaXRpb25FZGl0b3JTZXJ2aWNlLmdldEljb25GdW5jICYmIGhhc0ljb24ob3B0aW9uc1tjdXJyZW50SW5kZXhdKSkge1xuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNHB4XCIgbnotaWNvbiBbbnpJY29uZm9udF09XCJnZXRJY29uZm9udEJ5VmFsdWUoc2VsZWN0ZWQubnpWYWx1ZSwgb3B0aW9uc1tjdXJyZW50SW5kZXhdKSB8fCAnJ1wiPjwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIDxzcGFuPnt7IHNlbGVjdGVkLm56TGFiZWwgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgfVxuICA8bmctdGVtcGxhdGUgI3NlYXJjaGluZ0NvbnRlbnQ+XG4gICAgPG56LXNwaW4gbnpUaXA9XCLliqDovb3kuK1cIiBzdHlsZT1cIm1hcmdpbjogYXV0bzsgaGVpZ2h0OiAxMDBweFwiPjwvbnotc3Bpbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG56LXNlbGVjdCBjbGFzcz1cImNvbmRpdGlvbi1pdGVtLW9wZXJhdG9yXCIgWyhuZ01vZGVsKV09XCJjb25kaXRpb25EYXRhKCkub3BlcmF0b3JcIiAobmdNb2RlbENoYW5nZSk9XCJvbk9wZXJhdG9yQ2hhbmdlKClcIj5cbiAgICBAZm9yIChvcGVyYXRvciBvZiBjb25kaXRpb25FZGl0b3JTZXJ2aWNlLm9wZXJhdG9ycygpIHx8IFtdOyB0cmFjayBvcGVyYXRvci52YWx1ZSkge1xuICAgICAgPG56LW9wdGlvbiBbbnpWYWx1ZV09XCJvcGVyYXRvci52YWx1ZVwiIFtuekxhYmVsXT1cIm9wZXJhdG9yLmxhYmVsXCI+PC9uei1vcHRpb24+XG4gICAgfVxuICA8L256LXNlbGVjdD5cbiAgPGlucHV0IGNsYXNzPVwiY29uZGl0aW9uLWl0ZW0tdmFsdWVcIiBuei1pbnB1dCBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbkRhdGEoKS52YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uT3BlcmF0b3JDaGFuZ2UoKVwiIC8+XG5cbiAgPHNwYW4gKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbkl0ZW0oKVwiIGNsYXNzPVwiY29uZGl0aW9uLWl0ZW0tZGVsZXRlXCIgbnotaWNvbiBuelR5cGU9XCJkZWxldGVcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbjwvZGl2PlxuIl19