@searchstax-inc/searchstudio-ux-angular 4.1.0 → 4.1.5

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 (63) hide show
  1. package/CHANGELOG.md +30 -15
  2. package/README.md +6 -2
  3. package/esm2022/lib/components/searchstax-input/searchstax-input.component.mjs +81 -0
  4. package/esm2022/lib/components/searchstax-results/searchstax-results.component.mjs +88 -0
  5. package/esm2022/lib/components/searchstax-search-answer/searchstax-search-answer.component.mjs +47 -0
  6. package/esm2022/lib/components/searchstax-search-external/searchstax-search-external.component.mjs +41 -0
  7. package/esm2022/lib/components/searchstax-search-facets/searchstax-search-facets.component.mjs +114 -0
  8. package/esm2022/lib/components/searchstax-search-location/searchstax-search-location.component.mjs +92 -0
  9. package/esm2022/lib/components/searchstax-search-overview/searchstax-search-overview.component.mjs +42 -0
  10. package/esm2022/lib/components/searchstax-search-pagination/searchstax-search-pagination.component.mjs +64 -0
  11. package/esm2022/lib/components/searchstax-search-related/searchstax-search-related.component.mjs +45 -0
  12. package/esm2022/lib/components/searchstax-search-sorting/searchstax-search-sorting.component.mjs +46 -0
  13. package/esm2022/lib/components/searchstax-wrapper.component.mjs +93 -0
  14. package/esm2022/lib/components/templates/SearchstaxLocationWidgetTemplateConfig.mjs +91 -0
  15. package/esm2022/lib/components/templates/searchstax-search-answer-template.mjs +119 -0
  16. package/esm2022/lib/components/templates/searchstax-search-external-template.mjs +107 -0
  17. package/esm2022/lib/components/templates/searchstax-search-facet-desktop-template.mjs +207 -0
  18. package/esm2022/lib/components/templates/searchstax-search-facet-mobile-template.mjs +343 -0
  19. package/esm2022/lib/components/templates/searchstax-search-input-template.mjs +126 -0
  20. package/esm2022/lib/components/templates/searchstax-search-location-template.mjs +152 -0
  21. package/esm2022/lib/components/templates/searchstax-search-no-results-template.mjs +85 -0
  22. package/esm2022/lib/components/templates/searchstax-search-overview-template.mjs +87 -0
  23. package/esm2022/lib/components/templates/searchstax-search-pagination-infinite-template.mjs +60 -0
  24. package/esm2022/lib/components/templates/searchstax-search-pagination-template.mjs +96 -0
  25. package/esm2022/lib/components/templates/searchstax-search-related-template.mjs +81 -0
  26. package/esm2022/lib/components/templates/searchstax-search-results-template.mjs +175 -0
  27. package/esm2022/lib/components/templates/searchstax-search-sorting-template.mjs +76 -0
  28. package/esm2022/lib/searchstudio-ux-angular.module.mjs +138 -0
  29. package/esm2022/lib/services/store-service.service.mjs +17 -0
  30. package/esm2022/public-api.mjs +30 -0
  31. package/esm2022/searchstax-inc-searchstudio-ux-angular.mjs +5 -0
  32. package/fesm2022/searchstax-inc-searchstudio-ux-angular.mjs +2601 -0
  33. package/fesm2022/searchstax-inc-searchstudio-ux-angular.mjs.map +1 -0
  34. package/index.d.ts +5 -0
  35. package/lib/components/searchstax-input/searchstax-input.component.d.ts +37 -0
  36. package/lib/components/searchstax-results/searchstax-results.component.d.ts +27 -0
  37. package/lib/components/searchstax-search-answer/searchstax-search-answer.component.d.ts +19 -0
  38. package/lib/components/searchstax-search-external/searchstax-search-external.component.d.ts +17 -0
  39. package/lib/components/searchstax-search-facets/searchstax-search-facets.component.d.ts +37 -0
  40. package/lib/components/searchstax-search-location/searchstax-search-location.component.d.ts +33 -0
  41. package/lib/components/searchstax-search-overview/searchstax-search-overview.component.d.ts +17 -0
  42. package/lib/components/searchstax-search-pagination/searchstax-search-pagination.component.d.ts +21 -0
  43. package/lib/components/searchstax-search-related/searchstax-search-related.component.d.ts +19 -0
  44. package/lib/components/searchstax-search-sorting/searchstax-search-sorting.component.d.ts +18 -0
  45. package/lib/components/searchstax-wrapper.component.d.ts +31 -0
  46. package/lib/components/templates/SearchstaxLocationWidgetTemplateConfig.d.ts +13 -0
  47. package/lib/components/templates/searchstax-search-answer-template.d.ts +7 -0
  48. package/lib/components/templates/searchstax-search-external-template.d.ts +7 -0
  49. package/lib/components/templates/searchstax-search-facet-desktop-template.d.ts +7 -0
  50. package/lib/components/templates/searchstax-search-facet-mobile-template.d.ts +7 -0
  51. package/lib/components/templates/searchstax-search-input-template.d.ts +7 -0
  52. package/lib/components/templates/searchstax-search-location-template.d.ts +7 -0
  53. package/lib/components/templates/searchstax-search-no-results-template.d.ts +7 -0
  54. package/lib/components/templates/searchstax-search-overview-template.d.ts +7 -0
  55. package/lib/components/templates/searchstax-search-pagination-infinite-template.d.ts +7 -0
  56. package/lib/components/templates/searchstax-search-pagination-template.d.ts +7 -0
  57. package/lib/components/templates/searchstax-search-related-template.d.ts +7 -0
  58. package/lib/components/templates/searchstax-search-results-template.d.ts +7 -0
  59. package/lib/components/templates/searchstax-search-sorting-template.d.ts +7 -0
  60. package/lib/searchstudio-ux-angular.module.d.ts +32 -0
  61. package/lib/services/store-service.service.d.ts +8 -0
  62. package/package.json +2 -5
  63. package/public-api.d.ts +26 -0
package/CHANGELOG.md CHANGED
@@ -2,18 +2,18 @@
2
2
 
3
3
  All notable changes to the "searchstudio-ux-angular" project will be documented in this file.
4
4
 
5
- ## [1.2.1] - 2024-10-08
6
- ### ⚠️ BREAKING CHANGES
7
- - Result template needs to be updated to print variables as HTML because they now will contain html <em> tags if highlighting is enabled
8
- ### Features
9
- - Added support for highlighting controlled via studio UI
10
- - Results per page are now configured through studio UI
5
+ ## [4.1.5]
11
6
  ### Bug Fixes
12
- - Tracking calls now use unmodified title of the result
7
+ - answers endpoint now have same query parameters as emselect
8
+ - accessibility: feedback widget comment section no longer reads characters left after every key press
13
9
 
14
- ## [1.2.3] - 2024-11-05
10
+ ## [4.1.0]
15
11
  ### Bug Fixes
16
- - fix & and + symbols causing issues in facet values
12
+ - stopped making unnecessary calls on blank search page load
13
+ - accessibility: template modified to only read result title for accessibility
14
+ - accessibility: leave feedback button state change is now announced
15
+ - accessibility: focus persistance added for feedback rating
16
+ - added support for react 19
17
17
 
18
18
  ## [2.0.0]
19
19
  ### Features
@@ -22,10 +22,25 @@ All notable changes to the "searchstudio-ux-angular" project will be documented
22
22
  - NVDA facet groups now announce state
23
23
  - NVDA added ability to jump from facets to results section
24
24
 
25
- ## [4.1.0]
25
+ ## [1.0.24]
26
+ ### Features
27
+ - added answer widget
28
+
29
+ ## [1.0.11] - 2024-12-26
26
30
  ### Bug Fixes
27
- - stopped making unnecessary calls on blank search page load
28
- - accessibility: template modified to only read result title for accessibility
29
- - accessibility: leave feedback button state change is now announced
30
- - accessibility: focus persistance added for feedback rating
31
- - added support for react 19
31
+ - fix order of non mapped fields
32
+ - fix styling of grid view for accelerator
33
+
34
+ ## [1.0.10] - 2024-12-05
35
+ ### Bug Fixes
36
+ - fix & and + symbols causing issues in facet values
37
+
38
+ ## [1.0.3] - 2024-10-08
39
+ ### ⚠️ BREAKING CHANGES
40
+ - Result template needs to be updated to print variables as HTML because they now will contain html <em> tags if highlighting is enabled
41
+ ### Features
42
+ - Added support for highlighting controlled via studio UI
43
+ - Results per page are now configured through studio UI
44
+ ### Bug Fixes
45
+ - Tracking calls now use unmodified title of the result
46
+
package/README.md CHANGED
@@ -165,7 +165,7 @@ The AppSearchstaxAnswer component for Angular provides an AI answer widget for y
165
165
 
166
166
  **Props**
167
167
 
168
- - showMoreAfterWordCount - number(default 100) determining after how many symbols UI will show “Read More” view.
168
+ - showMoreAfterWordCount - number(default 100) determining after how many words UI will show “Read More” view.
169
169
  - feedbackWidget – an optional object that configures thumbs-up and thumbs-down feedback functionality.
170
170
 
171
171
  Example of feedbackWidget config:
@@ -657,7 +657,7 @@ The SearchstaxResultsWidget for Angular component displays the search results.
657
657
  ```
658
658
  <app-searchstax-results
659
659
  [afterLinkClick]="afterLinkClick"
660
- [renderMethod]="'pagination'"
660
+ [renderMethod]="'pagination'"
661
661
  [resultsPerPage]="10"
662
662
  ></app-searchstax-results>
663
663
  ```
@@ -1517,6 +1517,10 @@ The SearchstaxSortingWidget displays sorting options for search results.
1517
1517
  <app-searchstax-search-sorting></app-searchstax-search-sorting>
