@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,21 +1,78 @@
1
- import { InjectionToken } from '@angular/core';
1
+ import { InjectionToken, WritableSignal } from '@angular/core';
2
2
  import { SelectOption } from './condition-editor.model';
3
3
  export declare const ConditionEditorRequestServiceToken: InjectionToken<ConditionEditorRequestService>;
4
4
  /**
5
5
  * 条件编辑器请求服务,用于获取选择框选项和操作符选项
6
6
  * 实现类需要根据前n个选择框的值来动态获取下一个选择框的选项。以及获取操作符选项。
7
+ * 需要实现getSelectOptions和getOperatorOptions方法
8
+ * 如果想要替换逻辑门的选项,需要重写getLogicGatesOptions方法
7
9
  */
8
10
  export declare abstract class ConditionEditorRequestService {
9
11
  constructor();
10
12
  /**
11
13
  * 获取选择框选项
12
- * @param previousValue 前n个选择框的值
13
- * @returns 选择框选项数组
14
+ * 实现类需要根据前n个选择框的值来动态获取下一个选择框的选项
15
+ * 例如:
16
+ * ```typescript
17
+ * getSelectOptions(previousValue: string[], writeSignal: WritableSignal<SelectOption[]>) {
18
+ * if (previousValue.length === 0) {
19
+ * writeSignal.set([
20
+ * { label: '用户', value: 'user' },
21
+ * { label: '订单', value: 'order' }
22
+ * ]);
23
+ * } else if (previousValue[0] === 'user') {
24
+ * writeSignal.set([
25
+ * { label: '用户名', value: 'username' },
26
+ * { label: '邮箱', value: 'email' }
27
+ * ]);
28
+ * } else if (previousValue[0] === 'order') {
29
+ * writeSignal.set([
30
+ * { label: '订单号', value: 'orderNo' },
31
+ * { label: '金额', value: 'amount' }
32
+ * ]);
33
+ * }
34
+ * }
35
+ * ```
36
+ *
37
+ * @param previousValue 前n个选择框的值,用于动态获取下一个选择框的选项
38
+ * @param writeSignal 用于写入选择框选项的信号量,用于在获取到选项后更新选择框的选项列表
14
39
  */
15
- abstract getSelectOptions(previousValue: string[]): Promise<SelectOption[]>;
40
+ abstract getSelectOptions(previousValue: string[], writeSignal: WritableSignal<SelectOption[]>): void;
16
41
  /**
17
42
  * 获取操作符选项
18
- * @returns 操作符选项数组
43
+ * 实现类使用入参信号的set方法设置操作符选项即可
44
+ * 例如:
45
+ * ```typescript
46
+ * getOperatorOptions(writeSignal: WritableSignal<SelectOption[]>) {
47
+ * writeSignal.set([
48
+ * { label: '等于', value: 'eq' },
49
+ * { label: '不等于', value: 'ne' },
50
+ * { label: '大于', value: 'gt' },
51
+ * { label: '小于', value: 'lt' },
52
+ * { label: '包含', value: 'contains' },
53
+ * { label: '不包含', value: 'notContains' }
54
+ * ]);
55
+ * }
56
+ * ```
57
+ *
58
+ * @param writeSignal 用于写入操作符选项的信号量,用于在获取到选项后更新操作符选择框的选项列表
19
59
  */
20
- abstract getOperatorOptions(): Promise<SelectOption[]>;
60
+ abstract getOperatorOptions(writeSignal: WritableSignal<SelectOption[]>): void;
61
+ /**
62
+ * 获取逻辑门选项
63
+ * 重写方法使用入参信号的set方法设置逻辑门选项即可
64
+ * 例如:
65
+ * ```typescript
66
+ * getLogicGatesOptions(writeSignal: WritableSignal<SelectOption[]>) {
67
+ * writeSignal.set([
68
+ * { label: '且', value: 'AND' },
69
+ * { label: '或', value: 'OR' },
70
+ * { label: '非', value: 'NOT' }
71
+ * ]);
72
+ * }
73
+ * ```
74
+ *
75
+ * @param writeSignal 用于写入逻辑门选项的信号量,用于在获取到选项后更新逻辑门选择框的选项列表
76
+ */
77
+ getLogicGatesOptions(writeSignal: WritableSignal<SelectOption[]>): void;
21
78
  }
@@ -4,6 +4,85 @@ import * as i0 from "@angular/core";
4
4
  /**
5
5
  * 条件编辑器组件
6
6
  * 用于编辑条件表达式,支持多个条件组的组合。
7
+ * 例如:
8
+ * ```typescript
9
+ * // 1. 首先实现 ConditionEditorRequestService
10
+ * @Injectable({ providedIn: 'root' })
11
+ * export class MyConditionRequestService extends ConditionEditorRequestService {
12
+ * getSelectOptions(previousValue: string[], writeSignal: WritableSignal<SelectOption[]>) {
13
+ * if (previousValue.length === 0) {
14
+ * writeSignal.set([
15
+ * { label: '用户', value: 'user' },
16
+ * { label: '订单', value: 'order' }
17
+ * ]);
18
+ * } else if (previousValue[0] === 'user') {
19
+ * writeSignal.set([
20
+ * { label: '用户名', value: 'username' },
21
+ * { label: '邮箱', value: 'email' }
22
+ * ]);
23
+ * }
24
+ * }
25
+ *
26
+ * getOperatorOptions(writeSignal: WritableSignal<SelectOption[]>) {
27
+ * writeSignal.set([
28
+ * { label: '等于', value: 'eq' },
29
+ * { label: '不等于', value: 'ne' },
30
+ * { label: '包含', value: 'contains' }
31
+ * ]);
32
+ * }
33
+ * }
34
+ *
35
+ * // 2. 在模块中提供服务
36
+ * providers: [
37
+ * { provide: ConditionEditorRequestServiceToken, useClass: MyConditionRequestService }
38
+ * ]
39
+ *
40
+ * // 3. 在父组件中使用
41
+ * @Component({
42
+ * template: `
43
+ * <app-condition-editor
44
+ * [conditionData]="conditionData"
45
+ * [showSelectNumber]="2"
46
+ * [getIconFunc]="getIconFunc"
47
+ * (dataChange)="onDataChange($event)">
48
+ * </app-condition-editor>
49
+ * `
50
+ * })
51
+ * export class ParentComponent {
52
+ * conditionData: ConditionGroup = {
53
+ * groupType: ConditionGroupType.AND,
54
+ * conditions: []
55
+ * };
56
+ *
57
+ * getIconFunc = (value: string) => {
58
+ * const iconMap: Record<string, string> = {
59
+ * 'user': 'icon-user',
60
+ * 'order': 'icon-order',
61
+ * 'username': 'icon-username',
62
+ * 'email': 'icon-email'
63
+ * };
64
+ * return iconMap[value] || 'icon-default';
65
+ * };
66
+ *
67
+ * onDataChange(data: ConditionGroup) {
68
+ * console.log('条件数据变化:', data);
69
+ * this.conditionData = data;
70
+ * }
71
+ *
72
+ * // 获取条件数据
73
+ * getConditions() {
74
+ * const editorComponent = this.conditionEditorRef;
75
+ * return editorComponent.getConditionData();
76
+ * }
77
+ *
78
+ * // 重新加载选项
79
+ * reloadOptions() {
80
+ * const editorComponent = this.conditionEditorRef;
81
+ * editorComponent.reloadFirstSelectOptions();
82
+ * editorComponent.reloadOperatorOptions();
83
+ * }
84
+ * }
85
+ * ```
7
86
  */
