novo-elements 7.3.0-next.4 → 7.4.0-next.2

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 (184) hide show
  1. package/elements/button/styles/button-dialogue.scss +3 -0
  2. package/elements/button/styles/button-icon.scss +3 -0
  3. package/elements/button/styles/button.scss +4 -2
  4. package/elements/chips/ChipList.scss +12 -0
  5. package/elements/chips/Chips.scss +1 -1
  6. package/elements/common/typography/text.mixins.scss +7 -2
  7. package/elements/expansion/_expansion-theme.scss +2 -2
  8. package/elements/expansion/expansion-panel-header.scss +11 -8
  9. package/elements/expansion/expansion-panel.scss +1 -1
  10. package/elements/field/field.scss +10 -1
  11. package/elements/icon/Icon.scss +16 -0
  12. package/elements/query-builder/condition-builder/condition-builder.component.scss +66 -0
  13. package/elements/query-builder/condition-group/condition-group.component.scss +12 -0
  14. package/elements/query-builder/criteria-builder/criteria-builder.component.scss +9 -0
  15. package/elements/search/SearchBox.scss +24 -2
  16. package/elements/select/Select.scss +1 -1
  17. package/elements/select-search/select-search.component.scss +13 -68
  18. package/esm2020/src/elements/breadcrumbs/breadcrumb-item/BreadcrumbItem.mjs +2 -2
  19. package/esm2020/src/elements/button/Button.mjs +2 -2
  20. package/esm2020/src/elements/card/Card.mjs +1 -1
  21. package/esm2020/src/elements/chips/Chip.mjs +2 -2
  22. package/esm2020/src/elements/chips/ChipList.mjs +8 -4
  23. package/esm2020/src/elements/chips/Chips.mjs +1 -1
  24. package/esm2020/src/elements/color-picker/color-input.component.mjs +1 -1
  25. package/esm2020/src/elements/common/common.module.mjs +13 -3
  26. package/esm2020/src/elements/common/directives/switch-cases.directive.mjs +43 -0
  27. package/esm2020/src/elements/common/directives/visible.directive.mjs +34 -0
  28. package/esm2020/src/elements/common/index.mjs +3 -1
  29. package/esm2020/src/elements/common/option/optgroup.component.mjs +2 -2
  30. package/esm2020/src/elements/common/option/option.component.mjs +2 -2
  31. package/esm2020/src/elements/common/overlay/Overlay.mjs +19 -9
  32. package/esm2020/src/elements/common/typography/base/base-text.component.mjs +29 -2
  33. package/esm2020/src/elements/common/typography/caption/caption.component.mjs +2 -2
  34. package/esm2020/src/elements/common/typography/label/label.component.mjs +2 -2
  35. package/esm2020/src/elements/common/typography/link/link.component.mjs +2 -2
  36. package/esm2020/src/elements/common/typography/text/text.component.mjs +2 -2
  37. package/esm2020/src/elements/common/typography/title/title.component.mjs +2 -2
  38. package/esm2020/src/elements/data-table/cell-headers/data-table-header-cell.component.mjs +1 -1
  39. package/esm2020/src/elements/data-table/data-table-clear-button.component.mjs +26 -12
  40. package/esm2020/src/elements/data-table/data-table.component.mjs +17 -21
  41. package/esm2020/src/elements/data-table/data-table.source.mjs +2 -2
  42. package/esm2020/src/elements/data-table/interfaces.mjs +1 -1
  43. package/esm2020/src/elements/data-table/services/remote-data-table.service.mjs +1 -1
  44. package/esm2020/src/elements/data-table/services/static-data-table.service.mjs +2 -2
  45. package/esm2020/src/elements/data-table/sort-filter/sort-button.component.mjs +2 -2
  46. package/esm2020/src/elements/data-table/state/data-table-state.service.mjs +32 -3
  47. package/esm2020/src/elements/date-picker/DatePicker.mjs +15 -3
  48. package/esm2020/src/elements/date-picker/DatePickerInput.mjs +1 -1
  49. package/esm2020/src/elements/date-picker/DateRangeInput.mjs +1 -1
  50. package/esm2020/src/elements/date-picker/MultiDateInput.mjs +1 -1
  51. package/esm2020/src/elements/date-picker/date-picker.types.mjs +1 -1
  52. package/esm2020/src/elements/dropdown/Dropdown.mjs +1 -1
  53. package/esm2020/src/elements/expansion/expansion-animations.mjs +2 -2
  54. package/esm2020/src/elements/expansion/expansion-panel-header.mjs +3 -3
  55. package/esm2020/src/elements/expansion/expansion-panel.mjs +3 -3
  56. package/esm2020/src/elements/field/autocomplete/autocomplete.component.mjs +2 -5
  57. package/esm2020/src/elements/field/field.mjs +14 -4
  58. package/esm2020/src/elements/field/field.module.mjs +6 -1
  59. package/esm2020/src/elements/field/formats/base-format.mjs +7 -1
  60. package/esm2020/src/elements/field/formats/date-format.mjs +9 -18
  61. package/esm2020/src/elements/field/formats/date-range-format.mjs +142 -0
  62. package/esm2020/src/elements/field/formats/time-format.mjs +7 -10
  63. package/esm2020/src/elements/field/hint/hint.mjs +2 -2
  64. package/esm2020/src/elements/field/index.mjs +2 -1
  65. package/esm2020/src/elements/field/toggle/picker-toggle.component.mjs +29 -8
  66. package/esm2020/src/elements/form/DynamicForm.mjs +1 -1
  67. package/esm2020/src/elements/header/Header.mjs +7 -5
  68. package/esm2020/src/elements/icon/Icon.mjs +10 -4
  69. package/esm2020/src/elements/index.mjs +2 -1
  70. package/esm2020/src/elements/list/List.mjs +1 -1
  71. package/esm2020/src/elements/menu/menu-content.component.mjs +2 -2
  72. package/esm2020/src/elements/modal/modal-container.component.mjs +9 -4
  73. package/esm2020/src/elements/non-ideal-state/NonIdealState.mjs +6 -2
  74. package/esm2020/src/elements/picker/Picker.mjs +1 -1
  75. package/esm2020/src/elements/picker/Picker.module.mjs +5 -4
  76. package/esm2020/src/elements/picker/extras/base-picker-results/BasePickerResults.mjs +2 -2
  77. package/esm2020/src/elements/picker/extras/entity-picker-results/EntityPickerResults.mjs +34 -31
  78. package/esm2020/src/elements/picker/extras/picker-results/PickerResults.mjs +5 -4
  79. package/esm2020/src/elements/picker/extras/skills-picker-results/SkillsSpecialtyPickerResults.mjs +7 -6
  80. package/esm2020/src/elements/query-builder/condition-builder/condition-builder.component.mjs +195 -0
  81. package/esm2020/src/elements/query-builder/condition-definitions/abstract-condition.definition.mjs +51 -0
  82. package/esm2020/src/elements/query-builder/condition-definitions/address-condition.definition.mjs +55 -0
  83. package/esm2020/src/elements/query-builder/condition-definitions/boolean-condition.definition.mjs +59 -0
  84. package/esm2020/src/elements/query-builder/condition-definitions/date-condition.definition.mjs +119 -0
  85. package/esm2020/src/elements/query-builder/condition-definitions/id-condition.definition.mjs +54 -0
  86. package/esm2020/src/elements/query-builder/condition-definitions/number-condition.definition.mjs +57 -0
  87. package/esm2020/src/elements/query-builder/condition-definitions/picker-condition.definition.mjs +66 -0
  88. package/esm2020/src/elements/query-builder/condition-definitions/string-condition.definition.mjs +127 -0
  89. package/esm2020/src/elements/query-builder/condition-group/condition-group.component.mjs +97 -0
  90. package/esm2020/src/elements/query-builder/criteria-builder/criteria-builder.component.mjs +158 -0
  91. package/esm2020/src/elements/query-builder/index.mjs +15 -0
  92. package/esm2020/src/elements/query-builder/query-builder.directives.mjs +101 -0
  93. package/esm2020/src/elements/query-builder/query-builder.module.mjs +172 -0
  94. package/esm2020/src/elements/query-builder/query-builder.service.mjs +87 -0
  95. package/esm2020/src/elements/query-builder/query-builder.tokens.mjs +5 -0
  96. package/esm2020/src/elements/query-builder/query-builder.types.mjs +7 -0
  97. package/esm2020/src/elements/quick-note/QuickNote.module.mjs +5 -4
  98. package/esm2020/src/elements/quick-note/extras/quick-note-results/QuickNoteResults.mjs +5 -4
  99. package/esm2020/src/elements/search/SearchBox.mjs +36 -8
  100. package/esm2020/src/elements/select/Select.mjs +10 -6
  101. package/esm2020/src/elements/select/Select.module.mjs +5 -1
  102. package/esm2020/src/elements/select-search/select-search.component.mjs +22 -20
  103. package/esm2020/src/elements/select-search/select-search.module.mjs +6 -2
  104. package/esm2020/src/elements/simple-table/table.mjs +2 -2
  105. package/esm2020/src/elements/stepper/step-header.component.mjs +1 -1
  106. package/esm2020/src/elements/stepper/step-status.component.mjs +1 -1
  107. package/esm2020/src/elements/switch/Switch.mjs +1 -1
  108. package/esm2020/src/elements/table/Table.mjs +1 -1
  109. package/esm2020/src/elements/time-picker/TimePickerInput.mjs +1 -1
  110. package/esm2020/src/elements/tip-well/TipWell.mjs +9 -5
  111. package/esm2020/src/elements/tooltip/Tooltip.directive.mjs +5 -2
  112. package/esm2020/src/elements/value/Value.mjs +1 -1
  113. package/esm2020/src/novo-elements.module.mjs +7 -3
  114. package/esm2020/src/pipes/Pipes.module.mjs +5 -4
  115. package/esm2020/src/pipes/highlight/Highlight.mjs +22 -0
  116. package/esm2020/src/pipes/highlight/index.mjs +2 -0
  117. package/esm2020/src/pipes/index.mjs +2 -1
  118. package/esm2020/src/services/novo-label-service.mjs +25 -1
  119. package/fesm2015/novo-elements.mjs +1925 -261
  120. package/fesm2015/novo-elements.mjs.map +1 -1
  121. package/fesm2020/novo-elements.mjs +1915 -261
  122. package/fesm2020/novo-elements.mjs.map +1 -1
  123. package/novo-elements.scss +4 -0
  124. package/package.json +1 -1
  125. package/src/elements/common/common.module.d.ts +5 -3
  126. package/src/elements/common/directives/switch-cases.directive.d.ts +16 -0
  127. package/src/elements/common/directives/visible.directive.d.ts +10 -0
  128. package/src/elements/common/index.d.ts +2 -0
  129. package/src/elements/common/overlay/Overlay.d.ts +3 -1
  130. package/src/elements/common/typography/base/base-text.component.d.ts +4 -1
  131. package/src/elements/data-table/data-table-clear-button.component.d.ts +3 -1
  132. package/src/elements/data-table/interfaces.d.ts +15 -1
  133. package/src/elements/data-table/services/remote-data-table.service.d.ts +4 -1
  134. package/src/elements/data-table/services/static-data-table.service.d.ts +4 -1
  135. package/src/elements/data-table/state/data-table-state.service.d.ts +5 -0
  136. package/src/elements/date-picker/DatePicker.d.ts +1 -0
  137. package/src/elements/date-picker/date-picker.types.d.ts +5 -1
  138. package/src/elements/field/field.d.ts +1 -0
  139. package/src/elements/field/field.module.d.ts +10 -9
  140. package/src/elements/field/formats/base-format.d.ts +5 -0
  141. package/src/elements/field/formats/date-format.d.ts +3 -7
  142. package/src/elements/field/formats/date-range-format.d.ts +35 -0
  143. package/src/elements/field/formats/time-format.d.ts +2 -2
  144. package/src/elements/field/index.d.ts +1 -0
  145. package/src/elements/field/toggle/picker-toggle.component.d.ts +7 -3
  146. package/src/elements/header/Header.d.ts +2 -1
  147. package/src/elements/icon/Icon.d.ts +2 -1
  148. package/src/elements/index.d.ts +1 -0
  149. package/src/elements/modal/modal-container.component.d.ts +2 -0
  150. package/src/elements/non-ideal-state/NonIdealState.d.ts +1 -1
  151. package/src/elements/picker/Picker.module.d.ts +8 -7
  152. package/src/elements/picker/extras/base-picker-results/BasePickerResults.d.ts +1 -1
  153. package/src/elements/picker/extras/entity-picker-results/EntityPickerResults.d.ts +1 -1
  154. package/src/elements/query-builder/condition-builder/condition-builder.component.d.ts +69 -0
  155. package/src/elements/query-builder/condition-definitions/abstract-condition.definition.d.ts +21 -0
  156. package/src/elements/query-builder/condition-definitions/address-condition.definition.d.ts +10 -0
  157. package/src/elements/query-builder/condition-definitions/boolean-condition.definition.d.ts +10 -0
  158. package/src/elements/query-builder/condition-definitions/date-condition.definition.d.ts +17 -0
  159. package/src/elements/query-builder/condition-definitions/id-condition.definition.d.ts +10 -0
  160. package/src/elements/query-builder/condition-definitions/number-condition.definition.d.ts +11 -0
  161. package/src/elements/query-builder/condition-definitions/picker-condition.definition.d.ts +10 -0
  162. package/src/elements/query-builder/condition-definitions/string-condition.definition.d.ts +19 -0
  163. package/src/elements/query-builder/condition-group/condition-group.component.d.ts +30 -0
  164. package/src/elements/query-builder/criteria-builder/criteria-builder.component.d.ts +38 -0
  165. package/src/elements/query-builder/index.d.ts +14 -0
  166. package/src/elements/query-builder/query-builder.directives.d.ts +66 -0
  167. package/src/elements/query-builder/query-builder.module.d.ts +39 -0
  168. package/src/elements/query-builder/query-builder.service.d.ts +51 -0
  169. package/src/elements/query-builder/query-builder.tokens.d.ts +4 -0
  170. package/src/elements/query-builder/query-builder.types.d.ts +42 -0
  171. package/src/elements/quick-note/QuickNote.module.d.ts +2 -1
  172. package/src/elements/search/SearchBox.d.ts +6 -1
  173. package/src/elements/select/Select.d.ts +3 -0
  174. package/src/elements/select/Select.module.d.ts +3 -2
  175. package/src/elements/select-search/select-search.module.d.ts +2 -1
  176. package/src/elements/tip-well/TipWell.d.ts +1 -1
  177. package/src/elements/tooltip/Tooltip.directive.d.ts +2 -2
  178. package/src/novo-elements.module.d.ts +2 -1
  179. package/src/pipes/Pipes.module.d.ts +7 -6
  180. package/src/pipes/highlight/Highlight.d.ts +9 -0
  181. package/src/pipes/highlight/index.d.ts +1 -0
  182. package/src/pipes/index.d.ts +1 -0
  183. package/src/services/novo-label-service.d.ts +24 -0
  184. package/styles/themes/light-test.scss +107 -0