1518
1518
  ```
1519
1519
 
1520
+ **Props**
1521
+
1522
+ - templateOverride - template override for sorting widget
1523
+
1520
1524
  **Main Template Override**
1521
1525
 
1522
1526
  Main template for sorting widget.
@@ -0,0 +1,81 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import { locationWidgetConfig } from "../templates/SearchstaxLocationWidgetTemplateConfig";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/store-service.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../templates/searchstax-search-input-template";
7
+ export class SearchstaxInputWidget {
8
+ constructor(storeServiceService) {
9
+ this.storeServiceService = storeServiceService;
10
+ this.searchInputId = "";
11
+ this.hooks = {};
12
+ this.suggestions = [];
13
+ this.context = this;
14
+ this.templateData = null;
15
+ this.locationWidgetConfig = locationWidgetConfig;
16
+ }
17
+ ngOnInit() {
18
+ if (this.storeServiceService.searchstax) {
19
+ this.attachObservables();
20
+ // const hooks: { [key: string]: (prop: any) => any } = {}
21
+ if (this.afterAutosuggest) {
22
+ this.hooks["afterAutosuggest"] = this.afterAutosuggest;
23
+ }
24
+ if (this.beforeAutosuggest) {
25
+ this.hooks["beforeAutosuggest"] = this.beforeAutosuggest;
26
+ }
27
+ setTimeout(() => {
28
+ this.storeServiceService.searchstax.addSearchInputWidget("searchstax-input-container", {
29
+ suggestAfterMinChars: this.suggestAfterMinChars,
30
+ hooks: this.hooks,
31
+ templates: {
32
+ mainTemplate: {
33
+ template: ``,
34
+ searchInputId: this.searchInputId ?? "searchstax-search-input",
35
+ },
36
+ },
37
+ });
38
+ this.storeServiceService.searchstax.dataLayer.setInputTemplateRendered(true);
39
+ }, 100);
40
+ }
41
+ else {
42
+ throw Error("Searchstax instance needs to be passed via props");
43
+ }
44
+ }
45
+ onMouseLeave(context) {
46
+ context.storeServiceService.searchstax.searchInputWidget?.resetAutosuggestSelection();
47
+ context.storeServiceService.searchstax.searchInputWidget?.markActiveAutosuggestItem();
48
+ }
49
+ onMouseOver(suggestion, context) {
50
+ context.storeServiceService.searchstax.searchInputWidget?.onSuggestionEnter(suggestion);
51
+ }
52
+ onMouseClick(e, context) {
53
+ e.stopImmediatePropagation();
54
+ context.storeServiceService.searchstax.searchInputWidget?.suggestionChosen();
55
+ }
56
+ attachObservables() {
57
+ this.storeServiceService.searchstax.dataLayer.$autosuggestResults.subscribe((suggestions) => {
58
+ this.suggestions = suggestions?.suggestions ?? [];
59
+ });
60
+ this.storeServiceService.searchstax.dataLayer.$inputWidgetTemplateData.subscribe((data) => {
61
+ this.templateData = data;
62
+ });
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxInputWidget, deps: [{ token: i1.StoreServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchstaxInputWidget, selector: "app-searchstax-input", inputs: { afterAutosuggest: "afterAutosuggest", beforeAutosuggest: "beforeAutosuggest", searchInputId: "searchInputId", suggestAfterMinChars: "suggestAfterMinChars", templateOverride: "templateOverride" }, ngImport: i0, template: "<div id=\"searchstax-input-container\">\n <div\n class=\"searchstax-search-input-container searchstax-search-input-container-new\"\n [class]=\"{\n 'searchstax-alternative-render': !!templateData?.locationEnabled\n }\"\n >\n <ng-container *ngIf=\"!templateOverride\">\n <app-input-template #ref></app-input-template>\n <ng-template\n *ngTemplateOutlet=\"ref.inputTemplate; context: context\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"templateOverride\">\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.InputTemplateComponent, selector: "app-input-template" }] }); }
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxInputWidget, decorators: [{
68
+ type: Component,
69
+ args: [{ selector: "app-searchstax-input", template: "<div id=\"searchstax-input-container\">\n <div\n class=\"searchstax-search-input-container searchstax-search-input-container-new\"\n [class]=\"{\n 'searchstax-alternative-render': !!templateData?.locationEnabled\n }\"\n >\n <ng-container *ngIf=\"!templateOverride\">\n <app-input-template #ref></app-input-template>\n <ng-template\n *ngTemplateOutlet=\"ref.inputTemplate; context: context\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"templateOverride\">\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </ng-container>\n </div>\n</div>\n" }]
70
+ }], ctorParameters: () => [{ type: i1.StoreServiceService }], propDecorators: { afterAutosuggest: [{
71
+ type: Input
72
+ }], beforeAutosuggest: [{
73
+ type: Input
74
+ }], searchInputId: [{
75
+ type: Input
76
+ }], suggestAfterMinChars: [{
77
+ type: Input
78
+ }], templateOverride: [{
79
+ type: Input
80
+ }] } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZWFyY2hzdGF4LWluYy9zZWFyY2hzdHVkaW8tdXgtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VhcmNoc3RheC1pbnB1dC9zZWFyY2hzdGF4LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LWlucHV0L3NlYXJjaHN0YXgtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBVXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7OztBQU8zRixNQUFNLE9BQU8scUJBQXFCO0lBaUJoQyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQVZuRCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUk1QixVQUFLLEdBQTBDLEVBQUUsQ0FBQztRQUNsRCxnQkFBVyxHQUE0QixFQUFFLENBQUM7UUFDMUMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGlCQUFZLEdBQTRDLElBQUksQ0FBQztRQUM3RCx5QkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUVtQixDQUFDO0lBRWhFLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsMERBQTBEO1lBQzFELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDMUQ7WUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQ3RELDRCQUE0QixFQUM1QjtvQkFDRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO29CQUMvQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLFNBQVMsRUFBRTt3QkFDVCxZQUFZLEVBQUU7NEJBQ1osUUFBUSxFQUFFLEVBQUU7NEJBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUkseUJBQXlCO3lCQUMvRDtxQkFDRjtpQkFDRixDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQ3BFLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBR0QsWUFBWSxDQUFDLE9BQWE7UUFDeEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1FBQ3RGLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQWlDLEVBQUUsT0FBYTtRQUMxRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUN6RSxVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUSxFQUFFLE9BQWE7UUFDbEMsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9FLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQ3pFLENBQUMsV0FBeUMsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQzlFLENBQUMsSUFBNkMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQzsrR0FqRlUscUJBQXFCO21HQUFyQixxQkFBcUIsMFFDakJsQywrcEJBb0JBOzs0RkRIYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0Usc0JBQXNCO3dGQUt2QixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgSVNlYXJjaHN0YXhMb2NhdGlvbixcbiAgSVNlYXJjaHN0YXhTRUFSQ0hURVJNLFxuICBJU2VhcmNoc3RheFNlYXJjaElucHV0UmVuZGVyRGF0YSxcbiAgSVNlYXJjaHN0YXhTdWdnZXN0UHJvcHMsXG4gIElTZWFyY2hzdGF4U3VnZ2VzdFJlc3BvbnNlLFxuICBJU2VhcmNoc3RheFN1Z2dlc3Rpb24sXG59IGZyb20gXCJAc2VhcmNoc3RheC1pbmMvc2VhcmNoc3R1ZGlvLXV4LWpzXCI7XG5pbXBvcnQgeyBTdG9yZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JlLXNlcnZpY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgbG9jYXRpb25XaWRnZXRDb25maWcgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL1NlYXJjaHN0YXhMb2NhdGlvbldpZGdldFRlbXBsYXRlQ29uZmlnXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtc2VhcmNoc3RheC1pbnB1dFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3NlYXJjaHN0YXgtaW5wdXQuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoc3RheElucHV0V2lkZ2V0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgYWZ0ZXJBdXRvc3VnZ2VzdD86IChcbiAgICByZXN1bHQ6IElTZWFyY2hzdGF4U3VnZ2VzdFJlc3BvbnNlXG4gICkgPT4gSVNlYXJjaHN0YXhTdWdnZXN0UmVzcG9uc2U7XG4gIEBJbnB1dCgpIGJlZm9yZUF1dG9zdWdnZXN0PzogKFxuICAgIHByb3BzOiBJU2VhcmNoc3RheFN1Z2dlc3RQcm9wc1xuICApID0+IElTZWFyY2hzdGF4U3VnZ2VzdFByb3BzIHwgbnVsbDtcbiAgQElucHV0KCkgc2VhcmNoSW5wdXRJZCA9IFwiXCI7XG4gIEBJbnB1dCgpIHN1Z2dlc3RBZnRlck1pbkNoYXJzPzogbnVtYmVyO1xuICBASW5wdXQoKSB0ZW1wbGF0ZU92ZXJyaWRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBob29rczogeyBba2V5OiBzdHJpbmddOiAocHJvcDogYW55KSA9PiBhbnkgfSA9IHt9O1xuICBzdWdnZXN0aW9uczogSVNlYXJjaHN0YXhTdWdnZXN0aW9uW10gPSBbXTtcbiAgY29udGV4dCA9IHRoaXM7XG4gIHRlbXBsYXRlRGF0YTogbnVsbCB8IElTZWFyY2hzdGF4U2VhcmNoSW5wdXRSZW5kZXJEYXRhID0gbnVsbDtcbiAgbG9jYXRpb25XaWRnZXRDb25maWcgPSBsb2NhdGlvbldpZGdldENvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlU2VydmljZVNlcnZpY2U6IFN0b3JlU2VydmljZVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4KSB7XG4gICAgICB0aGlzLmF0dGFjaE9ic2VydmFibGVzKCk7XG4gICAgICAvLyBjb25zdCBob29rczogeyBba2V5OiBzdHJpbmddOiAocHJvcDogYW55KSA9PiBhbnkgfSA9IHt9XG4gICAgICBpZiAodGhpcy5hZnRlckF1dG9zdWdnZXN0KSB7XG4gICAgICAgIHRoaXMuaG9va3NbXCJhZnRlckF1dG9zdWdnZXN0XCJdID0gdGhpcy5hZnRlckF1dG9zdWdnZXN0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYmVmb3JlQXV0b3N1Z2dlc3QpIHtcbiAgICAgICAgdGhpcy5ob29rc1tcImJlZm9yZUF1dG9zdWdnZXN0XCJdID0gdGhpcy5iZWZvcmVBdXRvc3VnZ2VzdDtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5hZGRTZWFyY2hJbnB1dFdpZGdldChcbiAgICAgICAgICBcInNlYXJjaHN0YXgtaW5wdXQtY29udGFpbmVyXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3VnZ2VzdEFmdGVyTWluQ2hhcnM6IHRoaXMuc3VnZ2VzdEFmdGVyTWluQ2hhcnMsXG4gICAgICAgICAgICBob29rczogdGhpcy5ob29rcyxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICBtYWluVGVtcGxhdGU6IHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGAsXG4gICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRJZDogdGhpcy5zZWFyY2hJbnB1dElkID8/IFwic2VhcmNoc3RheC1zZWFyY2gtaW5wdXRcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuc2V0SW5wdXRUZW1wbGF0ZVJlbmRlcmVkKFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwiU2VhcmNoc3RheCBpbnN0YW5jZSBuZWVkcyB0byBiZSBwYXNzZWQgdmlhIHByb3BzXCIpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25Nb3VzZUxlYXZlKGNvbnRleHQ6IHRoaXMpIHtcbiAgICBjb250ZXh0LnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5zZWFyY2hJbnB1dFdpZGdldD8ucmVzZXRBdXRvc3VnZ2VzdFNlbGVjdGlvbigpO1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LnNlYXJjaElucHV0V2lkZ2V0Py5tYXJrQWN0aXZlQXV0b3N1Z2dlc3RJdGVtKCk7XG4gIH1cblxuICBvbk1vdXNlT3ZlcihzdWdnZXN0aW9uOiBJU2VhcmNoc3RheFN1Z2dlc3Rpb24sIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBjb250ZXh0LnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5zZWFyY2hJbnB1dFdpZGdldD8ub25TdWdnZXN0aW9uRW50ZXIoXG4gICAgICBzdWdnZXN0aW9uXG4gICAgKTtcbiAgfVxuXG4gIG9uTW91c2VDbGljayhlOiBFdmVudCwgY29udGV4dDogdGhpcykge1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoSW5wdXRXaWRnZXQ/LnN1Z2dlc3Rpb25DaG9zZW4oKTtcbiAgfVxuXG4gIGF0dGFjaE9ic2VydmFibGVzKCkge1xuICAgIHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmRhdGFMYXllci4kYXV0b3N1Z2dlc3RSZXN1bHRzLnN1YnNjcmliZShcbiAgICAgIChzdWdnZXN0aW9uczogbnVsbCB8IElTZWFyY2hzdGF4U0VBUkNIVEVSTSkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnM/LnN1Z2dlc3Rpb25zID8/IFtdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJGlucHV0V2lkZ2V0VGVtcGxhdGVEYXRhLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBudWxsIHwgSVNlYXJjaHN0YXhTZWFyY2hJbnB1dFJlbmRlckRhdGEpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZURhdGEgPSBkYXRhO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgaWQ9XCJzZWFyY2hzdGF4LWlucHV0LWNvbnRhaW5lclwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzZWFyY2hzdGF4LXNlYXJjaC1pbnB1dC1jb250YWluZXIgc2VhcmNoc3RheC1zZWFyY2gtaW5wdXQtY29udGFpbmVyLW5ld1wiXG4gICAgW2NsYXNzXT1cIntcbiAgICAgICdzZWFyY2hzdGF4LWFsdGVybmF0aXZlLXJlbmRlcic6ICEhdGVtcGxhdGVEYXRhPy5sb2NhdGlvbkVuYWJsZWRcbiAgICB9XCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGVPdmVycmlkZVwiPlxuICAgICAgPGFwcC1pbnB1dC10ZW1wbGF0ZSAjcmVmPjwvYXBwLWlucHV0LXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmLmlucHV0VGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIlxuICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlT3ZlcnJpZGVcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU92ZXJyaWRlOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,88 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/store-service.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "../templates/searchstax-search-results-template";
6
+ import * as i4 from "../templates/searchstax-search-no-results-template";
7
+ export class SearchstaxResultsWidget {
8
+ get hooks() {
9
+ const hooks = {};
10
+ if (this.afterLinkClick) {
11
+ hooks['afterLinkClick'] = this.afterLinkClick;
12
+ }
13
+ return hooks;
14
+ }
15
+ constructor(storeServiceService) {
16
+ this.storeServiceService = storeServiceService;
17
+ this.searchResults = null;
18
+ this.metadata = null;
19
+ this.searchTerm = '';
20
+ this.context = this;
21
+ }
22
+ ngOnInit() {
23
+ if (this.storeServiceService.searchstax) {
24
+ this.attachObservables();
25
+ setTimeout(() => {
26
+ this.storeServiceService.searchstax.addSearchResultsWidget('searchstax-results-container', {
27
+ templates: {},
28
+ hooks: this.hooks,
29
+ renderMethod: this.renderMethod ?? "pagination",
30
+ resultsPerPage: this.resultsPerPage,
31
+ });
32
+ }, 0);
33
+ }
34
+ else {
35
+ throw Error('Searchstax instance needs to be passed via props');
36
+ }
37
+ }
38
+ executeSearch(term, event, context) {
39
+ event.preventDefault();
40
+ context.storeServiceService.searchstax.executeSearch(term);
41
+ }
42
+ attachObservables() {
43
+ this.storeServiceService.searchstax.dataLayer.$searchResults.subscribe((results) => {
44
+ const current = this.searchResults ? [...this.searchResults] : [];
45
+ const newResults = results ?? [];
46
+ const resultsCombined = this.renderMethod === "infiniteScroll"
47
+ ? [...current, ...newResults]
48
+ : results;
49
+ if (this.storeServiceService.searchstax.dataLayer.$searchObject.value?.page === 1) {
50
+ this.searchResults = newResults;
51
+ }
52
+ else {
53
+ this.searchResults = resultsCombined;
54
+ }
55
+ });
56
+ this.storeServiceService.searchstax.dataLayer.$searchTermChange.subscribe((result) => {
57
+ this.searchTerm = result;
58
+ });
59
+ this.storeServiceService.searchstax.dataLayer.$searchResultsMetadata.subscribe((value) => {
60
+ this.metadata = value;
61
+ });
62
+ }
63
+ resultClicked(result, event, context) {
64
+ event.preventDefault();
65
+ event.stopPropagation();
66
+ context.storeServiceService.searchstax.executeLinkClick(result.uniqueId);
67
+ }
68
+ isImage(field) {
69
+ return field.isImage && typeof field.value === 'string';
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxResultsWidget, deps: [{ token: i1.StoreServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchstaxResultsWidget, selector: "app-searchstax-results", inputs: { afterLinkClick: "afterLinkClick", noResultsTemplate: "noResultsTemplate", resultsTemplate: "resultsTemplate", renderMethod: "renderMethod", resultsPerPage: "resultsPerPage" }, ngImport: i0, template: "<div id=\"searchstax-results-container\">\n <section aria-label=\"search results container\" tabindex=\"0\">\n <div\n class=\"searchstax-search-results-container\"\n id=\"searchstax-search-results-container\"\n >\n <div id=\"searchstax-result-container\">\n <div\n *ngIf=\"\n searchResults?.length === 0 &&\n searchTerm !== '' &&\n searchTerm !== '*' &&\n storeServiceService.searchstax.dataLayer.parsedData\n .firstSearchHappened &&\n !noResultsTemplate\n \"\n >\n <app-no-results-template #ref></app-no-results-template>\n <ng-template\n *ngTemplateOutlet=\"ref.noResultsTemplate; context: context\"\n ></ng-template>\n </div>\n <div\n *ngIf=\"\n searchResults?.length === 0 &&\n searchTerm !== '' &&\n searchTerm !== '*' &&\n storeServiceService.searchstax.dataLayer.parsedData\n .firstSearchHappened &&\n noResultsTemplate\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"noResultsTemplate; context: context\"\n ></ng-container>\n </div>\n\n <ng-container\n *ngIf=\"searchResults && searchResults.length && !resultsTemplate\"\n >\n <app-results-template #ref></app-results-template>\n <ng-template\n *ngTemplateOutlet=\"ref.resultsTemplate; context: context\"\n ></ng-template>\n </ng-container>\n\n <div *ngIf=\"searchResults && searchResults.length && resultsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"resultsTemplate; context: context\"\n ></ng-container>\n </div>\n </div>\n </div>\n </section>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ResultsTemplateComponent, selector: "app-results-template" }, { kind: "component", type: i4.NoResultsTemplateComponent, selector: "app-no-results-template" }] }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxResultsWidget, decorators: [{
75
+ type: Component,
76
+ args: [{ selector: 'app-searchstax-results', template: "<div id=\"searchstax-results-container\">\n <section aria-label=\"search results container\" tabindex=\"0\">\n <div\n class=\"searchstax-search-results-container\"\n id=\"searchstax-search-results-container\"\n >\n <div id=\"searchstax-result-container\">\n <div\n *ngIf=\"\n searchResults?.length === 0 &&\n searchTerm !== '' &&\n searchTerm !== '*' &&\n storeServiceService.searchstax.dataLayer.parsedData\n .firstSearchHappened &&\n !noResultsTemplate\n \"\n >\n <app-no-results-template #ref></app-no-results-template>\n <ng-template\n *ngTemplateOutlet=\"ref.noResultsTemplate; context: context\"\n ></ng-template>\n </div>\n <div\n *ngIf=\"\n searchResults?.length === 0 &&\n searchTerm !== '' &&\n searchTerm !== '*' &&\n storeServiceService.searchstax.dataLayer.parsedData\n .firstSearchHappened &&\n noResultsTemplate\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"noResultsTemplate; context: context\"\n ></ng-container>\n </div>\n\n <ng-container\n *ngIf=\"searchResults && searchResults.length && !resultsTemplate\"\n >\n <app-results-template #ref></app-results-template>\n <ng-template\n *ngTemplateOutlet=\"ref.resultsTemplate; context: context\"\n ></ng-template>\n </ng-container>\n\n <div *ngIf=\"searchResults && searchResults.length && resultsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"resultsTemplate; context: context\"\n ></ng-container>\n </div>\n </div>\n </div>\n </section>\n</div>\n" }]
77
+ }], ctorParameters: () => [{ type: i1.StoreServiceService }], propDecorators: { afterLinkClick: [{
78
+ type: Input
79
+ }], noResultsTemplate: [{
80
+ type: Input
81
+ }], resultsTemplate: [{
82
+ type: Input
83
+ }], renderMethod: [{
84
+ type: Input
85
+ }], resultsPerPage: [{
86
+ type: Input
87
+ }] } });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1yZXN1bHRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXJlc3VsdHMvc2VhcmNoc3RheC1yZXN1bHRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXJlc3VsdHMvc2VhcmNoc3RheC1yZXN1bHRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF1QixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBWXRFLE1BQU0sT0FBTyx1QkFBdUI7SUFlbEMsSUFBSSxLQUFLO1FBQ1AsTUFBTSxLQUFLLEdBQTBDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMvQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQW1CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBYjNELGtCQUFhLEdBQXFDLElBQUksQ0FBQztRQUN2RCxhQUFRLEdBQXFDLElBQUksQ0FBQztRQUNsRCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxJQUFJLENBQUM7SUFVK0MsQ0FBQztJQUUvRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpCLFVBQVUs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cEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JlLXNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBJU2VhcmNoc3RheFBhcnNlZFJlc3VsdCxcbiAgSVNlYXJjaHN0YXhTZWFyY2hNZXRhZGF0YSxcbn0gZnJvbSAnQHNlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1qcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zZWFyY2hzdGF4LXJlc3VsdHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoc3RheC1yZXN1bHRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoc3RheFJlc3VsdHNXaWRnZXQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBhZnRlckxpbmtDbGljaz86IChcbiAgICByZXN1bHRzOiBJU2VhcmNoc3RheFBhcnNlZFJlc3VsdFxuICApID0+IElTZWFyY2hzdGF4UGFyc2VkUmVzdWx0O1xuXG4gIEBJbnB1dCgpIG5vUmVzdWx0c1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcmVzdWx0c1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcmVuZGVyTWV0aG9kPzogXCJpbmZpbml0ZVNjcm9sbFwiIHwgXCJwYWdpbmF0aW9uXCI7XG4gIEBJbnB1dCgpIHJlc3VsdHNQZXJQYWdlPzogbnVtYmVyO1xuXG4gIHNlYXJjaFJlc3VsdHM6IElTZWFyY2hzdGF4UGFyc2VkUmVzdWx0W10gfCBudWxsID0gbnVsbDtcbiAgbWV0YWRhdGE6IElTZWFyY2hzdGF4U2VhcmNoTWV0YWRhdGEgfCBudWxsID0gbnVsbDtcbiAgc2VhcmNoVGVybSA9ICcnO1xuICBjb250ZXh0ID0gdGhpcztcblxuICBnZXQgaG9va3MoKTogeyBba2V5OiBzdHJpbmddOiAocHJvcDogYW55KSA9PiBhbnkgfSB7XG4gICAgY29uc3QgaG9va3M6IHsgW2tleTogc3RyaW5nXTogKHByb3A6IGFueSkgPT4gYW55IH0gPSB7fTtcbiAgICBpZiAodGhpcy5hZnRlckxpbmtDbGljaykge1xuICAgICAgaG9va3NbJ2FmdGVyTGlua0NsaWNrJ10gPSB0aGlzLmFmdGVyTGlua0NsaWNrO1xuICAgIH1cbiAgICByZXR1cm4gaG9va3M7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RvcmVTZXJ2aWNlU2VydmljZTogU3RvcmVTZXJ2aWNlU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXgpIHtcbiAgICAgIHRoaXMuYXR0YWNoT2JzZXJ2YWJsZXMoKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmFkZFNlYXJjaFJlc3VsdHNXaWRnZXQoXG4gICAgICAgICAgJ3NlYXJjaHN0YXgtcmVzdWx0cy1jb250YWluZXInLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlczoge30sXG4gICAgICAgICAgICBob29rczogdGhpcy5ob29rcyxcbiAgICAgICAgICAgIHJlbmRlck1ldGhvZDogdGhpcy5yZW5kZXJNZXRob2QgPz8gXCJwYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICByZXN1bHRzUGVyUGFnZTogdGhpcy5yZXN1bHRzUGVyUGFnZSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoJ1NlYXJjaHN0YXggaW5zdGFuY2UgbmVlZHMgdG8gYmUgcGFzc2VkIHZpYSBwcm9wcycpO1xuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGVTZWFyY2godGVybTogc3RyaW5nLCBldmVudDogRXZlbnQsIGNvbnRleHQ6IHRoaXMpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmV4ZWN1dGVTZWFyY2godGVybSk7XG4gIH1cblxuICBhdHRhY2hPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJHNlYXJjaFJlc3VsdHMuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdHM6IElTZWFyY2hzdGF4UGFyc2VkUmVzdWx0W10gfCBudWxsKSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VhcmNoUmVzdWx0cyA/IFsuLi50aGlzLnNlYXJjaFJlc3VsdHNdIDogW107XG4gICAgICAgIGNvbnN0IG5ld1Jlc3VsdHMgPSByZXN1bHRzID8/IFtdO1xuICAgICAgICBjb25zdCByZXN1bHRzQ29tYmluZWQgPVxuICAgICAgICAgIHRoaXMucmVuZGVyTWV0aG9kID09PSBcImluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgICAgID8gWy4uLmN1cnJlbnQsIC4uLm5ld1Jlc3VsdHNdXG4gICAgICAgICAgICA6IHJlc3VsdHM7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJHNlYXJjaE9iamVjdC52YWx1ZT8ucGFnZSA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IG5ld1Jlc3VsdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gcmVzdWx0c0NvbWJpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJHNlYXJjaFRlcm1DaGFuZ2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHJlc3VsdDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguZGF0YUxheWVyLiRzZWFyY2hSZXN1bHRzTWV0YWRhdGEuc3Vic2NyaWJlKFxuICAgICAgKHZhbHVlOiBJU2VhcmNoc3RheFNlYXJjaE1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmVzdWx0Q2xpY2tlZChyZXN1bHQ6IElTZWFyY2hzdGF4UGFyc2VkUmVzdWx0LCBldmVudDogRXZlbnQsIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmV4ZWN1dGVMaW5rQ2xpY2socmVzdWx0LnVuaXF1ZUlkKTtcbiAgfVxuXG4gIGlzSW1hZ2UoZmllbGQ6IGFueSl7XG4gICAgcmV0dXJuIGZpZWxkLmlzSW1hZ2UgJiYgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnc3RyaW5nJ1xuICB9XG59XG4iLCI8ZGl2IGlkPVwic2VhcmNoc3RheC1yZXN1bHRzLWNvbnRhaW5lclwiPlxuICA8c2VjdGlvbiBhcmlhLWxhYmVsPVwic2VhcmNoIHJlc3VsdHMgY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LXNlYXJjaC1yZXN1bHRzLWNvbnRhaW5lclwiXG4gICAgICBpZD1cInNlYXJjaHN0YXgtc2VhcmNoLXJlc3VsdHMtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8ZGl2IGlkPVwic2VhcmNoc3RheC1yZXN1bHQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0cz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICBzZWFyY2hUZXJtICE9PSAnJyAmJlxuICAgICAgICAgICAgc2VhcmNoVGVybSAhPT0gJyonICYmXG4gICAgICAgICAgICBzdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguZGF0YUxheWVyLnBhcnNlZERhdGFcbiAgICAgICAgICAgICAgLmZpcnN0U2VhcmNoSGFwcGVuZWQgJiZcbiAgICAgICAgICAgICFub1Jlc3VsdHNUZW1wbGF0ZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXBwLW5vLXJlc3VsdHMtdGVtcGxhdGUgI3JlZj48L2FwcC1uby1yZXN1bHRzLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWYubm9SZXN1bHRzVGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIlxuICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzZWFyY2hSZXN1bHRzPy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHNlYXJjaFRlcm0gIT09ICcnICYmXG4gICAgICAgICAgICBzZWFyY2hUZXJtICE9PSAnKicgJiZcbiAgICAgICAgICAgIHN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIucGFyc2VkRGF0YVxuICAgICAgICAgICAgICAuZmlyc3RTZWFyY2hIYXBwZW5lZCAmJlxuICAgICAgICAgICAgbm9SZXN1bHRzVGVtcGxhdGVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1Jlc3VsdHNUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzICYmIHNlYXJjaFJlc3VsdHMubGVuZ3RoICYmICFyZXN1bHRzVGVtcGxhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGFwcC1yZXN1bHRzLXRlbXBsYXRlICNyZWY+PC9hcHAtcmVzdWx0cy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmLnJlc3VsdHNUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hSZXN1bHRzICYmIHNlYXJjaFJlc3VsdHMubGVuZ3RoICYmIHJlc3VsdHNUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVzdWx0c1RlbXBsYXRlOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,47 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/store-service.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "../templates/searchstax-search-answer-template";
6
+ export class SearchstaxSearchAnswerWidget {
7
+ constructor(storeServiceService) {
8
+ this.storeServiceService = storeServiceService;
9
+ this.answerData = null;
10
+ this.rand = Math.random();
11
+ this.context = this;
12
+ }
13
+ ngOnInit() {
14
+ if (this.storeServiceService.searchstax) {
15
+ this.attachObservables();
16
+ setTimeout(() => {
17
+ this.storeServiceService.searchstax.addAnswerWidget('searchstax-answer-container' + this.rand, { showMoreAfterWordCount: this.showMoreAfterWordCount, feedbackwidget: this.feedbackwidget });
18
+ }, 0);
19
+ }
20
+ else {
21
+ throw Error("Searchstax instance needs to be passed via props");
22
+ }
23
+ }
24
+ showMore(event, context) {
25
+ if (context.storeServiceService.searchstax) {
26
+ context.storeServiceService.searchstax.answerWidget?.showMore(event);
27
+ }
28
+ }
29
+ attachObservables() {
30
+ this.storeServiceService.searchstax.dataLayer.$answerData.subscribe((answerData) => {
31
+ this.answerData = answerData;
32
+ });
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchAnswerWidget, deps: [{ token: i1.StoreServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchstaxSearchAnswerWidget, selector: "app-searchstax-answer", inputs: { templateOverride: "templateOverride", feedbackwidget: "feedbackwidget", showMoreAfterWordCount: "showMoreAfterWordCount" }, ngImport: i0, template: "<div [id]=\"'searchstax-answer-container' + rand\">\n <div\n *ngIf=\"\n answerData &&\n answerData?.searchExecuted &&\n answerData.shouldShowAnswer &&\n !templateOverride\n \"\n >\n <app-answer-template #ref></app-answer-template>\n <ng-template\n [ngTemplateOutlet]=\"ref.answerTemplate\"\n [ngTemplateOutletContext]=\"context\"\n ></ng-template>\n </div>\n <div\n *ngIf=\"\n answerData &&\n answerData?.searchExecuted &&\n answerData.shouldShowAnswer &&\n templateOverride\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.AnswerTemplateComponent, selector: "app-answer-template" }] }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchAnswerWidget, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: "app-searchstax-answer", template: "<div [id]=\"'searchstax-answer-container' + rand\">\n <div\n *ngIf=\"\n answerData &&\n answerData?.searchExecuted &&\n answerData.shouldShowAnswer &&\n !templateOverride\n \"\n >\n <app-answer-template #ref></app-answer-template>\n <ng-template\n [ngTemplateOutlet]=\"ref.answerTemplate\"\n [ngTemplateOutletContext]=\"context\"\n ></ng-template>\n </div>\n <div\n *ngIf=\"\n answerData &&\n answerData?.searchExecuted &&\n answerData.shouldShowAnswer &&\n templateOverride\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </div>\n</div>\n" }]
40
+ }], ctorParameters: () => [{ type: i1.StoreServiceService }], propDecorators: { templateOverride: [{
41
+ type: Input
42
+ }], feedbackwidget: [{
43
+ type: Input
44
+ }], showMoreAfterWordCount: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtYW5zd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXNlYXJjaC1hbnN3ZXIvc2VhcmNoc3RheC1zZWFyY2gtYW5zd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXNlYXJjaC1hbnN3ZXIvc2VhcmNoc3RheC1zZWFyY2gtYW5zd2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF1QixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTdEUsTUFBTSxPQUFPLDRCQUE0QjtJQVF2QyxZQUFvQixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUg1RCxlQUFVLEdBQWlDLElBQUksQ0FBQztRQUNoRCxTQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFlBQU8sR0FBRyxJQUFJLENBQUM7SUFDZ0QsQ0FBQztJQUVoRSxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBQyxDQUFDLENBQUM7WUFDN0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7YUFBTTtZQUNMLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVksRUFBRSxPQUFhO1FBQ2xDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRTtZQUMxQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDckU7SUFDSCxDQUFDO0lBR0QsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDakUsQ0FBQyxVQUF3QyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDL0IsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDOytHQWxDVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixtTUNUekMsOHFCQTRCQTs7NEZEbkJhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7d0ZBS3hCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUZlZWRiYWNrV2lkZ2V0UHJvcGVydGllcywgSVNlYXJjaHN0YXhBbnN3ZXJEYXRhIH0gZnJvbSBcIkBzZWFyY2hzdGF4LWluYy9zZWFyY2hzdHVkaW8tdXgtanNcIjtcbmltcG9ydCB7IFN0b3JlU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmUtc2VydmljZS5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtc2VhcmNoc3RheC1hbnN3ZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9zZWFyY2hzdGF4LXNlYXJjaC1hbnN3ZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoc3RheFNlYXJjaEFuc3dlcldpZGdldCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHRlbXBsYXRlT3ZlcnJpZGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBmZWVkYmFja3dpZGdldD86IElGZWVkYmFja1dpZGdldFByb3BlcnRpZXM7XG4gIEBJbnB1dCgpIHNob3dNb3JlQWZ0ZXJXb3JkQ291bnQ/OiBudW1iZXI7XG5cbiAgYW5zd2VyRGF0YTogbnVsbCB8IElTZWFyY2hzdGF4QW5zd2VyRGF0YSA9IG51bGw7XG4gIHJhbmQgPSBNYXRoLnJhbmRvbSgpO1xuICBjb250ZXh0ID0gdGhpcztcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZVNlcnZpY2VTZXJ2aWNlOiBTdG9yZVNlcnZpY2VTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheCkge1xuICAgICAgdGhpcy5hdHRhY2hPYnNlcnZhYmxlcygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmFkZEFuc3dlcldpZGdldCgnc2VhcmNoc3RheC1hbnN3ZXItY29udGFpbmVyJyArIHRoaXMucmFuZCwge3Nob3dNb3JlQWZ0ZXJXb3JkQ291bnQ6IHRoaXMuc2hvd01vcmVBZnRlcldvcmRDb3VudCwgZmVlZGJhY2t3aWRnZXQ6IHRoaXMuZmVlZGJhY2t3aWRnZXR9KTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihcIlNlYXJjaHN0YXggaW5zdGFuY2UgbmVlZHMgdG8gYmUgcGFzc2VkIHZpYSBwcm9wc1wiKTtcbiAgICB9XG4gIH1cblxuICBzaG93TW9yZShldmVudDogRXZlbnQsIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBpZiAoY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXgpIHtcbiAgICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmFuc3dlcldpZGdldD8uc2hvd01vcmUoZXZlbnQpXG4gICAgfVxuICB9XG5cblxuICBhdHRhY2hPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJGFuc3dlckRhdGEuc3Vic2NyaWJlKFxuICAgICAgKGFuc3dlckRhdGE6IG51bGwgfCBJU2VhcmNoc3RheEFuc3dlckRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5hbnN3ZXJEYXRhID0gYW5zd2VyRGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IFtpZF09XCInc2VhcmNoc3RheC1hbnN3ZXItY29udGFpbmVyJyArIHJhbmRcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICBhbnN3ZXJEYXRhICYmXG4gICAgICBhbnN3ZXJEYXRhPy5zZWFyY2hFeGVjdXRlZCAmJlxuICAgICAgYW5zd2VyRGF0YS5zaG91bGRTaG93QW5zd2VyICYmXG4gICAgICAhdGVtcGxhdGVPdmVycmlkZVxuICAgIFwiXG4gID5cbiAgICA8YXBwLWFuc3dlci10ZW1wbGF0ZSAjcmVmPjwvYXBwLWFuc3dlci10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlZi5hbnN3ZXJUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiY29udGV4dFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIGFuc3dlckRhdGEgJiZcbiAgICAgIGFuc3dlckRhdGE/LnNlYXJjaEV4ZWN1dGVkICYmXG4gICAgICBhbnN3ZXJEYXRhLnNob3VsZFNob3dBbnN3ZXIgJiZcbiAgICAgIHRlbXBsYXRlT3ZlcnJpZGVcbiAgICBcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZU92ZXJyaWRlOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/store-service.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "../templates/searchstax-search-external-template";
6
+ export class SearchstaxSearchExternalPromotionsWidget {
7
+ constructor(storeServiceService) {
8
+ this.storeServiceService = storeServiceService;
9
+ this.externalPromotionsData = null;
10
+ this.rand = Math.random();
11
+ this.context = this;
12
+ }
13
+ ngOnInit() {
14
+ if (this.storeServiceService.searchstax) {
15
+ this.attachObservables();
16
+ setTimeout(() => {
17
+ this.storeServiceService.searchstax.addExternalPromotionsWidget("searchstax-external-promotions-layout-container" + this.rand, {});
18
+ }, 0);
19
+ }
20
+ else {
21
+ throw Error("Searchstax instance needs to be passed via props");
22
+ }
23
+ }
24
+ trackClick(externalPromotion, event, context) {
25
+ context.storeServiceService.searchstax.externalPromotionsWidget?.trackClick(externalPromotion, event);
26
+ }
27
+ attachObservables() {
28
+ this.storeServiceService.searchstax.dataLayer.$searchExternalPromotionsData.subscribe((externalPromotionsData) => {
29
+ this.externalPromotionsData = externalPromotionsData;
30
+ });
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchExternalPromotionsWidget, deps: [{ token: i1.StoreServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchstaxSearchExternalPromotionsWidget, selector: "app-searchstax-external-promotions", inputs: { templateOverride: "templateOverride" }, ngImport: i0, template: "<div [id]=\"'searchstax-external-promotions-layout-container' + rand\">\n <ng-container\n *ngIf=\"\n externalPromotionsData &&\n externalPromotionsData?.searchExecuted &&\n externalPromotionsData?.hasExternalPromotions &&\n !templateOverride\n \"\n >\n <app-external-template #ref></app-external-template>\n <ng-template\n *ngTemplateOutlet=\"ref.externalPromotionsTemplate; context: context\"\n ></ng-template>\n </ng-container>\n <div\n *ngIf=\"\n externalPromotionsData &&\n externalPromotionsData?.searchExecuted &&\n externalPromotionsData?.hasExternalPromotions &&\n templateOverride\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ExternalPromotionsTemplateComponent, selector: "app-external-template" }] }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchExternalPromotionsWidget, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: "app-searchstax-external-promotions", template: "<div [id]=\"'searchstax-external-promotions-layout-container' + rand\">\n <ng-container\n *ngIf=\"\n externalPromotionsData &&\n externalPromotionsData?.searchExecuted &&\n externalPromotionsData?.hasExternalPromotions &&\n !templateOverride\n \"\n >\n <app-external-template #ref></app-external-template>\n <ng-template\n *ngTemplateOutlet=\"ref.externalPromotionsTemplate; context: context\"\n ></ng-template>\n </ng-container>\n <div\n *ngIf=\"\n externalPromotionsData &&\n externalPromotionsData?.searchExecuted &&\n externalPromotionsData?.hasExternalPromotions &&\n templateOverride\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverride; context: context\"\n ></ng-container>\n </div>\n</div>\n" }]
38
+ }], ctorParameters: () => [{ type: i1.StoreServiceService }], propDecorators: { templateOverride: [{
39
+ type: Input
40
+ }] } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtZXh0ZXJuYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VhcmNoc3RheC1pbmMvc2VhcmNoc3R1ZGlvLXV4LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaHN0YXgtc2VhcmNoLWV4dGVybmFsL3NlYXJjaHN0YXgtc2VhcmNoLWV4dGVybmFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXNlYXJjaC1leHRlcm5hbC9zZWFyY2hzdGF4LXNlYXJjaC1leHRlcm5hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU3RFLE1BQU0sT0FBTyx3Q0FBd0M7SUFNbkQsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFINUQsMkJBQXNCLEdBQTZDLElBQUksQ0FBQztRQUN4RSxTQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFlBQU8sR0FBRyxJQUFJLENBQUM7SUFDZ0QsQ0FBQztJQUVoRSxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FDN0QsaURBQWlELEdBQUcsSUFBSSxDQUFDLElBQUksRUFDN0QsRUFBRSxDQUNILENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDUDthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsaUJBQXFDLEVBQUUsS0FBWSxFQUFFLE9BQWE7UUFDM0UsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FDbkYsQ0FBQyxzQkFBZ0UsRUFBRSxFQUFFO1lBQ25FLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUN2RCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7K0dBaENVLHdDQUF3QzttR0FBeEMsd0NBQXdDLDRIQ1RyRCw0eEJBMkJBOzs0RkRsQmEsd0NBQXdDO2tCQUxwRCxTQUFTOytCQUNFLG9DQUFvQzt3RkFLckMsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRXh0ZXJuYWxQcm9tb3Rpb24sIElTZWFyY2hzdGF4RXh0ZXJuYWxQcm9tb3Rpb25zRGF0YSB9IGZyb20gXCJAc2VhcmNoc3RheC1pbmMvc2VhcmNoc3R1ZGlvLXV4LWpzXCI7XG5pbXBvcnQgeyBTdG9yZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JlLXNlcnZpY2Uuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLXNlYXJjaHN0YXgtZXh0ZXJuYWwtcHJvbW90aW9uc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3NlYXJjaHN0YXgtc2VhcmNoLWV4dGVybmFsLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaHN0YXhTZWFyY2hFeHRlcm5hbFByb21vdGlvbnNXaWRnZXQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0ZW1wbGF0ZU92ZXJyaWRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBleHRlcm5hbFByb21vdGlvbnNEYXRhOiBudWxsIHwgSVNlYXJjaHN0YXhFeHRlcm5hbFByb21vdGlvbnNEYXRhID0gbnVsbDtcbiAgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG4gIGNvbnRleHQgPSB0aGlzO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlU2VydmljZVNlcnZpY2U6IFN0b3JlU2VydmljZVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4KSB7XG4gICAgICB0aGlzLmF0dGFjaE9ic2VydmFibGVzKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguYWRkRXh0ZXJuYWxQcm9tb3Rpb25zV2lkZ2V0KFxuICAgICAgICAgIFwic2VhcmNoc3RheC1leHRlcm5hbC1wcm9tb3Rpb25zLWxheW91dC1jb250YWluZXJcIiArIHRoaXMucmFuZCxcbiAgICAgICAgICB7fVxuICAgICAgICApO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwiU2VhcmNoc3RheCBpbnN0YW5jZSBuZWVkcyB0byBiZSBwYXNzZWQgdmlhIHByb3BzXCIpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQ2xpY2soZXh0ZXJuYWxQcm9tb3Rpb246IElFeHRlcm5hbFByb21vdGlvbiwgZXZlbnQ6IEV2ZW50LCBjb250ZXh0OiB0aGlzKSB7XG4gICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguZXh0ZXJuYWxQcm9tb3Rpb25zV2lkZ2V0Py50cmFja0NsaWNrKGV4dGVybmFsUHJvbW90aW9uLCBldmVudCk7XG4gIH1cblxuICBhdHRhY2hPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJHNlYXJjaEV4dGVybmFsUHJvbW90aW9uc0RhdGEuc3Vic2NyaWJlKFxuICAgICAgKGV4dGVybmFsUHJvbW90aW9uc0RhdGE6IG51bGwgfCBJU2VhcmNoc3RheEV4dGVybmFsUHJvbW90aW9uc0RhdGEpID0+IHtcbiAgICAgICAgdGhpcy5leHRlcm5hbFByb21vdGlvbnNEYXRhID0gZXh0ZXJuYWxQcm9tb3Rpb25zRGF0YTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8ZGl2IFtpZF09XCInc2VhcmNoc3RheC1leHRlcm5hbC1wcm9tb3Rpb25zLWxheW91dC1jb250YWluZXInICsgcmFuZFwiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIGV4dGVybmFsUHJvbW90aW9uc0RhdGEgJiZcbiAgICAgIGV4dGVybmFsUHJvbW90aW9uc0RhdGE/LnNlYXJjaEV4ZWN1dGVkICYmXG4gICAgICBleHRlcm5hbFByb21vdGlvbnNEYXRhPy5oYXNFeHRlcm5hbFByb21vdGlvbnMgJiZcbiAgICAgICF0ZW1wbGF0ZU92ZXJyaWRlXG4gICAgXCJcbiAgPlxuICAgIDxhcHAtZXh0ZXJuYWwtdGVtcGxhdGUgI3JlZj48L2FwcC1leHRlcm5hbC10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmLmV4dGVybmFsUHJvbW90aW9uc1RlbXBsYXRlOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXZcbiAgICAqbmdJZj1cIlxuICAgICAgZXh0ZXJuYWxQcm9tb3Rpb25zRGF0YSAmJlxuICAgICAgZXh0ZXJuYWxQcm9tb3Rpb25zRGF0YT8uc2VhcmNoRXhlY3V0ZWQgJiZcbiAgICAgIGV4dGVybmFsUHJvbW90aW9uc0RhdGE/Lmhhc0V4dGVybmFsUHJvbW90aW9ucyAmJlxuICAgICAgdGVtcGxhdGVPdmVycmlkZVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlT3ZlcnJpZGU7IGNvbnRleHQ6IGNvbnRleHRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,114 @@
1
+ import { Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/store-service.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "../templates/searchstax-search-facet-desktop-template";
6
+ import * as i4 from "../templates/searchstax-search-facet-mobile-template";
7
+ export class SearchstaxSearchFacetsWidget {
8
+ // @ViewChildren("facetContainers") facetContainers: QueryList<ElementRef>;
9
+ constructor(storeServiceService) {
10
+ this.storeServiceService = storeServiceService;
11
+ this.facetsTemplateDataDesktop = null;
12
+ this.facetsTemplateDataMobile = null;
13
+ this.context = this;
14
+ this.selectedFacetsCheckboxes = [];
15
+ this.selectedFacetsRange = [];
16
+ this.rand = Math.random();
17
+ }
18
+ ngOnInit() {
19
+ if (this.storeServiceService.searchstax) {
20
+ this.attachObservables();
21
+ setTimeout(() => {
22
+ this.addWidget();
23
+ }, 0);
24
+ }
25
+ else {
26
+ throw Error("Searchstax instance needs to be passed via props");
27
+ }
28
+ }
29
+ addWidget() {
30
+ this.storeServiceService.searchstax.addFacetsWidget('searchstax-facets-container' + this.rand, {
31
+ facetingType: this.facetingType,
32
+ specificFacets: this.specificFacets,
33
+ itemsPerPageDesktop: this.itemsPerPageDesktop,
34
+ itemsPerPageMobile: this.itemsPerPageMobile
35
+ });
36
+ }
37
+ attachObservables() {
38
+ this.storeServiceService.searchstax.dataLayer.$facetsTemplateData.subscribe((data) => {
39
+ if (data?.isMobile) {
40
+ this.facetsTemplateDataMobile = data;
41
+ }
42
+ else {
43
+ this.facetsTemplateDataDesktop = data;
44
+ }
45
+ });
46
+ this.storeServiceService.searchstax.dataLayer.$selectedFacetsTemplateData.subscribe((data) => {
47
+ const da = data ?? [];
48
+ this.selectedFacetsCheckboxes = da.filter((d) => d.type === 'checkbox');
49
+ });
50
+ }
51
+ unselectFacet(facet, context) {
52
+ context.storeServiceService.searchstax.searchFacetsWidget?.unselectFacet(facet);
53
+ }
54
+ unselectAll(context) {
55
+ context.storeServiceService.searchstax.searchFacetsWidget?.removeSelectedFacets();
56
+ }
57
+ isNotDeactivated(name, context) {
58
+ return !context.storeServiceService.searchstax.searchFacetsWidget?.deactivatedFacets[name];
59
+ }
60
+ toggleFacetGroup(name, context) {
61
+ if (context.storeServiceService.searchstax.searchFacetsWidget)
62
+ if (context.isNotDeactivated(name, context)) {
63
+ context.storeServiceService.searchstax.searchFacetsWidget.deactivatedFacets[name] = true;
64
+ }
65
+ else {
66
+ context.storeServiceService.searchstax.searchFacetsWidget.deactivatedFacets[name] = false;
67
+ }
68
+ }
69
+ isChecked(facetValue, context) {
70
+ return context.storeServiceService.searchstax.searchFacetsWidget?.isChecked(facetValue);
71
+ }
72
+ selectFacet(el, event, data, isInput, context) {
73
+ const wrapperDiv = document.createElement('div');
74
+ wrapperDiv.innerHTML = el.outerHTML;
75
+ context.storeServiceService.searchstax.searchFacetsWidget?.onFacetSelect(event, data, el, isInput);
76
+ }
77
+ showMoreLessDesktop(e, data, context) {
78
+ context.storeServiceService.searchstax.searchFacetsWidget?.onShowMoreLessClick(e, data, false);
79
+ }
80
+ showMoreLessMobile(e, data, context) {
81
+ context.storeServiceService.searchstax.searchFacetsWidget?.onShowMoreLessClick(e, data, true);
82
+ }
83
+ openOverlay(context) {
84
+ context.storeServiceService.searchstax.searchFacetsWidget?.openOverlay();
85
+ }
86
+ closeOverlay(context) {
87
+ context.storeServiceService.searchstax.searchFacetsWidget?.closeOverlay();
88
+ }
89
+ facetValues(facet) {
90
+ return facet.values;
91
+ }
92
+ facetMobileData(facet) {
93
+ return facet;
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchFacetsWidget, deps: [{ token: i1.StoreServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchstaxSearchFacetsWidget, selector: "app-searchstax-search-facets", inputs: { templateOverrideMobile: "templateOverrideMobile", templateOverrideDesktop: "templateOverrideDesktop", facetingType: "facetingType", itemsPerPageDesktop: "itemsPerPageDesktop", itemsPerPageMobile: "itemsPerPageMobile", specificFacets: "specificFacets" }, ngImport: i0, template: "<div [id]=\"'searchstax-facets-container' + rand\">\n <ng-container\n *ngIf=\"\n facetsTemplateDataDesktop?.hasResultsOrExternalPromotions &&\n !templateOverrideDesktop\n \"\n >\n <app-facet-desktop-template #ref></app-facet-desktop-template>\n <ng-template\n *ngTemplateOutlet=\"ref.templateOverrideDesktop; context: context\"\n ></ng-template>\n </ng-container>\n\n <div\n *ngIf=\"\n facetsTemplateDataDesktop?.hasResultsOrExternalPromotions &&\n templateOverrideDesktop\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverrideDesktop; context: context\"\n ></ng-container>\n </div>\n\n <ng-container\n *ngIf=\"\n facetsTemplateDataMobile?.hasResultsOrExternalPromotions &&\n !templateOverrideMobile\n \"\n >\n <app-facet-mobile-template #ref></app-facet-mobile-template>\n <ng-template\n *ngTemplateOutlet=\"ref.templateOverrideMobile; context: context\"\n ></ng-template>\n </ng-container>\n\n <div\n *ngIf=\"\n facetsTemplateDataMobile?.hasResultsOrExternalPromotions &&\n templateOverrideMobile\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverrideMobile; context: context\"\n ></ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.FacetDesktopTemplateComponent, selector: "app-facet-desktop-template" }, { kind: "component", type: i4.FacetMobileTemplateComponent, selector: "app-facet-mobile-template" }] }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchstaxSearchFacetsWidget, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: "app-searchstax-search-facets", template: "<div [id]=\"'searchstax-facets-container' + rand\">\n <ng-container\n *ngIf=\"\n facetsTemplateDataDesktop?.hasResultsOrExternalPromotions &&\n !templateOverrideDesktop\n \"\n >\n <app-facet-desktop-template #ref></app-facet-desktop-template>\n <ng-template\n *ngTemplateOutlet=\"ref.templateOverrideDesktop; context: context\"\n ></ng-template>\n </ng-container>\n\n <div\n *ngIf=\"\n facetsTemplateDataDesktop?.hasResultsOrExternalPromotions &&\n templateOverrideDesktop\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverrideDesktop; context: context\"\n ></ng-container>\n </div>\n\n <ng-container\n *ngIf=\"\n facetsTemplateDataMobile?.hasResultsOrExternalPromotions &&\n !templateOverrideMobile\n \"\n >\n <app-facet-mobile-template #ref></app-facet-mobile-template>\n <ng-template\n *ngTemplateOutlet=\"ref.templateOverrideMobile; context: context\"\n ></ng-template>\n </ng-container>\n\n <div\n *ngIf=\"\n facetsTemplateDataMobile?.hasResultsOrExternalPromotions &&\n templateOverrideMobile\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templateOverrideMobile; context: context\"\n ></ng-container>\n </div>\n</div>\n" }]
101
+ }], ctorParameters: () => [{ type: i1.StoreServiceService }], propDecorators: { templateOverrideMobile: [{
102
+ type: Input
103
+ }], templateOverrideDesktop: [{
104
+ type: Input
105
+ }], facetingType: [{
106
+ type: Input
107
+ }], itemsPerPageDesktop: [{
108
+ type: Input
109
+ }], itemsPerPageMobile: [{
110
+ type: Input
111
+ }], specificFacets: [{
112
+ type: Input
113
+ }] } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXNlYXJjaC1mYWNldHMvc2VhcmNoc3RheC1zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlYXJjaHN0YXgtaW5jL3NlYXJjaHN0dWRpby11eC1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWFyY2hzdGF4LXNlYXJjaC1mYWNldHMvc2VhcmNoc3RheC1zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUEyRCxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBU3RILE1BQU0sT0FBTyw0QkFBNEI7SUFldkMsMkVBQTJFO0lBQzNFLFlBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBUjVELDhCQUF5QixHQUErQixJQUFJLENBQUM7UUFDN0QsNkJBQXdCLEdBQStCLElBQUksQ0FBQztRQUM1RCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsNkJBQXdCLEdBQWtCLEVBQUUsQ0FBQztRQUM3Qyx3QkFBbUIsR0FBdUIsRUFBRSxDQUFDO1FBQzdDLFNBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFHMEMsQ0FBQztJQUVoRSxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCxNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzdGLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM3QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQ3pFLENBQUMsSUFBZ0MsRUFBRSxFQUFFO1lBQ25DLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQzthQUV0QztpQkFBTTtnQkFDTCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQ2pGLENBQUMsSUFBK0MsRUFBRSxFQUFFO1lBQ2xELE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFrQixDQUFDO1FBQzNGLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUdELGFBQWEsQ0FBQyxLQUFrQixFQUFFLE9BQWE7UUFDN0MsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFhO1FBQ3ZCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQTtJQUNuRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLE9BQWE7UUFDMUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUYsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVksRUFBRSxPQUFhO1FBQzFDLElBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0I7WUFDNUQsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTthQUN6RjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTthQUMxRjtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsVUFBMkIsRUFBRSxPQUFhO1FBQ2xELE9BQU8sT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekYsQ0FBQztJQUVELFdBQVcsQ0FBQyxFQUFrQixFQUFFLEtBQVksRUFBRSxJQUFxQixFQUFFLE9BQWdCLEVBQUUsT0FBYTtRQUNsRyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUVwRyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBUSxFQUFFLElBQWdCLEVBQUUsT0FBYTtRQUMzRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDaEcsQ0FBQztJQUVELGtCQUFrQixDQUFDLENBQVEsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDMUQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBYTtRQUN2QixPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBYTtRQUN4QixPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBMkIsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWlDO1FBQy9DLE9BQU8sS0FBWSxDQUFBO0lBQ3JCLENBQUM7K0dBakhVLDRCQUE0QjttR0FBNUIsNEJBQTRCLDRVQ1R6QywrdUNBK0NBOzs0RkR0Q2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDhCQUE4Qjt3RkFLL0Isc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUZhY2V0RGF0YSwgSUZhY2V0VmFsdWUsIElGYWNldFZhbHVlRGF0YSwgSUZhY2V0VmFsdWVSYW5nZSwgSUZhY2V0c1RlbXBsYXRlRGF0YSwgSVBhZ2luYXRpb25EYXRhLCBJU2VhcmNoT2JqZWN0IH0gZnJvbSBcIkBzZWFyY2hzdGF4LWluYy9zZWFyY2hzdHVkaW8tdXgtanNcIjtcbmltcG9ydCB7IFN0b3JlU2VydmljZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmUtc2VydmljZS5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtc2VhcmNoc3RheC1zZWFyY2gtZmFjZXRzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VhcmNoc3RheC1zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaHN0YXhTZWFyY2hGYWNldHNXaWRnZXQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0ZW1wbGF0ZU92ZXJyaWRlTW9iaWxlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgdGVtcGxhdGVPdmVycmlkZURlc2t0b3A/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBmYWNldGluZ1R5cGUhOiBcImFuZFwiIHwgXCJvclwiIHwgXCJzaG93VW5hdmFpbGFibGVcIiB8IFwidGFic1wiO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VEZXNrdG9wITogbnVtYmVyO1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VNb2JpbGUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNwZWNpZmljRmFjZXRzITogc3RyaW5nW107XG5cbiAgZmFjZXRzVGVtcGxhdGVEYXRhRGVza3RvcDogbnVsbCB8IElGYWNldHNUZW1wbGF0ZURhdGEgPSBudWxsO1xuICBmYWNldHNUZW1wbGF0ZURhdGFNb2JpbGU6IG51bGwgfCBJRmFjZXRzVGVtcGxhdGVEYXRhID0gbnVsbDtcbiAgY29udGV4dCA9IHRoaXM7XG4gIHNlbGVjdGVkRmFjZXRzQ2hlY2tib3hlczogSUZhY2V0VmFsdWVbXSA9IFtdO1xuICBzZWxlY3RlZEZhY2V0c1JhbmdlOiBJRmFjZXRWYWx1ZVJhbmdlW10gPSBbXTtcbiAgcmFuZCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgLy8gQFZpZXdDaGlsZHJlbihcImZhY2V0Q29udGFpbmVyc1wiKSBmYWNldENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZVNlcnZpY2VTZXJ2aWNlOiBTdG9yZVNlcnZpY2VTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheCkge1xuICAgICAgdGhpcy5hdHRhY2hPYnNlcnZhYmxlcygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkV2lkZ2V0KCk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXCJTZWFyY2hzdGF4IGluc3RhbmNlIG5lZWRzIHRvIGJlIHBhc3NlZCB2aWEgcHJvcHNcIik7XG4gICAgfVxuICB9XG5cbiAgYWRkV2lkZ2V0KCkge1xuICAgIHRoaXMuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LmFkZEZhY2V0c1dpZGdldCgnc2VhcmNoc3RheC1mYWNldHMtY29udGFpbmVyJyArIHRoaXMucmFuZCwge1xuICAgICAgZmFjZXRpbmdUeXBlOiB0aGlzLmZhY2V0aW5nVHlwZSxcbiAgICAgIHNwZWNpZmljRmFjZXRzOiB0aGlzLnNwZWNpZmljRmFjZXRzLFxuICAgICAgaXRlbXNQZXJQYWdlRGVza3RvcDogdGhpcy5pdGVtc1BlclBhZ2VEZXNrdG9wLFxuICAgICAgaXRlbXNQZXJQYWdlTW9iaWxlOiB0aGlzLml0ZW1zUGVyUGFnZU1vYmlsZVxuICAgIH0pXG4gIH1cblxuICBhdHRhY2hPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJGZhY2V0c1RlbXBsYXRlRGF0YS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogbnVsbCB8IElGYWNldHNUZW1wbGF0ZURhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGE/LmlzTW9iaWxlKSB7XG4gICAgICAgICAgdGhpcy5mYWNldHNUZW1wbGF0ZURhdGFNb2JpbGUgPSBkYXRhO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mYWNldHNUZW1wbGF0ZURhdGFEZXNrdG9wID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5kYXRhTGF5ZXIuJHNlbGVjdGVkRmFjZXRzVGVtcGxhdGVEYXRhLnN1YnNjcmliZShcbiAgICAgIChkYXRhOiBudWxsIHwgKElGYWNldFZhbHVlIHwgSUZhY2V0VmFsdWVSYW5nZSlbXSkgPT4ge1xuICAgICAgICBjb25zdCBkYSA9IGRhdGEgPz8gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGYWNldHNDaGVja2JveGVzID0gZGEuZmlsdGVyKChkKSA9PiBkLnR5cGUgPT09ICdjaGVja2JveCcpIGFzIElGYWNldFZhbHVlW107XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG5cbiAgdW5zZWxlY3RGYWNldChmYWNldDogSUZhY2V0VmFsdWUsIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBjb250ZXh0LnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5zZWFyY2hGYWNldHNXaWRnZXQ/LnVuc2VsZWN0RmFjZXQoZmFjZXQpXG4gIH1cblxuICB1bnNlbGVjdEFsbChjb250ZXh0OiB0aGlzKSB7XG4gICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0Py5yZW1vdmVTZWxlY3RlZEZhY2V0cygpXG4gIH1cblxuICBpc05vdERlYWN0aXZhdGVkKG5hbWU6IHN0cmluZywgY29udGV4dDogdGhpcykge1xuICAgIHJldHVybiAhY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0Py5kZWFjdGl2YXRlZEZhY2V0c1tuYW1lXVxuICB9XG5cbiAgdG9nZ2xlRmFjZXRHcm91cChuYW1lOiBzdHJpbmcsIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBpZihjb250ZXh0LnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5zZWFyY2hGYWNldHNXaWRnZXQpXG4gICAgaWYgKGNvbnRleHQuaXNOb3REZWFjdGl2YXRlZChuYW1lLCBjb250ZXh0KSkge1xuICAgICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0LmRlYWN0aXZhdGVkRmFjZXRzW25hbWVdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0b3JlU2VydmljZVNlcnZpY2Uuc2VhcmNoc3RheC5zZWFyY2hGYWNldHNXaWRnZXQuZGVhY3RpdmF0ZWRGYWNldHNbbmFtZV0gPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGlzQ2hlY2tlZChmYWNldFZhbHVlOiBJRmFjZXRWYWx1ZURhdGEsIGNvbnRleHQ6IHRoaXMpIHtcbiAgICByZXR1cm4gY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0Py5pc0NoZWNrZWQoZmFjZXRWYWx1ZSlcbiAgfVxuXG4gIHNlbGVjdEZhY2V0KGVsOiBIVE1MRGl2RWxlbWVudCwgZXZlbnQ6IEV2ZW50LCBkYXRhOiBJRmFjZXRWYWx1ZURhdGEsIGlzSW5wdXQ6IGJvb2xlYW4sIGNvbnRleHQ6IHRoaXMpIHtcbiAgICBjb25zdCB3cmFwcGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgd3JhcHBlckRpdi5pbm5lckhUTUwgPSBlbC5vdXRlckhUTUw7XG4gICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0Py5vbkZhY2V0U2VsZWN0KGV2ZW50LCBkYXRhLCBlbCwgaXNJbnB1dClcblxuICB9XG5cbiAgc2hvd01vcmVMZXNzRGVza3RvcChlOiBFdmVudCwgZGF0YTogSUZhY2V0RGF0YSwgY29udGV4dDogdGhpcykge1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LnNlYXJjaEZhY2V0c1dpZGdldD8ub25TaG93TW9yZUxlc3NDbGljayhlLCBkYXRhLCBmYWxzZSlcbiAgfVxuXG4gIHNob3dNb3JlTGVzc01vYmlsZShlOiBFdmVudCwgZGF0YTogSUZhY2V0RGF0YSwgY29udGV4dDogdGhpcykge1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LnNlYXJjaEZhY2V0c1dpZGdldD8ub25TaG93TW9yZUxlc3NDbGljayhlLCBkYXRhLCB0cnVlKVxuICB9XG5cbiAgb3Blbk92ZXJsYXkoY29udGV4dDogdGhpcykge1xuICAgIGNvbnRleHQuc3RvcmVTZXJ2aWNlU2VydmljZS5zZWFyY2hzdGF4LnNlYXJjaEZhY2V0c1dpZGdldD8ub3Blbk92ZXJsYXkoKTtcbiAgfVxuXG4gIGNsb3NlT3ZlcmxheShjb250ZXh0OiB0aGlzKSB7XG4gICAgY29udGV4dC5zdG9yZVNlcnZpY2VTZXJ2aWNlLnNlYXJjaHN0YXguc2VhcmNoRmFjZXRzV2lkZ2V0Py5jbG9zZU92ZXJsYXkoKTtcbiAgfVxuXG4gIGZhY2V0VmFsdWVzKGZhY2V0OiBJRmFjZXREYXRhKSA6IElGYWNldFZhbHVlRGF0YVtdIHtcbiAgICByZXR1cm4gZmFjZXQudmFsdWVzIGFzIElGYWNldFZhbHVlRGF0YVtdO1xuICB9XG5cbiAgZmFjZXRNb2JpbGVEYXRhKGZhY2V0OiBJRmFjZXRzVGVtcGxhdGVEYXRhIHwgbnVsbCkgOiBhbnkge1xuICAgIHJldHVybiBmYWNldCBhcyBhbnlcbiAgfVxufVxuIiwiPGRpdiBbaWRdPVwiJ3NlYXJjaHN0YXgtZmFjZXRzLWNvbnRhaW5lcicgKyByYW5kXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIlxuICAgICAgZmFjZXRzVGVtcGxhdGVEYXRhRGVza3RvcD8uaGFzUmVzdWx0c09yRXh0ZXJuYWxQcm9tb3Rpb25zICYmXG4gICAgICAhdGVtcGxhdGVPdmVycmlkZURlc2t0b3BcbiAgICBcIlxuICA+XG4gICAgPGFwcC1mYWNldC1kZXNrdG9wLXRlbXBsYXRlICNyZWY+PC9hcHAtZmFjZXQtZGVza3RvcC10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmLnRlbXBsYXRlT3ZlcnJpZGVEZXNrdG9wOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICBmYWNldHNUZW1wbGF0ZURhdGFEZXNrdG9wPy5oYXNSZXN1bHRzT3JFeHRlcm5hbFByb21vdGlvbnMgJiZcbiAgICAgIHRlbXBsYXRlT3ZlcnJpZGVEZXNrdG9wXG4gICAgXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVPdmVycmlkZURlc2t0b3A7IGNvbnRleHQ6IGNvbnRleHRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBmYWNldHNUZW1wbGF0ZURhdGFNb2JpbGU/Lmhhc1Jlc3VsdHNPckV4dGVybmFsUHJvbW90aW9ucyAmJlxuICAgICAgIXRlbXBsYXRlT3ZlcnJpZGVNb2JpbGVcbiAgICBcIlxuICA+XG4gICAgPGFwcC1mYWNldC1tb2JpbGUtdGVtcGxhdGUgI3JlZj48L2FwcC1mYWNldC1tb2JpbGUtdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInJlZi50ZW1wbGF0ZU92ZXJyaWRlTW9iaWxlOyBjb250ZXh0OiBjb250ZXh0XCJcbiAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICBmYWNldHNUZW1wbGF0ZURhdGFNb2JpbGU/Lmhhc1Jlc3VsdHNPckV4dGVybmFsUHJvbW90aW9ucyAmJlxuICAgICAgdGVtcGxhdGVPdmVycmlkZU1vYmlsZVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlT3ZlcnJpZGVNb2JpbGU7IGNvbnRleHQ6IGNvbnRleHRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==