8
87
  export declare class ConditionEditorComponent implements OnInit {
9
88
  private readonly conditionEditorRequestService;
@@ -17,6 +17,10 @@ export interface Condition {
17
17
  /**
18
18
  * 选择框选项
19
19
  * 用于条件编辑器中的选择框
20
+ * 例如:
21
+ * ```typescript
22
+ * { label: '用户', value: 'user', fieldType: 'user' }
23
+ * ```
20
24
  */
21
25
  export interface SelectOption {
22
26
  label: string;
@@ -1,10 +1,13 @@
1
- import { BehaviorSubject } from 'rxjs';
1
+ import { WritableSignal } from '@angular/core';
2
+ import { Subject } from 'rxjs';
2
3
  import { SelectOption } from './condition-editor.model';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class ConditionEditorService {
5
- operators: SelectOption[];
6
- firstSelectOptionsSub: BehaviorSubject<SelectOption[]>;
7
- showSelectNumberSub: BehaviorSubject<number>;
6
+ operators: WritableSignal<SelectOption[]>;
7
+ firstSelectOptions: WritableSignal<SelectOption[]>;
8
+ showSelectNumber: WritableSignal<number>;
9
+ logicGates: WritableSignal<SelectOption[]>;
10
+ changeSub: Subject<void>;
8
11
  getIconFunc?: (value: string) => string;
9
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ConditionEditorService, never>;
10
13
  static ɵprov: i0.ɵɵInjectableDeclaration<ConditionEditorService>;
@@ -1,15 +1,14 @@
1
1
  import { ConditionGroup } from '../condition-editor.model';
2
+ import { ConditionEditorService } from '../condition-editor.service';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class ConditionGroupComponent {
5
+ readonly conditionEditorService: ConditionEditorService;
4
6
  groupData: import("@angular/core").InputSignal<ConditionGroup>;
5
7
  parentData: import("@angular/core").InputSignal<ConditionGroup | null>;
6
8
  showLine: import("@angular/core").InputSignal<boolean>;
7
- readonly dataChange: import("@angular/core").OutputEmitterRef<void>;
8
9
  addConditionItem(): void;
9
10
  addConditionGroup(): void;
10
11
  removeConditionGroup(): void;
11
- submitForm(): void;
12
- handleOk(): void;
13
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ConditionGroupComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<ConditionGroupComponent, "app-condition-group", never, { "groupData": { "alias": "groupData"; "required": false; "isSignal": true; }; "parentData": { "alias": "parentData"; "required": false; "isSignal": true; }; "showLine": { "alias": "showLine"; "required": false; "isSignal": true; }; }, { "dataChange": "dataChange"; }, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConditionGroupComponent, "app-condition-group", never, { "groupData": { "alias": "groupData"; "required": false; "isSignal": true; }; "parentData": { "alias": "parentData"; "required": false; "isSignal": true; }; "showLine": { "alias": "showLine"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15
14
  }
@@ -1,9 +1,8 @@
1
- import { OnInit, OnDestroy } from '@angular/core';
2
- import { Subscription } from 'rxjs';
1
+ import { WritableSignal } from '@angular/core';
3
2
  import { Condition, ConditionGroup, SelectOption } from '../condition-editor.model';
4
3
  import { ConditionEditorService } from '../condition-editor.service';
5
4
  import * as i0 from "@angular/core";
6
- export declare class ConditionItemComponent implements OnInit, OnDestroy {
5
+ export declare class ConditionItemComponent {
7
6
  readonly conditionEditorService: ConditionEditorService;
8
7
  private readonly conditionEditorRequestService;
9
8
  conditionData: import("@angular/core").InputSignal<Condition>;
@@ -11,16 +10,15 @@ export declare class ConditionItemComponent implements OnInit, OnDestroy {
11
10
  dictOptions: never[];
12
11
  selectNumbers: number[];
13
12
  options: SelectOption[][];
14
- firstSelectOptionsSub?: Subscription;
15
- showSelectNumberSub?: Subscription;
16
- readonly dataChange: import("@angular/core").OutputEmitterRef<void>;
17
- ngOnInit(): void;
18
- ngOnDestroy(): void;
13
+ optionsSignal: WritableSignal<SelectOption[]>;
14
+ changeIndex: number | null;
15
+ constructor();
19
16
  getIconfontByValue(value: string, option: SelectOption[]): string;
20
17
  hasIcon(option: SelectOption[]): boolean;
21
18
  removeConditionItem(): void;
22
19
  onSelectChange(index: number, event: any): void;
23
20
  onSelectOpenChange(index: number): void;
21
+ onOperatorChange(): void;
24
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ConditionItemComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<ConditionItemComponent, "app-condition-item", never, { "conditionData": { "alias": "conditionData"; "required": false; "isSignal": true; }; "parentData": { "alias": "parentData"; "required": false; "isSignal": true; }; }, { "dataChange": "dataChange"; }, never, never, true, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConditionItemComponent, "app-condition-item", never, { "conditionData": { "alias": "conditionData"; "required": false; "isSignal": true; }; "parentData": { "alias": "parentData"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
24
  }
@@ -3,8 +3,38 @@ export const ConditionEditorRequestServiceToken = new InjectionToken('ConditionE
3
3
  /**
4
4
  * 条件编辑器请求服务,用于获取选择框选项和操作符选项
5
5
  * 实现类需要根据前n个选择框的值来动态获取下一个选择框的选项。以及获取操作符选项。
6
+ * 需要实现getSelectOptions和getOperatorOptions方法
7
+ * 如果想要替换逻辑门的选项,需要重写getLogicGatesOptions方法
6
8
  */
7
9
  export class ConditionEditorRequestService {
8
10
  constructor() { }
11
+ /**
12
+ * 获取逻辑门选项
13
+ * 重写方法使用入参信号的set方法设置逻辑门选项即可
14
+ * 例如:
15
+ * ```typescript
16
+ * getLogicGatesOptions(writeSignal: WritableSignal<SelectOption[]>) {
17
+ * writeSignal.set([
18
+ * { label: '且', value: 'AND' },
19
+ * { label: '或', value: 'OR' },
20
+ * { label: '非', value: 'NOT' }
21
+ * ]);
22
+ * }
23
+ * ```
24
+ *
25
+ * @param writeSignal 用于写入逻辑门选项的信号量,用于在获取到选项后更新逻辑门选择框的选项列表
26
+ */
27
+ getLogicGatesOptions(writeSignal) {
28
+ writeSignal.set([
29
+ {
30
+ label: '且',
31
+ value: 'AND'
32
+ },
33
+ {
34
+ label: '或',
35
+ value: 'OR'
36
+ }
37
+ ]);
38
+ }
9
39
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLGNBQWMsQ0FBZ0Msb0NBQW9DLENBQUMsQ0FBQztBQUUxSTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLDZCQUE2QjtJQUNqRCxnQkFBZSxDQUFDO0NBWWpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24tZWRpdG9yLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2U+KCdDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZVRva2VuJyk7XG5cbi8qKlxuICog5p2h5Lu257yW6L6R5Zmo6K+35rGC5pyN5Yqh77yM55So5LqO6I635Y+W6YCJ5oup5qGG6YCJ6aG55ZKM5pON5L2c56ym6YCJ6aG5XG4gKiDlrp7njrDnsbvpnIDopoHmoLnmja7liY1u5Liq6YCJ5oup5qGG55qE5YC85p2l5Yqo5oCB6I635Y+W5LiL5LiA5Liq6YCJ5oup5qGG55qE6YCJ6aG544CC5Lul5Y+K6I635Y+W5pON5L2c56ym6YCJ6aG544CCXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgLyoqXG4gICAqIOiOt+WPlumAieaLqeahhumAiemhuVxuICAgKiBAcGFyYW0gcHJldmlvdXNWYWx1ZSDliY1u5Liq6YCJ5oup5qGG55qE5YC8XG4gICAqIEByZXR1cm5zIOmAieaLqeahhumAiemhueaVsOe7hFxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0U2VsZWN0T3B0aW9ucyhwcmV2aW91c1ZhbHVlOiBzdHJpbmdbXSk6IFByb21pc2U8U2VsZWN0T3B0aW9uW10+O1xuICAvKipcbiAgICog6I635Y+W5pON5L2c56ym6YCJ6aG5XG4gICAqIEByZXR1cm5zIOaTjeS9nOespumAiemhueaVsOe7hFxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0T3BlcmF0b3JPcHRpb25zKCk6IFByb21pc2U8U2VsZWN0T3B0aW9uW10+O1xufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJL0QsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQWdDLG9DQUFvQyxDQUFDLENBQUM7QUFFMUk7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQWdCLDZCQUE2QjtJQUNqRCxnQkFBZSxDQUFDO0lBbURoQjs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxvQkFBb0IsQ0FBQyxXQUEyQztRQUM5RCxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ2Q7Z0JBQ0UsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLEtBQUs7YUFDYjtZQUNEO2dCQUNFLEtBQUssRUFBRSxHQUFHO2dCQUNWLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24tZWRpdG9yLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2U+KCdDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZVRva2VuJyk7XG5cbi8qKlxuICog5p2h5Lu257yW6L6R5Zmo6K+35rGC5pyN5Yqh77yM55So5LqO6I635Y+W6YCJ5oup5qGG6YCJ6aG55ZKM5pON5L2c56ym6YCJ6aG5XG4gKiDlrp7njrDnsbvpnIDopoHmoLnmja7liY1u5Liq6YCJ5oup5qGG55qE5YC85p2l5Yqo5oCB6I635Y+W5LiL5LiA5Liq6YCJ5oup5qGG55qE6YCJ6aG544CC5Lul5Y+K6I635Y+W5pON5L2c56ym6YCJ6aG544CCXG4gKiDpnIDopoHlrp7njrBnZXRTZWxlY3RPcHRpb25z5ZKMZ2V0T3BlcmF0b3JPcHRpb25z5pa55rOVXG4gKiDlpoLmnpzmg7PopoHmm7/mjaLpgLvovpHpl6jnmoTpgInpobnvvIzpnIDopoHph43lhplnZXRMb2dpY0dhdGVzT3B0aW9uc+aWueazlVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIC8qKlxuICAgKiDojrflj5bpgInmi6nmoYbpgInpoblcbiAgICog5a6e546w57G76ZyA6KaB5qC55o2u5YmNbuS4qumAieaLqeahhueahOWAvOadpeWKqOaAgeiOt+WPluS4i+S4gOS4qumAieaLqeahhueahOmAiemhuVxuICAgKiDkvovlpoLvvJpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBnZXRTZWxlY3RPcHRpb25zKHByZXZpb3VzVmFsdWU6IHN0cmluZ1tdLCB3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+KSB7XG4gICAqICAgaWYgKHByZXZpb3VzVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAqICAgICB3cml0ZVNpZ25hbC5zZXQoW1xuICAgKiAgICAgICB7IGxhYmVsOiAn55So5oi3JywgdmFsdWU6ICd1c2VyJyB9LFxuICAgKiAgICAgICB7IGxhYmVsOiAn6K6i5Y2VJywgdmFsdWU6ICdvcmRlcicgfVxuICAgKiAgICAgXSk7XG4gICAqICAgfSBlbHNlIGlmIChwcmV2aW91c1ZhbHVlWzBdID09PSAndXNlcicpIHtcbiAgICogICAgIHdyaXRlU2lnbmFsLnNldChbXG4gICAqICAgICAgIHsgbGFiZWw6ICfnlKjmiLflkI0nLCB2YWx1ZTogJ3VzZXJuYW1lJyB9LFxuICAgKiAgICAgICB7IGxhYmVsOiAn6YKu566xJywgdmFsdWU6ICdlbWFpbCcgfVxuICAgKiAgICAgXSk7XG4gICAqICAgfSBlbHNlIGlmIChwcmV2aW91c1ZhbHVlWzBdID09PSAnb3JkZXInKSB7XG4gICAqICAgICB3cml0ZVNpZ25hbC5zZXQoW1xuICAgKiAgICAgICB7IGxhYmVsOiAn6K6i5Y2V5Y+3JywgdmFsdWU6ICdvcmRlck5vJyB9LFxuICAgKiAgICAgICB7IGxhYmVsOiAn6YeR6aKdJywgdmFsdWU6ICdhbW91bnQnIH1cbiAgICogICAgIF0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHByZXZpb3VzVmFsdWUg5YmNbuS4qumAieaLqeahhueahOWAvO+8jOeUqOS6juWKqOaAgeiOt+WPluS4i+S4gOS4qumAieaLqeahhueahOmAiemhuVxuICAgKiBAcGFyYW0gd3JpdGVTaWduYWwg55So5LqO5YaZ5YWl6YCJ5oup5qGG6YCJ6aG555qE5L+h5Y+36YeP77yM55So5LqO5Zyo6I635Y+W5Yiw6YCJ6aG55ZCO5pu05paw6YCJ5oup5qGG55qE6YCJ6aG55YiX6KGoXG4gICAqL1xuICBhYnN0cmFjdCBnZXRTZWxlY3RPcHRpb25zKHByZXZpb3VzVmFsdWU6IHN0cmluZ1tdLCB3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+KTogdm9pZDtcbiAgLyoqXG4gICAqIOiOt+WPluaTjeS9nOespumAiemhuVxuICAgKiDlrp7njrDnsbvkvb/nlKjlhaXlj4Lkv6Hlj7fnmoRzZXTmlrnms5Xorr7nva7mk43kvZznrKbpgInpobnljbPlj69cbiAgICog5L6L5aaC77yaXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogZ2V0T3BlcmF0b3JPcHRpb25zKHdyaXRlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxTZWxlY3RPcHRpb25bXT4pIHtcbiAgICogICB3cml0ZVNpZ25hbC5zZXQoW1xuICAgKiAgICAgeyBsYWJlbDogJ+etieS6jicsIHZhbHVlOiAnZXEnIH0sXG4gICAqICAgICB7IGxhYmVsOiAn5LiN562J5LqOJywgdmFsdWU6ICduZScgfSxcbiAgICogICAgIHsgbGFiZWw6ICflpKfkuo4nLCB2YWx1ZTogJ2d0JyB9LFxuICAgKiAgICAgeyBsYWJlbDogJ+Wwj+S6jicsIHZhbHVlOiAnbHQnIH0sXG4gICAqICAgICB7IGxhYmVsOiAn5YyF5ZCrJywgdmFsdWU6ICdjb250YWlucycgfSxcbiAgICogICAgIHsgbGFiZWw6ICfkuI3ljIXlkKsnLCB2YWx1ZTogJ25vdENvbnRhaW5zJyB9XG4gICAqICAgXSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB3cml0ZVNpZ25hbCDnlKjkuo7lhpnlhaXmk43kvZznrKbpgInpobnnmoTkv6Hlj7fph4/vvIznlKjkuo7lnKjojrflj5bliLDpgInpobnlkI7mm7TmlrDmk43kvZznrKbpgInmi6nmoYbnmoTpgInpobnliJfooahcbiAgICovXG4gIGFic3RyYWN0IGdldE9wZXJhdG9yT3B0aW9ucyh3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+KTogdm9pZDtcblxuICAvKipcbiAgICog6I635Y+W6YC76L6R6Zeo6YCJ6aG5XG4gICAqIOmHjeWGmeaWueazleS9v+eUqOWFpeWPguS/oeWPt+eahHNldOaWueazleiuvue9rumAu+i+kemXqOmAiemhueWNs+WPr1xuICAgKiDkvovlpoLvvJpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBnZXRMb2dpY0dhdGVzT3B0aW9ucyh3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+KSB7XG4gICAqICAgd3JpdGVTaWduYWwuc2V0KFtcbiAgICogICAgIHsgbGFiZWw6ICfkuJQnLCB2YWx1ZTogJ0FORCcgfSxcbiAgICogICAgIHsgbGFiZWw6ICfmiJYnLCB2YWx1ZTogJ09SJyB9LFxuICAgKiAgICAgeyBsYWJlbDogJ+mdnicsIHZhbHVlOiAnTk9UJyB9XG4gICAqICAgXSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB3cml0ZVNpZ25hbCDnlKjkuo7lhpnlhaXpgLvovpHpl6jpgInpobnnmoTkv6Hlj7fph4/vvIznlKjkuo7lnKjojrflj5bliLDpgInpobnlkI7mm7TmlrDpgLvovpHpl6jpgInmi6nmoYbnmoTpgInpobnliJfooahcbiAgICovXG4gIGdldExvZ2ljR2F0ZXNPcHRpb25zKHdyaXRlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxTZWxlY3RPcHRpb25bXT4pIHtcbiAgICB3cml0ZVNpZ25hbC5zZXQoW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ+S4lCcsXG4gICAgICAgIHZhbHVlOiAnQU5EJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICfmiJYnLFxuICAgICAgICB2YWx1ZTogJ09SJ1xuICAgICAgfVxuICAgIF0pO1xuICB9XG59XG4iXX0=
@@ -7,6 +7,85 @@ import * as i0 from "@angular/core";
7
7
  /**
8
8
  * 条件编辑器组件
9
9
  * 用于编辑条件表达式,支持多个条件组的组合。
10
+ * 例如:
11
+ * ```typescript
12
+ * // 1. 首先实现 ConditionEditorRequestService
13
+ * @Injectable({ providedIn: 'root' })
14
+ * export class MyConditionRequestService extends ConditionEditorRequestService {
15
+ * getSelectOptions(previousValue: string[], writeSignal: WritableSignal<SelectOption[]>) {
16
+ * if (previousValue.length === 0) {
17
+ * writeSignal.set([
18
+ * { label: '用户', value: 'user' },
19
+ * { label: '订单', value: 'order' }
20
+ * ]);
21
+ * } else if (previousValue[0] === 'user') {
22
+ * writeSignal.set([
23
+ * { label: '用户名', value: 'username' },
24
+ * { label: '邮箱', value: 'email' }
25
+ * ]);
26
+ * }
27
+ * }
28
+ *
29
+ * getOperatorOptions(writeSignal: WritableSignal<SelectOption[]>) {
30
+ * writeSignal.set([
31
+ * { label: '等于', value: 'eq' },
32
+ * { label: '不等于', value: 'ne' },
33
+ * { label: '包含', value: 'contains' }
34
+ * ]);
35
+ * }
36
+ * }
37
+ *
38
+ * // 2. 在模块中提供服务
39
+ * providers: [
40
+ * { provide: ConditionEditorRequestServiceToken, useClass: MyConditionRequestService }
41
+ * ]
42
+ *
43
+ * // 3. 在父组件中使用
44
+ * @Component({
45
+ * template: `
46
+ * <app-condition-editor
47
+ * [conditionData]="conditionData"
48
+ * [showSelectNumber]="2"
49
+ * [getIconFunc]="getIconFunc"
50
+ * (dataChange)="onDataChange($event)">
51
+ * </app-condition-editor>
52
+ * `
53
+ * })
54
+ * export class ParentComponent {
55
+ * conditionData: ConditionGroup = {
56
+ * groupType: ConditionGroupType.AND,
57
+ * conditions: []
58
+ * };
59
+ *
60
+ * getIconFunc = (value: string) => {
61
+ * const iconMap: Record<string, string> = {
62
+ * 'user': 'icon-user',
63
+ * 'order': 'icon-order',
64
+ * 'username': 'icon-username',
65
+ * 'email': 'icon-email'
66
+ * };
67
+ * return iconMap[value] || 'icon-default';
68
+ * };
69
+ *
70
+ * onDataChange(data: ConditionGroup) {
71
+ * console.log('条件数据变化:', data);
72
+ * this.conditionData = data;
73
+ * }
74
+ *
75
+ * // 获取条件数据
76
+ * getConditions() {
77
+ * const editorComponent = this.conditionEditorRef;
78
+ * return editorComponent.getConditionData();
79
+ * }
80
+ *
81
+ * // 重新加载选项
82
+ * reloadOptions() {
83
+ * const editorComponent = this.conditionEditorRef;
84
+ * editorComponent.reloadFirstSelectOptions();
85
+ * editorComponent.reloadOperatorOptions();
86
+ * }
87
+ * }
88
+ * ```
10
89
  */
11
90
  export class ConditionEditorComponent {
12
91
  constructor() {
@@ -34,9 +113,9 @@ export class ConditionEditorComponent {
34
113
  effect(() => {
35
114
  const showSelectNumber = this.showSelectNumber();
36
115
  if (showSelectNumber !== undefined) {
37
- this.conditionEditorService.showSelectNumberSub.next(showSelectNumber);
116
+ this.conditionEditorService.showSelectNumber.set(showSelectNumber);
38
117
  }
39
- });
118
+ }, { allowSignalWrites: true });
40
119
  effect(() => {
41
120
  const getIconFunc = this.getIconFunc();
42
121
  if (getIconFunc !== undefined) {
@@ -45,11 +124,11 @@ export class ConditionEditorComponent {
45
124
  });
46
125
  }
47
126
  ngOnInit() {
48
- this.conditionEditorRequestService.getOperatorOptions().then(options => {
49
- this.conditionEditorService.operators = options || [];
50
- });
51
- this.conditionEditorRequestService.getSelectOptions([]).then(options => {
52
- this.conditionEditorService.firstSelectOptionsSub.next(options || []);
127
+ this.conditionEditorRequestService.getOperatorOptions(this.conditionEditorService.operators);
128
+ this.conditionEditorRequestService.getLogicGatesOptions(this.conditionEditorService.logicGates);
129
+ this.conditionEditorRequestService.getSelectOptions([], this.conditionEditorService.firstSelectOptions);
130
+ this.conditionEditorService.changeSub.subscribe(() => {
131
+ this.onDataChange();
53
132
  });
54
133
  }
55
134
  onDataChange() {
@@ -66,23 +145,19 @@ export class ConditionEditorComponent {
66
145
  * 重新加载第一个选择框的选项
67
146
  */
68
147
  reloadFirstSelectOptions() {
69
- this.conditionEditorRequestService.getSelectOptions([]).then(options => {
70
- this.conditionEditorService.firstSelectOptionsSub.next(options || []);
71
- });
148
+ this.conditionEditorRequestService.getSelectOptions([], this.conditionEditorService.firstSelectOptions);
72
149
  }
73
150
  /**
74
151
  * 重新加载操作符选项
75
152
  */
76
153
  reloadOperatorOptions() {
77
- this.conditionEditorRequestService.getOperatorOptions().then(options => {
78
- this.conditionEditorService.operators = options || [];
79
- });
154
+ this.conditionEditorRequestService.getOperatorOptions(this.conditionEditorService.operators);
80
155
  }
81
156
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ConditionEditorComponent, isStandalone: true, selector: "app-condition-editor", inputs: { conditionData: { classPropertyName: "conditionData", publicName: "conditionData", isSignal: true, isRequired: false, transformFunction: null }, showSelectNumber: { classPropertyName: "showSelectNumber", publicName: "showSelectNumber", isSignal: true, isRequired: false, transformFunction: null }, getIconFunc: { classPropertyName: "getIconFunc", publicName: "getIconFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataChange: "dataChange" }, providers: [ConditionEditorService], ngImport: i0, template: "<div class=\"condition-editor\">\n <app-condition-group [showLine]=\"false\" [groupData]=\"conditionData()\" (dataChange)=\"onDataChange()\"></app-condition-group>\n</div>\n", styles: [":host{display:block}:host .condition-editor{padding-bottom:12px}\n"], dependencies: [{ kind: "component", type: ConditionGroupComponent, selector: "app-condition-group", inputs: ["groupData", "parentData", "showLine"], outputs: ["dataChange"] }] }); }
157
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: ConditionEditorComponent, isStandalone: true, selector: "app-condition-editor", inputs: { conditionData: { classPropertyName: "conditionData", publicName: "conditionData", isSignal: true, isRequired: false, transformFunction: null }, showSelectNumber: { classPropertyName: "showSelectNumber", publicName: "showSelectNumber", isSignal: true, isRequired: false, transformFunction: null }, getIconFunc: { classPropertyName: "getIconFunc", publicName: "getIconFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataChange: "dataChange" }, providers: [ConditionEditorService], ngImport: i0, template: "<div class=\"condition-editor\">\n <app-condition-group [showLine]=\"false\" [groupData]=\"conditionData()\"></app-condition-group>\n</div>\n", styles: [":host{display:block}:host .condition-editor{padding-bottom:12px}\n"], dependencies: [{ kind: "component", type: ConditionGroupComponent, selector: "app-condition-group", inputs: ["groupData", "parentData", "showLine"] }] }); }
83
158
  }
84
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionEditorComponent, decorators: [{
85
160
  type: Component,
86
- args: [{ selector: 'app-condition-editor', standalone: true, imports: [ConditionGroupComponent], providers: [ConditionEditorService], template: "<div class=\"condition-editor\">\n <app-condition-group [showLine]=\"false\" [groupData]=\"conditionData()\" (dataChange)=\"onDataChange()\"></app-condition-group>\n</div>\n", styles: [":host{display:block}:host .condition-editor{padding-bottom:12px}\n"] }]
161
+ args: [{ selector: 'app-condition-editor', standalone: true, imports: [ConditionGroupComponent], providers: [ConditionEditorService], template: "<div class=\"condition-editor\">\n <app-condition-group [showLine]=\"false\" [groupData]=\"conditionData()\"></app-condition-group>\n</div>\n", styles: [":host{display:block}:host .condition-editor{padding-bottom:12px}\n"] }]
87
162
  }], ctorParameters: () => [] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFdEcsT0FBTyxFQUFpQyxrQ0FBa0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZILE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFFdEY7OztHQUdHO0FBU0gsTUFBTSxPQUFPLHdCQUF3QjtJQXdCbkM7UUF2QmlCLGtDQUE2QixHQUFHLE1BQU0sQ0FBZ0Msa0NBQWtDLENBQUMsQ0FBQztRQUMxRywyQkFBc0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RTs7V0FFRztRQUNILGtCQUFhLEdBQUcsS0FBSyxDQUFpQjtZQUNwQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsR0FBRztZQUNqQyxVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUMsQ0FBQztRQUNIOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFFbkM7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssRUFBNkIsQ0FBQztRQUNqRDs7V0FFRztRQUNNLGVBQVUsR0FBRyxNQUFNLEVBQWtCLENBQUM7UUFHN0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakQsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLDZCQUE2QixDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksd0JBQXdCO1FBQzdCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDckUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQkFBcUI7UUFDMUIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBN0VVLHdCQUF3QjttR0FBeEIsd0JBQXdCLHlpQkFGeEIsQ0FBQyxzQkFBc0IsQ0FBQywwQkNqQnJDLGdMQUdBLDRIRFdZLHVCQUF1Qjs7NEZBS3RCLHdCQUF3QjtrQkFScEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsdUJBQXVCLENBQUMsYUFHdkIsQ0FBQyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBPbkluaXQsIGVmZmVjdCwgdW50cmFja2VkLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZSwgQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2VUb2tlbiB9IGZyb20gJy4vY29uZGl0aW9uLWVkaXRvci1yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uR3JvdXAsIENvbmRpdGlvbkdyb3VwVHlwZSB9IGZyb20gJy4vY29uZGl0aW9uLWVkaXRvci5tb2RlbCc7XG5pbXBvcnQgeyBDb25kaXRpb25FZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi9jb25kaXRpb24tZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbmRpdGlvbi1ncm91cC9jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50JztcblxuLyoqXG4gKiDmnaHku7bnvJbovpHlmajnu4Tku7ZcbiAqIOeUqOS6jue8lui+keadoeS7tuihqOi+vuW8j++8jOaUr+aMgeWkmuS4quadoeS7tue7hOeahOe7hOWQiOOAglxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29uZGl0aW9uLWVkaXRvcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb25kaXRpb25Hcm91cENvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25kaXRpb24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NvbmRpdGlvbi1lZGl0b3IuY29tcG9uZW50Lmxlc3MnLFxuICBwcm92aWRlcnM6IFtDb25kaXRpb25FZGl0b3JTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlID0gaW5qZWN0PENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlPihDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZVRva2VuKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25kaXRpb25FZGl0b3JTZXJ2aWNlID0gaW5qZWN0KENvbmRpdGlvbkVkaXRvclNlcnZpY2UpO1xuICAvKipcbiAgICog5p2h5Lu25pWw5o2u6L6T5YWl77yM5YyF5ZCr5p2h5Lu257uE57G75Z6L5ZKM5p2h5Lu25pWw57uEXG4gICAqL1xuICBjb25kaXRpb25EYXRhID0gaW5wdXQ8Q29uZGl0aW9uR3JvdXA+KHtcbiAgICBncm91cFR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZS5BTkQsXG4gICAgY29uZGl0aW9uczogW11cbiAgfSk7XG4gIC8qKlxuICAgKiDmmL7npLrpgInmi6nmoYbnmoTmlbDph4/ovpPlhaVcbiAgICovXG4gIHNob3dTZWxlY3ROdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIOWbvuagh+WHveaVsOi+k+WFpe+8jOeUqOS6juagueaNruWAvOi/lOWbnuWbvuagh+Wtl+S9k+WQjVxuICAgKi9cbiAgZ2V0SWNvbkZ1bmMgPSBpbnB1dDwodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nPigpO1xuICAvKipcbiAgICog5p2h5Lu25pWw5o2u5Y+Y5YyW6L6T5Ye677yM5YyF5ZCr5pu05paw5ZCO55qE5p2h5Lu257uEXG4gICAqL1xuICByZWFkb25seSBkYXRhQ2hhbmdlID0gb3V0cHV0PENvbmRpdGlvbkdyb3VwPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzaG93U2VsZWN0TnVtYmVyID0gdGhpcy5zaG93U2VsZWN0TnVtYmVyKCk7XG4gICAgICBpZiAoc2hvd1NlbGVjdE51bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5zaG93U2VsZWN0TnVtYmVyU3ViLm5leHQoc2hvd1NlbGVjdE51bWJlcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0SWNvbkZ1bmMgPSB0aGlzLmdldEljb25GdW5jKCk7XG4gICAgICBpZiAoZ2V0SWNvbkZ1bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZ2V0SWNvbkZ1bmMgPSBnZXRJY29uRnVuYztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0T3BlcmF0b3JPcHRpb25zKCkudGhlbihvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5vcGVyYXRvcnMgPSBvcHRpb25zIHx8IFtdO1xuICAgIH0pO1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0U2VsZWN0T3B0aW9ucyhbXSkudGhlbihvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5maXJzdFNlbGVjdE9wdGlvbnNTdWIubmV4dChvcHRpb25zIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YUNoYW5nZSgpIHtcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLmNvbmRpdGlvbkRhdGEoKSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN5p2h5Lu25pWw5o2uXG4gICAqIEByZXR1cm5zIOW9k+WJjeadoeS7tuaVsOaNrlxuICAgKi9cbiAgcHVibGljIGdldENvbmRpdGlvbkRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmHjeaWsOWKoOi9veesrOS4gOS4qumAieaLqeahhueahOmAiemhuVxuICAgKi9cbiAgcHVibGljIHJlbG9hZEZpcnN0U2VsZWN0T3B0aW9ucygpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlLmdldFNlbGVjdE9wdGlvbnMoW10pLnRoZW4ob3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZmlyc3RTZWxlY3RPcHRpb25zU3ViLm5leHQob3B0aW9ucyB8fCBbXSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog6YeN5paw5Yqg6L295pON5L2c56ym6YCJ6aG5XG4gICAqL1xuICBwdWJsaWMgcmVsb2FkT3BlcmF0b3JPcHRpb25zKCkge1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0T3BlcmF0b3JPcHRpb25zKCkudGhlbihvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5vcGVyYXRvcnMgPSBvcHRpb25zIHx8IFtdO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWVkaXRvclwiPlxuICA8YXBwLWNvbmRpdGlvbi1ncm91cCBbc2hvd0xpbmVdPVwiZmFsc2VcIiBbZ3JvdXBEYXRhXT1cImNvbmRpdGlvbkRhdGEoKVwiIChkYXRhQ2hhbmdlKT1cIm9uRGF0YUNoYW5nZSgpXCI+PC9hcHAtY29uZGl0aW9uLWdyb3VwPlxuPC9kaXY+XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmRpdGlvbi1lZGl0b3IvY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFdEcsT0FBTyxFQUFpQyxrQ0FBa0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZILE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFFdEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRkc7QUFTSCxNQUFNLE9BQU8sd0JBQXdCO0lBd0JuQztRQXZCaUIsa0NBQTZCLEdBQUcsTUFBTSxDQUFnQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzFHLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pFOztXQUVHO1FBQ0gsa0JBQWEsR0FBRyxLQUFLLENBQWlCO1lBQ3BDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHO1lBQ2pDLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO1FBQ0g7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUVuQzs7V0FFRztRQUNILGdCQUFXLEdBQUcsS0FBSyxFQUE2QixDQUFDO1FBQ2pEOztXQUVHO1FBQ00sZUFBVSxHQUFHLE1BQU0sRUFBa0IsQ0FBQztRQUc3QyxNQUFNLENBQ0osR0FBRyxFQUFFO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO1FBRUYsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNJLHdCQUF3QjtRQUM3QixJQUFJLENBQUMsNkJBQTZCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQjtRQUMxQixJQUFJLENBQUMsNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7K0dBNUVVLHdCQUF3QjttR0FBeEIsd0JBQXdCLHlpQkFGeEIsQ0FBQyxzQkFBc0IsQ0FBQywwQkNoR3JDLGdKQUdBLDRIRDBGWSx1QkFBdUI7OzRGQUt0Qix3QkFBd0I7a0JBUnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLHVCQUF1QixDQUFDLGFBR3ZCLENBQUMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgT25Jbml0LCBlZmZlY3QsIHVudHJhY2tlZCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UsIENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlVG9rZW4gfSBmcm9tICcuL2NvbmRpdGlvbi1lZGl0b3ItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmRpdGlvbkdyb3VwLCBDb25kaXRpb25Hcm91cFR5cGUgfSBmcm9tICcuL2NvbmRpdGlvbi1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uRWRpdG9yU2VydmljZSB9IGZyb20gJy4vY29uZGl0aW9uLWVkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmRpdGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb25kaXRpb24tZ3JvdXAvY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudCc7XG5cbi8qKlxuICog5p2h5Lu257yW6L6R5Zmo57uE5Lu2XG4gKiDnlKjkuo7nvJbovpHmnaHku7booajovr7lvI/vvIzmlK/mjIHlpJrkuKrmnaHku7bnu4TnmoTnu4TlkIjjgIJcbiAqIOS+i+Wmgu+8mlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gMS4g6aaW5YWI5a6e546wIENvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlXG4gKiBASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuICogZXhwb3J0IGNsYXNzIE15Q29uZGl0aW9uUmVxdWVzdFNlcnZpY2UgZXh0ZW5kcyBDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZSB7XG4gKiAgIGdldFNlbGVjdE9wdGlvbnMocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIHdyaXRlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxTZWxlY3RPcHRpb25bXT4pIHtcbiAqICAgICBpZiAocHJldmlvdXNWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAqICAgICAgIHdyaXRlU2lnbmFsLnNldChbXG4gKiAgICAgICAgIHsgbGFiZWw6ICfnlKjmiLcnLCB2YWx1ZTogJ3VzZXInIH0sXG4gKiAgICAgICAgIHsgbGFiZWw6ICforqLljZUnLCB2YWx1ZTogJ29yZGVyJyB9XG4gKiAgICAgICBdKTtcbiAqICAgICB9IGVsc2UgaWYgKHByZXZpb3VzVmFsdWVbMF0gPT09ICd1c2VyJykge1xuICogICAgICAgd3JpdGVTaWduYWwuc2V0KFtcbiAqICAgICAgICAgeyBsYWJlbDogJ+eUqOaIt+WQjScsIHZhbHVlOiAndXNlcm5hbWUnIH0sXG4gKiAgICAgICAgIHsgbGFiZWw6ICfpgq7nrrEnLCB2YWx1ZTogJ2VtYWlsJyB9XG4gKiAgICAgICBdKTtcbiAqICAgICB9XG4gKiAgIH1cbiAqXG4gKiAgIGdldE9wZXJhdG9yT3B0aW9ucyh3cml0ZVNpZ25hbDogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+KSB7XG4gKiAgICAgd3JpdGVTaWduYWwuc2V0KFtcbiAqICAgICAgIHsgbGFiZWw6ICfnrYnkuo4nLCB2YWx1ZTogJ2VxJyB9LFxuICogICAgICAgeyBsYWJlbDogJ+S4jeetieS6jicsIHZhbHVlOiAnbmUnIH0sXG4gKiAgICAgICB7IGxhYmVsOiAn5YyF5ZCrJywgdmFsdWU6ICdjb250YWlucycgfVxuICogICAgIF0pO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gMi4g5Zyo5qih5Z2X5Lit5o+Q5L6b5pyN5YqhXG4gKiBwcm92aWRlcnM6IFtcbiAqICAgeyBwcm92aWRlOiBDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZVRva2VuLCB1c2VDbGFzczogTXlDb25kaXRpb25SZXF1ZXN0U2VydmljZSB9XG4gKiBdXG4gKlxuICogLy8gMy4g5Zyo54i257uE5Lu25Lit5L2/55SoXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8YXBwLWNvbmRpdGlvbi1lZGl0b3JcbiAqICAgICAgIFtjb25kaXRpb25EYXRhXT1cImNvbmRpdGlvbkRhdGFcIlxuICogICAgICAgW3Nob3dTZWxlY3ROdW1iZXJdPVwiMlwiXG4gKiAgICAgICBbZ2V0SWNvbkZ1bmNdPVwiZ2V0SWNvbkZ1bmNcIlxuICogICAgICAgKGRhdGFDaGFuZ2UpPVwib25EYXRhQ2hhbmdlKCRldmVudClcIj5cbiAqICAgICA8L2FwcC1jb25kaXRpb24tZWRpdG9yPlxuICogICBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIFBhcmVudENvbXBvbmVudCB7XG4gKiAgIGNvbmRpdGlvbkRhdGE6IENvbmRpdGlvbkdyb3VwID0ge1xuICogICAgIGdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlLkFORCxcbiAqICAgICBjb25kaXRpb25zOiBbXVxuICogICB9O1xuICpcbiAqICAgZ2V0SWNvbkZ1bmMgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICogICAgIGNvbnN0IGljb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gKiAgICAgICAndXNlcic6ICdpY29uLXVzZXInLFxuICogICAgICAgJ29yZGVyJzogJ2ljb24tb3JkZXInLFxuICogICAgICAgJ3VzZXJuYW1lJzogJ2ljb24tdXNlcm5hbWUnLFxuICogICAgICAgJ2VtYWlsJzogJ2ljb24tZW1haWwnXG4gKiAgICAgfTtcbiAqICAgICByZXR1cm4gaWNvbk1hcFt2YWx1ZV0gfHwgJ2ljb24tZGVmYXVsdCc7XG4gKiAgIH07XG4gKlxuICogICBvbkRhdGFDaGFuZ2UoZGF0YTogQ29uZGl0aW9uR3JvdXApIHtcbiAqICAgICBjb25zb2xlLmxvZygn5p2h5Lu25pWw5o2u5Y+Y5YyWOicsIGRhdGEpO1xuICogICAgIHRoaXMuY29uZGl0aW9uRGF0YSA9IGRhdGE7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIOiOt+WPluadoeS7tuaVsOaNrlxuICogICBnZXRDb25kaXRpb25zKCkge1xuICogICAgIGNvbnN0IGVkaXRvckNvbXBvbmVudCA9IHRoaXMuY29uZGl0aW9uRWRpdG9yUmVmO1xuICogICAgIHJldHVybiBlZGl0b3JDb21wb25lbnQuZ2V0Q29uZGl0aW9uRGF0YSgpO1xuICogICB9XG4gKlxuICogICAvLyDph43mlrDliqDovb3pgInpoblcbiAqICAgcmVsb2FkT3B0aW9ucygpIHtcbiAqICAgICBjb25zdCBlZGl0b3JDb21wb25lbnQgPSB0aGlzLmNvbmRpdGlvbkVkaXRvclJlZjtcbiAqICAgICBlZGl0b3JDb21wb25lbnQucmVsb2FkRmlyc3RTZWxlY3RPcHRpb25zKCk7XG4gKiAgICAgZWRpdG9yQ29tcG9uZW50LnJlbG9hZE9wZXJhdG9yT3B0aW9ucygpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbmRpdGlvbi1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29uZGl0aW9uR3JvdXBDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb25kaXRpb24tZWRpdG9yLmNvbXBvbmVudC5sZXNzJyxcbiAgcHJvdmlkZXJzOiBbQ29uZGl0aW9uRWRpdG9yU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZSA9IGluamVjdDxDb25kaXRpb25FZGl0b3JSZXF1ZXN0U2VydmljZT4oQ29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2VUb2tlbik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZGl0aW9uRWRpdG9yU2VydmljZSA9IGluamVjdChDb25kaXRpb25FZGl0b3JTZXJ2aWNlKTtcbiAgLyoqXG4gICAqIOadoeS7tuaVsOaNrui+k+WFpe+8jOWMheWQq+adoeS7tue7hOexu+Wei+WSjOadoeS7tuaVsOe7hFxuICAgKi9cbiAgY29uZGl0aW9uRGF0YSA9IGlucHV0PENvbmRpdGlvbkdyb3VwPih7XG4gICAgZ3JvdXBUeXBlOiBDb25kaXRpb25Hcm91cFR5cGUuQU5ELFxuICAgIGNvbmRpdGlvbnM6IFtdXG4gIH0pO1xuICAvKipcbiAgICog5pi+56S66YCJ5oup5qGG55qE5pWw6YeP6L6T5YWlXG4gICAqL1xuICBzaG93U2VsZWN0TnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiDlm77moIflh73mlbDovpPlhaXvvIznlKjkuo7moLnmja7lgLzov5Tlm57lm77moIflrZfkvZPlkI1cbiAgICovXG4gIGdldEljb25GdW5jID0gaW5wdXQ8KHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZz4oKTtcbiAgLyoqXG4gICAqIOadoeS7tuaVsOaNruWPmOWMlui+k+WHuu+8jOWMheWQq+abtOaWsOWQjueahOadoeS7tue7hFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YUNoYW5nZSA9IG91dHB1dDxDb25kaXRpb25Hcm91cD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNob3dTZWxlY3ROdW1iZXIgPSB0aGlzLnNob3dTZWxlY3ROdW1iZXIoKTtcbiAgICAgICAgaWYgKHNob3dTZWxlY3ROdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5zaG93U2VsZWN0TnVtYmVyLnNldChzaG93U2VsZWN0TnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZ2V0SWNvbkZ1bmMgPSB0aGlzLmdldEljb25GdW5jKCk7XG4gICAgICBpZiAoZ2V0SWNvbkZ1bmMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2UuZ2V0SWNvbkZ1bmMgPSBnZXRJY29uRnVuYztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0T3BlcmF0b3JPcHRpb25zKHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5vcGVyYXRvcnMpO1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0TG9naWNHYXRlc09wdGlvbnModGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmxvZ2ljR2F0ZXMpO1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yUmVxdWVzdFNlcnZpY2UuZ2V0U2VsZWN0T3B0aW9ucyhbXSwgdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmZpcnN0U2VsZWN0T3B0aW9ucyk7XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3JTZXJ2aWNlLmNoYW5nZVN1Yi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YUNoYW5nZSgpIHtcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLmNvbmRpdGlvbkRhdGEoKSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN5p2h5Lu25pWw5o2uXG4gICAqIEByZXR1cm5zIOW9k+WJjeadoeS7tuaVsOaNrlxuICAgKi9cbiAgcHVibGljIGdldENvbmRpdGlvbkRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uRGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmHjeaWsOWKoOi9veesrOS4gOS4qumAieaLqeahhueahOmAiemhuVxuICAgKi9cbiAgcHVibGljIHJlbG9hZEZpcnN0U2VsZWN0T3B0aW9ucygpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlLmdldFNlbGVjdE9wdGlvbnMoW10sIHRoaXMuY29uZGl0aW9uRWRpdG9yU2VydmljZS5maXJzdFNlbGVjdE9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmHjeaWsOWKoOi9veaTjeS9nOespumAiemhuVxuICAgKi9cbiAgcHVibGljIHJlbG9hZE9wZXJhdG9yT3B0aW9ucygpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvclJlcXVlc3RTZXJ2aWNlLmdldE9wZXJhdG9yT3B0aW9ucyh0aGlzLmNvbmRpdGlvbkVkaXRvclNlcnZpY2Uub3BlcmF0b3JzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1lZGl0b3JcIj5cbiAgPGFwcC1jb25kaXRpb24tZ3JvdXAgW3Nob3dMaW5lXT1cImZhbHNlXCIgW2dyb3VwRGF0YV09XCJjb25kaXRpb25EYXRhKClcIj48L2FwcC1jb25kaXRpb24tZ3JvdXA+XG48L2Rpdj5cbiJdfQ==
@@ -3,4 +3,4 @@ export var ConditionGroupType;
3
3
  ConditionGroupType["AND"] = "AND";
4
4
  ConditionGroupType["OR"] = "OR";
5
5
  })(ConditionGroupType || (ConditionGroupType = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZWRpdG9yLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsaUNBQVcsQ0FBQTtJQUNYLCtCQUFTLENBQUE7QUFDWCxDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIENvbmRpdGlvbkdyb3VwVHlwZSB7XG4gIEFORCA9ICdBTkQnLFxuICBPUiA9ICdPUidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Hcm91cCB7XG4gIGdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb24gfCBDb25kaXRpb25Hcm91cD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uIHtcbiAga2V5czogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xufVxuXG4vKipcbiAqIOmAieaLqeahhumAiemhuVxuICog55So5LqO5p2h5Lu257yW6L6R5Zmo5Lit55qE6YCJ5oup5qGGXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZmllbGRUeXBlPzogc3RyaW5nO1xufVxuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZGl0aW9uLWVkaXRvci9jb25kaXRpb24tZWRpdG9yLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIsaUNBQVcsQ0FBQTtJQUNYLCtCQUFTLENBQUE7QUFDWCxDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIENvbmRpdGlvbkdyb3VwVHlwZSB7XG4gIEFORCA9ICdBTkQnLFxuICBPUiA9ICdPUidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25Hcm91cCB7XG4gIGdyb3VwVHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb24gfCBDb25kaXRpb25Hcm91cD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uIHtcbiAga2V5czogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+O1xuICBvcGVyYXRvcjogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xufVxuXG4vKipcbiAqIOmAieaLqeahhumAiemhuVxuICog55So5LqO5p2h5Lu257yW6L6R5Zmo5Lit55qE6YCJ5oup5qGGXG4gKiDkvovlpoLvvJpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHsgbGFiZWw6ICfnlKjmiLcnLCB2YWx1ZTogJ3VzZXInLCBmaWVsZFR5cGU6ICd1c2VyJyB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBmaWVsZFR5cGU/OiBzdHJpbmc7XG59XG4iXX0=
@@ -1,11 +1,13 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
1
+ import { Injectable, signal } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ConditionEditorService {
5
5
  constructor() {
6
- this.operators = [];
7
- this.firstSelectOptionsSub = new BehaviorSubject([]);
8
- this.showSelectNumberSub = new BehaviorSubject(1);
6
+ this.operators = signal([]);
7
+ this.firstSelectOptions = signal([]);
8
+ this.showSelectNumber = signal(1);
9
+ this.logicGates = signal([]);
10
+ this.changeSub = new Subject();
9
11
  }
10
12
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
13
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionEditorService }); }
@@ -13,4 +15,4 @@ export class ConditionEditorService {
13
15
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConditionEditorService, decorators: [{
14
16
  type: Injectable
15
17
  }] });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb25kaXRpb24tZWRpdG9yL2NvbmRpdGlvbi1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFFRSxjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUUvQiwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFFaEUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7S0FHdEQ7K0dBUlksc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24tZWRpdG9yLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkVkaXRvclNlcnZpY2Uge1xuICBvcGVyYXRvcnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgZmlyc3RTZWxlY3RPcHRpb25zU3ViID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RPcHRpb25bXT4oW10pO1xuXG4gIHNob3dTZWxlY3ROdW1iZXJTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XG5cbiAgZ2V0SWNvbkZ1bmM/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWVkaXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb25kaXRpb24tZWRpdG9yL2NvbmRpdGlvbi1lZGl0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFtQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS2hELE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFFRSxjQUFTLEdBQW1DLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2RCx1QkFBa0IsR0FBbUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLHFCQUFnQixHQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsZUFBVSxHQUFtQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEQsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0FHakM7K0dBWlksc0JBQXNCO21IQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9jb25kaXRpb24tZWRpdG9yLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkVkaXRvclNlcnZpY2Uge1xuICBvcGVyYXRvcnM6IFdyaXRhYmxlU2lnbmFsPFNlbGVjdE9wdGlvbltdPiA9IHNpZ25hbChbXSk7XG5cbiAgZmlyc3RTZWxlY3RPcHRpb25zOiBXcml0YWJsZVNpZ25hbDxTZWxlY3RPcHRpb25bXT4gPSBzaWduYWwoW10pO1xuXG4gIHNob3dTZWxlY3ROdW1iZXI6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMSk7XG5cbiAgbG9naWNHYXRlczogV3JpdGFibGVTaWduYWw8U2VsZWN0T3B0aW9uW10+ID0gc2lnbmFsKFtdKTtcblxuICBjaGFuZ2VTdWIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldEljb25GdW5jPzogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcbn1cbiJdfQ==