@odx/angular 1.0.3 → 2.0.0

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 (198) hide show
  1. package/cdk/autocomplete-control/README.md +3 -0
  2. package/cdk/autocomplete-control/index.d.ts +3 -0
  3. package/cdk/autocomplete-control/lib/abstract/base-search-field.directive.d.ts +13 -0
  4. package/cdk/autocomplete-control/lib/abstract/index.d.ts +1 -0
  5. package/cdk/autocomplete-control/lib/autocomplete-control.d.ts +39 -0
  6. package/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.d.ts +11 -0
  7. package/cdk/autocomplete-control/lib/pipes/index.d.ts +1 -0
  8. package/cdk/option-control/README.md +3 -0
  9. package/cdk/option-control/index.d.ts +1 -0
  10. package/cdk/option-control/lib/option-control.d.ts +17 -0
  11. package/components/autocomplete/README.md +3 -0
  12. package/components/autocomplete/index.d.ts +6 -0
  13. package/components/autocomplete/lib/autocomplete.component.d.ts +30 -0
  14. package/components/autocomplete/lib/autocomplete.module.d.ts +11 -0
  15. package/components/autocomplete/lib/autocomplete.tokens.d.ts +3 -0
  16. package/components/autocomplete/lib/components/index.d.ts +1 -0
  17. package/components/autocomplete/lib/components/option/autocomplete-option.component.d.ts +9 -0
  18. package/components/autocomplete/lib/directives/autocomplete-search-field.directive.d.ts +9 -0
  19. package/components/autocomplete/lib/directives/index.d.ts +1 -0
  20. package/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.d.ts +12 -0
  21. package/components/autocomplete/lib/pipes/index.d.ts +1 -0
  22. package/components/button/lib/button.component.d.ts +1 -1
  23. package/components/chip/index.d.ts +1 -1
  24. package/components/chip/lib/{chip.component.d.ts → components/chip/chip.component.d.ts} +1 -1
  25. package/components/chip/lib/components/chip-list/chip-list.component.d.ts +6 -0
  26. package/components/chip/lib/components/chip-list-row/chip-list-row.component.d.ts +6 -0
  27. package/components/chip/lib/components/index.d.ts +3 -0
  28. package/components/dropdown/lib/dropdown.directive.d.ts +2 -1
  29. package/components/form-field/lib/models/form-field-variant.d.ts +1 -0
  30. package/components/main-menu/lib/directives/index.d.ts +1 -0
  31. package/components/main-menu/lib/directives/main-menu-close.directive.d.ts +7 -0
  32. package/components/main-menu/lib/directives/main-menu-item.directive.d.ts +3 -4
  33. package/components/main-menu/lib/main-menu.module.d.ts +3 -2
  34. package/components/menu/lib/directives/menu-item.directive.d.ts +1 -1
  35. package/components/select/index.d.ts +0 -1
  36. package/components/select/lib/components/index.d.ts +1 -1
  37. package/components/select/lib/components/select-option/select-option.component.d.ts +19 -0
  38. package/components/select/lib/directives/select-search-field.directive.d.ts +3 -7
  39. package/components/select/lib/pipes/select-search-filter.pipe.d.ts +8 -8
  40. package/components/select/lib/select.component.d.ts +15 -30
  41. package/components/select/lib/select.module.d.ts +2 -2
  42. package/components/select/lib/select.tokens.d.ts +2 -2
  43. package/components/table/README.md +3 -0
  44. package/components/table/index.d.ts +5 -0
  45. package/components/table/lib/components/check-cell/check-cell.component.d.ts +11 -0
  46. package/components/table/lib/components/header-title/header-title.component.d.ts +28 -0
  47. package/components/table/lib/components/index.d.ts +2 -0
  48. package/components/table/lib/directives/index.d.ts +2 -0
  49. package/components/table/lib/directives/table-cell.directive.d.ts +6 -0
  50. package/components/table/lib/directives/table-row.directive.d.ts +6 -0
  51. package/components/table/lib/interfaces/index.d.ts +3 -0
  52. package/components/table/lib/models/index.d.ts +2 -0
  53. package/components/table/lib/models/sort-variant.d.ts +6 -0
  54. package/components/table/lib/models/table-variant.d.ts +5 -0
  55. package/components/table/lib/table.component.d.ts +29 -0
  56. package/components/table/lib/table.config.d.ts +4 -0
  57. package/components/table/lib/table.module.d.ts +11 -0
  58. package/components/wizard/README.md +3 -0
  59. package/components/wizard/index.d.ts +3 -0
  60. package/components/wizard/lib/components/index.d.ts +1 -0
  61. package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +17 -0
  62. package/components/wizard/lib/wizard.component.d.ts +31 -0
  63. package/components/wizard/lib/wizard.module.d.ts +9 -0
  64. package/esm2020/cdk/autocomplete-control/index.mjs +4 -0
  65. package/esm2020/cdk/autocomplete-control/lib/abstract/base-search-field.directive.mjs +38 -0
  66. package/esm2020/cdk/autocomplete-control/lib/abstract/index.mjs +2 -0
  67. package/esm2020/cdk/autocomplete-control/lib/autocomplete-control.mjs +90 -0
  68. package/esm2020/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.mjs +32 -0
  69. package/esm2020/cdk/autocomplete-control/lib/pipes/index.mjs +2 -0
  70. package/esm2020/cdk/autocomplete-control/odx-angular-cdk-autocomplete-control.mjs +5 -0
  71. package/esm2020/cdk/option-control/index.mjs +2 -0
  72. package/esm2020/cdk/option-control/lib/option-control.mjs +47 -0
  73. package/esm2020/cdk/option-control/odx-angular-cdk-option-control.mjs +5 -0
  74. package/esm2020/components/autocomplete/index.mjs +7 -0
  75. package/esm2020/components/autocomplete/lib/autocomplete.component.mjs +162 -0
  76. package/esm2020/components/autocomplete/lib/autocomplete.module.mjs +21 -0
  77. package/esm2020/components/autocomplete/lib/autocomplete.tokens.mjs +3 -0
  78. package/esm2020/components/autocomplete/lib/components/index.mjs +2 -0
  79. package/esm2020/components/autocomplete/lib/components/option/autocomplete-option.component.mjs +33 -0
  80. package/esm2020/components/autocomplete/lib/directives/autocomplete-search-field.directive.mjs +26 -0
  81. package/esm2020/components/autocomplete/lib/directives/index.mjs +2 -0
  82. package/esm2020/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.mjs +30 -0
  83. package/esm2020/components/autocomplete/lib/pipes/index.mjs +2 -0
  84. package/esm2020/components/autocomplete/odx-angular-components-autocomplete.mjs +5 -0
  85. package/esm2020/components/button/lib/button.component.mjs +3 -3
  86. package/esm2020/components/card/lib/card.component.mjs +2 -2
  87. package/esm2020/components/chip/index.mjs +2 -2
  88. package/esm2020/components/chip/lib/{chip.component.mjs → components/chip/chip.component.mjs} +2 -2
  89. package/esm2020/components/chip/lib/components/chip-list/chip-list.component.mjs +21 -0
  90. package/esm2020/components/chip/lib/components/chip-list-row/chip-list-row.component.mjs +21 -0
  91. package/esm2020/components/chip/lib/components/index.mjs +4 -0
  92. package/esm2020/components/dropdown/lib/dropdown.component.mjs +3 -3
  93. package/esm2020/components/dropdown/lib/dropdown.directive.mjs +10 -2
  94. package/esm2020/components/form-field/lib/components/form-group/form-group.component.mjs +3 -3
  95. package/esm2020/components/form-field/lib/form-field.component.mjs +3 -3
  96. package/esm2020/components/form-field/lib/form-field.service.mjs +2 -2
  97. package/esm2020/components/form-field/lib/models/form-field-variant.mjs +2 -1
  98. package/esm2020/components/main-menu/lib/directives/index.mjs +2 -1
  99. package/esm2020/components/main-menu/lib/directives/main-menu-close.directive.mjs +24 -0
  100. package/esm2020/components/main-menu/lib/directives/main-menu-item.directive.mjs +6 -12
  101. package/esm2020/components/main-menu/lib/main-menu.module.mjs +4 -4
  102. package/esm2020/components/menu/lib/directives/menu-item.directive.mjs +3 -3
  103. package/esm2020/components/select/index.mjs +1 -2
  104. package/esm2020/components/select/lib/components/index.mjs +2 -2
  105. package/esm2020/components/select/lib/components/select-option/select-option.component.mjs +75 -0
  106. package/esm2020/components/select/lib/directives/select-search-field.directive.mjs +9 -21
  107. package/esm2020/components/select/lib/pipes/select-search-filter.pipe.mjs +12 -33
  108. package/esm2020/components/select/lib/select.component.mjs +44 -86
  109. package/esm2020/components/select/lib/select.module.mjs +5 -5
  110. package/esm2020/components/select/lib/select.tokens.mjs +2 -2
  111. package/esm2020/components/table/index.mjs +6 -0
  112. package/esm2020/components/table/lib/components/check-cell/check-cell.component.mjs +29 -0
  113. package/esm2020/components/table/lib/components/header-title/header-title.component.mjs +86 -0
  114. package/esm2020/components/table/lib/components/index.mjs +3 -0
  115. package/esm2020/components/table/lib/directives/index.mjs +3 -0
  116. package/esm2020/components/table/lib/directives/table-cell.directive.mjs +27 -0
  117. package/esm2020/components/table/lib/directives/table-row.directive.mjs +28 -0
  118. package/esm2020/components/table/lib/interfaces/index.mjs +4 -0
  119. package/esm2020/components/table/lib/models/index.mjs +3 -0
  120. package/esm2020/components/table/lib/models/sort-variant.mjs +6 -0
  121. package/esm2020/components/table/lib/models/table-variant.mjs +5 -0
  122. package/esm2020/components/table/lib/table.component.mjs +86 -0
  123. package/esm2020/components/table/lib/table.config.mjs +3 -0
  124. package/esm2020/components/table/lib/table.module.mjs +21 -0
  125. package/esm2020/components/table/odx-angular-components-table.mjs +5 -0
  126. package/esm2020/components/wizard/index.mjs +4 -0
  127. package/esm2020/components/wizard/lib/components/index.mjs +2 -0
  128. package/esm2020/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +73 -0
  129. package/esm2020/components/wizard/lib/wizard.component.mjs +155 -0
  130. package/esm2020/components/wizard/lib/wizard.module.mjs +19 -0
  131. package/esm2020/components/wizard/odx-angular-components-wizard.mjs +5 -0
  132. package/esm2020/lib/services/window-ref.mjs +4 -1
  133. package/fesm2015/odx-angular-cdk-autocomplete-control.mjs +164 -0
  134. package/fesm2015/odx-angular-cdk-autocomplete-control.mjs.map +1 -0
  135. package/fesm2015/odx-angular-cdk-option-control.mjs +55 -0
  136. package/fesm2015/odx-angular-cdk-option-control.mjs.map +1 -0
  137. package/fesm2015/odx-angular-components-autocomplete.mjs +263 -0
  138. package/fesm2015/odx-angular-components-autocomplete.mjs.map +1 -0
  139. package/fesm2015/odx-angular-components-button.mjs +2 -2
  140. package/fesm2015/odx-angular-components-button.mjs.map +1 -1
  141. package/fesm2015/odx-angular-components-card.mjs +1 -1
  142. package/fesm2015/odx-angular-components-card.mjs.map +1 -1
  143. package/fesm2015/odx-angular-components-chip.mjs +35 -5
  144. package/fesm2015/odx-angular-components-chip.mjs.map +1 -1
  145. package/fesm2015/odx-angular-components-dropdown.mjs +11 -3
  146. package/fesm2015/odx-angular-components-dropdown.mjs.map +1 -1
  147. package/fesm2015/odx-angular-components-form-field.mjs +5 -4
  148. package/fesm2015/odx-angular-components-form-field.mjs.map +1 -1
  149. package/fesm2015/odx-angular-components-main-menu.mjs +28 -14
  150. package/fesm2015/odx-angular-components-main-menu.mjs.map +1 -1
  151. package/fesm2015/odx-angular-components-menu.mjs +2 -2
  152. package/fesm2015/odx-angular-components-menu.mjs.map +1 -1
  153. package/fesm2015/odx-angular-components-select.mjs +80 -175
  154. package/fesm2015/odx-angular-components-select.mjs.map +1 -1
  155. package/fesm2015/odx-angular-components-table.mjs +264 -0
  156. package/fesm2015/odx-angular-components-table.mjs.map +1 -0
  157. package/fesm2015/odx-angular-components-wizard.mjs +242 -0
  158. package/fesm2015/odx-angular-components-wizard.mjs.map +1 -0
  159. package/fesm2015/odx-angular.mjs +3 -0
  160. package/fesm2015/odx-angular.mjs.map +1 -1
  161. package/fesm2020/odx-angular-cdk-autocomplete-control.mjs +160 -0
  162. package/fesm2020/odx-angular-cdk-autocomplete-control.mjs.map +1 -0
  163. package/fesm2020/odx-angular-cdk-option-control.mjs +54 -0
  164. package/fesm2020/odx-angular-cdk-option-control.mjs.map +1 -0
  165. package/fesm2020/odx-angular-components-autocomplete.mjs +254 -0
  166. package/fesm2020/odx-angular-components-autocomplete.mjs.map +1 -0
  167. package/fesm2020/odx-angular-components-button.mjs +2 -2
  168. package/fesm2020/odx-angular-components-button.mjs.map +1 -1
  169. package/fesm2020/odx-angular-components-card.mjs +1 -1
  170. package/fesm2020/odx-angular-components-card.mjs.map +1 -1
  171. package/fesm2020/odx-angular-components-chip.mjs +35 -5
  172. package/fesm2020/odx-angular-components-chip.mjs.map +1 -1
  173. package/fesm2020/odx-angular-components-dropdown.mjs +11 -3
  174. package/fesm2020/odx-angular-components-dropdown.mjs.map +1 -1
  175. package/fesm2020/odx-angular-components-form-field.mjs +5 -4
  176. package/fesm2020/odx-angular-components-form-field.mjs.map +1 -1
  177. package/fesm2020/odx-angular-components-main-menu.mjs +28 -14
  178. package/fesm2020/odx-angular-components-main-menu.mjs.map +1 -1
  179. package/fesm2020/odx-angular-components-menu.mjs +2 -2
  180. package/fesm2020/odx-angular-components-menu.mjs.map +1 -1
  181. package/fesm2020/odx-angular-components-select.mjs +77 -170
  182. package/fesm2020/odx-angular-components-select.mjs.map +1 -1
  183. package/fesm2020/odx-angular-components-table.mjs +259 -0
  184. package/fesm2020/odx-angular-components-table.mjs.map +1 -0
  185. package/fesm2020/odx-angular-components-wizard.mjs +239 -0
  186. package/fesm2020/odx-angular-components-wizard.mjs.map +1 -0
  187. package/fesm2020/odx-angular.mjs +3 -0
  188. package/fesm2020/odx-angular.mjs.map +1 -1
  189. package/lib/services/window-ref.d.ts +1 -0
  190. package/package.json +48 -8
  191. package/components/select/lib/abstract/index.d.ts +0 -2
  192. package/components/select/lib/abstract/select-control-option.d.ts +0 -9
  193. package/components/select/lib/abstract/select-control.d.ts +0 -12
  194. package/components/select/lib/components/option/option.component.d.ts +0 -26
  195. package/esm2020/components/select/lib/abstract/index.mjs +0 -3
  196. package/esm2020/components/select/lib/abstract/select-control-option.mjs +0 -2
  197. package/esm2020/components/select/lib/abstract/select-control.mjs +0 -2
  198. package/esm2020/components/select/lib/components/option/option.component.mjs +0 -95