@@ -0,0 +1,97 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input } from '@angular/core';
2
+ import { ControlContainer, FormBuilder, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
+ import { merge, Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { QueryBuilderService } from '../query-builder.service';
6
+ import { Conjunction } from '../query-builder.types';
7
+ import { NovoLabelService } from '../../../services/novo-label-service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../query-builder.service";
10
+ import * as i2 from "../../../services/novo-label-service";
11
+ import * as i3 from "@angular/forms";
12
+ import * as i4 from "../../flex/Flex";
13
+ import * as i5 from "../../dropdown/Dropdown";
14
+ import * as i6 from "../../button/Button";
15
+ import * as i7 from "../../common/option/optgroup.component";
16
+ import * as i8 from "../../common/option/option.component";
17
+ import * as i9 from "../../common/typography/label/label.component";
18
+ import * as i10 from "../condition-builder/condition-builder.component";
19
+ import * as i11 from "../../common/directives/space.directive";
20
+ import * as i12 from "@angular/common";
21
+ import * as i13 from "../../common/directives/theme.directive";
22
+ const EMPTY_CONDITION = {
23
+ field: null,
24
+ operator: null,
25
+ value: null,
26
+ };
27
+ export class ConditionGroupComponent {
28
+ constructor(qbs, labels, controlContainer, formBuilder, cdr) {
29
+ this.qbs = qbs;
30
+ this.labels = labels;
31
+ this.controlContainer = controlContainer;
32
+ this.formBuilder = formBuilder;
33
+ this.cdr = cdr;
34
+ this.controlName = '$' + Conjunction.AND;
35
+ /** Subject that emits when the component has been destroyed. */
36
+ this._onDestroy = new Subject();
37
+ }
38
+ ngOnInit() {
39
+ this.parentForm = this.controlContainer.control;
40
+ this.controlName = Object.keys(this.parentForm.controls)[0];
41
+ merge(this.parentForm.parent.valueChanges, this.qbs.stateChanges)
42
+ .pipe(takeUntil(this._onDestroy))
43
+ .subscribe(() => this.cdr.markForCheck());
44
+ }
45
+ ngOnDestroy() {
46
+ this._onDestroy.next();
47
+ this._onDestroy.complete();
48
+ }
49
+ updateControlName(value) {
50
+ const name = `$${value.replace('$', '')}`;
51
+ if (name !== this.controlName) {
52
+ const current = this.parentForm.get(this.controlName).value;
53
+ this.parentForm.controls[name] = this.parentForm.controls[this.controlName];
54
+ delete this.parentForm.controls[this.controlName];
55
+ this.controlName = name;
56
+ this.parentForm.get(this.controlName).setValue(current);
57
+ this.cdr.markForCheck();
58
+ }
59
+ }
60
+ get root() {
61
+ return this.parentForm.get(this.controlName);
62
+ }
63
+ addCondition(data) {
64
+ const conditon = this.newCondition(data);
65
+ this.root.push(conditon);
66
+ this.cdr.markForCheck();
67
+ }
68
+ removeCondition(index) {
69
+ this.root.removeAt(index);
70
+ this.cdr.markForCheck();
71
+ }
72
+ newCondition({ field, operator, value } = EMPTY_CONDITION) {
73
+ return this.formBuilder.group({
74
+ field: [field, Validators.required],
75
+ operator: [operator, Validators.required],
76
+ value: [value, Validators.required],
77
+ });
78
+ }
79
+ cantRemoveRow(isFirst) {
80
+ if (this.parentForm.parent.length > 1)
81
+ return false;
82
+ return this.root.length <= 1;
83
+ }
84
+ }
85
+ ConditionGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionGroupComponent, deps: [{ token: i1.QueryBuilderService }, { token: i2.NovoLabelService }, { token: i3.ControlContainer }, { token: i3.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
86
+ ConditionGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ConditionGroupComponent, selector: "novo-condition-group", inputs: { controlName: "controlName", groupIndex: "groupIndex" }, host: { classAttribute: "novo-condition-group" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], ngImport: i0, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n\n\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}\n"], components: [{ type: i4.NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { type: i4.NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { type: i5.NovoDropdownElement, selector: "novo-dropdown", inputs: ["parentScrollSelector", "parentScrollAction", "containerClass", "side", "scrollStrategy", "keepOpen", "height", "width", "appendToBody", "multiple"], outputs: ["toggled"] }, { type: i6.NovoButtonElement, selector: "novo-button,button[theme]", inputs: ["color", "side", "size", "theme", "loading", "icon", "disabled"] }, { type: i7.NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { type: i8.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { type: i9.NovoLabel, selector: "novo-label,[novo-label]" }, { type: i10.ConditionBuilderComponent, selector: "novo-condition-builder", inputs: ["label", "isFirst", "andIndex", "groupIndex"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i11.GapDirective, selector: "[gap]", inputs: ["gap"] }, { type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: i11.PaddingDirective, selector: "[p],[padding],[paddingTop],[paddingRight],[paddingBottom],[paddingLeft],[paddingX],[paddingY],[pt],[pr],[pb],[pl],[px],[py]", inputs: ["padding", "p", "paddingLeft", "pl", "paddingRight", "pr", "paddingTop", "pt", "paddingBottom", "pb", "paddingX", "px", "paddingY", "py"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionGroupComponent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'novo-condition-group', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], host: {
90
+ class: 'novo-condition-group',
91
+ }, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n\n\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}\n"] }]
92
+ }], ctorParameters: function () { return [{ type: i1.QueryBuilderService }, { type: i2.NovoLabelService }, { type: i3.ControlContainer }, { type: i3.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { controlName: [{
93
+ type: Input
94
+ }], groupIndex: [{
95
+ type: Input
96
+ }] } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3F1ZXJ5LWJ1aWxkZXIvY29uZGl0aW9uLWdyb3VwL2NvbmRpdGlvbi1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1ncm91cC9jb25kaXRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWEsV0FBVyxFQUFhLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BILE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQWEsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQUV4RSxNQUFNLGVBQWUsR0FBYztJQUNqQyxLQUFLLEVBQUUsSUFBSTtJQUNYLFFBQVEsRUFBRSxJQUFJO0lBQ2QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBV0YsTUFBTSxPQUFPLHVCQUF1QjtJQVNsQyxZQUNTLEdBQXdCLEVBQ3hCLE1BQXdCLEVBQ3ZCLGdCQUFrQyxFQUNsQyxXQUF3QixFQUN4QixHQUFzQjtRQUp2QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYnZCLGdCQUFXLEdBQVcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFLckQsZ0VBQWdFO1FBQy9DLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBUS9DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBb0IsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO2FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBYyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBVTtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxLQUFnQixlQUFlO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDekMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixJQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7O3FIQXBFVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixtS0FMdkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLDBCQ2xCbEgsMjBEQThCTTs0RkRQTyx1QkFBdUI7a0JBVm5DLFNBQVM7K0JBQ0Usc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUMxRzt3QkFDSixLQUFLLEVBQUUsc0JBQXNCO3FCQUM5QjtrT0FHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBDb25qdW5jdGlvbiB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIudHlwZXMnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdm8tbGFiZWwtc2VydmljZSc7XG5cbmNvbnN0IEVNUFRZX0NPTkRJVElPTjogQ29uZGl0aW9uID0ge1xuICBmaWVsZDogbnVsbCxcbiAgb3BlcmF0b3I6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tY29uZGl0aW9uLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbmRpdGlvbi1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29uZGl0aW9uR3JvdXBDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbm92by1jb25kaXRpb24tZ3JvdXAnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29udHJvbE5hbWU6IHN0cmluZyA9ICckJyArIENvbmp1bmN0aW9uLkFORDtcbiAgQElucHV0KCkgZ3JvdXBJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBwYXJlbnRGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBpbm5lckZvcm06IEZvcm1Hcm91cDtcbiAgLyoqIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBxYnM6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgcHVibGljIGxhYmVsczogTm92b0xhYmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYXJlbnRGb3JtID0gdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgIHRoaXMuY29udHJvbE5hbWUgPSBPYmplY3Qua2V5cyh0aGlzLnBhcmVudEZvcm0uY29udHJvbHMpWzBdO1xuICAgIG1lcmdlKHRoaXMucGFyZW50Rm9ybS5wYXJlbnQudmFsdWVDaGFuZ2VzLCB0aGlzLnFicy5zdGF0ZUNoYW5nZXMpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbnRyb2xOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuYW1lID0gYCQke3ZhbHVlLnJlcGxhY2UoJyQnLCAnJyl9YDtcbiAgICBpZiAobmFtZSAhPT0gdGhpcy5jb250cm9sTmFtZSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMucGFyZW50Rm9ybS5nZXQodGhpcy5jb250cm9sTmFtZSkudmFsdWU7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uY29udHJvbHNbbmFtZV0gPSB0aGlzLnBhcmVudEZvcm0uY29udHJvbHNbdGhpcy5jb250cm9sTmFtZV07XG4gICAgICBkZWxldGUgdGhpcy5wYXJlbnRGb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbE5hbWVdO1xuICAgICAgdGhpcy5jb250cm9sTmFtZSA9IG5hbWU7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KHRoaXMuY29udHJvbE5hbWUpLnNldFZhbHVlKGN1cnJlbnQpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvb3QoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtLmdldCh0aGlzLmNvbnRyb2xOYW1lKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oZGF0YT86IGFueSkge1xuICAgIGNvbnN0IGNvbmRpdG9uID0gdGhpcy5uZXdDb25kaXRpb24oZGF0YSk7XG4gICAgdGhpcy5yb290LnB1c2goY29uZGl0b24pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlQ29uZGl0aW9uKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnJvb3QucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmV3Q29uZGl0aW9uKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9OiBDb25kaXRpb24gPSBFTVBUWV9DT05ESVRJT04pOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpZWxkOiBbZmllbGQsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgb3BlcmF0b3I6IFtvcGVyYXRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbnRSZW1vdmVSb3coaXNGaXJzdDogYm9vbGVhbikge1xuICAgIGlmICgodGhpcy5wYXJlbnRGb3JtLnBhcmVudCBhcyBGb3JtQXJyYXkpLmxlbmd0aCA+IDEpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5yb290Lmxlbmd0aCA8PSAxO1xuICB9XG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwicGFyZW50Rm9ybVwiIGNsYXNzPVwiY29uZGl0aW9uLWdyb3VwLWNvbnRhaW5lclwiPlxuICA8bm92by1zdGFjayBbZm9ybUFycmF5TmFtZV09XCJjb250cm9sTmFtZVwiIGdhcD1cIm1kXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwibGV0IGFuZEdyb3VwIG9mIHJvb3QuY29udHJvbHM7IGxldCBhbmRJbmRleCA9IGluZGV4OyBsZXQgaXNGaXJzdCA9IGZpcnN0O2xldCBpc0xhc3QgPSBsYXN0O1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJhbmRJbmRleFwiPlxuICAgICAgICA8bm92by1mbGV4IGNsYXNzPVwiY29uZGl0aW9uLXJvd1wiIGFsaWduPVwiZW5kXCIgZ2FwPVwic21cIj5cbiAgICAgICAgICA8bm92by1kcm9wZG93biAqbmdJZj1cIiFpc0ZpcnN0ICYmIHFicy5hbGxvd2VkR3JvdXBpbmdzLmxlbmd0aCA+IDE7IGVsc2UgbGFiZWxlZEdyb3VwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHRoZW1lPVwiZGlhbG9ndWVcIiBpY29uPVwiY29sbGFwc2VcIiBzaXplPVwic21cIj57e3Ficy5nZXRDb25qdW5jdGlvbkxhYmVsKGNvbnRyb2xOYW1lKX19PC9idXR0b24+XG4gICAgICAgICAgICA8bm92by1vcHRncm91cD5cbiAgICAgICAgICAgICAgPG5vdm8tb3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIHFicy5hbGxvd2VkR3JvdXBpbmdzXCIgKGNsaWNrKT1cInVwZGF0ZUNvbnRyb2xOYW1lKGMpXCI+XG4gICAgICAgICAgICAgICAge3txYnMuZ2V0Q29uanVuY3Rpb25MYWJlbChjKX19PC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICAgIDwvbm92by1vcHRncm91cD5cbiAgICAgICAgICA8L25vdm8tZHJvcGRvd24+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbGVkR3JvdXA+XG4gICAgICAgICAgICA8bm92by1sYWJlbCAqbmdJZj1cIiFpc0ZpcnN0XCIgY29sb3I9XCJhc2hcIiBzaXplPVwieHNcIiB1cHBlcmNhc2UgcGFkZGluZz1cInNtXCI+XG4gICAgICAgICAgICAgIHt7cWJzLmdldENvbmp1bmN0aW9uTGFiZWwoY29udHJvbE5hbWUpfX08L25vdm8tbGFiZWw+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bm92by1jb25kaXRpb24tYnVpbGRlciBbZ3JvdXBJbmRleF09XCJncm91cEluZGV4XCIgW2FuZEluZGV4XT1cImFuZEluZGV4XCIgW2lzRmlyc3RdPVwiaXNGaXJzdFwiPjwvbm92by1jb25kaXRpb24tYnVpbGRlcj5cbiAgICAgICAgICA8bm92by1idXR0b24gdGhlbWU9XCJpY29uXCIgaWNvbj1cImRlbGV0ZS1vXCIgY29sb3I9XCJuZWdhdGl2ZVwiIChjbGljayk9XCJyZW1vdmVDb25kaXRpb24oYW5kSW5kZXgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYW50UmVtb3ZlUm93KGlzRmlyc3QpXCI+XG4gICAgICAgICAgPC9ub3ZvLWJ1dHRvbj5cbiAgICAgICAgPC9ub3ZvLWZsZXg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8YnV0dG9uIHRoZW1lPVwiZGlhbG9ndWVcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGQtYWR2YW5jZWQtc2VhcmNoLWNvbmRpdGlvblwiIGljb249XCJhZGQtdGhpblwiIHNpZGU9XCJsZWZ0XCIgc2l6ZT1cInNtXCIgdXBwZXJjYXNlIHBhZGRpbmc9XCJzbVwiIChjbGljayk9XCJhZGRDb25kaXRpb24oKVwiPlxuICAgICAge3sgbGFiZWxzLmFkZENvbmRpdGlvbiB9fTwvYnV0dG9uPlxuICA8L25vdm8tc3RhY2s+XG5cblxuICA8IS0tIDxidXR0b24gY2xhc3M9XCJhbmQtb3ItYnV0dG9uXCIgdGhlbWU9XCJzZWNvbmRhcnlcIiBzaXplPVwic21cIiAoY2xpY2spPVwiYWRkUm9vdENvbmRpdGlvbigpXCI+e3sgYWRkQ3JpdGVyaWFMYWJlbCB9fTwvYnV0dG9uPiAtLT5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,158 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, forwardRef, Input, QueryList, } from '@angular/core';
2
+ import { ControlContainer, FormBuilder, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
3
+ import { interval, Subject } from 'rxjs';
4
+ import { debounce, takeUntil } from 'rxjs/operators';
5
+ import { NovoConditionFieldDef } from '../query-builder.directives';
6
+ import { QueryBuilderService } from '../query-builder.service';
7
+ import { NOVO_CRITERIA_BUILDER } from '../query-builder.tokens';
8
+ import { Conjunction } from '../query-builder.types';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/forms";
11
+ import * as i2 from "../query-builder.service";
12
+ import * as i3 from "../../flex/Flex";
13
+ import * as i4 from "../../common/typography/label/label.component";
14
+ import * as i5 from "../condition-group/condition-group.component";
15
+ import * as i6 from "../condition-definitions/id-condition.definition";
16
+ import * as i7 from "../condition-definitions/date-condition.definition";
17
+ import * as i8 from "../condition-definitions/string-condition.definition";
18
+ import * as i9 from "../condition-definitions/number-condition.definition";
19
+ import * as i10 from "../condition-definitions/address-condition.definition";
20
+ import * as i11 from "../condition-definitions/boolean-condition.definition";
21
+ import * as i12 from "../condition-definitions/picker-condition.definition";
22
+ import * as i13 from "@angular/common";
23
+ import * as i14 from "../../common/directives/space.directive";
24
+ const EMPTY_CONDITION = {
25
+ field: null,
26
+ operator: null,
27
+ value: null,
28
+ };
29
+ export class CriteriaBuilderComponent {
30
+ constructor(controlContainer, formBuilder, cdr, qbs) {
31
+ this.controlContainer = controlContainer;
32
+ this.formBuilder = formBuilder;
33
+ this.cdr = cdr;
34
+ this.qbs = qbs;
35
+ this.allowedGroupings = [Conjunction.AND, Conjunction.OR, Conjunction.NOT];
36
+ /** Subject that emits when the component has been destroyed. */
37
+ this._onDestroy = new Subject();
38
+ }
39
+ ngOnInit() {
40
+ this.parentForm = this.controlContainer.control;
41
+ this.innerForm = this.formBuilder.group({
42
+ criteria: this.formBuilder.array([]),
43
+ });
44
+ this.parentForm.valueChanges.pipe(takeUntil(this._onDestroy)).subscribe((value) => {
45
+ Promise.resolve().then(() => {
46
+ this.setInitalValue(value[this.controlName]);
47
+ this.cdr.markForCheck();
48
+ });
49
+ });
50
+ this.innerForm.valueChanges
51
+ .pipe(debounce(() => interval(10)), takeUntil(this._onDestroy))
52
+ .subscribe((value) => {
53
+ const result = value.criteria.filter((it, i) => {
54
+ const key = Object.keys(it)[0];
55
+ if (it[key].length === 0) {
56
+ this.removeConditionGroupAt(i);
57
+ }
58
+ return it[key].length > 0;
59
+ });
60
+ Promise.resolve().then(() => {
61
+ this.parentForm.get(this.controlName).setValue(result, { emitEvent: false });
62
+ this.cdr.markForCheck();
63
+ });
64
+ });
65
+ }
66
+ ngAfterContentChecked() {
67
+ this._configureQueryBuilderService();
68
+ this.cdr.detectChanges();
69
+ }
70
+ ngAfterViewInit() {
71
+ this._registerFieldDefs();
72
+ }
73
+ ngOnDestroy() {
74
+ this._onDestroy.next();
75
+ this._onDestroy.complete();
76
+ }
77
+ isConditionGroup(group) {
78
+ return Object.keys(group).every((key) => ['$and', '$or', '$not'].includes(key));
79
+ }
80
+ setInitalValue(value) {
81
+ if (value.length && this.isConditionGroup(value[0])) {
82
+ value.forEach((it) => this.addConditionGroup(it));
83
+ }
84
+ else {
85
+ this.addConditionGroup({ $and: value });
86
+ }
87
+ }
88
+ get root() {
89
+ return this.innerForm.get('criteria');
90
+ }
91
+ addConditionGroup(data = { $and: [EMPTY_CONDITION] }) {
92
+ this.root.push(this.newConditionGroup(data));
93
+ this.cdr.markForCheck();
94
+ }
95
+ newConditionGroup(data) {
96
+ const controls = Object.entries(data).reduce((obj, [key, val]) => {
97
+ return {
98
+ ...obj,
99
+ [key]: this.formBuilder.array(val.map((it) => this.newCondition(it))),
100
+ };
101
+ }, {});
102
+ return this.formBuilder.group(controls);
103
+ }
104
+ newCondition({ field, operator, value } = EMPTY_CONDITION) {
105
+ return this.formBuilder.group({
106
+ field: [field, Validators.required],
107
+ operator: [operator, Validators.required],
108
+ value: [value, Validators.required],
109
+ });
110
+ }
111
+ removeConditionGroupAt(index) {
112
+ this.root.removeAt(index, { emitEvent: false });
113
+ }
114
+ clearAllConditions() {
115
+ while (this.root.length) {
116
+ this.root.removeAt(0);
117
+ }
118
+ }
119
+ _configureQueryBuilderService() {
120
+ this.qbs.config = this.config;
121
+ this.qbs.editTypeFn = this.editTypeFn;
122
+ this.qbs.allowedGroupings = this.allowedGroupings;
123
+ }
124
+ _registerFieldDefs() {
125
+ const defs = [...Array.from(this._contentFieldDefs)];
126
+ defs.forEach((fieldDef) => {
127
+ this.qbs.registerFieldDef(fieldDef);
128
+ });
129
+ }
130
+ }
131
+ CriteriaBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CriteriaBuilderComponent, deps: [{ token: i1.ControlContainer }, { token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.QueryBuilderService }], target: i0.ɵɵFactoryTarget.Component });
132
+ CriteriaBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CriteriaBuilderComponent, selector: "novo-criteria-builder", inputs: { config: "config", controlName: "controlName", allowedGroupings: "allowedGroupings", editTypeFn: "editTypeFn" }, host: { classAttribute: "novo-criteria-builder" }, providers: [
133
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CriteriaBuilderComponent), multi: true },
134
+ { provide: NOVO_CRITERIA_BUILDER, useExisting: CriteriaBuilderComponent },
135
+ { provide: QueryBuilderService, useClass: QueryBuilderService },
136
+ ], queries: [{ propertyName: "_contentFieldDefs", predicate: NovoConditionFieldDef, descendants: true }], ngImport: i0, template: "<form [formGroup]=\"innerForm\">\n <novo-stack [formArrayName]=\"controlName\" class=\"criteria-builder-inner\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLastAnd = last;\">\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">{{qbs.getConjunctionLabel('and')}}\n </novo-label>\n <novo-condition-group [groupIndex]=\"andIndex\" [formGroupName]=\"andIndex\"></novo-condition-group>\n </ng-container>\n </novo-stack>\n</form>\n<novo-id-condition-def name=\"ID\"></novo-id-condition-def>\n<novo-date-condition-def name=\"TIMESTAMP\"></novo-date-condition-def>\n<novo-string-condition-def name=\"STRING\"></novo-string-condition-def>\n<novo-number-condition-def name=\"FLOAT\"></novo-number-condition-def>\n<novo-number-condition-def name=\"INTEGER\"></novo-number-condition-def>\n<novo-number-condition-def name=\"BIGDECIMAL\"></novo-number-condition-def>\n<novo-number-condition-def name=\"DOUBLE\"></novo-number-condition-def>\n<novo-address-condition-def name=\"ADDRESS\"></novo-address-condition-def>\n<novo-boolean-condition-def name=\"BOOLEAN\"></novo-boolean-condition-def>\n<novo-picker-condition-def name=\"SELECT\"></novo-picker-condition-def>\n<novo-string-condition-def name=\"DEFAULT\"></novo-string-condition-def>\n\n<!-- \n {\n $and: [{\n $or: [{\n entity: 'JobOrder'\n field: 'categories',\n operator: 'doesNotContain',\n value: 'Healthcare'\n }]\n }]\n }\n -->", styles: [":host{position:relative;display:block;width:76rem}:host .criteria-builder-inner{padding-bottom:1rem}\n"], components: [{ type: i3.NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { type: i4.NovoLabel, selector: "novo-label,[novo-label]" }, { type: i5.ConditionGroupComponent, selector: "novo-condition-group", inputs: ["controlName", "groupIndex"] }, { type: i6.NovoDefaultIdConditionDef, selector: "novo-id-condition-def" }, { type: i7.NovoDefaultDateConditionDef, selector: "novo-date-condition-def" }, { type: i8.NovoDefaultStringConditionDef, selector: "novo-string-condition-def" }, { type: i9.NovoDefaultNumberConditionDef, selector: "novo-number-condition-def" }, { type: i10.NovoDefaultAddressConditionDef, selector: "novo-address-condition-def" }, { type: i11.NovoDefaultBooleanConditionDef, selector: "novo-boolean-condition-def" }, { type: i12.NovoDefaultPickerConditionDef, selector: "novo-picker-condition-def" }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.PaddingDirective, selector: "[p],[padding],[paddingTop],[paddingRight],[paddingBottom],[paddingLeft],[paddingX],[paddingY],[pt],[pr],[pb],[pl],[px],[py]", inputs: ["padding", "p", "paddingLeft", "pl", "paddingRight", "pr", "paddingTop", "pt", "paddingBottom", "pb", "paddingX", "px", "paddingY", "py"] }, { type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CriteriaBuilderComponent, decorators: [{
138
+ type: Component,
139
+ args: [{ selector: 'novo-criteria-builder', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
140
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CriteriaBuilderComponent), multi: true },
141
+ { provide: NOVO_CRITERIA_BUILDER, useExisting: CriteriaBuilderComponent },
142
+ { provide: QueryBuilderService, useClass: QueryBuilderService },
143
+ ], host: {
144
+ class: 'novo-criteria-builder',
145
+ }, template: "<form [formGroup]=\"innerForm\">\n <novo-stack [formArrayName]=\"controlName\" class=\"criteria-builder-inner\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLastAnd = last;\">\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">{{qbs.getConjunctionLabel('and')}}\n </novo-label>\n <novo-condition-group [groupIndex]=\"andIndex\" [formGroupName]=\"andIndex\"></novo-condition-group>\n </ng-container>\n </novo-stack>\n</form>\n<novo-id-condition-def name=\"ID\"></novo-id-condition-def>\n<novo-date-condition-def name=\"TIMESTAMP\"></novo-date-condition-def>\n<novo-string-condition-def name=\"STRING\"></novo-string-condition-def>\n<novo-number-condition-def name=\"FLOAT\"></novo-number-condition-def>\n<novo-number-condition-def name=\"INTEGER\"></novo-number-condition-def>\n<novo-number-condition-def name=\"BIGDECIMAL\"></novo-number-condition-def>\n<novo-number-condition-def name=\"DOUBLE\"></novo-number-condition-def>\n<novo-address-condition-def name=\"ADDRESS\"></novo-address-condition-def>\n<novo-boolean-condition-def name=\"BOOLEAN\"></novo-boolean-condition-def>\n<novo-picker-condition-def name=\"SELECT\"></novo-picker-condition-def>\n<novo-string-condition-def name=\"DEFAULT\"></novo-string-condition-def>\n\n<!-- \n {\n $and: [{\n $or: [{\n entity: 'JobOrder'\n field: 'categories',\n operator: 'doesNotContain',\n value: 'Healthcare'\n }]\n }]\n }\n -->", styles: [":host{position:relative;display:block;width:76rem}:host .criteria-builder-inner{padding-bottom:1rem}\n"] }]
146
+ }], ctorParameters: function () { return [{ type: i1.ControlContainer }, { type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.QueryBuilderService }]; }, propDecorators: { config: [{
147
+ type: Input
148
+ }], controlName: [{
149
+ type: Input
150
+ }], allowedGroupings: [{
151
+ type: Input
152
+ }], editTypeFn: [{
153
+ type: Input
154
+ }], _contentFieldDefs: [{
155
+ type: ContentChildren,
156
+ args: [NovoConditionFieldDef, { descendants: true }]
157
+ }] } });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JpdGVyaWEtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NyaXRlcmlhLWJ1aWxkZXIvY3JpdGVyaWEtYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NyaXRlcmlhLWJ1aWxkZXIvY3JpdGVyaWEtYnVpbGRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxXQUFXLEVBQWEsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQTJDLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTlGLE1BQU0sZUFBZSxHQUFjO0lBQ2pDLEtBQUssRUFBRSxJQUFJO0lBQ1gsUUFBUSxFQUFFLElBQUk7SUFDZCxLQUFLLEVB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QkFBbUIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUU7cUJBQ2hFLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLHVCQUF1QjtxQkFDL0I7bU1BR1EsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRXlELGlCQUFpQjtzQkFBL0UsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOb3ZvQ29uZGl0aW9uRmllbGREZWYgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOT1ZPX0NSSVRFUklBX0JVSUxERVIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnRva2Vucyc7XG5pbXBvcnQgeyBCYXNlRmllbGREZWYsIENvbmRpdGlvbiwgQ29uZGl0aW9uR3JvdXAsIENvbmp1bmN0aW9uIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50eXBlcyc7XG5cbmNvbnN0IEVNUFRZX0NPTkRJVElPTjogQ29uZGl0aW9uID0ge1xuICBmaWVsZDogbnVsbCxcbiAgb3BlcmF0b3I6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tY3JpdGVyaWEtYnVpbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcml0ZXJpYS1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JpdGVyaWEtYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3JpdGVyaWFCdWlsZGVyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICB7IHByb3ZpZGU6IE5PVk9fQ1JJVEVSSUFfQlVJTERFUiwgdXNlRXhpc3Rpbmc6IENyaXRlcmlhQnVpbGRlckNvbXBvbmVudCB9LFxuICAgIHsgcHJvdmlkZTogUXVlcnlCdWlsZGVyU2VydmljZSwgdXNlQ2xhc3M6IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbm92by1jcml0ZXJpYS1idWlsZGVyJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JpdGVyaWFCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjb25maWc6IGFueTtcbiAgQElucHV0KCkgY29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgYWxsb3dlZEdyb3VwaW5ncyA9IFtDb25qdW5jdGlvbi5BTkQsIENvbmp1bmN0aW9uLk9SLCBDb25qdW5jdGlvbi5OT1RdO1xuICBASW5wdXQoKSBlZGl0VHlwZUZuOiAoZmllbGQ6IEJhc2VGaWVsZERlZikgPT4gc3RyaW5nO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oTm92b0NvbmRpdGlvbkZpZWxkRGVmLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIF9jb250ZW50RmllbGREZWZzOiBRdWVyeUxpc3Q8Tm92b0NvbmRpdGlvbkZpZWxkRGVmPjtcblxuICBwdWJsaWMgcGFyZW50Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgaW5uZXJGb3JtOiBGb3JtR3JvdXA7XG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBxYnM6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5pbm5lckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNyaXRlcmlhOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFyZW50Rm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGFsVmFsdWUodmFsdWVbdGhpcy5jb250cm9sTmFtZV0pO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuaW5uZXJGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlKCgpID0+IGludGVydmFsKDEwKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUuY3JpdGVyaWEuZmlsdGVyKChpdCwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGl0KVswXTtcbiAgICAgICAgICBpZiAoaXRba2V5XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29uZGl0aW9uR3JvdXBBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGl0W2tleV0ubGVuZ3RoID4gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCh0aGlzLmNvbnRyb2xOYW1lKS5zZXRWYWx1ZShyZXN1bHQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jb25maWd1cmVRdWVyeUJ1aWxkZXJTZXJ2aWNlKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyRmllbGREZWZzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbmRpdGlvbkdyb3VwKGdyb3VwOiB1bmtub3duKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwKS5ldmVyeSgoa2V5KSA9PiBbJyRhbmQnLCAnJG9yJywgJyRub3QnXS5pbmNsdWRlcyhrZXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGFsVmFsdWUodmFsdWU6IENvbmRpdGlvbkdyb3VwW10gfCBDb25kaXRpb25bXSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggJiYgdGhpcy5pc0NvbmRpdGlvbkdyb3VwKHZhbHVlWzBdKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCgoaXQpID0+IHRoaXMuYWRkQ29uZGl0aW9uR3JvdXAoaXQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRDb25kaXRpb25Hcm91cCh7ICRhbmQ6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb290KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJGb3JtLmdldCgnY3JpdGVyaWEnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBhZGRDb25kaXRpb25Hcm91cChkYXRhOiBhbnkgPSB7ICRhbmQ6IFtFTVBUWV9DT05ESVRJT05dIH0pIHtcbiAgICB0aGlzLnJvb3QucHVzaCh0aGlzLm5ld0NvbmRpdGlvbkdyb3VwKGRhdGEpKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5ld0NvbmRpdGlvbkdyb3VwKGRhdGE6IENvbmRpdGlvbkdyb3VwKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBjb250cm9scyA9IE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgob2JqLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmosXG4gICAgICAgIFtrZXldOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KHZhbC5tYXAoKGl0KSA9PiB0aGlzLm5ld0NvbmRpdGlvbihpdCkpKSxcbiAgICAgIH07XG4gICAgfSwge30pO1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGNvbnRyb2xzKTtcbiAgfVxuXG4gIG5ld0NvbmRpdGlvbih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfTogQ29uZGl0aW9uID0gRU1QVFlfQ09ORElUSU9OKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBmaWVsZDogW2ZpZWxkLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9wZXJhdG9yOiBbb3BlcmF0b3IsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdmFsdWU6IFt2YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb25Hcm91cEF0KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnJvb3QucmVtb3ZlQXQoaW5kZXgsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIGNsZWFyQWxsQ29uZGl0aW9ucygpIHtcbiAgICB3aGlsZSAodGhpcy5yb290Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yb290LnJlbW92ZUF0KDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVF1ZXJ5QnVpbGRlclNlcnZpY2UoKSB7XG4gICAgdGhpcy5xYnMuY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgdGhpcy5xYnMuZWRpdFR5cGVGbiA9IHRoaXMuZWRpdFR5cGVGbjtcbiAgICB0aGlzLnFicy5hbGxvd2VkR3JvdXBpbmdzID0gdGhpcy5hbGxvd2VkR3JvdXBpbmdzIGFzIENvbmp1bmN0aW9uW107XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckZpZWxkRGVmcygpIHtcbiAgICBjb25zdCBkZWZzID0gWy4uLkFycmF5LmZyb20odGhpcy5fY29udGVudEZpZWxkRGVmcyldO1xuICAgIGRlZnMuZm9yRWFjaCgoZmllbGREZWYpID0+IHtcbiAgICAgIHRoaXMucWJzLnJlZ2lzdGVyRmllbGREZWYoZmllbGREZWYpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybVwiPlxuICA8bm92by1zdGFjayBbZm9ybUFycmF5TmFtZV09XCJjb250cm9sTmFtZVwiIGNsYXNzPVwiY3JpdGVyaWEtYnVpbGRlci1pbm5lclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBhbmRHcm91cCBvZiByb290LmNvbnRyb2xzOyBsZXQgYW5kSW5kZXggPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDtsZXQgaXNMYXN0QW5kID0gbGFzdDtcIj5cbiAgICAgIDxub3ZvLWxhYmVsICpuZ0lmPVwiIWlzRmlyc3RcIiBjb2xvcj1cImFzaFwiIHNpemU9XCJ4c1wiIHVwcGVyY2FzZSBwYWRkaW5nPVwic21cIj57e3Ficy5nZXRDb25qdW5jdGlvbkxhYmVsKCdhbmQnKX19XG4gICAgICA8L25vdm8tbGFiZWw+XG4gICAgICA8bm92by1jb25kaXRpb24tZ3JvdXAgW2dyb3VwSW5kZXhdPVwiYW5kSW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJhbmRJbmRleFwiPjwvbm92by1jb25kaXRpb24tZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbm92by1zdGFjaz5cbjwvZm9ybT5cbjxub3ZvLWlkLWNvbmRpdGlvbi1kZWYgbmFtZT1cIklEXCI+PC9ub3ZvLWlkLWNvbmRpdGlvbi1kZWY+XG48bm92by1kYXRlLWNvbmRpdGlvbi1kZWYgbmFtZT1cIlRJTUVTVEFNUFwiPjwvbm92by1kYXRlLWNvbmRpdGlvbi1kZWY+XG48bm92by1zdHJpbmctY29uZGl0aW9uLWRlZiBuYW1lPVwiU1RSSU5HXCI+PC9ub3ZvLXN0cmluZy1jb25kaXRpb24tZGVmPlxuPG5vdm8tbnVtYmVyLWNvbmRpdGlvbi1kZWYgbmFtZT1cIkZMT0FUXCI+PC9ub3ZvLW51bWJlci1jb25kaXRpb24tZGVmPlxuPG5vdm8tbnVtYmVyLWNvbmRpdGlvbi1kZWYgbmFtZT1cIklOVEVHRVJcIj48L25vdm8tbnVtYmVyLWNvbmRpdGlvbi1kZWY+XG48bm92by1udW1iZXItY29uZGl0aW9uLWRlZiBuYW1lPVwiQklHREVDSU1BTFwiPjwvbm92by1udW1iZXItY29uZGl0aW9uLWRlZj5cbjxub3ZvLW51bWJlci1jb25kaXRpb24tZGVmIG5hbWU9XCJET1VCTEVcIj48L25vdm8tbnVtYmVyLWNvbmRpdGlvbi1kZWY+XG48bm92by1hZGRyZXNzLWNvbmRpdGlvbi1kZWYgbmFtZT1cIkFERFJFU1NcIj48L25vdm8tYWRkcmVzcy1jb25kaXRpb24tZGVmPlxuPG5vdm8tYm9vbGVhbi1jb25kaXRpb24tZGVmIG5hbWU9XCJCT09MRUFOXCI+PC9ub3ZvLWJvb2xlYW4tY29uZGl0aW9uLWRlZj5cbjxub3ZvLXBpY2tlci1jb25kaXRpb24tZGVmIG5hbWU9XCJTRUxFQ1RcIj48L25vdm8tcGlja2VyLWNvbmRpdGlvbi1kZWY+XG48bm92by1zdHJpbmctY29uZGl0aW9uLWRlZiBuYW1lPVwiREVGQVVMVFwiPjwvbm92by1zdHJpbmctY29uZGl0aW9uLWRlZj5cblxuPCEtLSBcbiAge1xuICAgICRhbmQ6IFt7XG4gICAgICAkb3I6IFt7XG4gICAgICAgIGVudGl0eTogJ0pvYk9yZGVyJ1xuICAgICAgICBmaWVsZDogJ2NhdGVnb3JpZXMnLFxuICAgICAgICBvcGVyYXRvcjogJ2RvZXNOb3RDb250YWluJyxcbiAgICAgICAgdmFsdWU6ICdIZWFsdGhjYXJlJ1xuICAgICAgfV1cbiAgICB9XVxuICB9XG4gLS0+Il19
@@ -0,0 +1,15 @@
1
+ export * from './condition-builder/condition-builder.component';
2
+ export * from './condition-definitions/abstract-condition.definition';
3
+ export * from './condition-definitions/address-condition.definition';
4
+ export * from './condition-definitions/boolean-condition.definition';
5
+ export * from './condition-definitions/date-condition.definition';
6
+ export * from './condition-definitions/id-condition.definition';
7
+ export * from './condition-definitions/number-condition.definition';
8
+ export * from './condition-definitions/picker-condition.definition';
9
+ export * from './condition-definitions/string-condition.definition';
10
+ export * from './criteria-builder/criteria-builder.component';
11
+ export * from './query-builder.directives';
12
+ export * from './query-builder.module';
13
+ export * from './query-builder.tokens';
14
+ export * from './query-builder.types';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZGl0aW9uLWJ1aWxkZXIvY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29uZGl0aW9uLWRlZmluaXRpb25zL2Fic3RyYWN0LWNvbmRpdGlvbi5kZWZpbml0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZGl0aW9uLWRlZmluaXRpb25zL2FkZHJlc3MtY29uZGl0aW9uLmRlZmluaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb25kaXRpb24tZGVmaW5pdGlvbnMvYm9vbGVhbi1jb25kaXRpb24uZGVmaW5pdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbmRpdGlvbi1kZWZpbml0aW9ucy9kYXRlLWNvbmRpdGlvbi5kZWZpbml0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZGl0aW9uLWRlZmluaXRpb25zL2lkLWNvbmRpdGlvbi5kZWZpbml0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZGl0aW9uLWRlZmluaXRpb25zL251bWJlci1jb25kaXRpb24uZGVmaW5pdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbmRpdGlvbi1kZWZpbml0aW9ucy9waWNrZXItY29uZGl0aW9uLmRlZmluaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb25kaXRpb24tZGVmaW5pdGlvbnMvc3RyaW5nLWNvbmRpdGlvbi5kZWZpbml0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY3JpdGVyaWEtYnVpbGRlci9jcml0ZXJpYS1idWlsZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIuZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci50b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1idWlsZGVyLnR5cGVzJztcbiJdfQ==
@@ -0,0 +1,101 @@
1
+ import { ContentChild, Directive, Input, TemplateRef } from '@angular/core';
2
+ import { QueryBuilderService } from './query-builder.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./query-builder.service";
5
+ /**
6
+ * Contained within a novoConditionField definition describing what input should be
7
+ * used to capture the compare value of the Condtion
8
+ */
9
+ export class NovoConditionInputDef {
10
+ constructor(/** @docs-private */ template) {
11
+ this.template = template;
12
+ }
13
+ }
14
+ NovoConditionInputDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionInputDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
15
+ NovoConditionInputDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: NovoConditionInputDef, selector: "[novoConditionInputDef]", ngImport: i0 });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionInputDef, decorators: [{
17
+ type: Directive,
18
+ args: [{ selector: '[novoConditionInputDef]' }]
19
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
20
+ /**
21
+ * Contained within a novoConditionField definition describing what operators should be available.
22
+ */
23
+ export class NovoConditionOperatorsDef {
24
+ constructor(/** @docs-private */ template) {
25
+ this.template = template;
26
+ }
27
+ }
28
+ NovoConditionOperatorsDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionOperatorsDef, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
29
+ NovoConditionOperatorsDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]", ngImport: i0 });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionOperatorsDef, decorators: [{
31
+ type: Directive,
32
+ args: [{ selector: '[novoConditionOperatorsDef]' }]
33
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
34
+ /**
35
+ * Field Field definition for the QueryBuilder.
36
+ * Defines the inputType and operators to use for the query builder.
37
+ */
38
+ export class BaseConditionFieldDef {
39
+ constructor() { }
40
+ /** Unique name for this field. */
41
+ get name() {
42
+ return this._name;
43
+ }
44
+ set name(name) {
45
+ this._setNameInput(name);
46
+ }
47
+ /**
48
+ * Overridable method that sets the css classes that will be added to every cell in this
49
+ * column.
50
+ * In the future, columnCssClassName will change from type string[] to string and this
51
+ * will set a single string value.
52
+ * @docs-private
53
+ */
54
+ _updateFieldCssClassName() {
55
+ this._fieldCssClassName = [`novo-filter-field-${this.cssClassFriendlyName}`];
56
+ }
57
+ _setNameInput(value) {
58
+ // If the directive is set without a name (updated programmatically), then this setter will
59
+ // trigger with an empty string and should not overwrite the programmatically set value.
60
+ if (value) {
61
+ this._name = value;
62
+ this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');
63
+ this._updateFieldCssClassName();
64
+ }
65
+ }
66
+ }
67
+ BaseConditionFieldDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BaseConditionFieldDef, deps: [], target: i0.ɵɵFactoryTarget.Directive });
68
+ BaseConditionFieldDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: BaseConditionFieldDef, inputs: { name: ["novoFilterFieldDef", "name"] }, queries: [{ propertyName: "fieldInput", first: true, predicate: NovoConditionInputDef, descendants: true }, { propertyName: "fieldOperators", first: true, predicate: NovoConditionOperatorsDef, descendants: true }], ngImport: i0 });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BaseConditionFieldDef, decorators: [{
70
+ type: Directive
71
+ }], ctorParameters: function () { return []; }, propDecorators: { name: [{
72
+ type: Input,
73
+ args: ['novoFilterFieldDef']
74
+ }], fieldInput: [{
75
+ type: ContentChild,
76
+ args: [NovoConditionInputDef]
77
+ }], fieldOperators: [{
78
+ type: ContentChild,
79
+ args: [NovoConditionOperatorsDef]
80
+ }] } });
81
+ export class NovoConditionFieldDef extends BaseConditionFieldDef {
82
+ constructor(qbs) {
83
+ super();
84
+ this.qbs = qbs;
85
+ }
86
+ register() {
87
+ this.qbs.registerFieldDef(this);
88
+ }
89
+ unregister() {
90
+ this.qbs.unregisterFieldDef(this);
91
+ }
92
+ }
93
+ NovoConditionFieldDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionFieldDef, deps: [{ token: i1.QueryBuilderService }], target: i0.ɵɵFactoryTarget.Directive });
94
+ NovoConditionFieldDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: NovoConditionFieldDef, selector: "[novoConditionFieldDef]", usesInheritance: true, ngImport: i0 });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoConditionFieldDef, decorators: [{
96
+ type: Directive,
97
+ args: [{
98
+ selector: '[novoConditionFieldDef]',
99
+ }]
100
+ }], ctorParameters: function () { return [{ type: i1.QueryBuilderService }]; } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5kaXJlY3RpdmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9xdWVyeS1idWlsZGVyLmRpcmVjdGl2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBTzlEOzs7R0FHRztBQUVILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsWUFBWSxvQkFBb0IsQ0FBUSxRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFHLENBQUM7O21IQUQzRCxxQkFBcUI7dUdBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFOztBQUtsRDs7R0FFRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsWUFBWSxvQkFBb0IsQ0FBUSxRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFHLENBQUM7O3VIQUQzRCx5QkFBeUI7MkdBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQURyQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDZCQUE2QixFQUFFOztBQUt0RDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBd0JoQyxnQkFBZSxDQUFDO0lBdkJoQixrQ0FBa0M7SUFDbEMsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFZO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQWtCRDs7Ozs7O09BTUc7SUFDTyx3QkFBd0I7UUFDaEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMscUJBQXFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVTLGFBQWEsQ0FBQyxLQUFhO1FBQ25DLDJGQUEyRjtRQUMzRix3RkFBd0Y7UUFDeEYsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDOzttSEE3Q1UscUJBQXFCO3VHQUFyQixxQkFBcUIsb0hBV2xCLHFCQUFxQixpRkFDckIseUJBQXlCOzRGQVo1QixxQkFBcUI7a0JBRGpDLFNBQVM7MEVBSUosSUFBSTtzQkFEUCxLQUFLO3VCQUFDLG9CQUFvQjtnQkFTVSxVQUFVO3NCQUE5QyxZQUFZO3VCQUFDLHFCQUFxQjtnQkFDTSxjQUFjO3NCQUF0RCxZQUFZO3VCQUFDLHlCQUF5Qjs7QUF1Q3pDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUFDOUQsWUFBb0IsR0FBd0I7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFxQjtJQUU1QyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O21IQVRVLHFCQUFxQjt1R0FBckIscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtpQkFDcEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuXG4vKiogQmFzZSBpbnRlcmZhY2UgZm9yIGEgY29uZGlkYXRpb24gdGVtcGxhdGUgZGlyZWN0aXZlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uRGVmIHtcbiAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG59XG5cbi8qKlxuICogQ29udGFpbmVkIHdpdGhpbiBhIG5vdm9Db25kaXRpb25GaWVsZCBkZWZpbml0aW9uIGRlc2NyaWJpbmcgd2hhdCBpbnB1dCBzaG91bGQgYmVcbiAqIHVzZWQgdG8gY2FwdHVyZSB0aGUgY29tcGFyZSB2YWx1ZSBvZiB0aGUgQ29uZHRpb25cbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW25vdm9Db25kaXRpb25JbnB1dERlZl0nIH0pXG5leHBvcnQgY2xhc3MgTm92b0NvbmRpdGlvbklucHV0RGVmIGltcGxlbWVudHMgQ29uZGl0aW9uRGVmIHtcbiAgY29uc3RydWN0b3IoLyoqIEBkb2NzLXByaXZhdGUgKi8gcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIENvbnRhaW5lZCB3aXRoaW4gYSBub3ZvQ29uZGl0aW9uRmllbGQgZGVmaW5pdGlvbiBkZXNjcmliaW5nIHdoYXQgb3BlcmF0b3JzIHNob3VsZCBiZSBhdmFpbGFibGUuXG4gKi9cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tub3ZvQ29uZGl0aW9uT3BlcmF0b3JzRGVmXScgfSlcbmV4cG9ydCBjbGFzcyBOb3ZvQ29uZGl0aW9uT3BlcmF0b3JzRGVmIGltcGxlbWVudHMgQ29uZGl0aW9uRGVmIHtcbiAgY29uc3RydWN0b3IoLyoqIEBkb2NzLXByaXZhdGUgKi8gcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIEZpZWxkIEZpZWxkIGRlZmluaXRpb24gZm9yIHRoZSBRdWVyeUJ1aWxkZXIuXG4gKiBEZWZpbmVzIHRoZSBpbnB1dFR5cGUgYW5kIG9wZXJhdG9ycyB0byB1c2UgZm9yIHRoZSBxdWVyeSBidWlsZGVyLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBCYXNlQ29uZGl0aW9uRmllbGREZWYge1xuICAvKiogVW5pcXVlIG5hbWUgZm9yIHRoaXMgZmllbGQuICovXG4gIEBJbnB1dCgnbm92b0ZpbHRlckZpZWxkRGVmJylcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXROYW1lSW5wdXQobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIF9uYW1lOiBzdHJpbmc7XG5cbiAgQENvbnRlbnRDaGlsZChOb3ZvQ29uZGl0aW9uSW5wdXREZWYpIGZpZWxkSW5wdXQ6IE5vdm9Db25kaXRpb25JbnB1dERlZjtcbiAgQENvbnRlbnRDaGlsZChOb3ZvQ29uZGl0aW9uT3BlcmF0b3JzRGVmKSBmaWVsZE9wZXJhdG9yczogTm92b0NvbmRpdGlvbk9wZXJhdG9yc0RlZjtcblxuICAvKipcbiAgICogVHJhbnNmb3JtZWQgdmVyc2lvbiBvZiB0aGUgY29sdW1uIG5hbWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgQ1NTIGNsYXNzbmFtZS4gRXhjbHVkZXNcbiAgICogYWxsIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyAnLScgYW5kICdfJy4gQW55IGNoYXJhY3RlcnMgdGhhdFxuICAgKiBkbyBub3QgbWF0Y2ggYXJlIHJlcGxhY2VkIGJ5IHRoZSAnLScgY2hhcmFjdGVyLlxuICAgKi9cbiAgY3NzQ2xhc3NGcmllbmRseU5hbWU6IHN0cmluZztcbiAgX2ZpZWxkQ3NzQ2xhc3NOYW1lOiBzdHJpbmdbXTtcblxuICBkZWZhdWx0T3BlcmF0b3I6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRhYmxlIG1ldGhvZCB0aGF0IHNldHMgdGhlIGNzcyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byBldmVyeSBjZWxsIGluIHRoaXNcbiAgICogY29sdW1uLlxuICAgKiBJbiB0aGUgZnV0dXJlLCBjb2x1bW5Dc3NDbGFzc05hbWUgd2lsbCBjaGFuZ2UgZnJvbSB0eXBlIHN0cmluZ1tdIHRvIHN0cmluZyBhbmQgdGhpc1xuICAgKiB3aWxsIHNldCBhIHNpbmdsZSBzdHJpbmcgdmFsdWUuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHByb3RlY3RlZCBfdXBkYXRlRmllbGRDc3NDbGFzc05hbWUoKSB7XG4gICAgdGhpcy5fZmllbGRDc3NDbGFzc05hbWUgPSBbYG5vdm8tZmlsdGVyLWZpZWxkLSR7dGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZX1gXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2V0TmFtZUlucHV0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAvLyBJZiB0aGUgZGlyZWN0aXZlIGlzIHNldCB3aXRob3V0IGEgbmFtZSAodXBkYXRlZCBwcm9ncmFtbWF0aWNhbGx5KSwgdGhlbiB0aGlzIHNldHRlciB3aWxsXG4gICAgLy8gdHJpZ2dlciB3aXRoIGFuIGVtcHR5IHN0cmluZyBhbmQgc2hvdWxkIG5vdCBvdmVyd3JpdGUgdGhlIHByb2dyYW1tYXRpY2FsbHkgc2V0IHZhbHVlLlxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jc3NDbGFzc0ZyaWVuZGx5TmFtZSA9IHZhbHVlLnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCAnLScpO1xuICAgICAgdGhpcy5fdXBkYXRlRmllbGRDc3NDbGFzc05hbWUoKTtcbiAgICB9XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25vdm9Db25kaXRpb25GaWVsZERlZl0nLFxufSlcbmV4cG9ydCBjbGFzcyBOb3ZvQ29uZGl0aW9uRmllbGREZWYgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRmllbGREZWYge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHFiczogUXVlcnlCdWlsZGVyU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcmVnaXN0ZXIoKSB7XG4gICAgdGhpcy5xYnMucmVnaXN0ZXJGaWVsZERlZih0aGlzKTtcbiAgfVxuICB1bnJlZ2lzdGVyKCkge1xuICAgIHRoaXMucWJzLnVucmVnaXN0ZXJGaWVsZERlZih0aGlzKTtcbiAgfVxufVxuIl19