@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
@@ -0,0 +1,343 @@
1
+ // reusable-template.component.ts
2
+ import { Component, ViewChild } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class FacetMobileTemplateComponent {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FacetMobileTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FacetMobileTemplateComponent, selector: "app-facet-mobile-template", viewQueries: [{ propertyName: "templateOverrideMobile", first: true, predicate: ["templateOverrideMobile"], descendants: true }], ngImport: i0, template: `
8
+ <ng-template
9
+ #templateOverrideMobile
10
+ let-isNotDeactivated="isNotDeactivated"
11
+ let-context="context"
12
+ let-toggleFacetGroup="toggleFacetGroup"
13
+ let-facetValues="facetValues"
14
+ let-isChecked="isChecked"
15
+ let-selectFacet="selectFacet"
16
+ let-openOverlay="openOverlay"
17
+ let-selectedFacetsCheckboxes="selectedFacetsCheckboxes"
18
+ let-unselectFacet="unselectFacet"
19
+ let-unselectAll="unselectAll"
20
+ let-facetMobileData="facetMobileData"
21
+ let-facetsTemplateDataMobile="facetsTemplateDataMobile"
22
+ let-closeOverlay="closeOverlay"
23
+ let-showMoreLessDesktop="showMoreLessDesktop"
24
+ let-showMoreLessMobile="showMoreLessMobile"
25
+ >
26
+ <div class="searchstax-facets-container-mobile">
27
+ <div class="searchstax-facets-pills-container">
28
+ <div
29
+ class="searchstax-facets-pill searchstax-facets-pill-filter-by"
30
+ (click)="openOverlay(context)"
31
+ >
32
+ <div class="searchstax-facets-pill-label">Filter By</div>
33
+ </div>
34
+ <div class="searchstax-facets-pills-selected">
35
+ <div
36
+ class="searchstax-facets-pill searchstax-facets-pill-facets"
37
+ *ngFor="let facet of selectedFacetsCheckboxes"
38
+ (click)="unselectFacet(facet, context)"
39
+ >
40
+ <div class="searchstax-facets-pill-label">
41
+ {{ facet.value }} ({{ facet.count }})
42
+ </div>
43
+ <div class="searchstax-facets-pill-icon-close"></div>
44
+ </div>
45
+ </div>
46
+ <div
47
+ class="searchstax-facets-pill searchstax-clear-filters searchstax-facets-pill-clear-all"
48
+ *ngIf="selectedFacetsCheckboxes.length"
49
+ (click)="unselectAll(context)"
50
+ >
51
+ <div class="searchstax-facets-pill-label">Clear Filters</div>
52
+ </div>
53
+ </div>
54
+ <div
55
+ class="searchstax-facets-mobile-overlay"
56
+ [class]="{
57
+ 'searchstax-show': facetMobileData(facetsTemplateDataMobile)
58
+ ?.overlayOpened
59
+ }"
60
+ >
61
+ <div class="searchstax-facets-mobile-overlay-header">
62
+ <div class="searchstax-facets-mobile-overlay-header-title">
63
+ Filter By
64
+ </div>
65
+ <div
66
+ class="searchstax-search-close"
67
+ (click)="closeOverlay(context)"
68
+ ></div>
69
+ </div>
70
+ <div class="searchstax-facets-container-mobile">
71
+ <div
72
+ *ngFor="let facet of facetsTemplateDataMobile?.facets"
73
+ class="searchstax-facet-container"
74
+ [class]="{
75
+ active: isNotDeactivated(facet.name, context)
76
+ }"
77
+ >
78
+ <div>
79
+ <div
80
+ class="searchstax-facet-title-container"
81
+ (click)="toggleFacetGroup(facet.name, context)"
82
+ >
83
+ <div class="searchstax-facet-title">
84
+ {{ facet.label }}
85
+ </div>
86
+ <div class="searchstax-facet-title-arrow active"></div>
87
+ </div>
88
+ <div
89
+ class="searchstax-facet-values-container"
90
+ aria-live="polite"
91
+ >
92
+ <div
93
+ *ngFor="let facetValue of facetValues(facet); index as key"
94
+ class="searchstax-facet-value-container"
95
+ [class]="{
96
+ 'searchstax-facet-value-disabled': facetValue.disabled
97
+ }"
98
+ #ref
99
+ >
100
+ <div class="searchstax-facet-input">
101
+ <input
102
+ type="checkbox"
103
+ class="searchstax-facet-input-checkbox"
104
+ [checked]="isChecked(facetValue, context)"
105
+ [attr.aria-label]="
106
+ facetValue.value + ' ' + facetValue.count
107
+ "
108
+ [disabled]="facetValue.disabled"
109
+ (click)="
110
+ selectFacet(ref, $event, facetValue, true, context)
111
+ "
112
+ />
113
+ </div>
114
+ <div
115
+ class="searchstax-facet-value-label"
116
+ (click)="
117
+ selectFacet(ref, $event, facetValue, false, context)
118
+ "
119
+ >
120
+ {{ facetValue.value }}
121
+ </div>
122
+ <div
123
+ class="searchstax-facet-value-count"
124
+ (click)="
125
+ selectFacet(ref, $event, facetValue, false, context)
126
+ "
127
+ >
128
+ ({{ facetValue.count }})
129
+ </div>
130
+ </div>
131
+ <div
132
+ class="searchstax-facet-show-more-container"
133
+ *ngIf="facet.hasMoreFacets"
134
+ >
135
+ <div
136
+ class="searchstax-facet-show-more-container"
137
+ (click)="showMoreLessMobile($event, facet, context)"
138
+ (keyup.enter)="showMoreLessMobile($event, facet, context)"
139
+ (keyup.space)="showMoreLessMobile($event, facet, context)"
140
+ tabindex="0"
141
+ >
142
+ <div
143
+ *ngIf="facet.showingAllFacets"
144
+ class="searchstax-facet-show-less-button searchstax-facet-show-button"
145
+ >
146
+ less
147
+ </div>
148
+ <div
149
+ *ngIf="!facet.showingAllFacets"
150
+ class="searchstax-facet-show-more-button searchstax-facet-show-button"
151
+ >
152
+ more
153
+ </div>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ <button
161
+ class="searchstax-facets-mobile-overlay-done"
162
+ (click)="closeOverlay(context)"
163
+ >
164
+ Done
165
+ </button>
166
+ </div>
167
+ </div>
168
+ </ng-template>
169
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FacetMobileTemplateComponent, decorators: [{
172
+ type: Component,
173
+ args: [{
174
+ selector: "app-facet-mobile-template",
175
+ template: `
176
+ <ng-template
177
+ #templateOverrideMobile
178
+ let-isNotDeactivated="isNotDeactivated"
179
+ let-context="context"
180
+ let-toggleFacetGroup="toggleFacetGroup"
181
+ let-facetValues="facetValues"
182
+ let-isChecked="isChecked"
183
+ let-selectFacet="selectFacet"
184
+ let-openOverlay="openOverlay"
185
+ let-selectedFacetsCheckboxes="selectedFacetsCheckboxes"
186
+ let-unselectFacet="unselectFacet"
187
+ let-unselectAll="unselectAll"
188
+ let-facetMobileData="facetMobileData"
189
+ let-facetsTemplateDataMobile="facetsTemplateDataMobile"
190
+ let-closeOverlay="closeOverlay"
191
+ let-showMoreLessDesktop="showMoreLessDesktop"
192
+ let-showMoreLessMobile="showMoreLessMobile"
193
+ >
194
+ <div class="searchstax-facets-container-mobile">
195
+ <div class="searchstax-facets-pills-container">
196
+ <div
197
+ class="searchstax-facets-pill searchstax-facets-pill-filter-by"
198
+ (click)="openOverlay(context)"
199
+ >
200
+ <div class="searchstax-facets-pill-label">Filter By</div>
201
+ </div>
202
+ <div class="searchstax-facets-pills-selected">
203
+ <div
204
+ class="searchstax-facets-pill searchstax-facets-pill-facets"
205
+ *ngFor="let facet of selectedFacetsCheckboxes"
206
+ (click)="unselectFacet(facet, context)"
207
+ >
208
+ <div class="searchstax-facets-pill-label">
209
+ {{ facet.value }} ({{ facet.count }})
210
+ </div>
211
+ <div class="searchstax-facets-pill-icon-close"></div>
212
+ </div>
213
+ </div>
214
+ <div
215
+ class="searchstax-facets-pill searchstax-clear-filters searchstax-facets-pill-clear-all"
216
+ *ngIf="selectedFacetsCheckboxes.length"
217
+ (click)="unselectAll(context)"
218
+ >
219
+ <div class="searchstax-facets-pill-label">Clear Filters</div>
220
+ </div>
221
+ </div>
222
+ <div
223
+ class="searchstax-facets-mobile-overlay"
224
+ [class]="{
225
+ 'searchstax-show': facetMobileData(facetsTemplateDataMobile)
226
+ ?.overlayOpened
227
+ }"
228
+ >
229
+ <div class="searchstax-facets-mobile-overlay-header">
230
+ <div class="searchstax-facets-mobile-overlay-header-title">
231
+ Filter By
232
+ </div>
233
+ <div
234
+ class="searchstax-search-close"
235
+ (click)="closeOverlay(context)"
236
+ ></div>
237
+ </div>
238
+ <div class="searchstax-facets-container-mobile">
239
+ <div
240
+ *ngFor="let facet of facetsTemplateDataMobile?.facets"
241
+ class="searchstax-facet-container"
242
+ [class]="{
243
+ active: isNotDeactivated(facet.name, context)
244
+ }"
245
+ >
246
+ <div>
247
+ <div
248
+ class="searchstax-facet-title-container"
249
+ (click)="toggleFacetGroup(facet.name, context)"
250
+ >
251
+ <div class="searchstax-facet-title">
252
+ {{ facet.label }}
253
+ </div>
254
+ <div class="searchstax-facet-title-arrow active"></div>
255
+ </div>
256
+ <div
257
+ class="searchstax-facet-values-container"
258
+ aria-live="polite"
259
+ >
260
+ <div
261
+ *ngFor="let facetValue of facetValues(facet); index as key"
262
+ class="searchstax-facet-value-container"
263
+ [class]="{
264
+ 'searchstax-facet-value-disabled': facetValue.disabled
265
+ }"
266
+ #ref
267
+ >
268
+ <div class="searchstax-facet-input">
269
+ <input
270
+ type="checkbox"
271
+ class="searchstax-facet-input-checkbox"
272
+ [checked]="isChecked(facetValue, context)"
273
+ [attr.aria-label]="
274
+ facetValue.value + ' ' + facetValue.count
275
+ "
276
+ [disabled]="facetValue.disabled"
277
+ (click)="
278
+ selectFacet(ref, $event, facetValue, true, context)
279
+ "
280
+ />
281
+ </div>
282
+ <div
283
+ class="searchstax-facet-value-label"
284
+ (click)="
285
+ selectFacet(ref, $event, facetValue, false, context)
286
+ "
287
+ >
288
+ {{ facetValue.value }}
289
+ </div>
290
+ <div
291
+ class="searchstax-facet-value-count"
292
+ (click)="
293
+ selectFacet(ref, $event, facetValue, false, context)
294
+ "
295
+ >
296
+ ({{ facetValue.count }})
297
+ </div>
298
+ </div>
299
+ <div
300
+ class="searchstax-facet-show-more-container"
301
+ *ngIf="facet.hasMoreFacets"
302
+ >
303
+ <div
304
+ class="searchstax-facet-show-more-container"
305
+ (click)="showMoreLessMobile($event, facet, context)"
306
+ (keyup.enter)="showMoreLessMobile($event, facet, context)"
307
+ (keyup.space)="showMoreLessMobile($event, facet, context)"
308
+ tabindex="0"
309
+ >
310
+ <div
311
+ *ngIf="facet.showingAllFacets"
312
+ class="searchstax-facet-show-less-button searchstax-facet-show-button"
313
+ >
314
+ less
315
+ </div>
316
+ <div
317
+ *ngIf="!facet.showingAllFacets"
318
+ class="searchstax-facet-show-more-button searchstax-facet-show-button"
319
+ >
320
+ more
321
+ </div>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div>
326
+ </div>
327
+ </div>
328
+ <button
329
+ class="searchstax-facets-mobile-overlay-done"
330
+ (click)="closeOverlay(context)"
331
+ >
332
+ Done
333
+ </button>
334
+ </div>
335
+ </div>
336
+ </ng-template>
337
+ `,
338
+ }]
339
+ }], propDecorators: { templateOverrideMobile: [{
340
+ type: ViewChild,
341
+ args: ["templateOverrideMobile"]
342
+ }] } });
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtZmFjZXQtbW9iaWxlLXRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VhcmNoc3RheC1pbmMvc2VhcmNoc3R1ZGlvLXV4LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3RlbXBsYXRlcy9zZWFyY2hzdGF4LXNlYXJjaC1mYWNldC1tb2JpbGUtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOzs7QUF3S2xFLE1BQU0sT0FBTyw0QkFBNEI7K0dBQTVCLDRCQUE0QjttR0FBNUIsNEJBQTRCLG1NQXBLN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtLVDs7NEZBRVUsNEJBQTRCO2tCQXRLeEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtLVDtpQkFDRjs4QkFHQyxzQkFBc0I7c0JBRHJCLFNBQVM7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmV1c2FibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzXG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWZhY2V0LW1vYmlsZS10ZW1wbGF0ZVwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgI3RlbXBsYXRlT3ZlcnJpZGVNb2JpbGVcbiAgICAgIGxldC1pc05vdERlYWN0aXZhdGVkPVwiaXNOb3REZWFjdGl2YXRlZFwiXG4gICAgICBsZXQtY29udGV4dD1cImNvbnRleHRcIlxuICAgICAgbGV0LXRvZ2dsZUZhY2V0R3JvdXA9XCJ0b2dnbGVGYWNldEdyb3VwXCJcbiAgICAgIGxldC1mYWNldFZhbHVlcz1cImZhY2V0VmFsdWVzXCJcbiAgICAgIGxldC1pc0NoZWNrZWQ9XCJpc0NoZWNrZWRcIlxuICAgICAgbGV0LXNlbGVjdEZhY2V0PVwic2VsZWN0RmFjZXRcIlxuICAgICAgbGV0LW9wZW5PdmVybGF5PVwib3Blbk92ZXJsYXlcIlxuICAgICAgbGV0LXNlbGVjdGVkRmFjZXRzQ2hlY2tib3hlcz1cInNlbGVjdGVkRmFjZXRzQ2hlY2tib3hlc1wiXG4gICAgICBsZXQtdW5zZWxlY3RGYWNldD1cInVuc2VsZWN0RmFjZXRcIlxuICAgICAgbGV0LXVuc2VsZWN0QWxsPVwidW5zZWxlY3RBbGxcIlxuICAgICAgbGV0LWZhY2V0TW9iaWxlRGF0YT1cImZhY2V0TW9iaWxlRGF0YVwiXG4gICAgICBsZXQtZmFjZXRzVGVtcGxhdGVEYXRhTW9iaWxlPVwiZmFjZXRzVGVtcGxhdGVEYXRhTW9iaWxlXCJcbiAgICAgIGxldC1jbG9zZU92ZXJsYXk9XCJjbG9zZU92ZXJsYXlcIlxuICAgICAgbGV0LXNob3dNb3JlTGVzc0Rlc2t0b3A9XCJzaG93TW9yZUxlc3NEZXNrdG9wXCJcbiAgICAgIGxldC1zaG93TW9yZUxlc3NNb2JpbGU9XCJzaG93TW9yZUxlc3NNb2JpbGVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0cy1jb250YWluZXItbW9iaWxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0cy1waWxscy1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXRzLXBpbGwgc2VhcmNoc3RheC1mYWNldHMtcGlsbC1maWx0ZXItYnlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5PdmVybGF5KGNvbnRleHQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtcGlsbC1sYWJlbFwiPkZpbHRlciBCeTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0cy1waWxscy1zZWxlY3RlZFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXRzLXBpbGwgc2VhcmNoc3RheC1mYWNldHMtcGlsbC1mYWNldHNcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXQgb2Ygc2VsZWN0ZWRGYWNldHNDaGVja2JveGVzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVuc2VsZWN0RmFjZXQoZmFjZXQsIGNvbnRleHQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXRzLXBpbGwtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyBmYWNldC52YWx1ZSB9fSAoe3sgZmFjZXQuY291bnQgfX0pXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtcGlsbC1pY29uLWNsb3NlXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXRzLXBpbGwgc2VhcmNoc3RheC1jbGVhci1maWx0ZXJzIHNlYXJjaHN0YXgtZmFjZXRzLXBpbGwtY2xlYXItYWxsXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGYWNldHNDaGVja2JveGVzLmxlbmd0aFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidW5zZWxlY3RBbGwoY29udGV4dClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0cy1waWxsLWxhYmVsXCI+Q2xlYXIgRmlsdGVyczwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtbW9iaWxlLW92ZXJsYXlcIlxuICAgICAgICAgIFtjbGFzc109XCJ7XG4gICAgICAgICAgICAnc2VhcmNoc3RheC1zaG93JzogZmFjZXRNb2JpbGVEYXRhKGZhY2V0c1RlbXBsYXRlRGF0YU1vYmlsZSlcbiAgICAgICAgICAgICAgPy5vdmVybGF5T3BlbmVkXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtbW9iaWxlLW92ZXJsYXktaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtbW9iaWxlLW92ZXJsYXktaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgIEZpbHRlciBCeVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1zZWFyY2gtY2xvc2VcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VPdmVybGF5KGNvbnRleHQpXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoc3RheC1mYWNldHMtY29udGFpbmVyLW1vYmlsZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXQgb2YgZmFjZXRzVGVtcGxhdGVEYXRhTW9iaWxlPy5mYWNldHNcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXQtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBhY3RpdmU6IGlzTm90RGVhY3RpdmF0ZWQoZmFjZXQubmFtZSwgY29udGV4dClcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LXRpdGxlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmFjZXRHcm91cChmYWNldC5uYW1lLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXQtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZmFjZXQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXQtdGl0bGUtYXJyb3cgYWN0aXZlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LXZhbHVlcy1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYWNldFZhbHVlIG9mIGZhY2V0VmFsdWVzKGZhY2V0KTsgaW5kZXggYXMga2V5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LXZhbHVlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaHN0YXgtZmFjZXQtdmFsdWUtZGlzYWJsZWQnOiBmYWNldFZhbHVlLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAjcmVmXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LWlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZChmYWNldFZhbHVlLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldFZhbHVlLnZhbHVlICsgJyAnICsgZmFjZXRWYWx1ZS5jb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWNldFZhbHVlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RmFjZXQocmVmLCAkZXZlbnQsIGZhY2V0VmFsdWUsIHRydWUsIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWZhY2V0LXZhbHVlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RGYWNldChyZWYsICRldmVudCwgZmFjZXRWYWx1ZSwgZmFsc2UsIGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZhY2V0VmFsdWUudmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXQtdmFsdWUtY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEZhY2V0KHJlZiwgJGV2ZW50LCBmYWNldFZhbHVlLCBmYWxzZSwgY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgKHt7IGZhY2V0VmFsdWUuY291bnQgfX0pXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1mYWNldC1zaG93LW1vcmUtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmYWNldC5oYXNNb3JlRmFjZXRzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1mYWNldC1zaG93LW1vcmUtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd01vcmVMZXNzTW9iaWxlKCRldmVudCwgZmFjZXQsIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2hvd01vcmVMZXNzTW9iaWxlKCRldmVudCwgZmFjZXQsIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwic2hvd01vcmVMZXNzTW9iaWxlKCRldmVudCwgZmFjZXQsIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmYWNldC5zaG93aW5nQWxsRmFjZXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1mYWNldC1zaG93LWxlc3MtYnV0dG9uIHNlYXJjaHN0YXgtZmFjZXQtc2hvdy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxlc3NcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmYWNldC5zaG93aW5nQWxsRmFjZXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1mYWNldC1zaG93LW1vcmUtYnV0dG9uIHNlYXJjaHN0YXgtZmFjZXQtc2hvdy1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtZmFjZXRzLW1vYmlsZS1vdmVybGF5LWRvbmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlT3ZlcmxheShjb250ZXh0KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRG9uZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2V0TW9iaWxlVGVtcGxhdGVDb21wb25lbnQge1xuICBAVmlld0NoaWxkKFwidGVtcGxhdGVPdmVycmlkZU1vYmlsZVwiKVxuICB0ZW1wbGF0ZU92ZXJyaWRlTW9iaWxlITogVGVtcGxhdGVSZWY8YW55Pjtcbn1cbiJdfQ==
@@ -0,0 +1,126 @@
1
+ // reusable-template.component.ts
2
+ import { Component, ViewChild } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../searchstax-search-location/searchstax-search-location.component";
6
+ export class InputTemplateComponent {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: InputTemplateComponent, selector: "app-input-template", viewQueries: [{ propertyName: "inputTemplate", first: true, predicate: ["inputTemplate"], descendants: true }], ngImport: i0, template: `
9
+ <ng-template
10
+ #inputTemplate
11
+ let-suggestions="suggestions"
12
+ let-onMouseLeave="onMouseLeave"
13
+ let-onMouseOver="onMouseOver"
14
+ let-onMouseClick="onMouseClick"
15
+ let-context="context"
16
+ let-locationWidgetConfig="locationWidgetConfig"
17
+ >
18
+ <div class="searchstax-search-input-wrapper">
19
+ <input
20
+ type="text"
21
+ id="searchstax-search-input"
22
+ class="searchstax-search-input"
23
+ placeholder="SEARCH FOR..."
24
+ aria-label="search"
25
+ />
26
+ <div
27
+ class="searchstax-autosuggest-container"
28
+ [ngClass]="{ hidden: suggestions.length === 0 }"
29
+ (mouseleave)="onMouseLeave(context)"
30
+ >
31
+ <div
32
+ class="searchstax-autosuggest-item"
33
+ *ngFor="let suggestion of suggestions"
34
+ >
35
+ <div
36
+ class="searchstax-autosuggest-item-term-container"
37
+ [innerHtml]="suggestion.term"
38
+ (mouseover)="onMouseOver(suggestion, context)"
39
+ tabindex="0"
40
+ (click)="onMouseClick($event, context)"
41
+ ></div>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ <app-searchstax-search-location
46
+ [locationDecode]="locationWidgetConfig.locationDecode"
47
+ [locationDecodeCoordinatesToAddress]="
48
+ locationWidgetConfig.locationDecodeCoordinatesToAddress
49
+ "
50
+ [locationSearchEnabled]="locationWidgetConfig.locationSearchEnabled"
51
+ [locationValuesOverride]="locationWidgetConfig.locationValuesOverride"
52
+ >
53
+ </app-searchstax-search-location>
54
+ <button
55
+ class="searchstax-spinner-icon"
56
+ id="searchstax-search-input-action-button"
57
+ role="button"
58
+ aria-label="search"
59
+ ></button>
60
+ </ng-template>
61
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.SearchstaxSearchLocationWidget, selector: "app-searchstax-search-location", inputs: ["templateOverride", "locationSearchEnabled", "locationValuesOverride", "locationDecode", "locationDecodeCoordinatesToAddress"] }] }); }
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputTemplateComponent, decorators: [{
64
+ type: Component,
65
+ args: [{
66
+ selector: "app-input-template",
67
+ template: `
68
+ <ng-template
69
+ #inputTemplate
70
+ let-suggestions="suggestions"
71
+ let-onMouseLeave="onMouseLeave"
72
+ let-onMouseOver="onMouseOver"
73
+ let-onMouseClick="onMouseClick"
74
+ let-context="context"
75
+ let-locationWidgetConfig="locationWidgetConfig"
76
+ >
77
+ <div class="searchstax-search-input-wrapper">
78
+ <input
79
+ type="text"
80
+ id="searchstax-search-input"
81
+ class="searchstax-search-input"
82
+ placeholder="SEARCH FOR..."
83
+ aria-label="search"
84
+ />
85
+ <div
86
+ class="searchstax-autosuggest-container"
87
+ [ngClass]="{ hidden: suggestions.length === 0 }"
88
+ (mouseleave)="onMouseLeave(context)"
89
+ >
90
+ <div
91
+ class="searchstax-autosuggest-item"
92
+ *ngFor="let suggestion of suggestions"
93
+ >
94
+ <div
95
+ class="searchstax-autosuggest-item-term-container"
96
+ [innerHtml]="suggestion.term"
97
+ (mouseover)="onMouseOver(suggestion, context)"
98
+ tabindex="0"
99
+ (click)="onMouseClick($event, context)"
100
+ ></div>
101
+ </div>
102
+ </div>
103
+ </div>
104
+ <app-searchstax-search-location
105
+ [locationDecode]="locationWidgetConfig.locationDecode"
106
+ [locationDecodeCoordinatesToAddress]="
107
+ locationWidgetConfig.locationDecodeCoordinatesToAddress
108
+ "
109
+ [locationSearchEnabled]="locationWidgetConfig.locationSearchEnabled"
110
+ [locationValuesOverride]="locationWidgetConfig.locationValuesOverride"
111
+ >
112
+ </app-searchstax-search-location>
113
+ <button
114
+ class="searchstax-spinner-icon"
115
+ id="searchstax-search-input-action-button"
116
+ role="button"
117
+ aria-label="search"
118
+ ></button>
119
+ </ng-template>
120
+ `,
121
+ }]
122
+ }], propDecorators: { inputTemplate: [{
123
+ type: ViewChild,
124
+ args: ["inputTemplate"]
125
+ }] } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtaW5wdXQtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZWFyY2hzdGF4LWluYy9zZWFyY2hzdHVkaW8tdXgtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGVtcGxhdGVzL3NlYXJjaHN0YXgtc2VhcmNoLWlucHV0LXRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7OztBQTJEbEUsTUFBTSxPQUFPLHNCQUFzQjsrR0FBdEIsc0JBQXNCO21HQUF0QixzQkFBc0IsMEtBdkR2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRFQ7OzRGQUVVLHNCQUFzQjtrQkF6RGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFEVDtpQkFDRjs4QkFFNkIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmV1c2FibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzXG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWlucHV0LXRlbXBsYXRlXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjaW5wdXRUZW1wbGF0ZVxuICAgICAgbGV0LXN1Z2dlc3Rpb25zPVwic3VnZ2VzdGlvbnNcIlxuICAgICAgbGV0LW9uTW91c2VMZWF2ZT1cIm9uTW91c2VMZWF2ZVwiXG4gICAgICBsZXQtb25Nb3VzZU92ZXI9XCJvbk1vdXNlT3ZlclwiXG4gICAgICBsZXQtb25Nb3VzZUNsaWNrPVwib25Nb3VzZUNsaWNrXCJcbiAgICAgIGxldC1jb250ZXh0PVwiY29udGV4dFwiXG4gICAgICBsZXQtbG9jYXRpb25XaWRnZXRDb25maWc9XCJsb2NhdGlvbldpZGdldENvbmZpZ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaHN0YXgtc2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGlkPVwic2VhcmNoc3RheC1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU0VBUkNIIEZPUi4uLlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtYXV0b3N1Z2dlc3QtY29udGFpbmVyXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGhpZGRlbjogc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwIH1cIlxuICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZShjb250ZXh0KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtYXV0b3N1Z2dlc3QtaXRlbVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtYXV0b3N1Z2dlc3QtaXRlbS10ZXJtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwic3VnZ2VzdGlvbi50ZXJtXCJcbiAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJvbk1vdXNlT3ZlcihzdWdnZXN0aW9uLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbk1vdXNlQ2xpY2soJGV2ZW50LCBjb250ZXh0KVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YXBwLXNlYXJjaHN0YXgtc2VhcmNoLWxvY2F0aW9uXG4gICAgICAgIFtsb2NhdGlvbkRlY29kZV09XCJsb2NhdGlvbldpZGdldENvbmZpZy5sb2NhdGlvbkRlY29kZVwiXG4gICAgICAgIFtsb2NhdGlvbkRlY29kZUNvb3JkaW5hdGVzVG9BZGRyZXNzXT1cIlxuICAgICAgICAgIGxvY2F0aW9uV2lkZ2V0Q29uZmlnLmxvY2F0aW9uRGVjb2RlQ29vcmRpbmF0ZXNUb0FkZHJlc3NcbiAgICAgICAgXCJcbiAgICAgICAgW2xvY2F0aW9uU2VhcmNoRW5hYmxlZF09XCJsb2NhdGlvbldpZGdldENvbmZpZy5sb2NhdGlvblNlYXJjaEVuYWJsZWRcIlxuICAgICAgICBbbG9jYXRpb25WYWx1ZXNPdmVycmlkZV09XCJsb2NhdGlvbldpZGdldENvbmZpZy5sb2NhdGlvblZhbHVlc092ZXJyaWRlXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLXNlYXJjaHN0YXgtc2VhcmNoLWxvY2F0aW9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtc3Bpbm5lci1pY29uXCJcbiAgICAgICAgaWQ9XCJzZWFyY2hzdGF4LXNlYXJjaC1pbnB1dC1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0VGVtcGxhdGVDb21wb25lbnQge1xuICBAVmlld0NoaWxkKFwiaW5wdXRUZW1wbGF0ZVwiKSBpbnB1dFRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55Pjtcbn1cbiJdfQ==
@@ -0,0 +1,152 @@
1
+ // reusable-template.component.ts
2
+ import { Component, ViewChild } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ export class LocationTemplateComponent {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LocationTemplateComponent, selector: "app-location-template", viewQueries: [{ propertyName: "locationTemplate", first: true, predicate: ["locationTemplate"], descendants: true }], ngImport: i0, template: `
9
+ <ng-template
10
+ #locationTemplate
11
+ let-context="context"
12
+ let-locationData="locationData"
13
+ let-inputValue="inputValue"
14
+ let-selectValue="selectValue"
15
+ let-radiusChange="radiusChange"
16
+ let-inputChange="inputChange"
17
+ let-locationBlur="locationBlur"
18
+ let-locationError="locationError"
19
+ let-getCurrentLocation="getCurrentLocation"
20
+ >
21
+ <div
22
+ class="searchstax-location-input-container"
23
+ data-test-id="searchstax-location-input-container"
24
+ *ngIf="locationData"
25
+ >
26
+ <div class="searchstax-location-input-wrapper">
27
+ <span class="searchstax-location-input-label">NEAR</span>
28
+ <div class="searchstax-location-input-wrapper-inner">
29
+ <input
30
+ type="text"
31
+ id="searchstax-location-input"
32
+ class="searchstax-location-input"
33
+ [ngClass]="{
34
+ 'searchstax-input-location-error': locationError
35
+ }"
36
+ placeholder="Zip, Postal Code or City..."
37
+ aria-label="Search Location Input"
38
+ data-test-id="searchstax-location-input"
39
+ [value]="inputValue"
40
+ (change)="inputChange($event, context)"
41
+ (blur)="locationBlur(context)"
42
+ />
43
+ <button
44
+ (click)="getCurrentLocation(context)"
45
+ class="searchstax-get-current-location-button"
46
+ >
47
+ Use my current location
48
+ </button>
49
+ </div>
50
+ <span
51
+ *ngIf="locationData.shouldShowLocationDistanceDropdown"
52
+ class="searchstax-location-input-label"
53
+ >WITHIN</span
54
+ >
55
+ <select
56
+ *ngIf="locationData.shouldShowLocationDistanceDropdown"
57
+ id="searchstax-location-radius-select"
58
+ class="searchstax-location-radius-select"
59
+ aria-label="Search Location Radius Select"
60
+ data-test-id="searchstax-location-radius-select"
61
+ (change)="radiusChange($event, context)"
62
+ [(ngModel)]="context.selectValue"
63
+ >
64
+ <option
65
+ *ngFor="let value of locationData.locationSearchDistanceValues"
66
+ [value]="value.value"
67
+ >
68
+ {{ value.label }}
69
+ </option>
70
+ </select>
71
+ </div>
72
+ </div>
73
+ </ng-template>
74
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LocationTemplateComponent, decorators: [{
77
+ type: Component,
78
+ args: [{
79
+ selector: "app-location-template",
80
+ template: `
81
+ <ng-template
82
+ #locationTemplate
83
+ let-context="context"
84
+ let-locationData="locationData"
85
+ let-inputValue="inputValue"
86
+ let-selectValue="selectValue"
87
+ let-radiusChange="radiusChange"
88
+ let-inputChange="inputChange"
89
+ let-locationBlur="locationBlur"
90
+ let-locationError="locationError"
91
+ let-getCurrentLocation="getCurrentLocation"
92
+ >
93
+ <div
94
+ class="searchstax-location-input-container"
95
+ data-test-id="searchstax-location-input-container"
96
+ *ngIf="locationData"
97
+ >
98
+ <div class="searchstax-location-input-wrapper">
99
+ <span class="searchstax-location-input-label">NEAR</span>
100
+ <div class="searchstax-location-input-wrapper-inner">
101
+ <input
102
+ type="text"
103
+ id="searchstax-location-input"
104
+ class="searchstax-location-input"
105
+ [ngClass]="{
106
+ 'searchstax-input-location-error': locationError
107
+ }"
108
+ placeholder="Zip, Postal Code or City..."
109
+ aria-label="Search Location Input"
110
+ data-test-id="searchstax-location-input"
111
+ [value]="inputValue"
112
+ (change)="inputChange($event, context)"
113
+ (blur)="locationBlur(context)"
114
+ />
115
+ <button
116
+ (click)="getCurrentLocation(context)"
117
+ class="searchstax-get-current-location-button"
118
+ >
119
+ Use my current location
120
+ </button>
121
+ </div>
122
+ <span
123
+ *ngIf="locationData.shouldShowLocationDistanceDropdown"
124
+ class="searchstax-location-input-label"
125
+ >WITHIN</span
126
+ >
127
+ <select
128
+ *ngIf="locationData.shouldShowLocationDistanceDropdown"
129
+ id="searchstax-location-radius-select"
130
+ class="searchstax-location-radius-select"
131
+ aria-label="Search Location Radius Select"
132
+ data-test-id="searchstax-location-radius-select"
133
+ (change)="radiusChange($event, context)"
134
+ [(ngModel)]="context.selectValue"
135
+ >
136
+ <option
137
+ *ngFor="let value of locationData.locationSearchDistanceValues"
138
+ [value]="value.value"
139
+ >
140
+ {{ value.label }}
141
+ </option>
142
+ </select>
143
+ </div>
144
+ </div>
145
+ </ng-template>
146
+ `,
147
+ }]
148
+ }], propDecorators: { locationTemplate: [{
149
+ type: ViewChild,
150
+ args: ["locationTemplate"]
151
+ }] } });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoc3RheC1zZWFyY2gtbG9jYXRpb24tdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZWFyY2hzdGF4LWluYy9zZWFyY2hzdHVkaW8tdXgtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGVtcGxhdGVzL3NlYXJjaHN0YXgtc2VhcmNoLWxvY2F0aW9uLXRlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7OztBQXdFbEUsTUFBTSxPQUFPLHlCQUF5QjsrR0FBekIseUJBQXlCO21HQUF6Qix5QkFBeUIsbUxBcEUxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0VUOzs0RkFFVSx5QkFBeUI7a0JBdEVyQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0VUO2lCQUNGOzhCQUVnQyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcmV1c2FibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzXG5pbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWxvY2F0aW9uLXRlbXBsYXRlXCIsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjbG9jYXRpb25UZW1wbGF0ZVxuICAgICAgbGV0LWNvbnRleHQ9XCJjb250ZXh0XCJcbiAgICAgIGxldC1sb2NhdGlvbkRhdGE9XCJsb2NhdGlvbkRhdGFcIlxuICAgICAgbGV0LWlucHV0VmFsdWU9XCJpbnB1dFZhbHVlXCJcbiAgICAgIGxldC1zZWxlY3RWYWx1ZT1cInNlbGVjdFZhbHVlXCJcbiAgICAgIGxldC1yYWRpdXNDaGFuZ2U9XCJyYWRpdXNDaGFuZ2VcIlxuICAgICAgbGV0LWlucHV0Q2hhbmdlPVwiaW5wdXRDaGFuZ2VcIlxuICAgICAgbGV0LWxvY2F0aW9uQmx1cj1cImxvY2F0aW9uQmx1clwiXG4gICAgICBsZXQtbG9jYXRpb25FcnJvcj1cImxvY2F0aW9uRXJyb3JcIlxuICAgICAgbGV0LWdldEN1cnJlbnRMb2NhdGlvbj1cImdldEN1cnJlbnRMb2NhdGlvblwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtbG9jYXRpb24taW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgZGF0YS10ZXN0LWlkPVwic2VhcmNoc3RheC1sb2NhdGlvbi1pbnB1dC1jb250YWluZXJcIlxuICAgICAgICAqbmdJZj1cImxvY2F0aW9uRGF0YVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWxvY2F0aW9uLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaHN0YXgtbG9jYXRpb24taW5wdXQtbGFiZWxcIj5ORUFSPC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hzdGF4LWxvY2F0aW9uLWlucHV0LXdyYXBwZXItaW5uZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIGlkPVwic2VhcmNoc3RheC1sb2NhdGlvbi1pbnB1dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1sb2NhdGlvbi1pbnB1dFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnc2VhcmNoc3RheC1pbnB1dC1sb2NhdGlvbi1lcnJvcic6IGxvY2F0aW9uRXJyb3JcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiWmlwLCBQb3N0YWwgQ29kZSBvciBDaXR5Li4uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBMb2NhdGlvbiBJbnB1dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdC1pZD1cInNlYXJjaHN0YXgtbG9jYXRpb24taW5wdXRcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaW5wdXRDaGFuZ2UoJGV2ZW50LCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIChibHVyKT1cImxvY2F0aW9uQmx1cihjb250ZXh0KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Q3VycmVudExvY2F0aW9uKGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hzdGF4LWdldC1jdXJyZW50LWxvY2F0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVzZSBteSBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJsb2NhdGlvbkRhdGEuc2hvdWxkU2hvd0xvY2F0aW9uRGlzdGFuY2VEcm9wZG93blwiXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaHN0YXgtbG9jYXRpb24taW5wdXQtbGFiZWxcIlxuICAgICAgICAgICAgPldJVEhJTjwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAqbmdJZj1cImxvY2F0aW9uRGF0YS5zaG91bGRTaG93TG9jYXRpb25EaXN0YW5jZURyb3Bkb3duXCJcbiAgICAgICAgICAgIGlkPVwic2VhcmNoc3RheC1sb2NhdGlvbi1yYWRpdXMtc2VsZWN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoc3RheC1sb2NhdGlvbi1yYWRpdXMtc2VsZWN0XCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggTG9jYXRpb24gUmFkaXVzIFNlbGVjdFwiXG4gICAgICAgICAgICBkYXRhLXRlc3QtaWQ9XCJzZWFyY2hzdGF4LWxvY2F0aW9uLXJhZGl1cy1zZWxlY3RcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJyYWRpdXNDaGFuZ2UoJGV2ZW50LCBjb250ZXh0KVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRleHQuc2VsZWN0VmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGxvY2F0aW9uRGF0YS5sb2NhdGlvblNlYXJjaERpc3RhbmNlVmFsdWVzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgdmFsdWUubGFiZWwgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIExvY2F0aW9uVGVtcGxhdGVDb21wb25lbnQge1xuICBAVmlld0NoaWxkKFwibG9jYXRpb25UZW1wbGF0ZVwiKSBsb2NhdGlvblRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55Pjtcbn1cbiJdfQ==