@@ -0,0 +1,6 @@
1
+ export type TableSortVariant = typeof TableSortVariant[keyof typeof TableSortVariant];
2
+ export declare const TableSortVariant: {
3
+ readonly UNSORTED: "unsorted";
4
+ readonly ASC: "asc";
5
+ readonly DESC: "desc";
6
+ };
@@ -0,0 +1,5 @@
1
+ export type TableVariant = typeof TableVariant[keyof typeof TableVariant];
2
+ export declare const TableVariant: {
3
+ readonly DEFAULT: "default";
4
+ readonly STRIPED: "striped";
5
+ };
@@ -0,0 +1,29 @@
1
+ import { EventEmitter, OnInit, QueryList } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { HeaderTitleComponent } from './components/header-title/header-title.component';
4
+ import { SortStatus, TableHeaderCell } from './interfaces';
5
+ import { TableVariant } from './models';
6
+ import * as i0 from "@angular/core";
7
+ export declare class TableComponent<T> implements OnInit {
8
+ private readonly takeUntilDestroyed;
9
+ readonly element: import("@angular/core").ElementRef<HTMLElement>;
10
+ variant?: TableVariant | null;
11
+ data: T[];
12
+ headerData: TableHeaderCell[];
13
+ form: FormGroup;
14
+ readonly sorted: EventEmitter<SortStatus>;
15
+ readonly filtered: EventEmitter<{
16
+ [key: string]: string;
17
+ }>;
18
+ readonly checked: EventEmitter<{
19
+ column: string;
20
+ check: boolean;
21
+ }>;
22
+ headers: QueryList<HeaderTitleComponent>;
23
+ ngOnInit(): void;
24
+ clearSort(): void;
25
+ private formListener;
26
+ private setHeaderData;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "table[odxTable]", never, { "variant": "variant"; "data": "data"; "headerData": "headerData"; }, { "sorted": "sorted"; "filtered": "filtered"; "checked": "checked"; }, never, ["tr"], true, never>;
29
+ }
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { TableBodyCell } from './interfaces';
3
+ import { TableComponent } from './table.component';
4
+ export declare const TABLE: InjectionToken<TableComponent<TableBodyCell>>;
@@ -0,0 +1,11 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./table.component";
3
+ import * as i2 from "./directives/table-row.directive";
4
+ import * as i3 from "./directives/table-cell.directive";
5
+ import * as i4 from "./components/check-cell/check-cell.component";
6
+ import * as i5 from "@odx/angular";
7
+ export declare class TableModule {
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableModule, never>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TableModule, never, [typeof i1.TableComponent, typeof i2.TableRowDirective, typeof i3.TableCellDirective, typeof i4.CheckCellComponent], [typeof i5.CoreModule, typeof i1.TableComponent, typeof i2.TableRowDirective, typeof i3.TableCellDirective, typeof i4.CheckCellComponent]>;
10
+ static ɵinj: i0.ɵɵInjectorDeclaration<TableModule>;
11
+ }
@@ -0,0 +1,3 @@
1
+ # @odx/angular/components/wizard
2
+
3
+ Secondary entry point of `@odx/angular`. It can be used by importing from `@odx/angular/components/wizard`.
@@ -0,0 +1,3 @@
1
+ export * from './lib/components';
2
+ export * from './lib/wizard.component';
3
+ export * from './lib/wizard.module';
@@ -0,0 +1 @@
1
+ export * from './wizard-step/wizard-step.component';
@@ -0,0 +1,17 @@
1
+ import { Subject } from 'rxjs';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@odx/angular";
4
+ export declare class WizardStepComponent {
5
+ readonly element: import("@angular/core").ElementRef<HTMLElement>;
6
+ readonly stepChosen$: Subject<WizardStepComponent>;
7
+ isLastTouched: boolean;
8
+ active: boolean;
9
+ passed: boolean;
10
+ visible: boolean;
11
+ valid: boolean;
12
+ touched: boolean;
13
+ setValid(state: boolean): void;
14
+ protected chooseStep(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<WizardStepComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<WizardStepComponent, "odx-wizard-step", never, { "valid": "valid"; }, {}, never, ["*"], true, [{ directive: typeof i1.WithTabIndex; inputs: {}; outputs: {}; }, { directive: typeof i1.WithDisabledState; inputs: {}; outputs: {}; }]>;
17
+ }
@@ -0,0 +1,31 @@
1
+ import { BooleanInput } from '@angular/cdk/coercion';
2
+ import { AfterViewInit, EventEmitter } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class WizardComponent implements AfterViewInit {
5
+ static ngAcceptInputType_vertical: BooleanInput;
6
+ private readonly steps;
7
+ private readonly destroyed;
8
+ private readonly renderer;
9
+ private visibleStepsSegments;
10
+ private readonly dottedLineStart;
11
+ private readonly dottedLineEnd;
12
+ private readonly windowRef;
13
+ private activeStep;
14
+ readonly element: import("@angular/core").ElementRef<HTMLElement>;
15
+ vertical: boolean;
16
+ activeStepChanged: EventEmitter<number>;
17
+ ngAfterViewInit(): void;
18
+ nextStep(): void;
19
+ previousStep(): void;
20
+ setActiveStepValid(): void;
21
+ private calculateVisibleStepsSegments;
22
+ private getStyleFromCSS;
23
+ private setActiveStep;
24
+ private clickStepSubscriber;
25
+ private changeStepHandler;
26
+ private setHiddenSteps;
27
+ private isNeighbors;
28
+ private setDottedLineActive;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<WizardComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<WizardComponent, "odx-wizard", never, { "vertical": "vertical"; }, { "activeStepChanged": "activeStepChanged"; }, ["steps"], ["odx-wizard-step"], true, never>;
31
+ }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./wizard.component";
3
+ import * as i2 from "./components/wizard-step/wizard-step.component";
4
+ import * as i3 from "@odx/angular";
5
+ export declare class WizardModule {
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<WizardModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WizardModule, never, [typeof i1.WizardComponent, typeof i2.WizardStepComponent], [typeof i3.CoreModule, typeof i1.WizardComponent, typeof i2.WizardStepComponent]>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<WizardModule>;
9
+ }
@@ -0,0 +1,4 @@
1
+ export * from './lib/abstract';
2
+ export * from './lib/autocomplete-control';
3
+ export * from './lib/pipes';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9hYnN0cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRvY29tcGxldGUtY29udHJvbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { Directive } from '@angular/core';
2
+ import { injectElement, untilDestroyed } from '@odx/angular/utils';
3
+ import { distinctUntilChanged, fromEvent, map } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export class BaseSearchFieldDirective {
6
+ constructor() {
7
+ this.takeUntilDestroyed = untilDestroyed();
8
+ this.element = injectElement();
9
+ this.valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(distinctUntilChanged(), map(() => this.nativeElementValue), this.takeUntilDestroyed());
10
+ }
11
+ get nativeElementValue() {
12
+ return this.element.nativeElement.value;
13
+ }
14
+ set nativeElementValue(value) {
15
+ this.element.nativeElement.value = value;
16
+ }
17
+ focus() {
18
+ this.element.nativeElement.focus();
19
+ }
20
+ blur() {
21
+ this.element.nativeElement.blur();
22
+ }
23
+ reset() {
24
+ this.element.nativeElement.value = '';
25
+ }
26
+ }
27
+ BaseSearchFieldDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseSearchFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
+ BaseSearchFieldDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: BaseSearchFieldDirective, isStandalone: true, host: { properties: { "class.odx-form-field-control": "true" } }, ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseSearchFieldDirective, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ standalone: true,
33
+ host: {
34
+ '[class.odx-form-field-control]': 'true',
35
+ },
36
+ }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWFyY2gtZmllbGQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9hdXRvY29tcGxldGUtY29udHJvbC9zcmMvbGliL2Fic3RyYWN0L2Jhc2Utc2VhcmNoLWZpZWxkLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBUTVELE1BQU0sT0FBZ0Isd0JBQXdCO0lBTjlDO1FBT3FCLHVCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXpDLFlBQU8sR0FBRyxhQUFhLEVBQW9CLENBQUM7UUFFckQsaUJBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN2RSxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUMxQixDQUFDO0tBcUJIO0lBbkJDLElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFXLGtCQUFrQixDQUFDLEtBQWE7UUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3hDLENBQUM7O3FIQTdCbUIsd0JBQXdCO3lHQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFON0MsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLGdDQUFnQyxFQUFFLE1BQU07cUJBQ3pDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RFbGVtZW50LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZnJvbUV2ZW50LCBtYXAgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm9keC1mb3JtLWZpZWxkLWNvbnRyb2xdJzogJ3RydWUnLFxuICB9LFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlU2VhcmNoRmllbGREaXJlY3RpdmUge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudCA9IGluamVjdEVsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICBwdWJsaWMgdmFsdWVDaGFuZ2UkID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnaW5wdXQnKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCgpID0+IHRoaXMubmF0aXZlRWxlbWVudFZhbHVlKSxcbiAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpXG4gICk7XG5cbiAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IG5hdGl2ZUVsZW1lbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIGJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './base-search-field.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sL3NyYy9saWIvYWJzdHJhY3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFzZS1zZWFyY2gtZmllbGQuZGlyZWN0aXZlJztcbiJdfQ==
@@ -0,0 +1,90 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import { ChangeDetectorRef, Directive, EventEmitter, HostListener, inject, Input, Output, ViewChild } from '@angular/core';
5
+ import { detectControllerChanges } from '@odx/angular';
6
+ import { CustomFormControl } from '@odx/angular/cdk/custom-form-control';
7
+ import { DropdownDirective } from '@odx/angular/components/dropdown';
8
+ import { injectElement, isFunction, Transform, untilDestroyed } from '@odx/angular/utils';
9
+ import * as i0 from "@angular/core";
10
+ export class AutocompleteControl extends CustomFormControl {
11
+ get hasOptions() {
12
+ return !!this.options?.length;
13
+ }
14
+ get isOpen() {
15
+ return !!this.dropdown?.isOpen;
16
+ }
17
+ constructor() {
18
+ super(null);
19
+ this.smoothScrollEnabled = false;
20
+ this.takeUntilDestroyed = untilDestroyed();
21
+ this.changeDetector = inject(ChangeDetectorRef);
22
+ this.element = injectElement();
23
+ this.isLoading = false;
24
+ this.optionSelected = new EventEmitter();
25
+ detectControllerChanges(this).subscribe();
26
+ }
27
+ ngAfterViewInit() {
28
+ if (!this.options)
29
+ return;
30
+ this.initKeyManager(this.options);
31
+ this.handleQueryListOption(this.options);
32
+ this.handleSearchFieldChanges();
33
+ }
34
+ scrollOptionIntoView({ element }) {
35
+ const behavior = this.smoothScrollEnabled ? 'smooth' : undefined;
36
+ if (isFunction(element.nativeElement.scrollIntoView)) {
37
+ element.nativeElement.scrollIntoView({ block: 'center', behavior });
38
+ }
39
+ }
40
+ initKeyManager(options) {
41
+ this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd();
42
+ }
43
+ disableSmoothScroll() {
44
+ this.smoothScrollEnabled = false;
45
+ }
46
+ enableSmoothScroll() {
47
+ this.smoothScrollEnabled = true;
48
+ }
49
+ openDropdown() {
50
+ this.dropdown?.open();
51
+ }
52
+ closeDropdown() {
53
+ this.dropdown?.close();
54
+ }
55
+ handleFocusOut(event) {
56
+ if (this.isOpen) {
57
+ event.stopImmediatePropagation();
58
+ }
59
+ this.onTouched();
60
+ }
61
+ }
62
+ AutocompleteControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
63
+ AutocompleteControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutocompleteControl, isStandalone: true, inputs: { isLoading: "isLoading", stringify: "stringify" }, outputs: { optionSelected: "optionSelected" }, host: { listeners: { "focusout": "handleFocusOut($event)" }, properties: { "class.is-open": "isOpen", "attr.aria-disabled": "isDisabled || null" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }], usesInheritance: true, ngImport: i0 });
64
+ __decorate([
65
+ Transform(coerceBooleanProperty),
66
+ __metadata("design:type", Object)
67
+ ], AutocompleteControl.prototype, "isLoading", void 0);
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteControl, decorators: [{
69
+ type: Directive,
70
+ args: [{
71
+ standalone: true,
72
+ host: {
73
+ '[class.is-open]': 'isOpen',
74
+ '[attr.aria-disabled]': 'isDisabled || null',
75
+ },
76
+ }]
77
+ }], ctorParameters: function () { return []; }, propDecorators: { dropdown: [{
78
+ type: ViewChild,
79
+ args: [DropdownDirective]
80
+ }], isLoading: [{
81
+ type: Input
82
+ }], stringify: [{
83
+ type: Input
84
+ }], optionSelected: [{
85
+ type: Output
86
+ }], handleFocusOut: [{
87
+ type: HostListener,
88
+ args: ['focusout', ['$event']]
89
+ }] } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sL3NyYy9saWIvYXV0b2NvbXBsZXRlLWNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySixPQUFPLEVBQUUsdUJBQXVCLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVUxRixNQUFNLE9BQWdCLG1CQUF1QixTQUFRLGlCQUEyQjtJQW9COUUsSUFBVyxVQUFVO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBWUQ7UUFDRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFsQ0osd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBT25CLHVCQUFrQixHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRXRDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFJOUMsWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBWW5DLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFNbEIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBSTVDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsRUFBRSxPQUFPLEVBQW9CO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNwRCxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFRUyxjQUFjLENBQUMsT0FBb0M7UUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzdFLENBQUM7SUFFUyxtQkFBbUI7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRVMsa0JBQWtCO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVTLFlBQVk7UUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRVMsYUFBYTtRQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFHUyxjQUFjLENBQUMsS0FBaUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQzs7Z0hBMUZtQixtQkFBbUI7b0dBQW5CLG1CQUFtQix5VkFPNUIsaUJBQWlCO0FBcUI1QjtJQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQzs7c0RBRVI7MkZBOUJMLG1CQUFtQjtrQkFQeEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLGlCQUFpQixFQUFFLFFBQVE7d0JBQzNCLHNCQUFzQixFQUFFLG9CQUFvQjtxQkFDN0M7aUJBQ0Y7MEVBU29CLFFBQVE7c0JBRDFCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQXVCckIsU0FBUztzQkFEZixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxjQUFjO3NCQURwQixNQUFNO2dCQWtERyxjQUFjO3NCQUR2QixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRldGVjdENvbnRyb2xsZXJDaGFuZ2VzLCBTdHJpbmdpZnlGbiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBDdXN0b21Gb3JtQ29udHJvbCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jZGsvY3VzdG9tLWZvcm0tY29udHJvbCc7XG5pbXBvcnQgeyBPcHRpb25Db250cm9sIH0gZnJvbSAnQG9keC9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbCc7XG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIGlzRnVuY3Rpb24sIFRyYW5zZm9ybSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZVNlYXJjaEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9hYnN0cmFjdCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5pcy1vcGVuXSc6ICdpc09wZW4nLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdpc0Rpc2FibGVkIHx8IG51bGwnLFxuICB9LFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRvY29tcGxldGVDb250cm9sPFQ+IGV4dGVuZHMgQ3VzdG9tRm9ybUNvbnRyb2w8VCB8IG51bGw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaXNMb2FkaW5nOiBCb29sZWFuSW5wdXQ7XG5cbiAgcHJvdGVjdGVkIGtleU1hbmFnZXI/OiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxPcHRpb25Db250cm9sPFQ+PjtcblxuICBwcm90ZWN0ZWQgc21vb3RoU2Nyb2xsRW5hYmxlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25EaXJlY3RpdmUpXG4gIHByb3RlY3RlZCByZWFkb25seSBkcm9wZG93bj86IERyb3Bkb3duRGlyZWN0aXZlO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBvcHRpb25zPzogUXVlcnlMaXN0PE9wdGlvbkNvbnRyb2w8VD4+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHVibGljIGFic3RyYWN0IHNlYXJjaEZpZWxkPzogQmFzZVNlYXJjaEZpZWxkRGlyZWN0aXZlO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIHB1YmxpYyBnZXQgaGFzT3B0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm9wdGlvbnM/Lmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZHJvcGRvd24/LmlzT3BlbjtcbiAgfVxuXG4gIEBUcmFuc2Zvcm0oY29lcmNlQm9vbGVhblByb3BlcnR5KVxuICBASW5wdXQoKVxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN0cmluZ2lmeT86IFN0cmluZ2lmeUZuPHVua25vd24+O1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb3B0aW9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobnVsbCk7XG4gICAgZGV0ZWN0Q29udHJvbGxlckNoYW5nZXModGhpcykuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zKSByZXR1cm47XG5cbiAgICB0aGlzLmluaXRLZXlNYW5hZ2VyKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVyeUxpc3RPcHRpb24odGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZVNlYXJjaEZpZWxkQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbE9wdGlvbkludG9WaWV3KHsgZWxlbWVudCB9OiBPcHRpb25Db250cm9sPFQ+KTogdm9pZCB7XG4gICAgY29uc3QgYmVoYXZpb3IgPSB0aGlzLnNtb290aFNjcm9sbEVuYWJsZWQgPyAnc21vb3RoJyA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNGdW5jdGlvbihlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcpKSB7XG4gICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2NlbnRlcicsIGJlaGF2aW9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBoYW5kbGVRdWVyeUxpc3RPcHRpb24ob3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbnRyb2w8VD4+KTogdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGFuZGxlU2VhcmNoRmllbGRDaGFuZ2VzKCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGl2YXRlU2VsZWN0ZWRPcHRpb24oKTogdm9pZDtcblxuICBwcm90ZWN0ZWQgaW5pdEtleU1hbmFnZXIob3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbnRyb2w8VD4+KTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyKG9wdGlvbnMpLndpdGhIb21lQW5kRW5kKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGlzYWJsZVNtb290aFNjcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNtb290aFNjcm9sbEVuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmFibGVTbW9vdGhTY3JvbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zbW9vdGhTY3JvbGxFbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93bj8ub3BlbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93bj8uY2xvc2UoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,32 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { inject } from '@angular/core';
3
+ import { ODX_STRINGIFY, ODX_STRING_SEARCH_HANDLER } from '@odx/angular';
4
+ import { Pure } from '@odx/angular/utils';
5
+ export class BaseSearchFilterPipe {
6
+ constructor() {
7
+ this.stringSearchHandler = inject(ODX_STRING_SEARCH_HANDLER);
8
+ this.stringify = inject(ODX_STRINGIFY);
9
+ }
10
+ transform(items, searchHandler) {
11
+ if (this.searchField) {
12
+ return this.filter(items, this.searchField.nativeElementValue, searchHandler);
13
+ }
14
+ return items;
15
+ }
16
+ filter(items, query, searchHandler) {
17
+ if (!items)
18
+ return null;
19
+ query = this.queryHandler(query);
20
+ if (query === '')
21
+ return items;
22
+ const search = searchHandler ?? this.stringSearchHandler;
23
+ return items.filter((item) => search(this.searchBy(item), query));
24
+ }
25
+ }
26
+ __decorate([
27
+ Pure,
28
+ __metadata("design:type", Function),
29
+ __metadata("design:paramtypes", [Object, String, Function]),
30
+ __metadata("design:returntype", Object)
31
+ ], BaseSearchFilterPipe.prototype, "filter", null);
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWFyY2gtZmlsdGVyLXBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sL3NyYy9saWIvcGlwZXMvYmFzZS1zZWFyY2gtZmlsdGVyLXBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSx5QkFBeUIsRUFBb0MsTUFBTSxjQUFjLENBQUM7QUFDMUcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzFDLE1BQU0sT0FBZ0Isb0JBQW9CO0lBQTFDO1FBQ21CLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RELGNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUF5QnZELENBQUM7SUF2QlEsU0FBUyxDQUFJLEtBQWlCLEVBQUUsYUFBbUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUMvRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU9PLE1BQU0sQ0FBSSxLQUFpQixFQUFFLEtBQWEsRUFBRSxhQUFtQztRQUNyRixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhCLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUvQixNQUFNLE1BQU0sR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRXpELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFaQztJQUFDLElBQUk7Ozs7a0RBV0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9EWF9TVFJJTkdJRlksIE9EWF9TVFJJTkdfU0VBUkNIX0hBTkRMRVIsIFN0cmluZ2lmeUZuLCBTdHJpbmdTZWFyY2hIYW5kbGVyIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IFB1cmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZVNlYXJjaEZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi4vYWJzdHJhY3QnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlYXJjaEZpbHRlclBpcGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0cmluZ1NlYXJjaEhhbmRsZXIgPSBpbmplY3QoT0RYX1NUUklOR19TRUFSQ0hfSEFORExFUik7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdHJpbmdpZnkgPSBpbmplY3QoT0RYX1NUUklOR0lGWSk7XG5cbiAgcHVibGljIHRyYW5zZm9ybTxUPihpdGVtczogVFtdIHwgbnVsbCwgc2VhcmNoSGFuZGxlcj86IFN0cmluZ1NlYXJjaEhhbmRsZXIpOiBUW10gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWFyY2hGaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGl0ZW1zLCB0aGlzLnNlYXJjaEZpZWxkLm5hdGl2ZUVsZW1lbnRWYWx1ZSwgc2VhcmNoSGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgc2VhcmNoRmllbGQoKTogQmFzZVNlYXJjaEZpZWxkRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IHNlYXJjaEJ5KCk6IFN0cmluZ2lmeUZuPHVua25vd24+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcXVlcnlIYW5kbGVyKHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgQFB1cmVcbiAgcHJpdmF0ZSBmaWx0ZXI8VD4oaXRlbXM6IFRbXSB8IG51bGwsIHF1ZXJ5OiBzdHJpbmcsIHNlYXJjaEhhbmRsZXI/OiBTdHJpbmdTZWFyY2hIYW5kbGVyKTogVFtdIHwgbnVsbCB7XG4gICAgaWYgKCFpdGVtcykgcmV0dXJuIG51bGw7XG5cbiAgICBxdWVyeSA9IHRoaXMucXVlcnlIYW5kbGVyKHF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeSA9PT0gJycpIHJldHVybiBpdGVtcztcblxuICAgIGNvbnN0IHNlYXJjaCA9IHNlYXJjaEhhbmRsZXIgPz8gdGhpcy5zdHJpbmdTZWFyY2hIYW5kbGVyO1xuXG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbTogVCkgPT4gc2VhcmNoKHRoaXMuc2VhcmNoQnkoaXRlbSksIHF1ZXJ5KSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './base-search-filter-pipe';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sL3NyYy9saWIvcGlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFzZS1zZWFyY2gtZmlsdGVyLXBpcGUnO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2R4LWFuZ3VsYXItY2RrLWF1dG9jb21wbGV0ZS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9hdXRvY29tcGxldGUtY29udHJvbC9zcmMvb2R4LWFuZ3VsYXItY2RrLWF1dG9jb21wbGV0ZS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './lib/option-control';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL29wdGlvbi1jb250cm9sL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvb3B0aW9uLWNvbnRyb2wnO1xuIl19
@@ -0,0 +1,47 @@
1
+ import { ChangeDetectorRef, Directive, HostListener, inject, Input } from '@angular/core';
2
+ import { injectElement, untilDestroyed } from '@odx/angular/utils';
3
+ import * as i0 from "@angular/core";
4
+ export class OptionControl {
5
+ constructor() {
6
+ this.takeUntilDestroyed = untilDestroyed();
7
+ this.cdr = inject(ChangeDetectorRef);
8
+ this.isActive = false;
9
+ this.value = null;
10
+ this.element = injectElement();
11
+ }
12
+ setActiveStyles() {
13
+ this.isActive = true;
14
+ }
15
+ setInactiveStyles() {
16
+ this.isActive = false;
17
+ }
18
+ getLabel() {
19
+ return this.element.nativeElement.textContent?.trim() ?? '';
20
+ }
21
+ select(event) {
22
+ event.stopPropagation();
23
+ event.preventDefault();
24
+ this.selectOption();
25
+ }
26
+ }
27
+ OptionControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OptionControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
28
+ OptionControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: OptionControl, isStandalone: true, inputs: { value: "value" }, host: { attributes: { "role": "option" }, listeners: { "click": "select($event)" }, properties: { "class.odx-option": "true", "class.is-active": "isActive", "attr.aria-selected": "isSelected", "class.is-selected": "isSelected" } }, ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OptionControl, decorators: [{
30
+ type: Directive,
31
+ args: [{
32
+ standalone: true,
33
+ host: {
34
+ role: 'option',
35
+ '[class.odx-option]': 'true',
36
+ '[class.is-active]': 'isActive',
37
+ '[attr.aria-selected]': 'isSelected',
38
+ '[class.is-selected]': 'isSelected',
39
+ },
40
+ }]
41
+ }], propDecorators: { value: [{
42
+ type: Input
43
+ }], select: [{
44
+ type: HostListener,
45
+ args: ['click', ['$event']]
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY2RrL29wdGlvbi1jb250cm9sL3NyYy9saWIvb3B0aW9uLWNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVluRSxNQUFNLE9BQWdCLGFBQWE7SUFWbkM7UUFXcUIsdUJBQWtCLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDdEMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXpDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHcEIsVUFBSyxHQUFhLElBQUksQ0FBQztRQUVkLFlBQU8sR0FBNEIsYUFBYSxFQUFFLENBQUM7S0F1QnBFO0lBckJRLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBS1MsTUFBTSxDQUFDLEtBQVk7UUFDM0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7MEdBL0JtQixhQUFhOzhGQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFWbEMsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxRQUFRO3dCQUNkLG9CQUFvQixFQUFFLE1BQU07d0JBQzVCLG1CQUFtQixFQUFFLFVBQVU7d0JBQy9CLHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLHFCQUFxQixFQUFFLFlBQVk7cUJBQ3BDO2lCQUNGOzhCQVFRLEtBQUs7c0JBRFgsS0FBSztnQkFvQkksTUFBTTtzQkFEZixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhpZ2hsaWdodGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAnW2NsYXNzLm9keC1vcHRpb25dJzogJ3RydWUnLFxuICAgICdbY2xhc3MuaXMtYWN0aXZlXSc6ICdpc0FjdGl2ZScsXG4gICAgJ1thdHRyLmFyaWEtc2VsZWN0ZWRdJzogJ2lzU2VsZWN0ZWQnLFxuICAgICdbY2xhc3MuaXMtc2VsZWN0ZWRdJzogJ2lzU2VsZWN0ZWQnLFxuICB9LFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcHRpb25Db250cm9sPFQ+IGltcGxlbWVudHMgSGlnaGxpZ2h0YWJsZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBwcm90ZWN0ZWQgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsdWU6IFQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgcHVibGljIHNldEFjdGl2ZVN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmFjdGl2ZVN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ/LnRyaW0oKSA/PyAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZWxlY3RPcHRpb24oKTogdm9pZDtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBzZWxlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuc2VsZWN0T3B0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2R4LWFuZ3VsYXItY2RrLW9wdGlvbi1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Nkay9vcHRpb24tY29udHJvbC9zcmMvb2R4LWFuZ3VsYXItY2RrLW9wdGlvbi1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,7 @@
1
+ export * from './lib/autocomplete.component';
2
+ export * from './lib/autocomplete.module';
3
+ export * from './lib/autocomplete.tokens';
4
+ export * from './lib/components';
5
+ export * from './lib/directives';
6
+ export * from './lib/pipes';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0b2NvbXBsZXRlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRvY29tcGxldGUudG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG4iXX0=
@@ -0,0 +1,162 @@
1
+ var AutocompleteComponent_1;
2
+ import { __decorate } from "tslib";
3
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, forwardRef, HostListener, inject, QueryList, ViewEncapsulation, } from '@angular/core';
4
+ import { ClickOutsideDirective } from '@odx/angular';
5
+ import { AutocompleteControl } from '@odx/angular/cdk/autocomplete-control';
6
+ import { DropdownDirective } from '@odx/angular/components/dropdown';
7
+ import { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';
8
+ import { CSSComponent } from '@odx/angular/internal';
9
+ import { fromQueryList } from '@odx/angular/rxjs';
10
+ import { deferFn } from '@odx/angular/utils';
11
+ import { AUTOCOMPLETE_CONTROL } from './autocomplete.tokens';
12
+ import { AutocompleteOptionComponent } from './components';
13
+ import { AutocompleteSearchFieldDirective } from './directives';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@odx/angular";
16
+ import * as i2 from "@angular/common";
17
+ let AutocompleteComponent = AutocompleteComponent_1 = class AutocompleteComponent extends AutocompleteControl {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.defaultActiveOptionIndex = 0;
21
+ this.clickOutsideDirective = inject(ClickOutsideDirective, { host: true });
22
+ this.dropdownOpenTriggers = [];
23
+ }
24
+ ngAfterViewInit() {
25
+ if (!this.options)
26
+ return;
27
+ this.initKeyManager(this.options);
28
+ this.handleQueryListOption(this.options);
29
+ this.handleSearchFieldChanges();
30
+ this.handleClickOutside();
31
+ }
32
+ selectOption(option) {
33
+ if (!option?.value)
34
+ return;
35
+ this.updateValue(option.value);
36
+ this.updateSearchField(option.value);
37
+ this.optionSelected.emit(option.value);
38
+ this.closeDropdown();
39
+ }
40
+ resetSearchField() {
41
+ this.updateValue('');
42
+ this.searchField?.reset();
43
+ }
44
+ handleQueryListOption(options) {
45
+ fromQueryList(options)
46
+ .pipe(this.takeUntilDestroyed())
47
+ .subscribe(() => {
48
+ if (this.isOpen) {
49
+ deferFn(() => this.activateSelectedOption());
50
+ }
51
+ });
52
+ }
53
+ handleSearchFieldChanges() {
54
+ this.searchField?.valueChange$.pipe(this.takeUntilDestroyed()).subscribe(() => {
55
+ this.triggerControllerChange();
56
+ deferFn(() => this.handleSearchFieldValueChange());
57
+ });
58
+ }
59
+ handleClickOutside() {
60
+ this.clickOutsideDirective.odxClickOutside.pipe(this.takeUntilDestroyed()).subscribe(() => this.clickOutside());
61
+ }
62
+ clickOutside() {
63
+ this.closeDropdown();
64
+ this.blurSelectSearchField();
65
+ }
66
+ handleSearchFieldValueChange() {
67
+ this.updateValue((this.searchField?.nativeElementValue ?? ''));
68
+ if (this.isOpen && !this.hasOptions) {
69
+ this.closeDropdown();
70
+ return;
71
+ }
72
+ if (this.isOpen && this.hasOptions) {
73
+ return;
74
+ }
75
+ if (!this.isOpen && this.hasOptions) {
76
+ this.openDropdown();
77
+ }
78
+ }
79
+ handleClickEvent() {
80
+ if (this.isLoading && this.isOpen) {
81
+ this.closeDropdown();
82
+ this.blurSelectSearchField();
83
+ return;
84
+ }
85
+ if (this.isReadonly || this.isDisabled)
86
+ return;
87
+ if (!this.isOpen && this.hasOptions) {
88
+ this.openDropdown();
89
+ }
90
+ }
91
+ handleKeyboardEvent(event) {
92
+ if (this.isReadonly || this.isDisabled)
93
+ return;
94
+ if (this.isOpen && this.hasOptions) {
95
+ if (event.key === 'Enter' || event.key === 'Tab') {
96
+ event.preventDefault();
97
+ event.stopImmediatePropagation();
98
+ this.selectOption(this.keyManager?.activeItem);
99
+ return;
100
+ }
101
+ }
102
+ if (event.key === 'Enter') {
103
+ this.optionSelected.emit((this.value ?? ''));
104
+ return;
105
+ }
106
+ if (!this.isOpen && event.key === 'Tab') {
107
+ return;
108
+ }
109
+ if (!this.isOpen && this.hasOptions) {
110
+ this.openDropdown();
111
+ return;
112
+ }
113
+ this.keyManager?.onKeydown(event);
114
+ }
115
+ activateSelectedOption() {
116
+ this.keyManager?.setActiveItem(this.defaultActiveOptionIndex);
117
+ }
118
+ onDropdownBeforeOpen() {
119
+ this.activateSelectedOption();
120
+ }
121
+ updateSearchField(value) {
122
+ if (!this.searchField)
123
+ return;
124
+ this.searchField.nativeElementValue = this.stringify?.(value) ?? value;
125
+ }
126
+ blurSelectSearchField() {
127
+ this.searchField?.blur();
128
+ }
129
+ };
130
+ AutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
131
+ AutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AutocompleteComponent, isStandalone: true, selector: "odx-autocomplete", host: { listeners: { "click": "handleClickEvent()", "keydown": "handleKeyboardEvent($event)" } }, providers: [
132
+ {
133
+ provide: AUTOCOMPLETE_CONTROL,
134
+ useExisting: forwardRef(() => AutocompleteComponent_1),
135
+ },
136
+ ], queries: [{ propertyName: "searchField", first: true, predicate: AutocompleteSearchFieldDirective, descendants: true }, { propertyName: "options", predicate: AutocompleteOptionComponent, descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.ClickOutsideDirective }], ngImport: i0, template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"dropdownOpenTriggers\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownBeforeOpen()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n (odxDropdownBeforeClose)=\"disableSmoothScroll()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\"></ng-content>\n</div>\n\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\">\n <ng-content></ng-content>\n </ng-template>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
137
+ AutocompleteComponent = AutocompleteComponent_1 = __decorate([
138
+ CSSComponent('autocomplete')
139
+ ], AutocompleteComponent);
140
+ export { AutocompleteComponent };
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteComponent, decorators: [{
142
+ type: Component,
143
+ args: [{ standalone: true, selector: 'odx-autocomplete', imports: [DropdownDirective, AutocompleteOptionComponent, LoadingSpinnerModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
144
+ {
145
+ provide: AUTOCOMPLETE_CONTROL,
146
+ useExisting: forwardRef(() => AutocompleteComponent),
147
+ },
148
+ ], hostDirectives: [ClickOutsideDirective], template: "<div\n aria-haspopup=\"listbox\"\n class=\"odx-autocomplete__trigger\"\n [odxDropdown]=\"dropdownContent\"\n [odxDropdownDisabled]=\"isDisabled || isReadonly\"\n [odxDropdownOptions]=\"{ matchReferenceWidth: true, offset: 4, outerPadding: 10, position: 'bottom-start' }\"\n [odxDropdownReferenceElement]=\"element.nativeElement\"\n [odxDropdownShowLoader]=\"isLoading\"\n [odxDropdownOpenTrigger]=\"dropdownOpenTriggers\"\n [odxDropdownClickOutsideActive]=\"false\"\n (odxDropdownBeforeOpen)=\"onDropdownBeforeOpen()\"\n (odxDropdownAfterOpen)=\"enableSmoothScroll()\"\n (odxDropdownBeforeClose)=\"disableSmoothScroll()\"\n>\n <ng-content select=\"input[odxAutocompleteControl]\"></ng-content>\n</div>\n\n<ng-template #dropdownContent>\n <div class=\"odx-dropdown__option-list\" role=\"listbox\">\n <ng-template [ngIf]=\"hasOptions\">\n <ng-content></ng-content>\n </ng-template>\n </div>\n</ng-template>\n" }]
149
+ }], propDecorators: { options: [{
150
+ type: ContentChildren,
151
+ args: [AutocompleteOptionComponent, { descendants: true, emitDistinctChangesOnly: true }]
152
+ }], searchField: [{
153
+ type: ContentChild,
154
+ args: [AutocompleteSearchFieldDirective]
155
+ }], handleClickEvent: [{
156
+ type: HostListener,
157
+ args: ['click']
158
+ }], handleKeyboardEvent: [{
159
+ type: HostListener,
160
+ args: ['keydown', ['$event']]
161
+ }] } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9zcmMvbGliL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvc3JjL2xpYi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFrQnpELElBQU0scUJBQXFCLDZCQUEzQixNQUFNLHFCQUFtQyxTQUFR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QkFBMkIsRUFBRSxvQkFBb0IsQ0FBQyxpQkFFaEUsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzt5QkFDckQ7cUJBQ0Ysa0JBQ2UsQ0FBQyxxQkFBcUIsQ0FBQzs4QkFRaEMsT0FBTztzQkFEYixlQUFlO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUU7Z0JBSTNGLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsZ0NBQWdDO2dCQTBFcEMsZ0JBQWdCO3NCQUR6QixZQUFZO3VCQUFDLE9BQU87Z0JBZ0JYLG1CQUFtQjtzQkFENUIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbnRyb2wgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY2RrL2F1dG9jb21wbGV0ZS1jb250cm9sJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgTG9hZGluZ1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGZyb21RdWVyeUxpc3QgfSBmcm9tICdAb2R4L2FuZ3VsYXIvcnhqcyc7XG5pbXBvcnQgeyBkZWZlckZuIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEFVVE9DT01QTEVURV9DT05UUk9MIH0gZnJvbSAnLi9hdXRvY29tcGxldGUudG9rZW5zJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVTZWFyY2hGaWVsZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbkBDU1NDb21wb25lbnQoJ2F1dG9jb21wbGV0ZScpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0b2NvbXBsZXRlJyxcbiAgaW1wb3J0czogW0Ryb3Bkb3duRGlyZWN0aXZlLCBBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQsIExvYWRpbmdTcGlubmVyTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBVVRPQ09NUExFVEVfQ09OVFJPTCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtDbGlja091dHNpZGVEaXJlY3RpdmVdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVDb21wb25lbnQ8VCA9IHVua25vd24+IGV4dGVuZHMgQXV0b2NvbXBsZXRlQ29udHJvbDxUIHwgbnVsbD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbGlja091dHNpZGVEaXJlY3RpdmUgPSBpbmplY3QoQ2xpY2tPdXRzaWRlRGlyZWN0aXZlLCB7IGhvc3Q6IHRydWUgfSk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUsIGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiB0cnVlIH0pXG4gIHB1YmxpYyBvcHRpb25zPzogUXVlcnlMaXN0PEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudDxUPj47XG5cbiAgQENvbnRlbnRDaGlsZChBdXRvY29tcGxldGVTZWFyY2hGaWVsZERpcmVjdGl2ZSlcbiAgcHVibGljIHNlYXJjaEZpZWxkPzogQXV0b2NvbXBsZXRlU2VhcmNoRmllbGREaXJlY3RpdmU7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRyb3Bkb3duT3BlblRyaWdnZXJzID0gW107XG5cbiAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucykgcmV0dXJuO1xuXG4gICAgdGhpcy5pbml0S2V5TWFuYWdlcih0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0T3B0aW9uKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5oYW5kbGVTZWFyY2hGaWVsZENoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSgpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9wdGlvbihvcHRpb24/OiBBdXRvY29tcGxldGVPcHRpb25Db21wb25lbnQ8VD4gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb24/LnZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKG9wdGlvbi52YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZChvcHRpb24udmFsdWUpO1xuXG4gICAgdGhpcy5vcHRpb25TZWxlY3RlZC5lbWl0KG9wdGlvbi52YWx1ZSk7XG5cbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFNlYXJjaEZpZWxkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUoJycgYXMgVCk7XG4gICAgdGhpcy5zZWFyY2hGaWVsZD8ucmVzZXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVRdWVyeUxpc3RPcHRpb24ob3B0aW9uczogUXVlcnlMaXN0PEF1dG9jb21wbGV0ZU9wdGlvbkNvbXBvbmVudDxUPj4pOiB2b2lkIHtcbiAgICBmcm9tUXVlcnlMaXN0KG9wdGlvbnMpXG4gICAgICAucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgIGRlZmVyRm4oKCkgPT4gdGhpcy5hY3RpdmF0ZVNlbGVjdGVkT3B0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTZWFyY2hGaWVsZENoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZD8udmFsdWVDaGFuZ2UkLnBpcGUodGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlckNvbnRyb2xsZXJDaGFuZ2UoKTtcbiAgICAgIGRlZmVyRm4oKCkgPT4gdGhpcy5oYW5kbGVTZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrT3V0c2lkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrT3V0c2lkZURpcmVjdGl2ZS5vZHhDbGlja091dHNpZGUucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGlja091dHNpZGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xpY2tPdXRzaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIHRoaXMuYmx1clNlbGVjdFNlYXJjaEZpZWxkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlU2VhcmNoRmllbGRWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCh0aGlzLnNlYXJjaEZpZWxkPy5uYXRpdmVFbGVtZW50VmFsdWUgPz8gJycpIGFzIFQpO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmICF0aGlzLmhhc09wdGlvbnMpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmhhc09wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIHRoaXMuaGFzT3B0aW9ucykge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHByb3RlY3RlZCBoYW5kbGVDbGlja0V2ZW50KCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZyAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLmJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUmVhZG9ubHkgfHwgdGhpcy5pc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuaXNPcGVuICYmIHRoaXMuaGFzT3B0aW9ucykge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWRvbmx5IHx8IHRoaXMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMuaGFzT3B0aW9ucykge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbih0aGlzLmtleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gYXMgQXV0b2NvbXBsZXRlT3B0aW9uQ29tcG9uZW50PFQ+IHwgdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdCgodGhpcy52YWx1ZSA/PyAnJykgYXMgVCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT3BlbiAmJiBldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzT3BlbiAmJiB0aGlzLmhhc09wdGlvbnMpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5rZXlNYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjdGl2YXRlU2VsZWN0ZWRPcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMuZGVmYXVsdEFjdGl2ZU9wdGlvbkluZGV4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRyb3Bkb3duQmVmb3JlT3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0ZWRPcHRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoRmllbGQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoRmllbGQpIHJldHVybjtcblxuICAgIHRoaXMuc2VhcmNoRmllbGQubmF0aXZlRWxlbWVudFZhbHVlID0gdGhpcy5zdHJpbmdpZnk/Lih2YWx1ZSkgPz8gKHZhbHVlIGFzIHN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGJsdXJTZWxlY3RTZWFyY2hGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkPy5ibHVyKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICBjbGFzcz1cIm9keC1hdXRvY29tcGxldGVfX3RyaWdnZXJcIlxuICBbb2R4RHJvcGRvd25dPVwiZHJvcGRvd25Db250ZW50XCJcbiAgW29keERyb3Bkb3duRGlzYWJsZWRdPVwiaXNEaXNhYmxlZCB8fCBpc1JlYWRvbmx5XCJcbiAgW29keERyb3Bkb3duT3B0aW9uc109XCJ7IG1hdGNoUmVmZXJlbmNlV2lkdGg6IHRydWUsIG9mZnNldDogNCwgb3V0ZXJQYWRkaW5nOiAxMCwgcG9zaXRpb246ICdib3R0b20tc3RhcnQnIH1cIlxuICBbb2R4RHJvcGRvd25SZWZlcmVuY2VFbGVtZW50XT1cImVsZW1lbnQubmF0aXZlRWxlbWVudFwiXG4gIFtvZHhEcm9wZG93blNob3dMb2FkZXJdPVwiaXNMb2FkaW5nXCJcbiAgW29keERyb3Bkb3duT3BlblRyaWdnZXJdPVwiZHJvcGRvd25PcGVuVHJpZ2dlcnNcIlxuICBbb2R4RHJvcGRvd25DbGlja091dHNpZGVBY3RpdmVdPVwiZmFsc2VcIlxuICAob2R4RHJvcGRvd25CZWZvcmVPcGVuKT1cIm9uRHJvcGRvd25CZWZvcmVPcGVuKClcIlxuICAob2R4RHJvcGRvd25BZnRlck9wZW4pPVwiZW5hYmxlU21vb3RoU2Nyb2xsKClcIlxuICAob2R4RHJvcGRvd25CZWZvcmVDbG9zZSk9XCJkaXNhYmxlU21vb3RoU2Nyb2xsKClcIlxuPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJpbnB1dFtvZHhBdXRvY29tcGxldGVDb250cm9sXVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cIm9keC1kcm9wZG93bl9fb3B0aW9uLWxpc3RcIiByb2xlPVwibGlzdGJveFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJoYXNPcHRpb25zXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19