@searchstax-inc/searchstudio-ux-angular 4.1.72 → 4.2.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 (64) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +323 -264
  3. package/fesm2022/searchstax-inc-searchstudio-ux-angular.mjs +994 -788
  4. package/fesm2022/searchstax-inc-searchstudio-ux-angular.mjs.map +1 -1
  5. package/package.json +6 -8
  6. package/types/searchstax-inc-searchstudio-ux-angular.d.ts +388 -0
  7. package/esm2022/lib/components/searchstax-input/searchstax-input.component.mjs +0 -81
  8. package/esm2022/lib/components/searchstax-results/searchstax-results.component.mjs +0 -88
  9. package/esm2022/lib/components/searchstax-search-answer/searchstax-search-answer.component.mjs +0 -49
  10. package/esm2022/lib/components/searchstax-search-external/searchstax-search-external.component.mjs +0 -41
  11. package/esm2022/lib/components/searchstax-search-facets/searchstax-search-facets.component.mjs +0 -119
  12. package/esm2022/lib/components/searchstax-search-location/searchstax-search-location.component.mjs +0 -92
  13. package/esm2022/lib/components/searchstax-search-overview/searchstax-search-overview.component.mjs +0 -42
  14. package/esm2022/lib/components/searchstax-search-pagination/searchstax-search-pagination.component.mjs +0 -64
  15. package/esm2022/lib/components/searchstax-search-related/searchstax-search-related.component.mjs +0 -45
  16. package/esm2022/lib/components/searchstax-search-sorting/searchstax-search-sorting.component.mjs +0 -46
  17. package/esm2022/lib/components/searchstax-wrapper.component.mjs +0 -93
  18. package/esm2022/lib/components/templates/SearchstaxLocationWidgetTemplateConfig.mjs +0 -91
  19. package/esm2022/lib/components/templates/searchstax-search-answer-template.mjs +0 -119
  20. package/esm2022/lib/components/templates/searchstax-search-external-template.mjs +0 -107
  21. package/esm2022/lib/components/templates/searchstax-search-facet-desktop-template.mjs +0 -209
  22. package/esm2022/lib/components/templates/searchstax-search-facet-mobile-template.mjs +0 -343
  23. package/esm2022/lib/components/templates/searchstax-search-input-template.mjs +0 -126
  24. package/esm2022/lib/components/templates/searchstax-search-location-template.mjs +0 -152
  25. package/esm2022/lib/components/templates/searchstax-search-no-results-template.mjs +0 -83
  26. package/esm2022/lib/components/templates/searchstax-search-overview-template.mjs +0 -87
  27. package/esm2022/lib/components/templates/searchstax-search-pagination-infinite-template.mjs +0 -60
  28. package/esm2022/lib/components/templates/searchstax-search-pagination-template.mjs +0 -96
  29. package/esm2022/lib/components/templates/searchstax-search-related-template.mjs +0 -81
  30. package/esm2022/lib/components/templates/searchstax-search-results-template.mjs +0 -181
  31. package/esm2022/lib/components/templates/searchstax-search-sorting-template.mjs +0 -76
  32. package/esm2022/lib/searchstudio-ux-angular.module.mjs +0 -138
  33. package/esm2022/lib/services/store-service.service.mjs +0 -17
  34. package/esm2022/public-api.mjs +0 -30
  35. package/esm2022/searchstax-inc-searchstudio-ux-angular.mjs +0 -5
  36. package/index.d.ts +0 -5
  37. package/lib/components/searchstax-input/searchstax-input.component.d.ts +0 -37
  38. package/lib/components/searchstax-results/searchstax-results.component.d.ts +0 -27
  39. package/lib/components/searchstax-search-answer/searchstax-search-answer.component.d.ts +0 -20
  40. package/lib/components/searchstax-search-external/searchstax-search-external.component.d.ts +0 -17
  41. package/lib/components/searchstax-search-facets/searchstax-search-facets.component.d.ts +0 -38
  42. package/lib/components/searchstax-search-location/searchstax-search-location.component.d.ts +0 -33
  43. package/lib/components/searchstax-search-overview/searchstax-search-overview.component.d.ts +0 -17
  44. package/lib/components/searchstax-search-pagination/searchstax-search-pagination.component.d.ts +0 -21
  45. package/lib/components/searchstax-search-related/searchstax-search-related.component.d.ts +0 -19
  46. package/lib/components/searchstax-search-sorting/searchstax-search-sorting.component.d.ts +0 -18
  47. package/lib/components/searchstax-wrapper.component.d.ts +0 -31
  48. package/lib/components/templates/SearchstaxLocationWidgetTemplateConfig.d.ts +0 -13
  49. package/lib/components/templates/searchstax-search-answer-template.d.ts +0 -7
  50. package/lib/components/templates/searchstax-search-external-template.d.ts +0 -7
  51. package/lib/components/templates/searchstax-search-facet-desktop-template.d.ts +0 -7
  52. package/lib/components/templates/searchstax-search-facet-mobile-template.d.ts +0 -7
  53. package/lib/components/templates/searchstax-search-input-template.d.ts +0 -7
  54. package/lib/components/templates/searchstax-search-location-template.d.ts +0 -7
  55. package/lib/components/templates/searchstax-search-no-results-template.d.ts +0 -7
  56. package/lib/components/templates/searchstax-search-overview-template.d.ts +0 -7
  57. package/lib/components/templates/searchstax-search-pagination-infinite-template.d.ts +0 -7
  58. package/lib/components/templates/searchstax-search-pagination-template.d.ts +0 -7
  59. package/lib/components/templates/searchstax-search-related-template.d.ts +0 -7
  60. package/lib/components/templates/searchstax-search-results-template.d.ts +0 -7
  61. package/lib/components/templates/searchstax-search-sorting-template.d.ts +0 -7
  62. package/lib/searchstudio-ux-angular.module.d.ts +0 -32
  63. package/lib/services/store-service.service.d.ts +0 -8
  64. package/public-api.d.ts +0 -26
