@gravitee/ui-particles-angular 13.1.5-fix-dev-angular-error-9f37c4f → 13.1.6-gio-el-editor-8b50248

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.
Files changed (45) hide show
  1. package/esm2022/gio-el/gio-el-editor/gio-el-editor-condition-group/gio-el-editor-condition-group.component.mjs +128 -0
  2. package/esm2022/gio-el/gio-el-editor/gio-el-editor-condition-group/gio-el-editor-condition-group.harness.mjs +159 -0
  3. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-boolean/gio-el-editor-type-boolean.component.mjs +58 -0
  4. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-boolean/gio-el-editor-type-boolean.harness.mjs +50 -0
  5. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-date/gio-el-editor-type-date.component.mjs +75 -0
  6. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-date/gio-el-editor-type-date.harness.mjs +48 -0
  7. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-number/gio-el-editor-type-number.component.mjs +71 -0
  8. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-number/gio-el-editor-type-number.harness.mjs +48 -0
  9. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-string/gio-el-editor-type-string.component.mjs +74 -0
  10. package/esm2022/gio-el/gio-el-editor/gio-el-editor-type-string/gio-el-editor-type-string.harness.mjs +48 -0
  11. package/esm2022/gio-el/gio-el-editor/gio-el-editor.component.mjs +128 -0
  12. package/esm2022/gio-el/gio-el-editor/gio-el-editor.harness.mjs +25 -0
  13. package/esm2022/gio-el/gravitee-ui-particles-angular-gio-el.mjs +5 -0
  14. package/esm2022/gio-el/models/Condition.mjs +9 -0
  15. package/esm2022/gio-el/models/ConditionGroup.mjs +7 -0
  16. package/esm2022/gio-el/models/ConditionModel.mjs +2 -0
  17. package/esm2022/gio-el/models/ConditionsModel.mjs +4 -0
  18. package/esm2022/gio-el/models/ExpressionLanguageBuilder.mjs +79 -0
  19. package/esm2022/gio-el/models/Operator.mjs +2 -0
  20. package/esm2022/gio-el/models/public-api.mjs +21 -0
  21. package/esm2022/gio-el/public-api.mjs +19 -0
  22. package/fesm2022/gravitee-ui-particles-angular-gio-el.mjs +957 -0
  23. package/fesm2022/gravitee-ui-particles-angular-gio-el.mjs.map +1 -0
  24. package/gio-el/gio-el-editor/gio-el-editor-condition-group/gio-el-editor-condition-group.component.d.ts +25 -0
  25. package/gio-el/gio-el-editor/gio-el-editor-condition-group/gio-el-editor-condition-group.harness.d.ts +32 -0
  26. package/gio-el/gio-el-editor/gio-el-editor-type-boolean/gio-el-editor-type-boolean.component.d.ts +15 -0
  27. package/gio-el/gio-el-editor/gio-el-editor-type-boolean/gio-el-editor-type-boolean.harness.d.ts +11 -0
  28. package/gio-el/gio-el-editor/gio-el-editor-type-date/gio-el-editor-type-date.component.d.ts +17 -0
  29. package/gio-el/gio-el-editor/gio-el-editor-type-date/gio-el-editor-type-date.harness.d.ts +11 -0
  30. package/gio-el/gio-el-editor/gio-el-editor-type-number/gio-el-editor-type-number.component.d.ts +17 -0
  31. package/gio-el/gio-el-editor/gio-el-editor-type-number/gio-el-editor-type-number.harness.d.ts +11 -0
  32. package/gio-el/gio-el-editor/gio-el-editor-type-string/gio-el-editor-type-string.component.d.ts +18 -0
  33. package/gio-el/gio-el-editor/gio-el-editor-type-string/gio-el-editor-type-string.harness.d.ts +11 -0
  34. package/gio-el/gio-el-editor/gio-el-editor.component.d.ts +26 -0
  35. package/gio-el/gio-el-editor/gio-el-editor.harness.d.ts +6 -0
  36. package/gio-el/index.d.ts +5 -0
  37. package/gio-el/models/Condition.d.ts +10 -0
  38. package/gio-el/models/ConditionGroup.d.ts +6 -0
  39. package/gio-el/models/ConditionModel.d.ts +15 -0
  40. package/gio-el/models/ConditionsModel.d.ts +8 -0
  41. package/gio-el/models/ExpressionLanguageBuilder.d.ts +11 -0
  42. package/gio-el/models/Operator.d.ts +1 -0
  43. package/gio-el/models/public-api.d.ts +5 -0
  44. package/gio-el/public-api.d.ts +3 -0
  45. package/package.json +7 -1
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright (C) 2024 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
17
+ import { FormArray, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
18
+ import { MatFormFieldModule } from '@angular/material/form-field';
19
+ import { MatSelectModule } from '@angular/material/select';
20
+ import { CommonModule } from '@angular/common';
21
+ import { MatButtonModule } from '@angular/material/button';
22
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
23
+ import { MatMenuModule } from '@angular/material/menu';
24
+ import { GioIconsModule } from '@gravitee/ui-particles-angular';
25
+ import { GioElEditorTypeBooleanComponent } from '../gio-el-editor-type-boolean/gio-el-editor-type-boolean.component';
26
+ import { GioElEditorTypeDateComponent } from '../gio-el-editor-type-date/gio-el-editor-type-date.component';
27
+ import { GioElEditorTypeNumberComponent } from '../gio-el-editor-type-number/gio-el-editor-type-number.component';
28
+ import { GioElEditorTypeStringComponent } from '../gio-el-editor-type-string/gio-el-editor-type-string.component';
29
+ import * as i0 from "@angular/core";
30
+ import * as i1 from "@angular/common";
31
+ import * as i2 from "@angular/forms";
32
+ import * as i3 from "@angular/material/form-field";
33
+ import * as i4 from "@angular/material/select";
34
+ import * as i5 from "@angular/material/core";
35
+ import * as i6 from "@angular/material/button";
36
+ import * as i7 from "@angular/material/button-toggle";
37
+ import * as i8 from "@angular/material/menu";
38
+ import * as i9 from "@angular/material/icon";
39
+ export class GioElEditorConditionGroupComponent {
40
+ constructor() {
41
+ /**
42
+ * Condition models to generate the fields for the conditions.
43
+ */
44
+ this.conditionModels = [];
45
+ /**
46
+ * Level of the node in the tree. Useful for testing with Harness to limit the scope of the query.
47
+ */
48
+ this.nodeLvl = 0;
49
+ this.remove = new EventEmitter();
50
+ }
51
+ addConditionGroup() {
52
+ this.conditionGroupFormGroup.controls.conditions.push(newConditionGroupFormGroup(), { emitEvent: true });
53
+ this.checkMultipleCondition();
54
+ }
55
+ addCondition() {
56
+ this.conditionGroupFormGroup.controls.conditions.push(newConditionFormGroup());
57
+ this.checkMultipleCondition();
58
+ }
59
+ removeCondition(conditionIndex) {
60
+ this.conditionGroupFormGroup.controls.conditions.removeAt(conditionIndex);
61
+ this.checkMultipleCondition();
62
+ }
63
+ removeConditionGroup() {
64
+ this.remove.emit();
65
+ this.checkMultipleCondition();
66
+ }
67
+ isConditionGroupForm(formGroup) {
68
+ return 'condition' in formGroup.controls && 'conditions' in formGroup.controls;
69
+ }
70
+ checkMultipleCondition() {
71
+ if (this.conditionGroupFormGroup.controls.conditions.length > 1) {
72
+ this.conditionGroupFormGroup.controls.condition.enable();
73
+ }
74
+ else {
75
+ this.conditionGroupFormGroup.controls.condition.disable();
76
+ }
77
+ }
78
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioElEditorConditionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GioElEditorConditionGroupComponent, isStandalone: true, selector: "gio-el-editor-condition-group", inputs: { conditionGroupFormGroup: "conditionGroupFormGroup", conditionModels: "conditionModels", nodeLvl: "nodeLvl" }, outputs: { remove: "remove" }, host: { properties: { "attr.node-lvl": "this.nodeLvl" } }, ngImport: i0, template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"conditionGroup\" [formGroup]=\"conditionGroupFormGroup\">\n <div class=\"conditionGroup__header\">\n <div class=\"conditionGroup__header__conditionField\"></div>\n <mat-button-toggle-group\n class=\"gio-button-toggle-group\"\n name=\"condition\"\n aria-label=\"Condition\"\n formControlName=\"condition\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n <mat-button-toggle class=\"mat-button-toggle-group\" value=\"AND\">AND</mat-button-toggle>\n <mat-button-toggle class=\"mat-button-toggle-group\" value=\"OR\">OR</mat-button-toggle>\n </mat-button-toggle-group>\n\n <div class=\"conditionGroup__header__addBtn\">\n <button mat-button [matMenuTriggerFor]=\"addBtn\">\n <mat-icon svgIcon=\"gio:plus\">Add</mat-icon>\n </button>\n <mat-menu #addBtn=\"matMenu\">\n <button mat-menu-item (click)=\"addConditionGroup()\">Add Group</button>\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\n </mat-menu>\n </div>\n\n @if (nodeLvl > 0) {\n <button class=\"conditionGroup__header__removeBtn\" mat-button aria-label=\"Remove Group\" (click)=\"removeConditionGroup()\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n }\n </div>\n\n <div class=\"conditionGroup__conditions\">\n @for (condition of conditionGroupFormGroup.controls.conditions.controls; track conditionIndex; let conditionIndex = $index) {\n @if (isConditionGroupForm(condition)) {\n <gio-el-editor-condition-group\n class=\"conditionGroup__conditions__conditionGroup\"\n [conditionGroupFormGroup]=\"condition\"\n [conditionModels]=\"conditionModels\"\n [nodeLvl]=\"nodeLvl + 1\"\n (remove)=\"removeCondition(conditionIndex)\"\n ></gio-el-editor-condition-group>\n } @else {\n <div\n class=\"conditionGroup__conditions__condition\"\n [formGroup]=\"conditionGroupFormGroup.controls.conditions.at(conditionIndex)\"\n [attr.node-lvl]=\"nodeLvl\"\n >\n <mat-form-field class=\"conditionGroup__conditions__condition__field\">\n <mat-label>Field</mat-label>\n\n <mat-select formControlName=\"field\" placeholder=\"Select Field\">\n <mat-option *ngFor=\"let field of conditionModels\" [value]=\"field\">{{ field.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n @switch (condition.controls.field.value?.type) {\n @case ('string') {\n <gio-el-editor-type-string [conditionFormGroup]=\"condition\"></gio-el-editor-type-string>\n }\n @case ('boolean') {\n <gio-el-editor-type-boolean [conditionFormGroup]=\"condition\"></gio-el-editor-type-boolean>\n }\n @case ('number') {\n <gio-el-editor-type-number [conditionFormGroup]=\"condition\"></gio-el-editor-type-number>\n }\n @case ('date') {\n <gio-el-editor-type-date [conditionFormGroup]=\"condition\"></gio-el-editor-type-date>\n }\n }\n\n <button\n class=\"conditionGroup__conditions__condition__removeBtn\"\n mat-button\n aria-label=\"Remove Condition\"\n (click)=\"removeCondition(conditionIndex)\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".conditionGroup{display:flex;flex-direction:column;gap:8px}.conditionGroup__header{display:flex;flex-direction:row;align-items:center;gap:8px}.conditionGroup__header .gio-button-toggle-group{margin-bottom:0}.conditionGroup__conditions{display:flex;flex-direction:column;gap:8px}.conditionGroup__conditions__condition{display:flex;align-items:flex-start;gap:8px}.conditionGroup__conditions__condition__field{flex:0 0 auto}.conditionGroup__conditions__condition__removeBtn{align-self:center}.conditionGroup__conditions__conditionGroup{margin-left:18px}\n"], dependencies: [{ kind: "component", type: GioElEditorConditionGroupComponent, selector: "gio-el-editor-condition-group", inputs: ["conditionGroupFormGroup", "conditionModels", "nodeLvl"], outputs: ["remove"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: GioIconsModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: GioElEditorTypeBooleanComponent, selector: "gio-el-editor-type-boolean", inputs: ["conditionFormGroup"] }, { kind: "component", type: GioElEditorTypeDateComponent, selector: "gio-el-editor-type-date", inputs: ["conditionFormGroup"] }, { kind: "component", type: GioElEditorTypeStringComponent, selector: "gio-el-editor-type-string", inputs: ["conditionFormGroup"] }, { kind: "component", type: GioElEditorTypeNumberComponent, selector: "gio-el-editor-type-number", inputs: ["conditionFormGroup"] }] }); }
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioElEditorConditionGroupComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'gio-el-editor-condition-group', standalone: true, imports: [
84
+ CommonModule,
85
+ ReactiveFormsModule,
86
+ MatFormFieldModule,
87
+ MatSelectModule,
88
+ MatButtonModule,
89
+ MatButtonToggleModule,
90
+ MatMenuModule,
91
+ GioIconsModule,
92
+ GioElEditorTypeBooleanComponent,
93
+ GioElEditorTypeDateComponent,
94
+ GioElEditorTypeStringComponent,
95
+ GioElEditorTypeNumberComponent,
96
+ ], template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<div class=\"conditionGroup\" [formGroup]=\"conditionGroupFormGroup\">\n <div class=\"conditionGroup__header\">\n <div class=\"conditionGroup__header__conditionField\"></div>\n <mat-button-toggle-group\n class=\"gio-button-toggle-group\"\n name=\"condition\"\n aria-label=\"Condition\"\n formControlName=\"condition\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n <mat-button-toggle class=\"mat-button-toggle-group\" value=\"AND\">AND</mat-button-toggle>\n <mat-button-toggle class=\"mat-button-toggle-group\" value=\"OR\">OR</mat-button-toggle>\n </mat-button-toggle-group>\n\n <div class=\"conditionGroup__header__addBtn\">\n <button mat-button [matMenuTriggerFor]=\"addBtn\">\n <mat-icon svgIcon=\"gio:plus\">Add</mat-icon>\n </button>\n <mat-menu #addBtn=\"matMenu\">\n <button mat-menu-item (click)=\"addConditionGroup()\">Add Group</button>\n <button mat-menu-item (click)=\"addCondition()\">Add Condition</button>\n </mat-menu>\n </div>\n\n @if (nodeLvl > 0) {\n <button class=\"conditionGroup__header__removeBtn\" mat-button aria-label=\"Remove Group\" (click)=\"removeConditionGroup()\">\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n }\n </div>\n\n <div class=\"conditionGroup__conditions\">\n @for (condition of conditionGroupFormGroup.controls.conditions.controls; track conditionIndex; let conditionIndex = $index) {\n @if (isConditionGroupForm(condition)) {\n <gio-el-editor-condition-group\n class=\"conditionGroup__conditions__conditionGroup\"\n [conditionGroupFormGroup]=\"condition\"\n [conditionModels]=\"conditionModels\"\n [nodeLvl]=\"nodeLvl + 1\"\n (remove)=\"removeCondition(conditionIndex)\"\n ></gio-el-editor-condition-group>\n } @else {\n <div\n class=\"conditionGroup__conditions__condition\"\n [formGroup]=\"conditionGroupFormGroup.controls.conditions.at(conditionIndex)\"\n [attr.node-lvl]=\"nodeLvl\"\n >\n <mat-form-field class=\"conditionGroup__conditions__condition__field\">\n <mat-label>Field</mat-label>\n\n <mat-select formControlName=\"field\" placeholder=\"Select Field\">\n <mat-option *ngFor=\"let field of conditionModels\" [value]=\"field\">{{ field.label }}</mat-option>\n </mat-select>\n </mat-form-field>\n\n @switch (condition.controls.field.value?.type) {\n @case ('string') {\n <gio-el-editor-type-string [conditionFormGroup]=\"condition\"></gio-el-editor-type-string>\n }\n @case ('boolean') {\n <gio-el-editor-type-boolean [conditionFormGroup]=\"condition\"></gio-el-editor-type-boolean>\n }\n @case ('number') {\n <gio-el-editor-type-number [conditionFormGroup]=\"condition\"></gio-el-editor-type-number>\n }\n @case ('date') {\n <gio-el-editor-type-date [conditionFormGroup]=\"condition\"></gio-el-editor-type-date>\n }\n }\n\n <button\n class=\"conditionGroup__conditions__condition__removeBtn\"\n mat-button\n aria-label=\"Remove Condition\"\n (click)=\"removeCondition(conditionIndex)\"\n >\n <mat-icon svgIcon=\"gio:cancel\"></mat-icon>\n </button>\n </div>\n }\n }\n </div>\n</div>\n", styles: [".conditionGroup{display:flex;flex-direction:column;gap:8px}.conditionGroup__header{display:flex;flex-direction:row;align-items:center;gap:8px}.conditionGroup__header .gio-button-toggle-group{margin-bottom:0}.conditionGroup__conditions{display:flex;flex-direction:column;gap:8px}.conditionGroup__conditions__condition{display:flex;align-items:flex-start;gap:8px}.conditionGroup__conditions__condition__field{flex:0 0 auto}.conditionGroup__conditions__condition__removeBtn{align-self:center}.conditionGroup__conditions__conditionGroup{margin-left:18px}\n"] }]
97
+ }], propDecorators: { conditionGroupFormGroup: [{
98
+ type: Input,
99
+ args: [{
100
+ required: true,
101
+ }]
102
+ }], conditionModels: [{
103
+ type: Input,
104
+ args: [{
105
+ required: true,
106
+ }]
107
+ }], nodeLvl: [{
108
+ type: Input
109
+ }, {
110
+ type: HostBinding,
111
+ args: ['attr.node-lvl']
112
+ }], remove: [{
113
+ type: Output
114
+ }] } });
115
+ const newConditionGroupFormGroup = () => {
116
+ return new FormGroup({
117
+ condition: new FormControl({ value: 'AND', disabled: true }, { nonNullable: true, validators: Validators.required }),
118
+ conditions: new FormArray([]),
119
+ });
120
+ };
121
+ const newConditionFormGroup = () => {
122
+ return new FormGroup({
123
+ field: new FormControl(null),
124
+ operator: new FormControl(null),
125
+ value: new FormControl(null),
126
+ });
127
+ };
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvZ2lvLWVsL2dpby1lbC1lZGl0b3IvZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAvZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvZ2lvLWVsL2dpby1lbC1lZGl0b3IvZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAvZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztB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LEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsZUFBZTtnQkFJckIsTUFBTTtzQkFEWixNQUFNOztBQXNDVCxNQUFNLDBCQUEwQixHQUFHLEdBQWtDLEVBQUU7SUFDckUsT0FBTyxJQUFJLFNBQVMsQ0FBcUI7UUFDdkMsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEgsVUFBVSxFQUFFLElBQUksU0FBUyxDQUEyRCxFQUFFLENBQUM7S0FDeEYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxHQUE2QixFQUFFO0lBQzNELE9BQU8sSUFBSSxTQUFTLENBQWdCO1FBQ2xDLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDNUIsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztRQUMvQixLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO0tBQzdCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBHaW9JY29uc01vZHVsZSB9IGZyb20gJ0BncmF2aXRlZS91aS1wYXJ0aWNsZXMtYW5ndWxhcic7XG5cbmltcG9ydCB7IEdpb0VsRWRpdG9yVHlwZUJvb2xlYW5Db21wb25lbnQgfSBmcm9tICcuLi9naW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbi9naW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2lvRWxFZGl0b3JUeXBlRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dpby1lbC1lZGl0b3ItdHlwZS1kYXRlL2dpby1lbC1lZGl0b3ItdHlwZS1kYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHaW9FbEVkaXRvclR5cGVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9naW8tZWwtZWRpdG9yLXR5cGUtbnVtYmVyL2dpby1lbC1lZGl0b3ItdHlwZS1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdpb0VsRWRpdG9yVHlwZVN0cmluZ0NvbXBvbmVudCB9IGZyb20gJy4uL2dpby1lbC1lZGl0b3ItdHlwZS1zdHJpbmcvZ2lvLWVsLWVkaXRvci10eXBlLXN0cmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZGl0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQ29uZGl0aW9uTW9kZWwnO1xuaW1wb3J0IHsgQ29uZGl0aW9uRm9ybSwgQ29uZGl0aW9uR3JvdXBGb3JtIH0gZnJvbSAnLi4vZ2lvLWVsLWVkaXRvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZWwtZWRpdG9yLWNvbmRpdGlvbi1ncm91cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBHaW9JY29uc01vZHVsZSxcbiAgICBHaW9FbEVkaXRvclR5cGVCb29sZWFuQ29tcG9uZW50LFxuICAgIEdpb0VsRWRpdG9yVHlwZURhdGVDb21wb25lbnQsXG4gICAgR2lvRWxFZGl0b3JUeXBlU3RyaW5nQ29tcG9uZW50LFxuICAgIEdpb0VsRWRpdG9yVHlwZU51bWJlckNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1lbC1lZGl0b3ItY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dpby1lbC1lZGl0b3ItY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRWxFZGl0b3JDb25kaXRpb25Hcm91cENvbXBvbmVudCB7XG4gIEBJbnB1dCh7XG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0pXG4gIHB1YmxpYyBjb25kaXRpb25Hcm91cEZvcm1Hcm91cCE6IEZvcm1Hcm91cDxDb25kaXRpb25Hcm91cEZvcm0+O1xuXG4gIC8qKlxuICAgKiBDb25kaXRpb24gbW9kZWxzIHRvIGdlbmVyYXRlIHRoZSBmaWVsZHMgZm9yIHRoZSBjb25kaXRpb25zLlxuICAgKi9cbiAgQElucHV0KHtcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgfSlcbiAgcHVibGljIGNvbmRpdGlvbk1vZGVsczogQ29uZGl0aW9uTW9kZWxbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBMZXZlbCBvZiB0aGUgbm9kZSBpbiB0aGUgdHJlZS4gVXNlZnVsIGZvciB0ZXN0aW5nIHdpdGggSGFybmVzcyB0byBsaW1pdCB0aGUgc2NvcGUgb2YgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLm5vZGUtbHZsJylcbiAgcHVibGljIG5vZGVMdmwgPSAwO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCBhZGRDb25kaXRpb25Hcm91cCgpIHtcbiAgICB0aGlzLmNvbmRpdGlvbkdyb3VwRm9ybUdyb3VwLmNvbnRyb2xzLmNvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb25Hcm91cEZvcm1Hcm91cCgpLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB0aGlzLmNoZWNrTXVsdGlwbGVDb25kaXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5jb25kaXRpb25Hcm91cEZvcm1Hcm91cC5jb250cm9scy5jb25kaXRpb25zLnB1c2gobmV3Q29uZGl0aW9uRm9ybUdyb3VwKCkpO1xuICAgIHRoaXMuY2hlY2tNdWx0aXBsZUNvbmRpdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUNvbmRpdGlvbihjb25kaXRpb25JbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25kaXRpb25Hcm91cEZvcm1Hcm91cC5jb250cm9scy5jb25kaXRpb25zLnJlbW92ZUF0KGNvbmRpdGlvbkluZGV4KTtcbiAgICB0aGlzLmNoZWNrTXVsdGlwbGVDb25kaXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW1vdmVDb25kaXRpb25Hcm91cCgpIHtcbiAgICB0aGlzLnJlbW92ZS5lbWl0KCk7XG4gICAgdGhpcy5jaGVja011bHRpcGxlQ29uZGl0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNDb25kaXRpb25Hcm91cEZvcm0oXG4gICAgZm9ybUdyb3VwOiBGb3JtR3JvdXA8Q29uZGl0aW9uRm9ybT4gfCBGb3JtR3JvdXA8Q29uZGl0aW9uR3JvdXBGb3JtPixcbiAgKTogZm9ybUdyb3VwIGlzIEZvcm1Hcm91cDxDb25kaXRpb25Hcm91cEZvcm0+IHtcbiAgICByZXR1cm4gJ2NvbmRpdGlvbicgaW4gZm9ybUdyb3VwLmNvbnRyb2xzICYmICdjb25kaXRpb25zJyBpbiBmb3JtR3JvdXAuY29udHJvbHM7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTXVsdGlwbGVDb25kaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZGl0aW9uR3JvdXBGb3JtR3JvdXAuY29udHJvbHMuY29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkdyb3VwRm9ybUdyb3VwLmNvbnRyb2xzLmNvbmRpdGlvbi5lbmFibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25kaXRpb25Hcm91cEZvcm1Hcm91cC5jb250cm9scy5jb25kaXRpb24uZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBuZXdDb25kaXRpb25Hcm91cEZvcm1Hcm91cCA9ICgpOiBGb3JtR3JvdXA8Q29uZGl0aW9uR3JvdXBGb3JtPiA9PiB7XG4gIHJldHVybiBuZXcgRm9ybUdyb3VwPENvbmRpdGlvbkdyb3VwRm9ybT4oe1xuICAgIGNvbmRpdGlvbjogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6ICdBTkQnLCBkaXNhYmxlZDogdHJ1ZSB9LCB7IG5vbk51bGxhYmxlOiB0cnVlLCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkIH0pLFxuICAgIGNvbmRpdGlvbnM6IG5ldyBGb3JtQXJyYXk8Rm9ybUdyb3VwPENvbmRpdGlvbkZvcm0+IHwgRm9ybUdyb3VwPENvbmRpdGlvbkdyb3VwRm9ybT4+KFtdKSxcbiAgfSk7XG59O1xuXG5jb25zdCBuZXdDb25kaXRpb25Gb3JtR3JvdXAgPSAoKTogRm9ybUdyb3VwPENvbmRpdGlvbkZvcm0+ID0+IHtcbiAgcmV0dXJuIG5ldyBGb3JtR3JvdXA8Q29uZGl0aW9uRm9ybT4oe1xuICAgIGZpZWxkOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXG4gICAgb3BlcmF0b3I6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcbiAgICB2YWx1ZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICB9KTtcbn07XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAgICBcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBcbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgIFxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxkaXYgY2xhc3M9XCJjb25kaXRpb25Hcm91cFwiIFtmb3JtR3JvdXBdPVwiY29uZGl0aW9uR3JvdXBGb3JtR3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uR3JvdXBfX2hlYWRlcl9fY29uZGl0aW9uRmllbGRcIj48L2Rpdj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgIGNsYXNzPVwiZ2lvLWJ1dHRvbi10b2dnbGUtZ3JvdXBcIlxuICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ29uZGl0aW9uXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbmRpdGlvblwiXG4gICAgICBbaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcl09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgY2xhc3M9XCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFwiIHZhbHVlPVwiQU5EXCI+QU5EPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBjbGFzcz1cIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXCIgdmFsdWU9XCJPUlwiPk9SPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19oZWFkZXJfX2FkZEJ0blwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRCdG5cIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJnaW86cGx1c1wiPkFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxtYXQtbWVudSAjYWRkQnRuPVwibWF0TWVudVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFkZENvbmRpdGlvbkdyb3VwKClcIj5BZGQgR3JvdXA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhZGRDb25kaXRpb24oKVwiPkFkZCBDb25kaXRpb248L2J1dHRvbj5cbiAgICAgIDwvbWF0LW1lbnU+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKG5vZGVMdmwgPiAwKSB7XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZGl0aW9uR3JvdXBfX2hlYWRlcl9fcmVtb3ZlQnRuXCIgbWF0LWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVtb3ZlIEdyb3VwXCIgKGNsaWNrKT1cInJlbW92ZUNvbmRpdGlvbkdyb3VwKClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJnaW86Y2FuY2VsXCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19jb25kaXRpb25zXCI+XG4gICAgQGZvciAoY29uZGl0aW9uIG9mIGNvbmRpdGlvbkdyb3VwRm9ybUdyb3VwLmNvbnRyb2xzLmNvbmRpdGlvbnMuY29udHJvbHM7IHRyYWNrIGNvbmRpdGlvbkluZGV4OyBsZXQgY29uZGl0aW9uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIEBpZiAoaXNDb25kaXRpb25Hcm91cEZvcm0oY29uZGl0aW9uKSkge1xuICAgICAgICA8Z2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXBcbiAgICAgICAgICBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19jb25kaXRpb25zX19jb25kaXRpb25Hcm91cFwiXG4gICAgICAgICAgW2NvbmRpdGlvbkdyb3VwRm9ybUdyb3VwXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgW2NvbmRpdGlvbk1vZGVsc109XCJjb25kaXRpb25Nb2RlbHNcIlxuICAgICAgICAgIFtub2RlTHZsXT1cIm5vZGVMdmwgKyAxXCJcbiAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUNvbmRpdGlvbihjb25kaXRpb25JbmRleClcIlxuICAgICAgICA+PC9naW8tZWwtZWRpdG9yLWNvbmRpdGlvbi1ncm91cD5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjb25kaXRpb25Hcm91cF9fY29uZGl0aW9uc19fY29uZGl0aW9uXCJcbiAgICAgICAgICBbZm9ybUdyb3VwXT1cImNvbmRpdGlvbkdyb3VwRm9ybUdyb3VwLmNvbnRyb2xzLmNvbmRpdGlvbnMuYXQoY29uZGl0aW9uSW5kZXgpXCJcbiAgICAgICAgICBbYXR0ci5ub2RlLWx2bF09XCJub2RlTHZsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19jb25kaXRpb25zX19jb25kaXRpb25fX2ZpZWxkXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkZpZWxkPC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRmllbGRcIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbmRpdGlvbk1vZGVsc1wiIFt2YWx1ZV09XCJmaWVsZFwiPnt7IGZpZWxkLmxhYmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICBAc3dpdGNoIChjb25kaXRpb24uY29udHJvbHMuZmllbGQudmFsdWU/LnR5cGUpIHtcbiAgICAgICAgICAgIEBjYXNlICgnc3RyaW5nJykge1xuICAgICAgICAgICAgICA8Z2lvLWVsLWVkaXRvci10eXBlLXN0cmluZyBbY29uZGl0aW9uRm9ybUdyb3VwXT1cImNvbmRpdGlvblwiPjwvZ2lvLWVsLWVkaXRvci10eXBlLXN0cmluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgPGdpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuIFtjb25kaXRpb25Gb3JtR3JvdXBdPVwiY29uZGl0aW9uXCI+PC9naW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICA8Z2lvLWVsLWVkaXRvci10eXBlLW51bWJlciBbY29uZGl0aW9uRm9ybUdyb3VwXT1cImNvbmRpdGlvblwiPjwvZ2lvLWVsLWVkaXRvci10eXBlLW51bWJlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICAgICAgPGdpby1lbC1lZGl0b3ItdHlwZS1kYXRlIFtjb25kaXRpb25Gb3JtR3JvdXBdPVwiY29uZGl0aW9uXCI+PC9naW8tZWwtZWRpdG9yLXR5cGUtZGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNvbmRpdGlvbkdyb3VwX19jb25kaXRpb25zX19jb25kaXRpb25fX3JlbW92ZUJ0blwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIENvbmRpdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGNvbmRpdGlvbkluZGV4KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJnaW86Y2FuY2VsXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Copyright (C) 2024 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ComponentHarness, HarnessPredicate, parallel } from '@angular/cdk/testing';
17
+ import { MatMenuHarness } from '@angular/material/menu/testing';
18
+ import { MatSelectHarness } from '@angular/material/select/testing';
19
+ import { MatButtonToggleGroupHarness } from '@angular/material/button-toggle/testing';
20
+ import { DivHarness } from '@gravitee/ui-particles-angular/testing';
21
+ import { GioElEditorTypeBooleanHarness } from '../gio-el-editor-type-boolean/gio-el-editor-type-boolean.harness';
22
+ import { GioElEditorTypeStringHarness } from '../gio-el-editor-type-string/gio-el-editor-type-string.harness';
23
+ import { GioElEditorTypeNumberHarness } from '../gio-el-editor-type-number/gio-el-editor-type-number.harness';
24
+ import { GioElEditorTypeDateHarness } from '../gio-el-editor-type-date/gio-el-editor-type-date.harness';
25
+ export class GioElEditorConditionGroupHarness extends ComponentHarness {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.getNodeLvl = () => this.host().then(host => host.getAttribute('node-lvl'));
29
+ this.getAddMenuButton = this.locatorFor(MatMenuHarness.with({ triggerText: /Add/ }));
30
+ this.getConditionButtonToggleGroup = this.locatorFor(MatButtonToggleGroupHarness.with({ selector: '[formControlName="condition"]' }));
31
+ this.getConditionsHarness = async () => {
32
+ const nodeLvl = await this.getNodeLvl();
33
+ if (!nodeLvl) {
34
+ throw new Error('Node level not found');
35
+ }
36
+ return this.locatorForAll(DivHarness.with({
37
+ selector: `.conditionGroup__conditions__condition[node-lvl="${nodeLvl}"]`,
38
+ }), GioElEditorConditionGroupHarness.with({
39
+ selector: `.conditionGroup__conditions__conditionGroup[node-lvl="${Number(nodeLvl) + 1}"]`,
40
+ }))();
41
+ };
42
+ // private ee = (await this.locatorFor(DivHarness.with({ selector: '.conditionGroup__conditions' }))()).childLocatorForAll();
43
+ this.getConditionHarness = async (index) => (await this.getConditionsHarness()).at(index);
44
+ this.getConditionTypeHarness = (divHarness) => divHarness.childLocatorForOptional(GioElEditorTypeStringHarness, GioElEditorTypeBooleanHarness, GioElEditorTypeNumberHarness, GioElEditorTypeDateHarness)();
45
+ this.getConditionField = (divHarness) => divHarness.childLocatorFor(MatSelectHarness.with({ selector: '[formControlName="field"]' }))();
46
+ }
47
+ static { this.hostSelector = 'gio-el-editor-condition-group'; }
48
+ static with(options = {}) {
49
+ return new HarnessPredicate(GioElEditorConditionGroupHarness, options);
50
+ }
51
+ async clickAddNewConditionButton() {
52
+ await (await this.getAddMenuButton()).clickItem({ text: /Add Condition/ });
53
+ }
54
+ async clickAddNewGroupButton() {
55
+ await (await this.getAddMenuButton()).clickItem({ text: /Add Group/ });
56
+ }
57
+ async getConditionValue() {
58
+ const conditionButtonToggleGroup = await this.getConditionButtonToggleGroup();
59
+ const selectedToggles = await conditionButtonToggleGroup.getToggles({ checked: true });
60
+ if (selectedToggles.length !== 1) {
61
+ throw new Error('No operator selected');
62
+ }
63
+ const andOrMap = {
64
+ AND: 'AND',
65
+ OR: 'OR',
66
+ };
67
+ return andOrMap[await selectedToggles[0].getText()];
68
+ }
69
+ async selectConditionValue(operator) {
70
+ const conditionButtonToggleGroup = await this.getConditionButtonToggleGroup();
71
+ const toggles = await conditionButtonToggleGroup.getToggles({ text: operator });
72
+ if (toggles.length !== 1) {
73
+ throw new Error('No operator selected');
74
+ }
75
+ return toggles[0].check();
76
+ }
77
+ async selectConditionField(index, field) {
78
+ const conditionDiv = await this.getConditionHarness(index);
79
+ if (!conditionDiv || !(conditionDiv instanceof DivHarness)) {
80
+ throw new Error(`Condition with index ${index} not found`);
81
+ }
82
+ const fieldSelect = await this.getConditionField(conditionDiv);
83
+ await fieldSelect.clickOptions({ text: field });
84
+ }
85
+ async selectConditionOperator(index, operator) {
86
+ const conditionDiv = await this.getConditionHarness(index);
87
+ if (!conditionDiv || !(conditionDiv instanceof DivHarness)) {
88
+ throw new Error(`Condition with index ${index} not found`);
89
+ }
90
+ const conditionType = await this.getConditionTypeHarness(conditionDiv);
91
+ if (!conditionType) {
92
+ throw new Error(`Condition type not found. Select field first`);
93
+ }
94
+ await conditionType.selectOperator(operator);
95
+ }
96
+ async getConditionAvailableOperators(index) {
97
+ const conditionDiv = await this.getConditionHarness(index);
98
+ if (!conditionDiv || !(conditionDiv instanceof DivHarness)) {
99
+ throw new Error(`Condition with index ${index} not found`);
100
+ }
101
+ const conditionType = await this.getConditionTypeHarness(conditionDiv);
102
+ if (!conditionType) {
103
+ throw new Error(`Condition type not found. Select field first`);
104
+ }
105
+ return conditionType.getAvailableOperators();
106
+ }
107
+ async setConditionValue(index, value) {
108
+ const conditionDiv = await this.getConditionHarness(index);
109
+ if (!conditionDiv || !(conditionDiv instanceof DivHarness)) {
110
+ throw new Error(`Condition with index ${index} not found`);
111
+ }
112
+ const conditionType = await this.getConditionTypeHarness(conditionDiv);
113
+ if (!conditionType) {
114
+ throw new Error(`Condition type not found. Select field first`);
115
+ }
116
+ if (conditionType instanceof GioElEditorTypeStringHarness && typeof value === 'string') {
117
+ await conditionType.setValue(value);
118
+ }
119
+ else if (conditionType instanceof GioElEditorTypeBooleanHarness && typeof value === 'boolean') {
120
+ await conditionType.setValue(value);
121
+ }
122
+ else if (conditionType instanceof GioElEditorTypeNumberHarness && typeof value === 'number') {
123
+ await conditionType.setValue(value);
124
+ }
125
+ else if (conditionType instanceof GioElEditorTypeDateHarness && value instanceof Date) {
126
+ await conditionType.setValue(value);
127
+ }
128
+ else {
129
+ throw new Error(`Invalid value for condition type`);
130
+ }
131
+ }
132
+ async getConditionGroup(index) {
133
+ const conditionGroup = await this.getConditionHarness(index);
134
+ if (!conditionGroup || !(conditionGroup instanceof GioElEditorConditionGroupHarness)) {
135
+ throw new Error(`Condition group with index ${index} not found`);
136
+ }
137
+ return conditionGroup;
138
+ }
139
+ async getConditions() {
140
+ const getConditionsDiv = await this.getConditionsHarness();
141
+ const conditions = await parallel(() => getConditionsDiv.map(async (condition) => {
142
+ if (condition instanceof GioElEditorConditionGroupHarness) {
143
+ return await condition.getConditions();
144
+ }
145
+ const conditionField = await this.getConditionField(condition);
146
+ const conditionType = await this.getConditionTypeHarness(condition);
147
+ return {
148
+ field: await conditionField.getValueText(),
149
+ operator: await conditionType?.getOperatorValue(),
150
+ value: await conditionType?.getValue(),
151
+ };
152
+ }));
153
+ return {
154
+ condition: await this.getConditionValue(),
155
+ conditions,
156
+ };
157
+ }
158
+ }
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWVsLWVkaXRvci1jb25kaXRpb24tZ3JvdXAuaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXBhcnRpY2xlcy1hbmd1bGFyL2dpby1lbC9naW8tZWwtZWRpdG9yL2dpby1lbC1lZGl0b3ItY29uZGl0aW9uLWdyb3VwL2dpby1lbC1lZGl0b3ItY29uZGl0aW9uLWdyb3VwLmhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQXNCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFcEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDakgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDOUcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDOUcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFZeEcsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLGdCQUFnQjtJQUF0RTs7UUFPUyxlQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUUxRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFB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LE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUN4QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3JDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsU0FBUyxFQUFDLEVBQUU7WUFDckMsSUFBSSxTQUFTLFlBQVksZ0NBQWdDLEVBQUUsQ0FBQztnQkFDMUQsT0FBTyxNQUFNLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEUsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUMsWUFBWSxFQUFFO2dCQUMxQyxRQUFRLEVBQUUsTUFBTSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pELEtBQUssRUFBRSxNQUFNLGFBQWEsRUFBRSxRQUFRLEVBQUU7YUFDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3pDLFVBQVU7U0FDWCxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBCYXNlSGFybmVzc0ZpbHRlcnMsIENvbXBvbmVudEhhcm5lc3MsIEhhcm5lc3NQcmVkaWNhdGUsIHBhcmFsbGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0TWVudUhhcm5lc3MgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51L3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0U2VsZWN0SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdC90ZXN0aW5nJztcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUdyb3VwSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUvdGVzdGluZyc7XG5pbXBvcnQgeyBEaXZIYXJuZXNzIH0gZnJvbSAnQGdyYXZpdGVlL3VpLXBhcnRpY2xlcy1hbmd1bGFyL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBHaW9FbEVkaXRvclR5cGVCb29sZWFuSGFybmVzcyB9IGZyb20gJy4uL2dpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuL2dpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvRWxFZGl0b3JUeXBlU3RyaW5nSGFybmVzcyB9IGZyb20gJy4uL2dpby1lbC1lZGl0b3ItdHlwZS1zdHJpbmcvZ2lvLWVsLWVkaXRvci10eXBlLXN0cmluZy5oYXJuZXNzJztcbmltcG9ydCB7IEdpb0VsRWRpdG9yVHlwZU51bWJlckhhcm5lc3MgfSBmcm9tICcuLi9naW8tZWwtZWRpdG9yLXR5cGUtbnVtYmVyL2dpby1lbC1lZGl0b3ItdHlwZS1udW1iZXIuaGFybmVzcyc7XG5pbXBvcnQgeyBHaW9FbEVkaXRvclR5cGVEYXRlSGFybmVzcyB9IGZyb20gJy4uL2dpby1lbC1lZGl0b3ItdHlwZS1kYXRlL2dpby1lbC1lZGl0b3ItdHlwZS1kYXRlLmhhcm5lc3MnO1xuXG50eXBlIENvbmRpdGlvbkdyb3VwSGFybmVzc1ZhbHVlcyA9IHtcbiAgY29uZGl0aW9uOiAnQU5EJyB8ICdPUic7XG4gIGNvbmRpdGlvbnM6IChDb25kaXRpb25Hcm91cEhhcm5lc3NWYWx1ZXMgfCBDb25kaXRpb25IYXJuZXNzVmFsdWVzKVtdO1xufTtcbnR5cGUgQ29uZGl0aW9uSGFybmVzc1ZhbHVlcyA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgb3BlcmF0b3I/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjbGFzcyBHaW9FbEVkaXRvckNvbmRpdGlvbkdyb3VwSGFybmVzcyBleHRlbmRzIENvbXBvbmVudEhhcm5lc3Mge1xuICBwdWJsaWMgc3RhdGljIGhvc3RTZWxlY3RvciA9ICdnaW8tZWwtZWRpdG9yLWNvbmRpdGlvbi1ncm91cCc7XG5cbiAgcHVibGljIHN0YXRpYyB3aXRoKG9wdGlvbnM6IEJhc2VIYXJuZXNzRmlsdGVycyA9IHt9KTogSGFybmVzc1ByZWRpY2F0ZTxHaW9FbEVkaXRvckNvbmRpdGlvbkdyb3VwSGFybmVzcz4ge1xuICAgIHJldHVybiBuZXcgSGFybmVzc1ByZWRpY2F0ZShHaW9FbEVkaXRvckNvbmRpdGlvbkdyb3VwSGFybmVzcywgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Tm9kZUx2bCA9ICgpID0+IHRoaXMuaG9zdCgpLnRoZW4oaG9zdCA9PiBob3N0LmdldEF0dHJpYnV0ZSgnbm9kZS1sdmwnKSk7XG5cbiAgcHJpdmF0ZSBnZXRBZGRNZW51QnV0dG9uID0gdGhpcy5sb2NhdG9yRm9yKE1hdE1lbnVIYXJuZXNzLndpdGgoeyB0cmlnZ2VyVGV4dDogL0FkZC8gfSkpO1xuICBwcml2YXRlIGdldENvbmRpdGlvbkJ1dHRvblRvZ2dsZUdyb3VwID0gdGhpcy5sb2NhdG9yRm9yKE1hdEJ1dHRvblRvZ2dsZUdyb3VwSGFybmVzcy53aXRoKHsgc2VsZWN0b3I6ICdbZm9ybUNvbnRyb2xOYW1lPVwiY29uZGl0aW9uXCJdJyB9KSk7XG4gIHByaXZhdGUgZ2V0Q29uZGl0aW9uc0hhcm5lc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgbm9kZUx2bCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUx2bCgpO1xuICAgIGlmICghbm9kZUx2bCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGxldmVsIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NhdG9yRm9yQWxsKFxuICAgICAgRGl2SGFybmVzcy53aXRoKHtcbiAgICAgICAgc2VsZWN0b3I6IGAuY29uZGl0aW9uR3JvdXBfX2NvbmRpdGlvbnNfX2NvbmRpdGlvbltub2RlLWx2bD1cIiR7bm9kZUx2bH1cIl1gLFxuICAgICAgfSksXG4gICAgICBHaW9FbEVkaXRvckNvbmRpdGlvbkdyb3VwSGFybmVzcy53aXRoKHtcbiAgICAgICAgc2VsZWN0b3I6IGAuY29uZGl0aW9uR3JvdXBfX2NvbmRpdGlvbnNfX2NvbmRpdGlvbkdyb3VwW25vZGUtbHZsPVwiJHtOdW1iZXIobm9kZUx2bCkgKyAxfVwiXWAsXG4gICAgICB9KSxcbiAgICApKCk7XG4gIH07XG5cbiAgLy8gcHJpdmF0ZSBlZSA9ICAoYXdhaXQgdGhpcy5sb2NhdG9yRm9yKERpdkhhcm5lc3Mud2l0aCh7IHNlbGVjdG9yOiAnLmNvbmRpdGlvbkdyb3VwX19jb25kaXRpb25zJyB9KSkoKSkuY2hpbGRMb2NhdG9yRm9yQWxsKCk7XG5cbiAgcHJpdmF0ZSBnZXRDb25kaXRpb25IYXJuZXNzID0gYXN5bmMgKGluZGV4OiBudW1iZXIpID0+IChhd2FpdCB0aGlzLmdldENvbmRpdGlvbnNIYXJuZXNzKCkpLmF0KGluZGV4KTtcbiAgcHJpdmF0ZSBnZXRDb25kaXRpb25UeXBlSGFybmVzcyA9IChkaXZIYXJuZXNzOiBEaXZIYXJuZXNzKSA9PlxuICAgIGRpdkhhcm5lc3MuY2hpbGRMb2NhdG9yRm9yT3B0aW9uYWwoXG4gICAgICBHaW9FbEVkaXRvclR5cGVTdHJpbmdIYXJuZXNzLFxuICAgICAgR2lvRWxFZGl0b3JUeXBlQm9vbGVhbkhhcm5lc3MsXG4gICAgICBHaW9FbEVkaXRvclR5cGVOdW1iZXJIYXJuZXNzLFxuICAgICAgR2lvRWxFZGl0b3JUeXBlRGF0ZUhhcm5lc3MsXG4gICAgKSgpO1xuICBwcml2YXRlIGdldENvbmRpdGlvbkZpZWxkID0gKGRpdkhhcm5lc3M6IERpdkhhcm5lc3MpID0+XG4gICAgZGl2SGFybmVzcy5jaGlsZExvY2F0b3JGb3IoTWF0U2VsZWN0SGFybmVzcy53aXRoKHsgc2VsZWN0b3I6ICdbZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRcIl0nIH0pKSgpO1xuXG4gIHB1YmxpYyBhc3luYyBjbGlja0FkZE5ld0NvbmRpdGlvbkJ1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5nZXRBZGRNZW51QnV0dG9uKCkpLmNsaWNrSXRlbSh7IHRleHQ6IC9BZGQgQ29uZGl0aW9uLyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjbGlja0FkZE5ld0dyb3VwQnV0dG9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLmdldEFkZE1lbnVCdXR0b24oKSkuY2xpY2tJdGVtKHsgdGV4dDogL0FkZCBHcm91cC8gfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29uZGl0aW9uVmFsdWUoKTogUHJvbWlzZTwnQU5EJyB8ICdPUic+IHtcbiAgICBjb25zdCBjb25kaXRpb25CdXR0b25Ub2dnbGVHcm91cCA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uQnV0dG9uVG9nZ2xlR3JvdXAoKTtcbiAgICBjb25zdCBzZWxlY3RlZFRvZ2dsZXMgPSBhd2FpdCBjb25kaXRpb25CdXR0b25Ub2dnbGVHcm91cC5nZXRUb2dnbGVzKHsgY2hlY2tlZDogdHJ1ZSB9KTtcbiAgICBpZiAoc2VsZWN0ZWRUb2dnbGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBvcGVyYXRvciBzZWxlY3RlZCcpO1xuICAgIH1cbiAgICBjb25zdCBhbmRPck1hcDogUmVjb3JkPHN0cmluZywgJ0FORCcgfCAnT1InPiA9IHtcbiAgICAgIEFORDogJ0FORCcsXG4gICAgICBPUjogJ09SJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFuZE9yTWFwW2F3YWl0IHNlbGVjdGVkVG9nZ2xlc1swXS5nZXRUZXh0KCldO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNlbGVjdENvbmRpdGlvblZhbHVlKG9wZXJhdG9yOiAnQU5EJyB8ICdPUicpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25kaXRpb25CdXR0b25Ub2dnbGVHcm91cCA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uQnV0dG9uVG9nZ2xlR3JvdXAoKTtcbiAgICBjb25zdCB0b2dnbGVzID0gYXdhaXQgY29uZGl0aW9uQnV0dG9uVG9nZ2xlR3JvdXAuZ2V0VG9nZ2xlcyh7IHRleHQ6IG9wZXJhdG9yIH0pO1xuICAgIGlmICh0b2dnbGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBvcGVyYXRvciBzZWxlY3RlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdG9nZ2xlc1swXS5jaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNlbGVjdENvbmRpdGlvbkZpZWxkKGluZGV4OiBudW1iZXIsIGZpZWxkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25kaXRpb25EaXYgPSBhd2FpdCB0aGlzLmdldENvbmRpdGlvbkhhcm5lc3MoaW5kZXgpO1xuICAgIGlmICghY29uZGl0aW9uRGl2IHx8ICEoY29uZGl0aW9uRGl2IGluc3RhbmNlb2YgRGl2SGFybmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uZGl0aW9uIHdpdGggaW5kZXggJHtpbmRleH0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRTZWxlY3QgPSBhd2FpdCB0aGlzLmdldENvbmRpdGlvbkZpZWxkKGNvbmRpdGlvbkRpdik7XG4gICAgYXdhaXQgZmllbGRTZWxlY3QuY2xpY2tPcHRpb25zKHsgdGV4dDogZmllbGQgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2VsZWN0Q29uZGl0aW9uT3BlcmF0b3IoaW5kZXg6IG51bWJlciwgb3BlcmF0b3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbkRpdiA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uSGFybmVzcyhpbmRleCk7XG4gICAgaWYgKCFjb25kaXRpb25EaXYgfHwgIShjb25kaXRpb25EaXYgaW5zdGFuY2VvZiBEaXZIYXJuZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25kaXRpb24gd2l0aCBpbmRleCAke2luZGV4fSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gYXdhaXQgdGhpcy5nZXRDb25kaXRpb25UeXBlSGFybmVzcyhjb25kaXRpb25EaXYpO1xuICAgIGlmICghY29uZGl0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25kaXRpb24gdHlwZSBub3QgZm91bmQuIFNlbGVjdCBmaWVsZCBmaXJzdGApO1xuICAgIH1cblxuICAgIGF3YWl0IGNvbmRpdGlvblR5cGUuc2VsZWN0T3BlcmF0b3Iob3BlcmF0b3IpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbmRpdGlvbkF2YWlsYWJsZU9wZXJhdG9ycyhpbmRleDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbkRpdiA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uSGFybmVzcyhpbmRleCk7XG4gICAgaWYgKCFjb25kaXRpb25EaXYgfHwgIShjb25kaXRpb25EaXYgaW5zdGFuY2VvZiBEaXZIYXJuZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25kaXRpb24gd2l0aCBpbmRleCAke2luZGV4fSBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gYXdhaXQgdGhpcy5nZXRDb25kaXRpb25UeXBlSGFybmVzcyhjb25kaXRpb25EaXYpO1xuICAgIGlmICghY29uZGl0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25kaXRpb24gdHlwZSBub3QgZm91bmQuIFNlbGVjdCBmaWVsZCBmaXJzdGApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZGl0aW9uVHlwZS5nZXRBdmFpbGFibGVPcGVyYXRvcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRDb25kaXRpb25WYWx1ZShpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IERhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25kaXRpb25EaXYgPSBhd2FpdCB0aGlzLmdldENvbmRpdGlvbkhhcm5lc3MoaW5kZXgpO1xuICAgIGlmICghY29uZGl0aW9uRGl2IHx8ICEoY29uZGl0aW9uRGl2IGluc3RhbmNlb2YgRGl2SGFybmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uZGl0aW9uIHdpdGggaW5kZXggJHtpbmRleH0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uVHlwZSA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uVHlwZUhhcm5lc3MoY29uZGl0aW9uRGl2KTtcbiAgICBpZiAoIWNvbmRpdGlvblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29uZGl0aW9uIHR5cGUgbm90IGZvdW5kLiBTZWxlY3QgZmllbGQgZmlyc3RgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uVHlwZSBpbnN0YW5jZW9mIEdpb0VsRWRpdG9yVHlwZVN0cmluZ0hhcm5lc3MgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgYXdhaXQgY29uZGl0aW9uVHlwZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25UeXBlIGluc3RhbmNlb2YgR2lvRWxFZGl0b3JUeXBlQm9vbGVhbkhhcm5lc3MgJiYgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGF3YWl0IGNvbmRpdGlvblR5cGUuc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uVHlwZSBpbnN0YW5jZW9mIEdpb0VsRWRpdG9yVHlwZU51bWJlckhhcm5lc3MgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgYXdhaXQgY29uZGl0aW9uVHlwZS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25UeXBlIGluc3RhbmNlb2YgR2lvRWxFZGl0b3JUeXBlRGF0ZUhhcm5lc3MgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBhd2FpdCBjb25kaXRpb25UeXBlLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBjb25kaXRpb24gdHlwZWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb25kaXRpb25Hcm91cChpbmRleDogbnVtYmVyKTogUHJvbWlzZTxHaW9FbEVkaXRvckNvbmRpdGlvbkdyb3VwSGFybmVzcz4ge1xuICAgIGNvbnN0IGNvbmRpdGlvbkdyb3VwID0gYXdhaXQgdGhpcy5nZXRDb25kaXRpb25IYXJuZXNzKGluZGV4KTtcblxuICAgIGlmICghY29uZGl0aW9uR3JvdXAgfHwgIShjb25kaXRpb25Hcm91cCBpbnN0YW5jZW9mIEdpb0VsRWRpdG9yQ29uZGl0aW9uR3JvdXBIYXJuZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb25kaXRpb24gZ3JvdXAgd2l0aCBpbmRleCAke2luZGV4fSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmRpdGlvbkdyb3VwO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbmRpdGlvbnMoKTogUHJvbWlzZTxDb25kaXRpb25Hcm91cEhhcm5lc3NWYWx1ZXM+IHtcbiAgICBjb25zdCBnZXRDb25kaXRpb25zRGl2ID0gYXdhaXQgdGhpcy5nZXRDb25kaXRpb25zSGFybmVzcygpO1xuXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IGF3YWl0IHBhcmFsbGVsKCgpID0+XG4gICAgICBnZXRDb25kaXRpb25zRGl2Lm1hcChhc3luYyBjb25kaXRpb24gPT4ge1xuICAgICAgICBpZiAoY29uZGl0aW9uIGluc3RhbmNlb2YgR2lvRWxFZGl0b3JDb25kaXRpb25Hcm91cEhhcm5lc3MpIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgY29uZGl0aW9uLmdldENvbmRpdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25kaXRpb25GaWVsZCA9IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uRmllbGQoY29uZGl0aW9uKTtcblxuICAgICAgICBjb25zdCBjb25kaXRpb25UeXBlID0gYXdhaXQgdGhpcy5nZXRDb25kaXRpb25UeXBlSGFybmVzcyhjb25kaXRpb24pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkOiBhd2FpdCBjb25kaXRpb25GaWVsZC5nZXRWYWx1ZVRleHQoKSxcbiAgICAgICAgICBvcGVyYXRvcjogYXdhaXQgY29uZGl0aW9uVHlwZT8uZ2V0T3BlcmF0b3JWYWx1ZSgpLFxuICAgICAgICAgIHZhbHVlOiBhd2FpdCBjb25kaXRpb25UeXBlPy5nZXRWYWx1ZSgpLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb25kaXRpb246IGF3YWl0IHRoaXMuZ2V0Q29uZGl0aW9uVmFsdWUoKSxcbiAgICAgIGNvbmRpdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,58 @@
1
+ /*
2
+ * Copyright (C) 2024 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Component, Input } from '@angular/core';
17
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
18
+ import { isEmpty } from 'lodash';
19
+ import { MatFormFieldModule } from '@angular/material/form-field';
20
+ import { MatSelectModule } from '@angular/material/select';
21
+ import { CommonModule } from '@angular/common';
22
+ import { MatSlideToggle } from '@angular/material/slide-toggle';
23
+ import * as i0 from "@angular/core";
24
+ import * as i1 from "@angular/material/form-field";
25
+ import * as i2 from "@angular/material/select";
26
+ import * as i3 from "@angular/material/core";
27
+ import * as i4 from "@angular/forms";
28
+ export class GioElEditorTypeBooleanComponent {
29
+ constructor() {
30
+ this.operators = [
31
+ { label: 'Equals', value: 'EQUALS' },
32
+ { label: 'Not equals', value: 'NOT_EQUALS' },
33
+ ];
34
+ }
35
+ ngOnChanges(changes) {
36
+ if (changes.conditionFormGroup) {
37
+ const field = this.conditionFormGroup.controls.field.value;
38
+ if (isEmpty(field) || field?.type !== 'boolean') {
39
+ throw new Error('Boolean field is required!');
40
+ }
41
+ this.conditionFormGroup.addControl('operator', new FormControl(null));
42
+ this.conditionFormGroup.addControl('value', new FormControl(null));
43
+ this.conditionFormGroup.get('value')?.setValue(true);
44
+ }
45
+ }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioElEditorTypeBooleanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
47
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: GioElEditorTypeBooleanComponent, isStandalone: true, selector: "gio-el-editor-type-boolean", inputs: { conditionFormGroup: "conditionFormGroup" }, usesOnChanges: true, ngImport: i0, template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (conditionFormGroup) {\n <div [formGroup]=\"conditionFormGroup\" class=\"condition\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n\n <mat-select formControlName=\"operator\" placeholder=\"Select Operator\">\n @for (operator of operators; track operator.value) {\n <mat-option [value]=\"operator.value\">{{ operator.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-slide-toggle class=\"toggle\" #valueToggle formControlName=\"value\">\n <mat-label>{{ valueToggle.checked ? 'True' : 'False' }}</mat-label>\n </mat-slide-toggle>\n </div>\n}\n", styles: [".condition{display:flex;flex-direction:row;align-items:flex-start;gap:8px}.toggle{min-width:80px;align-self:center;margin-left:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
48
+ }
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GioElEditorTypeBooleanComponent, decorators: [{
50
+ type: Component,
51
+ args: [{ selector: 'gio-el-editor-type-boolean', standalone: true, imports: [CommonModule, MatFormFieldModule, MatSelectModule, ReactiveFormsModule, MatSlideToggle], template: "<!--\n\n Copyright (C) 2024 The Gravitee team (http://gravitee.io)\n \n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n@if (conditionFormGroup) {\n <div [formGroup]=\"conditionFormGroup\" class=\"condition\">\n <mat-form-field>\n <mat-label>Operator</mat-label>\n\n <mat-select formControlName=\"operator\" placeholder=\"Select Operator\">\n @for (operator of operators; track operator.value) {\n <mat-option [value]=\"operator.value\">{{ operator.label }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <mat-slide-toggle class=\"toggle\" #valueToggle formControlName=\"value\">\n <mat-label>{{ valueToggle.checked ? 'True' : 'False' }}</mat-label>\n </mat-slide-toggle>\n </div>\n}\n", styles: [".condition{display:flex;flex-direction:row;align-items:flex-start;gap:8px}.toggle{min-width:80px;align-self:center;margin-left:8px}\n"] }]
52
+ }], propDecorators: { conditionFormGroup: [{
53
+ type: Input,
54
+ args: [{
55
+ required: true,
56
+ }]
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvZ2lvLWVsL2dpby1lbC1lZGl0b3IvZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4vZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvZ2lvLWVsL2dpby1lbC1lZGl0b3IvZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4vZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7OztBQVloRSxNQUFNLE9BQU8sK0JBQStCO0lBUDVDO1FBYVksY0FBUyxHQUF5QztZQUMxRCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNwQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtTQUM3QyxDQUFDO0tBY0g7SUFaUSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7OEdBdEJVLCtCQUErQjtrR0FBL0IsK0JBQStCLGlLQ2pDNUMseXhDQWtDQSw4TERMWSxZQUFZLDhCQUFFLGtCQUFrQiwwU0FBRSxlQUFlLG1yQkFBRSxtQkFBbUIsb2xCQUFFLGNBQWM7OzJGQUlyRiwrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBQzFCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDOzhCQVExRixrQkFBa0I7c0JBSHhCLEtBQUs7dUJBQUM7d0JBQ0wsUUFBUSxFQUFFLElBQUk7cUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuXG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4uLy4uL21vZGVscy9PcGVyYXRvcic7XG5pbXBvcnQgeyBDb25kaXRpb25Gb3JtIH0gZnJvbSAnLi4vZ2lvLWVsLWVkaXRvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRTbGlkZVRvZ2dsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9naW8tZWwtZWRpdG9yLXR5cGUtYm9vbGVhbi5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEdpb0VsRWRpdG9yVHlwZUJvb2xlYW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoe1xuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9KVxuICBwdWJsaWMgY29uZGl0aW9uRm9ybUdyb3VwITogRm9ybUdyb3VwPENvbmRpdGlvbkZvcm0+O1xuXG4gIHByb3RlY3RlZCBvcGVyYXRvcnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IE9wZXJhdG9yIH1bXSA9IFtcbiAgICB7IGxhYmVsOiAnRXF1YWxzJywgdmFsdWU6ICdFUVVBTFMnIH0sXG4gICAgeyBsYWJlbDogJ05vdCBlcXVhbHMnLCB2YWx1ZTogJ05PVF9FUVVBTFMnIH0sXG4gIF07XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5jb25kaXRpb25Gb3JtR3JvdXApIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25kaXRpb25Gb3JtR3JvdXAuY29udHJvbHMuZmllbGQudmFsdWU7XG4gICAgICBpZiAoaXNFbXB0eShmaWVsZCkgfHwgZmllbGQ/LnR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb2xlYW4gZmllbGQgaXMgcmVxdWlyZWQhJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woJ29wZXJhdG9yJywgbmV3IEZvcm1Db250cm9sKG51bGwpKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woJ3ZhbHVlJywgbmV3IEZvcm1Db250cm9sKG51bGwpKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uRm9ybUdyb3VwLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodHJ1ZSk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAgICBcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICBcbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICAgIFxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbkBpZiAoY29uZGl0aW9uRm9ybUdyb3VwKSB7XG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJjb25kaXRpb25Gb3JtR3JvdXBcIiBjbGFzcz1cImNvbmRpdGlvblwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+T3BlcmF0b3I8L21hdC1sYWJlbD5cblxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBPcGVyYXRvclwiPlxuICAgICAgICBAZm9yIChvcGVyYXRvciBvZiBvcGVyYXRvcnM7IHRyYWNrIG9wZXJhdG9yLnZhbHVlKSB7XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9wZXJhdG9yLnZhbHVlXCI+e3sgb3BlcmF0b3IubGFiZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJ0b2dnbGVcIiAjdmFsdWVUb2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgdmFsdWVUb2dnbGUuY2hlY2tlZCA/ICdUcnVlJyA6ICdGYWxzZScgfX08L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxufVxuIl19
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright (C) 2024 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ComponentHarness, parallel } from '@angular/cdk/testing';
17
+ import { MatSlideToggleHarness } from '@angular/material/slide-toggle/testing';
18
+ import { MatSelectHarness } from '@angular/material/select/testing';
19
+ export class GioElEditorTypeBooleanHarness extends ComponentHarness {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.getOperatorSelector = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName="operator"]' }));
23
+ }
24
+ static { this.hostSelector = 'gio-el-editor-type-boolean'; }
25
+ async getAvailableOperators() {
26
+ const operatorSelector = await this.getOperatorSelector();
27
+ await operatorSelector.open();
28
+ const options = await operatorSelector.getOptions();
29
+ return parallel(() => options.map(option => option.getText()));
30
+ }
31
+ async selectOperator(operator) {
32
+ const operatorSelector = await this.getOperatorSelector();
33
+ await operatorSelector.clickOptions({ text: operator });
34
+ }
35
+ async getOperatorValue() {
36
+ const operatorSelector = await this.getOperatorSelector();
37
+ return operatorSelector.getValueText();
38
+ }
39
+ async getValue() {
40
+ const slideToggleHarness = await this.locatorFor(MatSlideToggleHarness)();
41
+ return await slideToggleHarness.isChecked();
42
+ }
43
+ async setValue(value) {
44
+ const slideToggleHarness = await this.locatorFor(MatSlideToggleHarness)();
45
+ if (value !== (await slideToggleHarness.isChecked())) {
46
+ await slideToggleHarness.toggle();
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWVsLWVkaXRvci10eXBlLWJvb2xlYW4uaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXBhcnRpY2xlcy1hbmd1bGFyL2dpby1lbC9naW8tZWwtZWRpdG9yL2dpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuL2dpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuLmhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQUFuRTs7UUFHUyx3QkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQThCcEgsQ0FBQzthQWhDZSxpQkFBWSxHQUFHLDRCQUE0QixBQUEvQixDQUFnQztJQUluRCxLQUFLLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMxRCxNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBZ0I7UUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFELE1BQU0sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFELE9BQU8sZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLE1BQU0sa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYztRQUNsQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7UUFDMUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxNQUFNLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudEhhcm5lc3MsIHBhcmFsbGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0U2VsZWN0SGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdC90ZXN0aW5nJztcblxuZXhwb3J0IGNsYXNzIEdpb0VsRWRpdG9yVHlwZUJvb2xlYW5IYXJuZXNzIGV4dGVuZHMgQ29tcG9uZW50SGFybmVzcyB7XG4gIHB1YmxpYyBzdGF0aWMgaG9zdFNlbGVjdG9yID0gJ2dpby1lbC1lZGl0b3ItdHlwZS1ib29sZWFuJztcblxuICBwdWJsaWMgZ2V0T3BlcmF0b3JTZWxlY3RvciA9IHRoaXMubG9jYXRvckZvcihNYXRTZWxlY3RIYXJuZXNzLndpdGgoeyBzZWxlY3RvcjogJ1tmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiXScgfSkpO1xuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVPcGVyYXRvcnMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IG9wZXJhdG9yU2VsZWN0b3IgPSBhd2FpdCB0aGlzLmdldE9wZXJhdG9yU2VsZWN0b3IoKTtcbiAgICBhd2FpdCBvcGVyYXRvclNlbGVjdG9yLm9wZW4oKTtcbiAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgb3BlcmF0b3JTZWxlY3Rvci5nZXRPcHRpb25zKCk7XG4gICAgcmV0dXJuIHBhcmFsbGVsKCgpID0+IG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24uZ2V0VGV4dCgpKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2VsZWN0T3BlcmF0b3Iob3BlcmF0b3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9wZXJhdG9yU2VsZWN0b3IgPSBhd2FpdCB0aGlzLmdldE9wZXJhdG9yU2VsZWN0b3IoKTtcbiAgICBhd2FpdCBvcGVyYXRvclNlbGVjdG9yLmNsaWNrT3B0aW9ucyh7IHRleHQ6IG9wZXJhdG9yIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9wZXJhdG9yVmFsdWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBvcGVyYXRvclNlbGVjdG9yID0gYXdhaXQgdGhpcy5nZXRPcGVyYXRvclNlbGVjdG9yKCk7XG4gICAgcmV0dXJuIG9wZXJhdG9yU2VsZWN0b3IuZ2V0VmFsdWVUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2xpZGVUb2dnbGVIYXJuZXNzID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yKE1hdFNsaWRlVG9nZ2xlSGFybmVzcykoKTtcbiAgICByZXR1cm4gYXdhaXQgc2xpZGVUb2dnbGVIYXJuZXNzLmlzQ2hlY2tlZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFZhbHVlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2xpZGVUb2dnbGVIYXJuZXNzID0gYXdhaXQgdGhpcy5sb2NhdG9yRm9yKE1hdFNsaWRlVG9nZ2xlSGFybmVzcykoKTtcbiAgICBpZiAodmFsdWUgIT09IChhd2FpdCBzbGlkZVRvZ2dsZUhhcm5lc3MuaXNDaGVja2VkKCkpKSB7XG4gICAgICBhd2FpdCBzbGlkZVRvZ2dsZUhhcm5lc3MudG9nZ2xlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=