novo-elements 7.3.0 → 7.4.0-next.3

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 +18 -6
  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 +1928 -264
  120. package/fesm2015/novo-elements.mjs.map +1 -1
  121. package/fesm2020/novo-elements.mjs +1918 -264
  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
@@ -9,6 +9,7 @@ import * as i2 from "../../../loading/Loading";
9
9
  import * as i3 from "../../../list/List";
10
10
  import * as i4 from "@angular/common";
11
11
  import * as i5 from "../../../common/directives/theme.directive";
12
+ import * as i6 from "../../../../pipes/highlight/Highlight";
12
13
  export class SkillsSpecialtyPickerResults extends BasePickerResults {
13
14
  constructor(element, labels, ref) {
14
15
  super(element, ref);
@@ -55,10 +56,10 @@ SkillsSpecialtyPickerResults.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
55
56
  [class.disabled]="preselected(match)"
56
57
  >
57
58
  <item-content>
58
- <h6><span [innerHtml]="highlight(match.label, term)"></span></h6>
59
+ <h6><span [innerHtml]="match.label | highlight:term"></span></h6>
59
60
  <div class="category">
60
61
  <i class="bhi-category-tags"></i
61
- ><span [innerHtml]="highlight(match.data.categories || match.data.parentCategory.name, term)"></span>
62
+ ><span [innerHtml]="match.data.categories || match.data.parentCategory.name | highlight:term"></span>
62
63
  </div>
63
64
  </item-content>
64
65
  </novo-list-item>
@@ -69,7 +70,7 @@ SkillsSpecialtyPickerResults.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
69
70
  </novo-list>
70
71
  <p class="picker-error" *ngIf="hasError">{{ labels.pickerError }}</p>
71
72
  <p class="picker-null" *ngIf="!isLoading && !matches.length && !hasError">{{ labels.pickerEmpty }}</p>
72
- `, isInline: true, components: [{ type: i2.NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }, { type: i3.NovoListElement, selector: "novo-list", inputs: ["theme", "direction"] }, { type: i3.NovoListItemElement, selector: "novo-list-item, a[list-item], button[list-item]" }, { type: i3.NovoItemContentElement, selector: "item-content, novo-item-content", inputs: ["direction"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
73
+ `, isInline: true, components: [{ type: i2.NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }, { type: i3.NovoListElement, selector: "novo-list", inputs: ["theme", "direction"] }, { type: i3.NovoListItemElement, selector: "novo-list-item, a[list-item], button[list-item]" }, { type: i3.NovoItemContentElement, selector: "item-content, novo-item-content", inputs: ["direction"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "highlight": i6.HighlightPipe } });
73
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SkillsSpecialtyPickerResults, decorators: [{
74
75
  type: Component,
75
76
  args: [{
@@ -85,10 +86,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
85
86
  [class.disabled]="preselected(match)"
86
87
  >
87
88
  <item-content>
88
- <h6><span [innerHtml]="highlight(match.label, term)"></span></h6>
89
+ <h6><span [innerHtml]="match.label | highlight:term"></span></h6>
89
90
  <div class="category">
90
91
  <i class="bhi-category-tags"></i
91
- ><span [innerHtml]="highlight(match.data.categories || match.data.parentCategory.name, term)"></span>
92
+ ><span [innerHtml]="match.data.categories || match.data.parentCategory.name | highlight:term"></span>
92
93
  </div>
93
94
  </item-content>
94
95
  </novo-list-item>
@@ -105,4 +106,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
105
106
  type: HostBinding,
106
107
  args: ['class.active']
107
108
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGxzU3BlY2lhbHR5UGlja2VyUmVzdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3BpY2tlci9leHRyYXMvc2tpbGxzLXBpY2tlci1yZXN1bHRzL1NraWxsc1NwZWNpYWx0eVBpY2tlclJlc3VsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxNQUFNO0FBQ04sT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUErQjdFLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxpQkFBaUI7SUFPakUsWUFBbUIsT0FBbUIsRUFBUyxNQUF3QixFQUFFLEdBQXNCO1FBQzdGLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFESCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFMdkUsV0FBTSxHQUFZLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFVBQUssR0FBVyxHQUFHLENBQUM7SUFLcEIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLFVBQWU7UUFDNUIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ3RCLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzlCLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7MEhBbENVLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLHNKQTNCN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQ7NEZBRVUsNEJBQTRCO2tCQTdCeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQ7aUJBQ0Y7Z0tBR0MsTUFBTTtzQkFETCxXQUFXO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBORzJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb3ZvTGFiZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvbm92by1sYWJlbC1zZXJ2aWNlJztcbi8vIEFwcFxuaW1wb3J0IHsgQmFzZVBpY2tlclJlc3VsdHMgfSBmcm9tICcuLi9iYXNlLXBpY2tlci1yZXN1bHRzL0Jhc2VQaWNrZXJSZXN1bHRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2tpbGwtc3BlY2lhbHR5LXBpY2tlci1yZXN1bHRzJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tlci1sb2FkaW5nXCIgKm5nSWY9XCJpc0xvYWRpbmcgJiYgIW1hdGNoZXM/Lmxlbmd0aFwiPjxub3ZvLWxvYWRpbmcgdGhlbWU9XCJsaW5lXCI+PC9ub3ZvLWxvYWRpbmc+PC9zZWN0aW9uPlxuICAgIDxub3ZvLWxpc3QgKm5nSWY9XCJtYXRjaGVzLmxlbmd0aCA+IDBcIiBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiPlxuICAgICAgPG5vdm8tbGlzdC1pdGVtXG4gICAgICAgICpuZ0Zvcj1cImxldCBtYXRjaCBvZiBtYXRjaGVzXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdE1hdGNoKCRldmVudClcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm1hdGNoID09PSBhY3RpdmVNYXRjaFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdEFjdGl2ZShtYXRjaClcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicHJlc2VsZWN0ZWQobWF0Y2gpXCJcbiAgICAgID5cbiAgICAgICAgPGl0ZW0tY29udGVudD5cbiAgICAgICAgICA8aDY+PHNwYW4gW2lubmVySHRtbF09XCJoaWdobGlnaHQobWF0Y2gubGFiZWwsIHRlcm0pXCI+PC9zcGFuPjwvaDY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5XCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImJoaS1jYXRlZ29yeS10YWdzXCI+PC9pXG4gICAgICAgICAgICA+PHNwYW4gW2lubmVySHRtbF09XCJoaWdobGlnaHQobWF0Y2guZGF0YS5jYXRlZ29yaWVzIHx8IG1hdGNoLmRhdGEucGFyZW50Q2F0ZWdvcnkubmFtZSwgdGVybSlcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaXRlbS1jb250ZW50PlxuICAgICAgPC9ub3ZvLWxpc3QtaXRlbT5cbiAgICAgIDxub3ZvLWxpc3QtaXRlbSAqbmdJZj1cImxpbWl0ZWRUb1wiXG4gICAgICAgID48ZGl2Pnt7IGxhYmVscy5zaG93aW5nWG9mWFJlc3VsdHMobGltaXQsIHRvdGFsKSB9fTwvZGl2Pjwvbm92by1saXN0LWl0ZW1cbiAgICAgID5cbiAgICAgIDxub3ZvLWxvYWRpbmcgdGhlbWU9XCJsaW5lXCIgKm5nSWY9XCJpc0xvYWRpbmcgJiYgbWF0Y2hlcy5sZW5ndGggPiAwXCI+PC9ub3ZvLWxvYWRpbmc+XG4gICAgPC9ub3ZvLWxpc3Q+XG4gICAgPHAgY2xhc3M9XCJwaWNrZXItZXJyb3JcIiAqbmdJZj1cImhhc0Vycm9yXCI+e3sgbGFiZWxzLnBpY2tlckVycm9yIH19PC9wPlxuICAgIDxwIGNsYXNzPVwicGlja2VyLW51bGxcIiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIW1hdGNoZXMubGVuZ3RoICYmICFoYXNFcnJvclwiPnt7IGxhYmVscy5waWNrZXJFbXB0eSB9fTwvcD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2tpbGxzU3BlY2lhbHR5UGlja2VyUmVzdWx0cyBleHRlbmRzIEJhc2VQaWNrZXJSZXN1bHRzIHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xuICBsaW1pdGVkVG86IGJvb2xlYW4gPSBmYWxzZTtcbiAgbGltaXQ6IG51bWJlciA9IDIwMDtcbiAgdG90YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZiwgcHVibGljIGxhYmVsczogTm92b0xhYmVsU2VydmljZSwgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XG4gIH1cblxuICBnZXRMaXN0RWxlbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdub3ZvLWxpc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdHJ1Y3R1cmVBcnJheVxuICAgKiBAcGFyYW0gY29sbGVjdGlvbiAtIHRoZSBkYXRhIG9uY2UgZ2V0RGF0YSByZXNvbHZlcyBpdFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb24gVGhpcyBmdW5jdGlvbiBzdHJ1Y3R1cmVzIGFuIGFycmF5IG9mIG5vZGVzIGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGFcbiAgICogJ25hbWUnIGZpZWxkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBzdHJ1Y3R1cmVBcnJheShjb2xsZWN0aW9uOiBhbnkpOiBhbnkge1xuICAgIGxldCBkYXRhID0gY29sbGVjdGlvbjtcbiAgICBpZiAoY29sbGVjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGF0YScpKSB7XG4gICAgICB0aGlzLmxpbWl0ZWRUbyA9IGNvbGxlY3Rpb24ubGltaXRlZFRvMjAwO1xuICAgICAgdGhpcy50b3RhbCA9IGNvbGxlY3Rpb24udG90YWw7XG4gICAgICBkYXRhID0gY29sbGVjdGlvbi5kYXRhO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5sZW5ndGggPiB0aGlzLmxpbWl0KSB7XG4gICAgICB0aGlzLmxpbWl0ZWRUbyA9IHRydWU7XG4gICAgICB0aGlzLnRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCB0aGlzLmxpbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnN0cnVjdHVyZUFycmF5KGRhdGEpO1xuICB9XG59XG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGxzU3BlY2lhbHR5UGlja2VyUmVzdWx0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3BpY2tlci9leHRyYXMvc2tpbGxzLXBpY2tlci1yZXN1bHRzL1NraWxsc1NwZWNpYWx0eVBpY2tlclJlc3VsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxNQUFNO0FBQ04sT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7O0FBK0I3RSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsaUJBQWlCO0lBT2pFLFlBQW1CLE9BQW1CLEVBQVMsTUFBd0IsRUFBRSxHQUFzQjtRQUM3RixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBREgsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBTHZFLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFDdkIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixVQUFLLEdBQVcsR0FBRyxDQUFDO0lBS3BCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGNBQWMsQ0FBQyxVQUFlO1FBQzVCLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN0QixJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM5QixJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztTQUN4QjthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OzBIQWxDVSw0QkFBNEI7OEdBQTVCLDRCQUE0QixzSkEzQjdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJUOzRGQUVVLDRCQUE0QjtrQkE3QnhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJUO2lCQUNGO2dLQUdDLE1BQU07c0JBREwsV0FBVzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkcyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL25vdm8tbGFiZWwtc2VydmljZSc7XG4vLyBBcHBcbmltcG9ydCB7IEJhc2VQaWNrZXJSZXN1bHRzIH0gZnJvbSAnLi4vYmFzZS1waWNrZXItcmVzdWx0cy9CYXNlUGlja2VyUmVzdWx0cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NraWxsLXNwZWNpYWx0eS1waWNrZXItcmVzdWx0cycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwaWNrZXItbG9hZGluZ1wiICpuZ0lmPVwiaXNMb2FkaW5nICYmICFtYXRjaGVzPy5sZW5ndGhcIj48bm92by1sb2FkaW5nIHRoZW1lPVwibGluZVwiPjwvbm92by1sb2FkaW5nPjwvc2VjdGlvbj5cbiAgICA8bm92by1saXN0ICpuZ0lmPVwibWF0Y2hlcy5sZW5ndGggPiAwXCIgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgIDxub3ZvLWxpc3QtaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgbWF0Y2ggb2YgbWF0Y2hlc1wiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RNYXRjaCgkZXZlbnQpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJtYXRjaCA9PT0gYWN0aXZlTWF0Y2hcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RBY3RpdmUobWF0Y2gpXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInByZXNlbGVjdGVkKG1hdGNoKVwiXG4gICAgICA+XG4gICAgICAgIDxpdGVtLWNvbnRlbnQ+XG4gICAgICAgICAgPGg2PjxzcGFuIFtpbm5lckh0bWxdPVwibWF0Y2gubGFiZWwgfCBoaWdobGlnaHQ6dGVybVwiPjwvc3Bhbj48L2g2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJiaGktY2F0ZWdvcnktdGFnc1wiPjwvaVxuICAgICAgICAgICAgPjxzcGFuIFtpbm5lckh0bWxdPVwibWF0Y2guZGF0YS5jYXRlZ29yaWVzIHx8IG1hdGNoLmRhdGEucGFyZW50Q2F0ZWdvcnkubmFtZSB8IGhpZ2hsaWdodDp0ZXJtXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2l0ZW0tY29udGVudD5cbiAgICAgIDwvbm92by1saXN0LWl0ZW0+XG4gICAgICA8bm92by1saXN0LWl0ZW0gKm5nSWY9XCJsaW1pdGVkVG9cIlxuICAgICAgICA+PGRpdj57eyBsYWJlbHMuc2hvd2luZ1hvZlhSZXN1bHRzKGxpbWl0LCB0b3RhbCkgfX08L2Rpdj48L25vdm8tbGlzdC1pdGVtXG4gICAgICA+XG4gICAgICA8bm92by1sb2FkaW5nIHRoZW1lPVwibGluZVwiICpuZ0lmPVwiaXNMb2FkaW5nICYmIG1hdGNoZXMubGVuZ3RoID4gMFwiPjwvbm92by1sb2FkaW5nPlxuICAgIDwvbm92by1saXN0PlxuICAgIDxwIGNsYXNzPVwicGlja2VyLWVycm9yXCIgKm5nSWY9XCJoYXNFcnJvclwiPnt7IGxhYmVscy5waWNrZXJFcnJvciB9fTwvcD5cbiAgICA8cCBjbGFzcz1cInBpY2tlci1udWxsXCIgKm5nSWY9XCIhaXNMb2FkaW5nICYmICFtYXRjaGVzLmxlbmd0aCAmJiAhaGFzRXJyb3JcIj57eyBsYWJlbHMucGlja2VyRW1wdHkgfX08L3A+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFNraWxsc1NwZWNpYWx0eVBpY2tlclJlc3VsdHMgZXh0ZW5kcyBCYXNlUGlja2VyUmVzdWx0cyB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJylcbiAgYWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgbGltaXRlZFRvOiBib29sZWFuID0gZmFsc2U7XG4gIGxpbWl0OiBudW1iZXIgPSAyMDA7XG4gIHRvdGFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyBsYWJlbHM6IE5vdm9MYWJlbFNlcnZpY2UsIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihlbGVtZW50LCByZWYpO1xuICB9XG5cbiAgZ2V0TGlzdEVsZW1lbnQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcignbm92by1saXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc3RydWN0dXJlQXJyYXlcbiAgICogQHBhcmFtIGNvbGxlY3Rpb24gLSB0aGUgZGF0YSBvbmNlIGdldERhdGEgcmVzb2x2ZXMgaXRcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uIFRoaXMgZnVuY3Rpb24gc3RydWN0dXJlcyBhbiBhcnJheSBvZiBub2RlcyBpbnRvIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhXG4gICAqICduYW1lJyBmaWVsZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgc3RydWN0dXJlQXJyYXkoY29sbGVjdGlvbjogYW55KTogYW55IHtcbiAgICBsZXQgZGF0YSA9IGNvbGxlY3Rpb247XG4gICAgaWYgKGNvbGxlY3Rpb24uaGFzT3duUHJvcGVydHkoJ2RhdGEnKSkge1xuICAgICAgdGhpcy5saW1pdGVkVG8gPSBjb2xsZWN0aW9uLmxpbWl0ZWRUbzIwMDtcbiAgICAgIHRoaXMudG90YWwgPSBjb2xsZWN0aW9uLnRvdGFsO1xuICAgICAgZGF0YSA9IGNvbGxlY3Rpb24uZGF0YTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoID4gdGhpcy5saW1pdCkge1xuICAgICAgdGhpcy5saW1pdGVkVG8gPSB0cnVlO1xuICAgICAgdGhpcy50b3RhbCA9IGRhdGEubGVuZ3RoO1xuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UoMCwgdGhpcy5saW1pdCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zdHJ1Y3R1cmVBcnJheShkYXRhKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,195 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Directive, ElementRef, Input, ViewChild, ViewContainerRef, } from '@angular/core';
2
+ import { ControlContainer, FormControl } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
5
+ import { QueryBuilderService } from '../query-builder.service';
6
+ import { NOVO_CONDITION_BUILDER } from '../query-builder.tokens';
7
+ import { NovoLabelService } from '../../../services';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../../services";
10
+ import * as i2 from "../query-builder.service";
11
+ import * as i3 from "@angular/forms";
12
+ import * as i4 from "../../flex/Grid";
13
+ import * as i5 from "../../field/field";
14
+ import * as i6 from "../../select/Select";
15
+ import * as i7 from "../../common/option/optgroup.component";
16
+ import * as i8 from "../../common/option/option.component";
17
+ import * as i9 from "../../select-search/select-search.component";
18
+ import * as i10 from "../../loading/Loading";
19
+ import * as i11 from "../../common/directives/space.directive";
20
+ import * as i12 from "@angular/common";
21
+ /**
22
+ * Provides a handle for the table to grab the view container's ng-container to insert data rows.
23
+ * @docs-private
24
+ */
25
+ export class ConditionInputOutlet {
26
+ constructor(viewContainer, elementRef) {
27
+ this.viewContainer = viewContainer;
28
+ this.elementRef = elementRef;
29
+ }
30
+ }
31
+ ConditionInputOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionInputOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
32
+ ConditionInputOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ConditionInputOutlet, selector: "[conditionInputOutlet]", ngImport: i0 });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionInputOutlet, decorators: [{
34
+ type: Directive,
35
+ args: [{ selector: '[conditionInputOutlet]' }]
36
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });
37
+ /**
38
+ * Provides a handle for the table to grab the view container's ng-container to insert data rows.
39
+ * @docs-private
40
+ */
41
+ export class ConditionOperatorOutlet {
42
+ constructor(viewContainer, elementRef) {
43
+ this.viewContainer = viewContainer;
44
+ this.elementRef = elementRef;
45
+ }
46
+ }
47
+ ConditionOperatorOutlet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionOperatorOutlet, deps: [{ token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
48
+ ConditionOperatorOutlet.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ConditionOperatorOutlet, selector: "[conditionOperatorOutlet]", ngImport: i0 });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionOperatorOutlet, decorators: [{
50
+ type: Directive,
51
+ args: [{ selector: '[conditionOperatorOutlet]' }]
52
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });
53
+ export class ConditionBuilderComponent {
54
+ constructor(labels, cdr, qbs, controlContainer) {
55
+ this.labels = labels;
56
+ this.cdr = cdr;
57
+ this.qbs = qbs;
58
+ this.controlContainer = controlContainer;
59
+ this.searchTerm = new FormControl();
60
+ this._lastContext = {};
61
+ /** Subject that emits when the component has been destroyed. */
62
+ this._onDestroy = new Subject();
63
+ }
64
+ ngOnInit() {
65
+ this.parentForm = this.controlContainer.control;
66
+ this.parentForm.valueChanges.subscribe((value) => {
67
+ Promise.resolve().then(() => this.onFieldSelect());
68
+ });
69
+ }
70
+ ngAfterContentInit() {
71
+ const { fields = [] } = this.qbs.config || {};
72
+ fields.length && this.changeFieldOptions(fields[0]);
73
+ this.searches = this.searchTerm.valueChanges.pipe(debounceTime(300), distinctUntilChanged()).subscribe((term) => {
74
+ // this.parentForm.get('field').setValue(null);
75
+ this.results$ = Promise.resolve(this.fieldConfig.options.filter((f) => f.name.toLowerCase().includes(term.toLowerCase()) || f.label?.toLowerCase().includes(term.toLowerCase())));
76
+ this.cdr.markForCheck();
77
+ });
78
+ }
79
+ ngAfterViewInit() {
80
+ if (this.parentForm.value?.field !== null) {
81
+ Promise.resolve().then(() => this.onFieldSelect());
82
+ }
83
+ }
84
+ ngOnDestroy() {
85
+ this.searches.unsubscribe();
86
+ // Clear all outlets and Maps
87
+ [this._operatorOutlet.viewContainer, this._inputOutlet.viewContainer].forEach((def) => {
88
+ def.clear();
89
+ });
90
+ // this._contentFieldTypeDefs = [];
91
+ // this._contentFieldDefs = [];
92
+ this._onDestroy.next();
93
+ this._onDestroy.complete();
94
+ }
95
+ /**
96
+ * Updates the Conditions "Field" Options to Change base on new Scope
97
+ * @param fieldConfig
98
+ */
99
+ changeFieldOptions(fieldConfig) {
100
+ // this.fields = entity.filter(term);
101
+ this.fieldConfig = fieldConfig;
102
+ this.searchTerm.setValue('');
103
+ this.results$ = Promise.resolve(this.fieldConfig.options);
104
+ }
105
+ getField() {
106
+ const { field } = this.parentForm?.value;
107
+ if (!field)
108
+ return null;
109
+ return this.fieldConfig.find(field);
110
+ }
111
+ getDefaultField() {
112
+ const fields = this.fieldConfig.options;
113
+ if (fields && fields.length) {
114
+ return fields[0].name;
115
+ }
116
+ return null;
117
+ }
118
+ onFieldSelect() {
119
+ const fieldConf = this.getField();
120
+ if (!fieldConf) {
121
+ this.parentForm.get('field').setValue(this.getDefaultField());
122
+ return;
123
+ }
124
+ else {
125
+ this.fieldDisplayWith = () => fieldConf.label || fieldConf.name;
126
+ }
127
+ const { field, operator } = this.parentForm.value;
128
+ if (this._lastContext.field !== field) {
129
+ if (!!this._lastContext.field) {
130
+ // only clearing operator/value is field was previously defined so we can preload values onto the form
131
+ this.parentForm.get('value').setValue(null);
132
+ this.parentForm.get('operator').setValue(null);
133
+ }
134
+ this.createFieldTemplates();
135
+ }
136
+ this._lastContext = { ...this.parentForm.value };
137
+ this.cdr.markForCheck();
138
+ }
139
+ findDefinitionForField(field) {
140
+ if (!field)
141
+ return;
142
+ const editType = this.qbs.editTypeFn(field);
143
+ // Don't look at dataSpecialization it is no good, this misses currency, and percent
144
+ const { name, inputType, dataType, type } = field;
145
+ const fieldDefsByName = this.qbs.getFieldDefsByName();
146
+ // Check Fields by priority for match Field Definition
147
+ const key = [name, editType?.toUpperCase(), 'DEFAULT'].find((it) => fieldDefsByName.has(it));
148
+ return fieldDefsByName.get(key);
149
+ }
150
+ createFieldTemplates() {
151
+ const definition = this.findDefinitionForField(this.getField());
152
+ if (!this.parentForm.get('operator').value) {
153
+ this.parentForm.get('operator').setValue(definition.defaultOperator);
154
+ }
155
+ this.createFieldOperators(definition);
156
+ this.createFieldInput(definition);
157
+ }
158
+ createFieldOperators(definition) {
159
+ this._operatorOutlet.viewContainer.clear();
160
+ if (definition) {
161
+ const context = { $implicit: this.parentForm, fieldMeta: this.getField() };
162
+ this._operatorOutlet.viewContainer.createEmbeddedView(definition.fieldOperators.template, context);
163
+ }
164
+ this.cdr.markForCheck();
165
+ }
166
+ createFieldInput(definition) {
167
+ this._inputOutlet.viewContainer.clear();
168
+ if (definition) {
169
+ const context = { $implicit: this.parentForm, fieldMeta: this.getField(), viewIndex: this.groupIndex.toString() + this.andIndex.toString() };
170
+ this._inputOutlet.viewContainer.createEmbeddedView(definition.fieldInput.template, context);
171
+ }
172
+ this.cdr.markForCheck();
173
+ }
174
+ }
175
+ ConditionBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionBuilderComponent, deps: [{ token: i1.NovoLabelService }, { token: i0.ChangeDetectorRef }, { token: i2.QueryBuilderService }, { token: i3.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
176
+ ConditionBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: { label: "label", isFirst: "isFirst", andIndex: "andIndex", groupIndex: "groupIndex" }, providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent }], viewQueries: [{ propertyName: "_operatorOutlet", first: true, predicate: ConditionOperatorOutlet, descendants: true, static: true }, { propertyName: "_inputOutlet", first: true, predicate: ConditionInputOutlet, descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"isFirst ? '20rem 13rem 1fr' : '16rem 13rem 1fr'\" align=\"end\">\n <novo-field class=\"condition-field\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"onFieldSelect()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"isFirst ? 200 : 160\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>", styles: [":host{position:relative;display:block;width:100%}:host .condition-field{grid-template-columns:minmax(-webkit-fit-content,1fr);grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(-webkit-fit-content,1fr);grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"], components: [{ type: i4.NovoGridElement, selector: "novo-grid", inputs: ["direction", "align", "justify", "columns"] }, { type: i5.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "width"], outputs: ["valueChanges", "stateChanges"] }, { type: i6.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { 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.NovoSelectSearchComponent, selector: "novo-select-search", inputs: ["name", "placeholderLabel", "type", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { type: i10.NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ConditionOperatorOutlet, selector: "[conditionOperatorOutlet]" }, { type: ConditionInputOutlet, selector: "[conditionInputOutlet]" }], pipes: { "async": i12.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionBuilderComponent, decorators: [{
178
+ type: Component,
179
+ args: [{ selector: 'novo-condition-builder', providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"isFirst ? '20rem 13rem 1fr' : '16rem 13rem 1fr'\" align=\"end\">\n <novo-field class=\"condition-field\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"onFieldSelect()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"isFirst ? 200 : 160\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<!-- EMPTY STATE TEMPLATE -->\n<!-- <ng-template #empty>\n <novo-non-ideal-state>\n <novo-icon size=\"xl\" color=\"grapefruit\">search</novo-icon>\n <novo-title>No results found.</novo-title>\n <novo-text>Your search didn't find anything. Try searching for something else.</novo-text>\n </novo-non-ideal-state>\n</ng-template> -->\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>", styles: [":host{position:relative;display:block;width:100%}:host .condition-field{grid-template-columns:minmax(-webkit-fit-content,1fr);grid-template-columns:minmax(fit-content,1fr);width:100%;width:-webkit-fill-available}:host .condition-operator::ng-deep .novo-select{min-width:13rem}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical{grid-template-columns:minmax(-webkit-fit-content,1fr);grid-template-columns:minmax(fit-content,1fr);width:-webkit-fill-available}:host .condition-input::ng-deep novo-field.novo-field-layout-vertical .novo-input-element{width:100%}:host .condition-input::ng-deep novo-field{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}:host .condition-input::ng-deep .novo-field-infix{white-space:nowrap;overflow:hidden}:host .condition-input::ng-deep novo-chips{border-bottom:none!important}:host .condition-input::ng-deep novo-chips input{padding-left:0!important}:host .and-or-filter-button{box-sizing:border-box;background:#fff;border:1px solid #ddd;color:#5691f5;display:inline-block;position:relative;cursor:pointer;margin:.4rem auto;align-items:center;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:none;white-space:nowrap;text-transform:uppercase;overflow:hidden;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1)}\n"] }]
180
+ }], ctorParameters: function () { return [{ type: i1.NovoLabelService }, { type: i0.ChangeDetectorRef }, { type: i2.QueryBuilderService }, { type: i3.ControlContainer }]; }, propDecorators: { _operatorOutlet: [{
181
+ type: ViewChild,
182
+ args: [ConditionOperatorOutlet, { static: true }]
183
+ }], _inputOutlet: [{
184
+ type: ViewChild,
185
+ args: [ConditionInputOutlet, { static: true }]
186
+ }], label: [{
187
+ type: Input
188
+ }], isFirst: [{
189
+ type: Input
190
+ }], andIndex: [{
191
+ type: Input
192
+ }], groupIndex: [{
193
+ type: Input
194
+ }] } });
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUVyRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW1CLGFBQStCLEVBQVMsVUFBc0I7UUFBOUQsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7O2tI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QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFeEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZUNvbmRpdGlvbkZpZWxkRGVmIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTk9WT19DT05ESVRJT05fQlVJTERFUiB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIudG9rZW5zJztcbmltcG9ydCB7IEJhc2VGaWVsZERlZiwgRmllbGRDb25maWcsIFF1ZXJ5RmlsdGVyT3V0bGV0IH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBOb3ZvTGFiZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgaGFuZGxlIGZvciB0aGUgdGFibGUgdG8gZ3JhYiB0aGUgdmlldyBjb250YWluZXIncyBuZy1jb250YWluZXIgdG8gaW5zZXJ0IGRhdGEgcm93cy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NvbmRpdGlvbklucHV0T3V0bGV0XScgfSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25JbnB1dE91dGxldCBpbXBsZW1lbnRzIFF1ZXJ5RmlsdGVyT3V0bGV0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGEgaGFuZGxlIGZvciB0aGUgdGFibGUgdG8gZ3JhYiB0aGUgdmlldyBjb250YWluZXIncyBuZy1jb250YWluZXIgdG8gaW5zZXJ0IGRhdGEgcm93cy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2NvbmRpdGlvbk9wZXJhdG9yT3V0bGV0XScgfSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25PcGVyYXRvck91dGxldCBpbXBsZW1lbnRzIFF1ZXJ5RmlsdGVyT3V0bGV0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWNvbmRpdGlvbi1idWlsZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOT1ZPX0NPTkRJVElPTl9CVUlMREVSLCB1c2VFeGlzdGluZzogQ29uZGl0aW9uQnVpbGRlckNvbXBvbmVudCB9XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9vcGVyYXRvck91dGxldDogQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQ7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uSW5wdXRPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dE91dGxldDogQ29uZGl0aW9uSW5wdXRPdXRsZXQ7XG5cbiAgQElucHV0KCkgbGFiZWw6IGFueTtcbiAgQElucHV0KCkgaXNGaXJzdDogYm9vbGVhbjtcbiAgQElucHV0KCkgYW5kSW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgZ3JvdXBJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBwYXJlbnRGb3JtOiBBYnN0cmFjdENvbnRyb2w7XG4gIHB1YmxpYyBmaWVsZENvbmZpZzogRmllbGRDb25maWc8QmFzZUZpZWxkRGVmPjtcbiAgcHVibGljIHNlYXJjaGVzITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVzdWx0cyQ6IFByb21pc2U8YW55W10+O1xuICBwdWJsaWMgc2VhcmNoVGVybTogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgcHVibGljIGZpZWxkRGlzcGxheVdpdGg7XG5cbiAgcHJpdmF0ZSBfbGFzdENvbnRleHQ6IGFueSA9IHt9O1xuXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHFiczogUXVlcnlCdWlsZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbDtcbiAgICB0aGlzLnBhcmVudEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vbkZpZWxkU2VsZWN0KCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGNvbnN0IHsgZmllbGRzID0gW10gfSA9IHRoaXMucWJzLmNvbmZpZyB8fCB7fTtcbiAgICBmaWVsZHMubGVuZ3RoICYmIHRoaXMuY2hhbmdlRmllbGRPcHRpb25zKGZpZWxkc1swXSk7XG4gICAgdGhpcy5zZWFyY2hlcyA9IHRoaXMuc2VhcmNoVGVybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XG4gICAgICAvLyB0aGlzLnBhcmVudEZvcm0uZ2V0KCdmaWVsZCcpLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgdGhpcy5maWVsZENvbmZpZy5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSB8fCBmLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybS52YWx1ZT8uZmllbGQgIT09IG51bGwpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vbkZpZWxkU2VsZWN0KCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoZXMudW5zdWJzY3JpYmUoKTtcbiAgICAvLyBDbGVhciBhbGwgb3V0bGV0cyBhbmQgTWFwc1xuICAgIFt0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLCB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyXS5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgIGRlZi5jbGVhcigpO1xuICAgIH0pO1xuICAgIC8vIHRoaXMuX2NvbnRlbnRGaWVsZFR5cGVEZWZzID0gW107XG4gICAgLy8gdGhpcy5fY29udGVudEZpZWxkRGVmcyA9IFtdO1xuICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgQ29uZGl0aW9ucyBcIkZpZWxkXCIgT3B0aW9ucyB0byBDaGFuZ2UgYmFzZSBvbiBuZXcgU2NvcGVcbiAgICogQHBhcmFtIGZpZWxkQ29uZmlnXG4gICAqL1xuICBjaGFuZ2VGaWVsZE9wdGlvbnMoZmllbGRDb25maWc6IEZpZWxkQ29uZmlnPEJhc2VGaWVsZERlZj4pIHtcbiAgICAvLyB0aGlzLmZpZWxkcyA9IGVudGl0eS5maWx0ZXIodGVybSk7XG4gICAgdGhpcy5maWVsZENvbmZpZyA9IGZpZWxkQ29uZmlnO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZSh0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0RmllbGQoKSB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wYXJlbnRGb3JtPy52YWx1ZTtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5maWVsZENvbmZpZy5maW5kKGZpZWxkKTtcbiAgfVxuXG4gIGdldERlZmF1bHRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnM7XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmllbGRzWzBdLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgb25GaWVsZFNlbGVjdCgpIHtcbiAgICBjb25zdCBmaWVsZENvbmYgPSB0aGlzLmdldEZpZWxkKCk7XG4gICAgaWYgKCFmaWVsZENvbmYpIHtcbiAgICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2ZpZWxkJykuc2V0VmFsdWUodGhpcy5nZXREZWZhdWx0RmllbGQoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGREaXNwbGF5V2l0aCA9ICgpID0+IGZpZWxkQ29uZi5sYWJlbCB8fCBmaWVsZENvbmYubmFtZTtcbiAgICB9XG4gICAgY29uc3QgeyBmaWVsZCwgb3BlcmF0b3IgfSA9IHRoaXMucGFyZW50Rm9ybS52YWx1ZTtcblxuICAgIGlmICh0aGlzLl9sYXN0Q29udGV4dC5maWVsZCAhPT0gZmllbGQpIHtcbiAgICAgIGlmICghIXRoaXMuX2xhc3RDb250ZXh0LmZpZWxkKSB7XG4gICAgICAgIC8vIG9ubHkgY2xlYXJpbmcgb3BlcmF0b3IvdmFsdWUgaXMgZmllbGQgd2FzIHByZXZpb3VzbHkgZGVmaW5lZCBzbyB3ZSBjYW4gcHJlbG9hZCB2YWx1ZXMgb250byB0aGUgZm9ybVxuICAgICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCd2YWx1ZScpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVGaWVsZFRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIHRoaXMuX2xhc3RDb250ZXh0ID0geyAuLi50aGlzLnBhcmVudEZvcm0udmFsdWUgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZERlZmluaXRpb25Gb3JGaWVsZChmaWVsZCkge1xuICAgIGlmICghZmllbGQpIHJldHVybjtcbiAgICBjb25zdCBlZGl0VHlwZSA9IHRoaXMucWJzLmVkaXRUeXBlRm4oZmllbGQpO1xuICAgIC8vIERvbid0IGxvb2sgYXQgZGF0YVNwZWNpYWxpemF0aW9uIGl0IGlzIG5vIGdvb2QsIHRoaXMgbWlzc2VzIGN1cnJlbmN5LCBhbmQgcGVyY2VudFxuICAgIGNvbnN0IHsgbmFtZSwgaW5wdXRUeXBlLCBkYXRhVHlwZSwgdHlwZSB9ID0gZmllbGQ7XG4gICAgY29uc3QgZmllbGREZWZzQnlOYW1lID0gdGhpcy5xYnMuZ2V0RmllbGREZWZzQnlOYW1lKCk7XG4gICAgLy8gQ2hlY2sgRmllbGRzIGJ5IHByaW9yaXR5IGZvciBtYXRjaCBGaWVsZCBEZWZpbml0aW9uXG4gICAgY29uc3Qga2V5ID0gW25hbWUsIGVkaXRUeXBlPy50b1VwcGVyQ2FzZSgpLCAnREVGQVVMVCddLmZpbmQoKGl0KSA9PiBmaWVsZERlZnNCeU5hbWUuaGFzKGl0KSk7XG4gICAgcmV0dXJuIGZpZWxkRGVmc0J5TmFtZS5nZXQoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRUZW1wbGF0ZXMoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZmluZERlZmluaXRpb25Gb3JGaWVsZCh0aGlzLmdldEZpZWxkKCkpO1xuXG4gICAgaWYgKCF0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnNldFZhbHVlKGRlZmluaXRpb24uZGVmYXVsdE9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZUZpZWxkT3BlcmF0b3JzKGRlZmluaXRpb24pO1xuICAgIHRoaXMuY3JlYXRlRmllbGRJbnB1dChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRPcGVyYXRvcnMoZGVmaW5pdGlvbjogQmFzZUNvbmRpdGlvbkZpZWxkRGVmKSB7XG4gICAgdGhpcy5fb3BlcmF0b3JPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMucGFyZW50Rm9ybSwgZmllbGRNZXRhOiB0aGlzLmdldEZpZWxkKCkgfTtcbiAgICAgIHRoaXMuX29wZXJhdG9yT3V0bGV0LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGRlZmluaXRpb24uZmllbGRPcGVyYXRvcnMudGVtcGxhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRJbnB1dChkZWZpbml0aW9uOiBCYXNlQ29uZGl0aW9uRmllbGREZWYpIHtcbiAgICB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7ICRpbXBsaWNpdDogdGhpcy5wYXJlbnRGb3JtLCBmaWVsZE1ldGE6IHRoaXMuZ2V0RmllbGQoKSwgdmlld0luZGV4OiB0aGlzLmdyb3VwSW5kZXgudG9TdHJpbmcoKSArIHRoaXMuYW5kSW5kZXgudG9TdHJpbmcoKSB9O1xuICAgICAgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZGVmaW5pdGlvbi5maWVsZElucHV0LnRlbXBsYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwicGFyZW50Rm9ybVwiPlxuICA8bm92by1ncmlkIGdhcD1cIjFyZW1cIiBbY29sdW1uc109XCJpc0ZpcnN0ID8gJzIwcmVtIDEzcmVtIDFmcicgOiAnMTZyZW0gMTNyZW0gMWZyJ1wiIGFsaWduPVwiZW5kXCI+XG4gICAgPG5vdm8tZmllbGQgY2xhc3M9XCJjb25kaXRpb24tZmllbGRcIj5cbiAgICAgIDxub3ZvLXNlbGVjdFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLmNob29zZUFGaWVsZFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cIm9uRmllbGRTZWxlY3QoKVwiXG4gICAgICAgIG92ZXJsYXlXaWR0aD1cIjI0cmVtXCJcbiAgICAgICAgb3ZlcmxheUhlaWdodD1cIjIwcmVtXCJcbiAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImZpZWxkRGlzcGxheVdpdGhcIlxuICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiMTYwXCJcbiAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImlzRmlyc3QgPyAyMDAgOiAxNjBcIj5cbiAgICAgICAgPG5vdm8tb3B0Z3JvdXAgY2xhc3M9XCJmaWx0ZXItc2VhcmNoLXJlc3VsdHNcIj5cbiAgICAgICAgICA8bm92by1vcHRpb24+XG4gICAgICAgICAgICA8bm92by1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hUZXJtXCIgW2NsZWFyU2VhcmNoSW5wdXRdPVwiZmFsc2VcIj48L25vdm8tc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICA8L25vdm8tb3B0aW9uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXN1bHRzJCB8IGFzeW5jIGFzIHJlc3VsdHM7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3VsdHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxub3ZvLW9wdGlvbiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcmVzdWx0c1wiIHZhbHVlPVwie3sgZmllbGQubmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB8fCBmaWVsZC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvbm92by1vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9ub3ZvLW9wdGdyb3VwPlxuICAgICAgPC9ub3ZvLXNlbGVjdD5cbiAgICA8L25vdm8tZmllbGQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLW9wZXJhdG9yXCI+XG4gICAgICA8bmctY29udGFpbmVyIGNvbmRpdGlvbk9wZXJhdG9yT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1pbnB1dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBjb25kaXRpb25JbnB1dE91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9ub3ZvLWdyaWQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZm9ybT5cblxuPCEtLSBFTVBUWSBTVEFURSBURU1QTEFURSAtLT5cbjwhLS0gPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgPG5vdm8tbm9uLWlkZWFsLXN0YXRlPlxuICAgIDxub3ZvLWljb24gc2l6ZT1cInhsXCIgY29sb3I9XCJncmFwZWZydWl0XCI+c2VhcmNoPC9ub3ZvLWljb24+XG4gICAgPG5vdm8tdGl0bGU+Tm8gcmVzdWx0cyBmb3VuZC48L25vdm8tdGl0bGU+XG4gICAgPG5vdm8tdGV4dD5Zb3VyIHNlYXJjaCBkaWRuJ3QgZmluZCBhbnl0aGluZy4gVHJ5IHNlYXJjaGluZyBmb3Igc29tZXRoaW5nIGVsc2UuPC9ub3ZvLXRleHQ+XG4gIDwvbm92by1ub24taWRlYWwtc3RhdGU+XG48L25nLXRlbXBsYXRlPiAtLT5cblxuPCEtLSBMT0FESU5HIFRFTVBMQVRFIC0tPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8bm92by1sb2FkaW5nPjwvbm92by1sb2FkaW5nPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -0,0 +1,51 @@
1
+ import { Directive, Input, ViewChild } from '@angular/core';
2
+ import { NovoLabelService } from '../../../services';
3
+ import { NovoConditionFieldDef } from '../query-builder.directives';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../services";
6
+ export class AbstractConditionFieldDef {
7
+ constructor(labels) {
8
+ this.labels = labels;
9
+ }
10
+ /** Column name that should be used to reference this column. */
11
+ get name() {
12
+ return this._name;
13
+ }
14
+ set name(name) {
15
+ this._name = name;
16
+ // With Ivy, inputs can be initialized before static query results are
17
+ // available. In that case, we defer the synchronization until "ngOnInit" fires.
18
+ this._syncFieldDefName();
19
+ }
20
+ ngOnInit() {
21
+ this._syncFieldDefName();
22
+ this._syncFieldDefOperatorValue();
23
+ // Need to add self to FilterBuilder because "ContentChildren won't find it"
24
+ this.fieldDef?.register();
25
+ }
26
+ ngOnDestroy() {
27
+ this.fieldDef?.unregister();
28
+ }
29
+ /** Synchronizes the column definition name with the text column name. */
30
+ _syncFieldDefName() {
31
+ if (this.fieldDef) {
32
+ this.fieldDef.name = this.name;
33
+ }
34
+ }
35
+ _syncFieldDefOperatorValue() {
36
+ if (this.fieldDef) {
37
+ this.fieldDef.defaultOperator = this.defaultOperator;
38
+ }
39
+ }
40
+ }
41
+ AbstractConditionFieldDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractConditionFieldDef, deps: [{ token: i1.NovoLabelService }], target: i0.ɵɵFactoryTarget.Directive });
42
+ AbstractConditionFieldDef.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: AbstractConditionFieldDef, inputs: { name: "name" }, viewQueries: [{ propertyName: "fieldDef", first: true, predicate: NovoConditionFieldDef, descendants: true, static: true }], ngImport: i0 });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractConditionFieldDef, decorators: [{
44
+ type: Directive
45
+ }], ctorParameters: function () { return [{ type: i1.NovoLabelService }]; }, propDecorators: { name: [{
46
+ type: Input
47
+ }], fieldDef: [{
48
+ type: ViewChild,
49
+ args: [NovoConditionFieldDef, { static: true }]
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY29uZGl0aW9uLmRlZmluaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1kZWZpbml0aW9ucy9hYnN0cmFjdC1jb25kaXRpb24uZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFHcEUsTUFBTSxPQUFnQix5QkFBeUI7SUFrQjdDLFlBQW1CLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQUcsQ0FBQztJQWpCL0MsZ0VBQWdFO0lBQ2hFLElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixzRUFBc0U7UUFDdEUsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFTRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCx5RUFBeUU7SUFDakUsaUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztTQUN0RDtJQUNILENBQUM7O3VIQTFDbUIseUJBQXlCOzJHQUF6Qix5QkFBeUIsOEZBZ0JsQyxxQkFBcUI7NEZBaEJaLHlCQUF5QjtrQkFEOUMsU0FBUzt1R0FJSixJQUFJO3NCQURQLEtBQUs7Z0JBYzhDLFFBQVE7c0JBQTNELFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm92b0xhYmVsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE5vdm9Db25kaXRpb25GaWVsZERlZiB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIuZGlyZWN0aXZlcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0Q29uZGl0aW9uRmllbGREZWYgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIC8qKiBDb2x1bW4gbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGlzIGNvbHVtbi4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAvLyBXaXRoIEl2eSwgaW5wdXRzIGNhbiBiZSBpbml0aWFsaXplZCBiZWZvcmUgc3RhdGljIHF1ZXJ5IHJlc3VsdHMgYXJlXG4gICAgLy8gYXZhaWxhYmxlLiBJbiB0aGF0IGNhc2UsIHdlIGRlZmVyIHRoZSBzeW5jaHJvbml6YXRpb24gdW50aWwgXCJuZ09uSW5pdFwiIGZpcmVzLlxuICAgIHRoaXMuX3N5bmNGaWVsZERlZk5hbWUoKTtcbiAgfVxuICBfbmFtZTogc3RyaW5nO1xuXG4gIGRlZmF1bHRPcGVyYXRvcjogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoTm92b0NvbmRpdGlvbkZpZWxkRGVmLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWVsZERlZjogTm92b0NvbmRpdGlvbkZpZWxkRGVmO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsYWJlbHM6IE5vdm9MYWJlbFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc3luY0ZpZWxkRGVmTmFtZSgpO1xuICAgIHRoaXMuX3N5bmNGaWVsZERlZk9wZXJhdG9yVmFsdWUoKTtcbiAgICAvLyBOZWVkIHRvIGFkZCBzZWxmIHRvIEZpbHRlckJ1aWxkZXIgYmVjYXVzZSBcIkNvbnRlbnRDaGlsZHJlbiB3b24ndCBmaW5kIGl0XCJcbiAgICB0aGlzLmZpZWxkRGVmPy5yZWdpc3RlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maWVsZERlZj8udW5yZWdpc3RlcigpO1xuICB9XG5cbiAgLyoqIFN5bmNocm9uaXplcyB0aGUgY29sdW1uIGRlZmluaXRpb24gbmFtZSB3aXRoIHRoZSB0ZXh0IGNvbHVtbiBuYW1lLiAqL1xuICBwcml2YXRlIF9zeW5jRmllbGREZWZOYW1lKCkge1xuICAgIGlmICh0aGlzLmZpZWxkRGVmKSB7XG4gICAgICB0aGlzLmZpZWxkRGVmLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0ZpZWxkRGVmT3BlcmF0b3JWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5maWVsZERlZikge1xuICAgICAgdGhpcy5maWVsZERlZi5kZWZhdWx0T3BlcmF0b3IgPSB0aGlzLmRlZmF1bHRPcGVyYXRvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,55 @@
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2
+ import { AbstractConditionFieldDef } from './abstract-condition.definition';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../field/field";
5
+ import * as i2 from "../../select/Select";
6
+ import * as i3 from "../../common/option/option.component";
7
+ import * as i4 from "../query-builder.directives";
8
+ import * as i5 from "@angular/forms";
9
+ /**
10
+ * Handle selection of field values when a list of options is provided.
11
+ */
12
+ export class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.defaultOperator = 'includeAny';
16
+ }
17
+ }
18
+ NovoDefaultAddressConditionDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoDefaultAddressConditionDef, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ NovoDefaultAddressConditionDef.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NovoDefaultAddressConditionDef, selector: "novo-address-condition-def", usesInheritance: true, ngImport: i0, template: `
20
+ <ng-container novoConditionFieldDef>
21
+ <novo-field *novoConditionOperatorsDef="let formGroup" [formGroup]="formGroup">
22
+ <novo-select [placeholder]="labels.operator" formControlName="operator">
23
+ <novo-option value="includeAny">{{ labels.includeAny }}</novo-option>
24
+ <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
25
+ <novo-option value="radius">{{ labels.radius }}</novo-option>
26
+ </novo-select>
27
+ </novo-field>
28
+ <novo-field *novoConditionInputDef="let formGroup; fieldMeta as meta" [formGroup]="formGroup">
29
+ <novo-select formControlName="value" [placeholder]="labels.select" [multiple]="true"> </novo-select>
30
+ </novo-field>
31
+ </ng-container>
32
+ `, isInline: true, components: [{ type: i1.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "width"], outputs: ["valueChanges", "stateChanges"] }, { type: i2.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { type: i3.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }], directives: [{ type: i4.NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }, { type: i4.NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NovoConditionInputDef, selector: "[novoConditionInputDef]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoDefaultAddressConditionDef, decorators: [{
34
+ type: Component,
35
+ args: [{
36
+ selector: 'novo-address-condition-def',
37
+ template: `
38
+ <ng-container novoConditionFieldDef>
39
+ <novo-field *novoConditionOperatorsDef="let formGroup" [formGroup]="formGroup">
40
+ <novo-select [placeholder]="labels.operator" formControlName="operator">
41
+ <novo-option value="includeAny">{{ labels.includeAny }}</novo-option>
42
+ <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
43
+ <novo-option value="radius">{{ labels.radius }}</novo-option>
44
+ </novo-select>
45
+ </novo-field>
46
+ <novo-field *novoConditionInputDef="let formGroup; fieldMeta as meta" [formGroup]="formGroup">
47
+ <novo-select formControlName="value" [placeholder]="labels.select" [multiple]="true"> </novo-select>
48
+ </novo-field>
49
+ </ng-container>
50
+ `,
51
+ encapsulation: ViewEncapsulation.None,
52
+ changeDetection: ChangeDetectionStrategy.Default,
53
+ }]
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1jb25kaXRpb24uZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3F1ZXJ5LWJ1aWxkZXIvY29uZGl0aW9uLWRlZmluaXRpb25zL2FkZHJlc3MtY29uZGl0aW9uLmRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUU1RTs7R0FFRztBQW9CSCxNQUFNLE9BQU8sOEJBQStCLFNBQVEseUJBQXlCO0lBbkI3RTs7UUFvQkUsb0JBQWUsR0FBRyxZQUFZLENBQUM7S0FDaEM7OzRIQUZZLDhCQUE4QjtnSEFBOUIsOEJBQThCLHlGQWpCL0I7Ozs7Ozs7Ozs7Ozs7R0FhVDs0RkFJVSw4QkFBOEI7a0JBbkIxQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztHQWFUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztpQkFDakQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25kaXRpb25GaWVsZERlZiB9IGZyb20gJy4vYWJzdHJhY3QtY29uZGl0aW9uLmRlZmluaXRpb24nO1xuXG4vKipcbiAqIEhhbmRsZSBzZWxlY3Rpb24gb2YgZmllbGQgdmFsdWVzIHdoZW4gYSBsaXN0IG9mIG9wdGlvbnMgaXMgcHJvdmlkZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tYWRkcmVzcy1jb25kaXRpb24tZGVmJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyIG5vdm9Db25kaXRpb25GaWVsZERlZj5cbiAgICAgIDxub3ZvLWZpZWxkICpub3ZvQ29uZGl0aW9uT3BlcmF0b3JzRGVmPVwibGV0IGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxub3ZvLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLm9wZXJhdG9yXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIj5cbiAgICAgICAgICA8bm92by1vcHRpb24gdmFsdWU9XCJpbmNsdWRlQW55XCI+e3sgbGFiZWxzLmluY2x1ZGVBbnkgfX08L25vdm8tb3B0aW9uPlxuICAgICAgICAgIDxub3ZvLW9wdGlvbiB2YWx1ZT1cImV4Y2x1ZGVBbnlcIj57eyBsYWJlbHMuZXhjbHVkZSB9fTwvbm92by1vcHRpb24+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uIHZhbHVlPVwicmFkaXVzXCI+e3sgbGFiZWxzLnJhZGl1cyB9fTwvbm92by1vcHRpb24+XG4gICAgICAgIDwvbm92by1zZWxlY3Q+XG4gICAgICA8L25vdm8tZmllbGQ+XG4gICAgICA8bm92by1maWVsZCAqbm92b0NvbmRpdGlvbklucHV0RGVmPVwibGV0IGZvcm1Hcm91cDsgZmllbGRNZXRhIGFzIG1ldGFcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8bm92by1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLnNlbGVjdFwiIFttdWx0aXBsZV09XCJ0cnVlXCI+IDwvbm92by1zZWxlY3Q+XG4gICAgICA8L25vdm8tZmllbGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0RlZmF1bHRBZGRyZXNzQ29uZGl0aW9uRGVmIGV4dGVuZHMgQWJzdHJhY3RDb25kaXRpb25GaWVsZERlZiB7XG4gIGRlZmF1bHRPcGVyYXRvciA9ICdpbmNsdWRlQW55Jztcbn1cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
2
+ import { AbstractConditionFieldDef } from './abstract-condition.definition';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../field/field";
5
+ import * as i2 from "../../select/Select";
6
+ import * as i3 from "../../common/option/option.component";
7
+ import * as i4 from "../query-builder.directives";
8
+ import * as i5 from "@angular/forms";
9
+ /**
10
+ * When constructing a query using a field that is a boolean with only true/false as possible values.
11
+ */
12
+ export class NovoDefaultBooleanConditionDef extends AbstractConditionFieldDef {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.defaultOperator = 'include';
16
+ }
17
+ }
18
+ NovoDefaultBooleanConditionDef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoDefaultBooleanConditionDef, deps: null, target: i0.ɵɵFactoryTarget.Component });
19
+ NovoDefaultBooleanConditionDef.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NovoDefaultBooleanConditionDef, selector: "novo-boolean-condition-def", usesInheritance: true, ngImport: i0, template: `
20
+ <ng-container novoConditionFieldDef>
21
+ <novo-field *novoConditionOperatorsDef="let formGroup" [formGroup]="formGroup">
22
+ <novo-select [placeholder]="labels.operator" formControlName="operator">
23
+ <novo-option value="include">{{ labels.equals }}</novo-option>
24
+ <novo-option value="exclude">{{ labels.doesNotEqual }}</novo-option>
25
+ </novo-select>
26
+ </novo-field>
27
+ <novo-field *novoConditionInputDef="let formGroup" [style.width.px]="100" [formGroup]="formGroup">
28
+ <novo-select [placeholder]="labels.value" formControlName="value">
29
+ <novo-option [value]="true">{{ labels.true }}</novo-option>
30
+ <novo-option [value]="false">{{ labels.false }}</novo-option>
31
+ </novo-select>
32
+ </novo-field>
33
+ </ng-container>
34
+ `, isInline: true, components: [{ type: i1.NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "width"], outputs: ["valueChanges", "stateChanges"] }, { type: i2.NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { type: i3.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }], directives: [{ type: i4.NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }, { type: i4.NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NovoConditionInputDef, selector: "[novoConditionInputDef]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoDefaultBooleanConditionDef, decorators: [{
36
+ type: Component,
37
+ args: [{
38
+ selector: 'novo-boolean-condition-def',
39
+ template: `
40
+ <ng-container novoConditionFieldDef>
41
+ <novo-field *novoConditionOperatorsDef="let formGroup" [formGroup]="formGroup">
42
+ <novo-select [placeholder]="labels.operator" formControlName="operator">
43
+ <novo-option value="include">{{ labels.equals }}</novo-option>
44
+ <novo-option value="exclude">{{ labels.doesNotEqual }}</novo-option>
45
+ </novo-select>
46
+ </novo-field>
47
+ <novo-field *novoConditionInputDef="let formGroup" [style.width.px]="100" [formGroup]="formGroup">
48
+ <novo-select [placeholder]="labels.value" formControlName="value">
49
+ <novo-option [value]="true">{{ labels.true }}</novo-option>
50
+ <novo-option [value]="false">{{ labels.false }}</novo-option>
51
+ </novo-select>
52
+ </novo-field>
53
+ </ng-container>
54
+ `,
55
+ encapsulation: ViewEncapsulation.None,
56
+ changeDetection: ChangeDetectionStrategy.Default,
57
+ }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi1jb25kaXRpb24uZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdm8tZWxlbWVudHMvc3JjL2VsZW1lbnRzL3F1ZXJ5LWJ1aWxkZXIvY29uZGl0aW9uLWRlZmluaXRpb25zL2Jvb2xlYW4tY29uZGl0aW9uLmRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUU1RTs7R0FFRztBQXNCSCxNQUFNLE9BQU8sOEJBQStCLFNBQVEseUJBQXlCO0lBckI3RTs7UUFzQkUsb0JBQWUsR0FBRyxTQUFTLENBQUM7S0FDN0I7OzRIQUZZLDhCQUE4QjtnSEFBOUIsOEJBQThCLHlGQW5CL0I7Ozs7Ozs7Ozs7Ozs7OztHQWVUOzRGQUlVLDhCQUE4QjtrQkFyQjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7R0FlVDtvQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87aUJBQ2pEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29uZGl0aW9uRmllbGREZWYgfSBmcm9tICcuL2Fic3RyYWN0LWNvbmRpdGlvbi5kZWZpbml0aW9uJztcblxuLyoqXG4gKiBXaGVuIGNvbnN0cnVjdGluZyBhIHF1ZXJ5IHVzaW5nIGEgZmllbGQgdGhhdCBpcyBhIGJvb2xlYW4gd2l0aCBvbmx5IHRydWUvZmFsc2UgYXMgcG9zc2libGUgdmFsdWVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdub3ZvLWJvb2xlYW4tY29uZGl0aW9uLWRlZicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciBub3ZvQ29uZGl0aW9uRmllbGREZWY+XG4gICAgICA8bm92by1maWVsZCAqbm92b0NvbmRpdGlvbk9wZXJhdG9yc0RlZj1cImxldCBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8bm92by1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5vcGVyYXRvclwiIGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCI+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uIHZhbHVlPVwiaW5jbHVkZVwiPnt7IGxhYmVscy5lcXVhbHMgfX08L25vdm8tb3B0aW9uPlxuICAgICAgICAgIDxub3ZvLW9wdGlvbiB2YWx1ZT1cImV4Y2x1ZGVcIj57eyBsYWJlbHMuZG9lc05vdEVxdWFsIH19PC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgPC9ub3ZvLXNlbGVjdD5cbiAgICAgIDwvbm92by1maWVsZD5cbiAgICAgIDxub3ZvLWZpZWxkICpub3ZvQ29uZGl0aW9uSW5wdXREZWY9XCJsZXQgZm9ybUdyb3VwXCIgW3N0eWxlLndpZHRoLnB4XT1cIjEwMFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxub3ZvLXNlbGVjdCBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLnZhbHVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIj5cbiAgICAgICAgICA8bm92by1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj57eyBsYWJlbHMudHJ1ZSB9fTwvbm92by1vcHRpb24+XG4gICAgICAgICAgPG5vdm8tb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPnt7IGxhYmVscy5mYWxzZSB9fTwvbm92by1vcHRpb24+XG4gICAgICAgIDwvbm92by1zZWxlY3Q+XG4gICAgICA8L25vdm8tZmllbGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbn0pXG5leHBvcnQgY2xhc3MgTm92b0RlZmF1bHRCb29sZWFuQ29uZGl0aW9uRGVmIGV4dGVuZHMgQWJzdHJhY3RDb25kaXRpb25GaWVsZERlZiB7XG4gIGRlZmF1bHRPcGVyYXRvciA9ICdpbmNsdWRlJztcbn1cbiJdfQ==