package/package.json CHANGED
@@ -1,27 +1,25 @@
1
1
  {
2
2
  "name": "@searchstax-inc/searchstudio-ux-angular",
3
3
  "private": false,
4
- "version": "4.1.72",
4
+ "version": "4.2.0",
5
5
  "type": "module",
6
6
  "peerDependencies": {
7
- "@angular/common": "13 - 19",
8
- "@angular/core": "13 - 19",
7
+ "@angular/common": ">=17 <22",
8
+ "@angular/core": ">=17 <22",
9
9
  "patch-package": "^8.0.1"
10
10
  },
11
11
  "dependencies": {
12
- "@searchstax-inc/searchstudio-ux-js": "npm:@searchstax-inc/searchstudio-ux-js@^4.1.72",
12
+ "@searchstax-inc/searchstudio-ux-js": "npm:@searchstax-inc/searchstudio-ux-js@^4.2.0",
13
13
  "tslib": "^2.3.0"
14
14
  },
15
15
  "module": "fesm2022/searchstax-inc-searchstudio-ux-angular.mjs",
16
- "typings": "index.d.ts",
16
+ "typings": "types/searchstax-inc-searchstudio-ux-angular.d.ts",
17
17
  "exports": {
18
18
  "./package.json": {
19
19
  "default": "./package.json"
20
20
  },
21
21
  ".": {
22
- "types": "./index.d.ts",
23
- "esm2022": "./esm2022/searchstax-inc-searchstudio-ux-angular.mjs",
24
- "esm": "./esm2022/searchstax-inc-searchstudio-ux-angular.mjs",
22
+ "types": "./types/searchstax-inc-searchstudio-ux-angular.d.ts",
25
23
  "default": "./fesm2022/searchstax-inc-searchstudio-ux-angular.mjs"
26
24
  }
27
25
  },
@@ -0,0 +1,388 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnInit, EventEmitter, AfterViewInit, TemplateRef, NgZone, ChangeDetectorRef } from '@angular/core';
3
+ import { Searchstax, IRouterConfig, ISearchObject, ISearchstaxParsedResult, ISearchstaxSearchResponse, ISearchstaxSuggestResponse, ISearchstaxSuggestProps, ISearchstaxSuggestion, ISearchstaxSearchInputRenderData, ISearchstaxLocation, ISearchstaxSearchMetadata, ISearchstaxSearchFeedbackData, IPaginationData, IFacetData, IFacetsTemplateData, IFacetValue, IFacetValueRange, IFacetValueData, ISearchstaxSearchSortingData, IFeedbackWidgetProperties, ISearchstaxAnswerData, ISearchstaxLocationRenderData, ISearchstaxRelatedSearchesData, ISearchstaxRelatedSearchResult, ISearchstaxExternalPromotionsData, IExternalPromotion } from '@searchstax-inc/searchstudio-ux-js';
4
+ import * as i25 from '@angular/common';
5
+ import * as i26 from '@angular/forms';
6
+
7
+ /** Augments JS SDK types when runtime supports options not yet in published typings. */
8
+
9
+ declare module "@searchstax-inc/searchstudio-ux-js" {
10
+ interface ISearchstaxAnswerConfig {
11
+ testString?: string;
12
+ }
13
+ }
14
+
15
+ declare class StoreServiceService {
16
+ searchstax: Searchstax;
17
+ /**
18
+ * `Searchstax.initialize()` assigns a fresh `dataLayer`. Widgets must not
19
+ * subscribe before that runs, or they listen to stale observables and never
20
+ * see search results (projection order can run child `ngOnInit` first).
21
+ */
22
+ private readonly dataLayerReady$;
23
+ constructor();
24
+ /** Called from `SearchstaxWrapper` immediately after `initialize()`. */
25
+ notifyDataLayerReady(): void;
26
+ whenDataLayerReady(callback: () => void): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<StoreServiceService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<StoreServiceService>;
29
+ }
30
+
31
+ declare class SearchstaxWrapper implements OnInit {
32
+ private storeServiceService;
33
+ language: string;
34
+ model: string;
35
+ searchURL: string;
36
+ suggesterURL: string;
37
+ trackApiKey: string;
38
+ searchAuth: string;
39
+ sessionId?: string;
40
+ analyticsBaseUrl: string;
41
+ analyticsSrc: string;
42
+ questionURL: string;
43
+ authType: 'basic' | 'token';
44
+ autoCorrect: boolean;
45
+ router?: IRouterConfig;
46
+ beforeSearch?: (props: ISearchObject) => ISearchObject | null;
47
+ afterSearch?: (results: ISearchstaxParsedResult[], unparsedResponse?: ISearchstaxSearchResponse) => ISearchstaxParsedResult[];
48
+ initialized: EventEmitter<Searchstax>;
49
+ hooks: {
50
+ beforeSearch?: (props: ISearchObject) => ISearchObject | null;
51
+ afterSearch?: (results: ISearchstaxParsedResult[]) => ISearchstaxParsedResult[];
52
+ };
53
+ constructor(storeServiceService: StoreServiceService);
54
+ ngOnInit(): void;
55
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxWrapper, never>;
56
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxWrapper, "app-searchstax-wrapper", never, { "language": { "alias": "language"; "required": false; }; "model": { "alias": "model"; "required": false; }; "searchURL": { "alias": "searchURL"; "required": false; }; "suggesterURL": { "alias": "suggesterURL"; "required": false; }; "trackApiKey": { "alias": "trackApiKey"; "required": false; }; "searchAuth": { "alias": "searchAuth"; "required": false; }; "sessionId": { "alias": "sessionId"; "required": false; }; "analyticsBaseUrl": { "alias": "analyticsBaseUrl"; "required": false; }; "analyticsSrc": { "alias": "analyticsSrc"; "required": false; }; "questionURL": { "alias": "questionURL"; "required": false; }; "authType": { "alias": "authType"; "required": false; }; "autoCorrect": { "alias": "autoCorrect"; "required": false; }; "router": { "alias": "router"; "required": false; }; "beforeSearch": { "alias": "beforeSearch"; "required": false; }; "afterSearch": { "alias": "afterSearch"; "required": false; }; }, { "initialized": "initialized"; }, never, ["*"], false, never>;
57
+ }
58
+
59
+ declare class SearchstaxInputWidget implements OnInit, AfterViewInit {
60
+ private storeServiceService;
61
+ private ngZone;
62
+ private cdr;
63
+ afterAutosuggest?: (result: ISearchstaxSuggestResponse) => ISearchstaxSuggestResponse;
64
+ beforeAutosuggest?: (props: ISearchstaxSuggestProps) => ISearchstaxSuggestProps | null;
65
+ searchInputId: string;
66
+ suggestAfterMinChars?: number;
67
+ templateOverride?: TemplateRef<any>;
68
+ hooks: {
69
+ [key: string]: (prop: any) => any;
70
+ };
71
+ suggestions: ISearchstaxSuggestion[];
72
+ context: this;
73
+ templateData: null | ISearchstaxSearchInputRenderData;
74
+ locationWidgetConfig: {
75
+ locationDecode: (term: string) => Promise<ISearchstaxLocation>;
76
+ locationDecodeCoordinatesToAddress: (lat: string, lon: string) => Promise<ISearchstaxLocation>;
77
+ locationSearchEnabled: boolean;
78
+ locationValuesOverride: {
79
+ locationDistanceEnabled: boolean;
80
+ filterValues: string[];
81
+ filterUnit: string;
82
+ locationFilterDefaultValue: string;
83
+ };
84
+ };
85
+ private searchInputWidgetAttached;
86
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
87
+ ngOnInit(): void;
88
+ /**
89
+ * Studio JS looks up `#searchInputId` as soon as `addSearchInputWidget` runs.
90
+ * The real input is stamped by `ngTemplateOutlet` after child views exist, so
91
+ * `ngOnInit` + a fixed delay can run too early (especially with control flow).
92
+ */
93
+ ngAfterViewInit(): void;
94
+ private tryAttachSearchInputWidget;
95
+ onMouseLeave(context: this): void;
96
+ onMouseOver(suggestion: ISearchstaxSuggestion, context: this): void;
97
+ onMouseClick(e: Event, context: this): void;
98
+ attachObservables(): void;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxInputWidget, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxInputWidget, "app-searchstax-input", never, { "afterAutosuggest": { "alias": "afterAutosuggest"; "required": false; }; "beforeAutosuggest": { "alias": "beforeAutosuggest"; "required": false; }; "searchInputId": { "alias": "searchInputId"; "required": false; }; "suggestAfterMinChars": { "alias": "suggestAfterMinChars"; "required": false; }; "templateOverride": { "alias": "templateOverride"; "required": false; }; }, {}, never, never, false, never>;
101
+ }
102
+
103
+ declare class SearchstaxResultsWidget implements OnInit {
104
+ storeServiceService: StoreServiceService;
105
+ private ngZone;
106
+ private cdr;
107
+ afterLinkClick?: (results: ISearchstaxParsedResult) => ISearchstaxParsedResult;
108
+ noResultsTemplate?: TemplateRef<any>;
109
+ resultsTemplate?: TemplateRef<any>;
110
+ renderMethod?: "infiniteScroll" | "pagination";
111
+ resultsPerPage?: number;
112
+ searchResults: ISearchstaxParsedResult[] | null;
113
+ metadata: ISearchstaxSearchMetadata | null;
114
+ searchTerm: string;
115
+ context: this;
116
+ get hooks(): {
117
+ [key: string]: (prop: any) => any;
118
+ };
119
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
120
+ ngOnInit(): void;
121
+ executeSearch(term: string, event: Event, context: this): void;
122
+ attachObservables(): void;
123
+ resultClicked(result: ISearchstaxParsedResult, event: Event, context: this): void;
124
+ isImage(field: any): any;
125
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxResultsWidget, never>;
126
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxResultsWidget, "app-searchstax-results", never, { "afterLinkClick": { "alias": "afterLinkClick"; "required": false; }; "noResultsTemplate": { "alias": "noResultsTemplate"; "required": false; }; "resultsTemplate": { "alias": "resultsTemplate"; "required": false; }; "renderMethod": { "alias": "renderMethod"; "required": false; }; "resultsPerPage": { "alias": "resultsPerPage"; "required": false; }; }, {}, never, never, false, never>;
127
+ }
128
+
129
+ declare class SearchstaxSearchFeedbackWidget implements OnInit {
130
+ private storeServiceService;
131
+ private ngZone;
132
+ private cdr;
133
+ templateOverride?: TemplateRef<any>;
134
+ searchFeedbackData: null | ISearchstaxSearchFeedbackData;
135
+ rand: number;
136
+ context: this;
137
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
138
+ ngOnInit(): void;
139
+ onOriginalQueryClick(e: Event, context: this): void;
140
+ attachObservables(): void;
141
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchFeedbackWidget, never>;
142
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchFeedbackWidget, "app-searchstax-search-feedback", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; }, {}, never, never, false, never>;
143
+ }
144
+
145
+ declare class SearchstaxSearchPaginationWidget implements OnInit {
146
+ private storeServiceService;
147
+ private ngZone;
148
+ private cdr;
149
+ templateOverride?: TemplateRef<any>;
150
+ infiniteScrollTemplateOverride?: TemplateRef<any>;
151
+ paginationData: null | IPaginationData;
152
+ rand: number;
153
+ context: this;
154
+ paginationAdded: boolean;
155
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
156
+ ngOnInit(): void;
157
+ nextPage(event: Event, context: this): void;
158
+ previousPage(event: Event, context: this): void;
159
+ addWidget(): void;
160
+ attachObservables(): void;
161
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchPaginationWidget, never>;
162
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchPaginationWidget, "app-searchstax-search-pagination", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; "infiniteScrollTemplateOverride": { "alias": "infiniteScrollTemplateOverride"; "required": false; }; }, {}, never, never, false, never>;
163
+ }
164
+
165
+ declare class SearchstaxSearchFacetsWidget implements OnInit {
166
+ private storeServiceService;
167
+ private ngZone;
168
+ private cdr;
169
+ templateOverrideMobile?: TemplateRef<any>;
170
+ templateOverrideDesktop?: TemplateRef<any>;
171
+ facetingType: "and" | "or" | "showUnavailable" | "tabs";
172
+ itemsPerPageDesktop: number;
173
+ itemsPerPageMobile: number;
174
+ specificFacets: string[];
175
+ beforeFacetsRender?: (facetsTemplateDataDesktop: IFacetData[]) => IFacetData[];
176
+ facetsTemplateDataDesktop: null | IFacetsTemplateData;
177
+ facetsTemplateDataMobile: null | IFacetsTemplateData;
178
+ context: this;
179
+ selectedFacetsCheckboxes: IFacetValue[];
180
+ selectedFacetsRange: IFacetValueRange[];
181
+ rand: number;
182
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
183
+ ngOnInit(): void;
184
+ addWidget(): void;
185
+ attachObservables(): void;
186
+ unselectFacet(facet: IFacetValue, context: this): void;
187
+ unselectAll(context: this): void;
188
+ isNotDeactivated(name: string, context: this): boolean;
189
+ toggleFacetGroup(name: string, context: this): void;
190
+ isChecked(facetValue: IFacetValueData, context: this): boolean | undefined;
191
+ selectFacet(el: HTMLElement, event: Event, data: IFacetValueData, isInput: boolean, context: this): void;
192
+ showMoreLessDesktop(e: Event, data: IFacetData, context: this): void;
193
+ showMoreLessMobile(e: Event, data: IFacetData, context: this): void;
194
+ openOverlay(context: this): void;
195
+ closeOverlay(context: this): void;
196
+ facetValues(facet: IFacetData): IFacetValueData[];
197
+ facetMobileData(facet: IFacetsTemplateData | null): any;
198
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchFacetsWidget, never>;
199
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchFacetsWidget, "app-searchstax-search-facets", never, { "templateOverrideMobile": { "alias": "templateOverrideMobile"; "required": false; }; "templateOverrideDesktop": { "alias": "templateOverrideDesktop"; "required": false; }; "facetingType": { "alias": "facetingType"; "required": false; }; "itemsPerPageDesktop": { "alias": "itemsPerPageDesktop"; "required": false; }; "itemsPerPageMobile": { "alias": "itemsPerPageMobile"; "required": false; }; "specificFacets": { "alias": "specificFacets"; "required": false; }; "beforeFacetsRender": { "alias": "beforeFacetsRender"; "required": false; }; }, {}, never, never, false, never>;
200
+ }
201
+
202
+ declare class SearchstaxSearchSortingWidget implements OnInit {
203
+ private storeServiceService;
204
+ private ngZone;
205
+ private cdr;
206
+ templateOverride?: TemplateRef<any>;
207
+ sortingData: null | ISearchstaxSearchSortingData;
208
+ rand: number;
209
+ context: this;
210
+ selectedSorting: string;
211
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
212
+ ngOnInit(): void;
213
+ orderChange(e: Event, context: this): void;
214
+ attachObservables(): void;
215
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchSortingWidget, never>;
216
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchSortingWidget, "app-searchstax-search-sorting", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; }, {}, never, never, false, never>;
217
+ }
218
+
219
+ declare class SearchstaxSearchAnswerWidget implements OnInit {
220
+ private storeServiceService;
221
+ private ngZone;
222
+ private cdr;
223
+ templateOverride?: TemplateRef<any>;
224
+ feedbackwidget?: IFeedbackWidgetProperties;
225
+ showMoreAfterWordCount?: number;
226
+ testString?: string;
227
+ answerData: null | ISearchstaxAnswerData;
228
+ rand: number;
229
+ context: this;
230
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
231
+ ngOnInit(): void;
232
+ showMore(event: Event, context: this): void;
233
+ attachObservables(): void;
234
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchAnswerWidget, never>;
235
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchAnswerWidget, "app-searchstax-answer", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; "feedbackwidget": { "alias": "feedbackwidget"; "required": false; }; "showMoreAfterWordCount": { "alias": "showMoreAfterWordCount"; "required": false; }; "testString": { "alias": "testString"; "required": false; }; }, {}, never, never, false, never>;
236
+ }
237
+
238
+ declare class SearchstaxSearchLocationWidget implements OnInit {
239
+ private storeServiceService;
240
+ private ngZone;
241
+ private cdr;
242
+ templateOverride?: TemplateRef<any>;
243
+ locationSearchEnabled?: boolean;
244
+ locationValuesOverride?: {
245
+ locationDistanceEnabled: boolean;
246
+ filterValues: string[];
247
+ filterUnit: string;
248
+ };
249
+ locationDecode: (locationName: string) => Promise<ISearchstaxLocation>;
250
+ locationDecodeCoordinatesToAddress: (lat: string, lon: string) => Promise<ISearchstaxLocation>;
251
+ locationData: null | ISearchstaxLocationRenderData;
252
+ inputValue: string;
253
+ selectValue: string | number;
254
+ locationAdded: boolean;
255
+ locationError: boolean;
256
+ rand: number;
257
+ context: this;
258
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
259
+ ngOnInit(): void;
260
+ locationBlur(context: this): void;
261
+ radiusChange(e: Event, context: this): void;
262
+ inputChange(e: Event, context: this): void;
263
+ getCurrentLocation(context: this): void;
264
+ addWidget(): void;
265
+ attachObservables(): void;
266
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchLocationWidget, never>;
267
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchLocationWidget, "app-searchstax-search-location", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; "locationSearchEnabled": { "alias": "locationSearchEnabled"; "required": false; }; "locationValuesOverride": { "alias": "locationValuesOverride"; "required": false; }; "locationDecode": { "alias": "locationDecode"; "required": false; }; "locationDecodeCoordinatesToAddress": { "alias": "locationDecodeCoordinatesToAddress"; "required": false; }; }, {}, never, never, false, never>;
268
+ }
269
+
270
+ declare class SearchstaxSearchRelatedSearchesWidget implements OnInit {
271
+ private storeServiceService;
272
+ private ngZone;
273
+ private cdr;
274
+ relatedSearchesURL?: string;
275
+ relatedSearchesAPIKey?: string;
276
+ templateOverride?: TemplateRef<any>;
277
+ relatedData: null | ISearchstaxRelatedSearchesData;
278
+ rand: number;
279
+ context: this;
280
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
281
+ ngOnInit(): void;
282
+ executeSearch(result: ISearchstaxRelatedSearchResult, context: this): void;
283
+ attachObservables(): void;
284
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchRelatedSearchesWidget, never>;
285
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchRelatedSearchesWidget, "app-searchstax-related-searches", never, { "relatedSearchesURL": { "alias": "relatedSearchesURL"; "required": false; }; "relatedSearchesAPIKey": { "alias": "relatedSearchesAPIKey"; "required": false; }; "templateOverride": { "alias": "templateOverride"; "required": false; }; }, {}, never, never, false, never>;
286
+ }
287
+
288
+ declare class SearchstaxSearchExternalPromotionsWidget implements OnInit {
289
+ private storeServiceService;
290
+ private ngZone;
291
+ private cdr;
292
+ templateOverride?: TemplateRef<any>;
293
+ externalPromotionsData: null | ISearchstaxExternalPromotionsData;
294
+ rand: number;
295
+ context: this;
296
+ constructor(storeServiceService: StoreServiceService, ngZone: NgZone, cdr: ChangeDetectorRef);
297
+ ngOnInit(): void;
298
+ trackClick(externalPromotion: IExternalPromotion, event: Event, context: this): void;
299
+ attachObservables(): void;
300
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstaxSearchExternalPromotionsWidget, never>;
301
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchstaxSearchExternalPromotionsWidget, "app-searchstax-external-promotions", never, { "templateOverride": { "alias": "templateOverride"; "required": false; }; }, {}, never, never, false, never>;
302
+ }
303
+
304
+ declare class AnswerTemplateComponent {
305
+ answerTemplate: TemplateRef<any>;
306
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnswerTemplateComponent, never>;
307
+ static ɵcmp: i0.ɵɵComponentDeclaration<AnswerTemplateComponent, "app-answer-template", never, {}, {}, never, never, false, never>;
308
+ }
309
+
310
+ declare class OverviewTemplateComponent {
311
+ overviewTemplate: TemplateRef<any>;
312
+ static ɵfac: i0.ɵɵFactoryDeclaration<OverviewTemplateComponent, never>;
313
+ static ɵcmp: i0.ɵɵComponentDeclaration<OverviewTemplateComponent, "app-overview-template", never, {}, {}, never, never, false, never>;
314
+ }
315
+
316
+ declare class InputTemplateComponent {
317
+ inputTemplate: TemplateRef<any>;
318
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputTemplateComponent, never>;
319
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputTemplateComponent, "app-input-template", never, {}, {}, never, never, false, never>;
320
+ }
321
+
322
+ declare class LocationTemplateComponent {
323
+ locationTemplate: TemplateRef<any>;
324
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocationTemplateComponent, never>;
325
+ static ɵcmp: i0.ɵɵComponentDeclaration<LocationTemplateComponent, "app-location-template", never, {}, {}, never, never, false, never>;
326
+ }
327
+
328
+ declare class PaginationTemplateComponent {
329
+ paginationTemplate: TemplateRef<any>;
330
+ static ɵfac: i0.ɵɵFactoryDeclaration<PaginationTemplateComponent, never>;
331
+ static ɵcmp: i0.ɵɵComponentDeclaration<PaginationTemplateComponent, "app-pagination-template", never, {}, {}, never, never, false, never>;
332
+ }
333
+
334
+ declare class PaginationInfiniteTemplateComponent {
335
+ infiniteScrollTemplate: TemplateRef<any>;
336
+ static ɵfac: i0.ɵɵFactoryDeclaration<PaginationInfiniteTemplateComponent, never>;
337
+ static ɵcmp: i0.ɵɵComponentDeclaration<PaginationInfiniteTemplateComponent, "app-pagination-infinite-template", never, {}, {}, never, never, false, never>;
338
+ }
339
+
340
+ declare class ResultsTemplateComponent {
341
+ resultsTemplate: TemplateRef<any>;
342
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResultsTemplateComponent, never>;
343
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResultsTemplateComponent, "app-results-template", never, {}, {}, never, never, false, never>;
344
+ }
345
+
346
+ declare class NoResultsTemplateComponent {
347
+ noResultsTemplate: TemplateRef<any>;
348
+ static ɵfac: i0.ɵɵFactoryDeclaration<NoResultsTemplateComponent, never>;
349
+ static ɵcmp: i0.ɵɵComponentDeclaration<NoResultsTemplateComponent, "app-no-results-template", never, {}, {}, never, never, false, never>;
350
+ }
351
+
352
+ declare class ExternalPromotionsTemplateComponent {
353
+ externalPromotionsTemplate: TemplateRef<any>;
354
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExternalPromotionsTemplateComponent, never>;
355
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExternalPromotionsTemplateComponent, "app-external-template", never, {}, {}, never, never, false, never>;
356
+ }
357
+
358
+ declare class SortingTemplateComponent {
359
+ sortingTemplate: TemplateRef<any>;
360
+ static ɵfac: i0.ɵɵFactoryDeclaration<SortingTemplateComponent, never>;
361
+ static ɵcmp: i0.ɵɵComponentDeclaration<SortingTemplateComponent, "app-sorting-template", never, {}, {}, never, never, false, never>;
362
+ }
363
+
364
+ declare class RelatedTemplateComponent {
365
+ relatedTemplate: TemplateRef<any>;
366
+ static ɵfac: i0.ɵɵFactoryDeclaration<RelatedTemplateComponent, never>;
367
+ static ɵcmp: i0.ɵɵComponentDeclaration<RelatedTemplateComponent, "app-related-template", never, {}, {}, never, never, false, never>;
368
+ }
369
+
370
+ declare class FacetDesktopTemplateComponent {
371
+ templateOverrideDesktop: TemplateRef<any>;
372
+ static ɵfac: i0.ɵɵFactoryDeclaration<FacetDesktopTemplateComponent, never>;
373
+ static ɵcmp: i0.ɵɵComponentDeclaration<FacetDesktopTemplateComponent, "app-facet-desktop-template", never, {}, {}, never, never, false, never>;
374
+ }
375
+
376
+ declare class FacetMobileTemplateComponent {
377
+ templateOverrideMobile: TemplateRef<any>;
378
+ static ɵfac: i0.ɵɵFactoryDeclaration<FacetMobileTemplateComponent, never>;
379
+ static ɵcmp: i0.ɵɵComponentDeclaration<FacetMobileTemplateComponent, "app-facet-mobile-template", never, {}, {}, never, never, false, never>;
380
+ }
381
+
382
+ declare class SearchstudioUxAngularModule {
383
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchstudioUxAngularModule, never>;
384
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SearchstudioUxAngularModule, [typeof SearchstaxWrapper, typeof SearchstaxInputWidget, typeof SearchstaxResultsWidget, typeof SearchstaxSearchFeedbackWidget, typeof SearchstaxSearchPaginationWidget, typeof SearchstaxSearchFacetsWidget, typeof SearchstaxSearchSortingWidget, typeof SearchstaxSearchRelatedSearchesWidget, typeof SearchstaxSearchExternalPromotionsWidget, typeof SearchstaxSearchAnswerWidget, typeof SearchstaxSearchLocationWidget, typeof AnswerTemplateComponent, typeof OverviewTemplateComponent, typeof InputTemplateComponent, typeof LocationTemplateComponent, typeof PaginationTemplateComponent, typeof PaginationInfiniteTemplateComponent, typeof ResultsTemplateComponent, typeof NoResultsTemplateComponent, typeof ExternalPromotionsTemplateComponent, typeof SortingTemplateComponent, typeof RelatedTemplateComponent, typeof FacetDesktopTemplateComponent, typeof FacetMobileTemplateComponent], [typeof i25.CommonModule, typeof i26.FormsModule], [typeof SearchstaxWrapper, typeof SearchstaxInputWidget, typeof SearchstaxResultsWidget, typeof SearchstaxSearchFeedbackWidget, typeof SearchstaxSearchPaginationWidget, typeof SearchstaxSearchFacetsWidget, typeof SearchstaxSearchSortingWidget, typeof SearchstaxSearchRelatedSearchesWidget, typeof SearchstaxSearchExternalPromotionsWidget, typeof SearchstaxSearchAnswerWidget, typeof SearchstaxSearchLocationWidget, typeof AnswerTemplateComponent, typeof OverviewTemplateComponent, typeof InputTemplateComponent, typeof LocationTemplateComponent, typeof PaginationTemplateComponent, typeof PaginationInfiniteTemplateComponent, typeof ResultsTemplateComponent, typeof NoResultsTemplateComponent, typeof ExternalPromotionsTemplateComponent, typeof SortingTemplateComponent, typeof RelatedTemplateComponent, typeof FacetDesktopTemplateComponent, typeof FacetMobileTemplateComponent]>;
385
+ static ɵinj: i0.ɵɵInjectorDeclaration<SearchstudioUxAngularModule>;
386
+ }
387
+
388
+ export { AnswerTemplateComponent, ExternalPromotionsTemplateComponent, FacetDesktopTemplateComponent, FacetMobileTemplateComponent, InputTemplateComponent, LocationTemplateComponent, NoResultsTemplateComponent, OverviewTemplateComponent, PaginationInfiniteTemplateComponent, PaginationTemplateComponent, RelatedTemplateComponent, ResultsTemplateComponent, SearchstaxInputWidget, SearchstaxResultsWidget, SearchstaxSearchAnswerWidget, SearchstaxSearchExternalPromotionsWidget, SearchstaxSearchFacetsWidget, SearchstaxSearchFeedbackWidget, SearchstaxSearchLocationWidget, SearchstaxSearchPaginationWidget, SearchstaxSearchRelatedSearchesWidget, SearchstaxSearchSortingWidget, SearchstaxWrapper, SearchstudioUxAngularModule, SortingTemplateComponent, StoreServiceService };
@@ -1,81 +0,0 @@
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==