@bridgeline-digital/hawksearch-handlebars-ui 6.2.3 → 6.2.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 (180) hide show
  1. package/changelog.md +17 -1
  2. package/dist/hawksearch-handlebars-ui.cjs +2 -2
  3. package/dist/hawksearch-handlebars-ui.js +102 -73
  4. package/dist/hawksearch-handlebars-ui.min.js +59 -59
  5. package/dist/hawksearch-handlebars-ui.umd.cjs +2 -2
  6. package/dist/index.d.ts +17 -0
  7. package/docs/assets/highlight.css +15 -8
  8. package/docs/assets/search.js +1 -1
  9. package/docs/classes/Components.AutocompleteComponent.html +24 -3
  10. package/docs/classes/Components.BaseComponent.html +22 -2
  11. package/docs/classes/Components.BaseContentComponent.html +23 -2
  12. package/docs/classes/Components.BaseFacetComponent.html +23 -2
  13. package/docs/classes/Components.CheckboxListFacetComponent.html +24 -3
  14. package/docs/classes/Components.ColorFacetComponent.html +24 -3
  15. package/docs/classes/Components.ConceptSearchFieldComponent.html +23 -2
  16. package/docs/classes/Components.ContentZoneComponent.html +24 -3
  17. package/docs/classes/Components.ConversationalSearchComponent.html +24 -3
  18. package/docs/classes/Components.CustomContentComponent.html +23 -2
  19. package/docs/classes/Components.DatePickerComponent.html +24 -3
  20. package/docs/classes/Components.DateRangeFacetComponent.html +24 -3
  21. package/docs/classes/Components.FacetWrapperComponent.html +24 -3
  22. package/docs/classes/Components.FacetsListComponent.html +24 -3
  23. package/docs/classes/Components.FeaturedItemsContentComponent.html +24 -3
  24. package/docs/classes/Components.FeaturedItemsContentItemComponent.html +24 -3
  25. package/docs/classes/Components.IconComponent.html +24 -3
  26. package/docs/classes/Components.ImageContentComponent.html +23 -2
  27. package/docs/classes/Components.ImageSearchFieldComponent.html +23 -2
  28. package/docs/classes/Components.LandingPageComponent.html +24 -3
  29. package/docs/classes/Components.LinkListFacetComponent.html +23 -2
  30. package/docs/classes/Components.ModifiedQueryComponent.html +24 -3
  31. package/docs/classes/Components.NumericRangeFacetComponent.html +23 -2
  32. package/docs/classes/Components.PageSizeComponent.html +23 -2
  33. package/docs/classes/Components.PaginationComponent.html +24 -3
  34. package/docs/classes/Components.PopularQueriesContentComponent.html +23 -2
  35. package/docs/classes/Components.QuerySuggestionsComponent.html +24 -3
  36. package/docs/classes/Components.RangeSliderComponent.html +24 -3
  37. package/docs/classes/Components.RangeSliderFacetComponent.html +24 -3
  38. package/docs/classes/Components.RatingComponent.html +24 -3
  39. package/docs/classes/Components.RecentSearchesFacetComponent.html +23 -2
  40. package/docs/classes/Components.RecommendationsComponent.html +24 -3
  41. package/docs/classes/Components.RecommendationsItemComponent.html +24 -3
  42. package/docs/classes/Components.RelatedSearchesFacetComponent.html +23 -2
  43. package/docs/classes/Components.SearchFieldComponent.html +24 -3
  44. package/docs/classes/Components.SearchResultsComponent.html +24 -3
  45. package/docs/classes/Components.SearchResultsItemComponent.html +24 -3
  46. package/docs/classes/Components.SearchResultsListComponent.html +24 -3
  47. package/docs/classes/Components.SearchWithinFacetComponent.html +23 -2
  48. package/docs/classes/Components.SelectedFacetsComponent.html +24 -3
  49. package/docs/classes/Components.SizeFacetComponent.html +24 -3
  50. package/docs/classes/Components.SmartResponseComponent.html +24 -3
  51. package/docs/classes/Components.SortingComponent.html +23 -2
  52. package/docs/classes/Components.TabsComponent.html +23 -2
  53. package/docs/classes/Components.TooltipComponent.html +24 -3
  54. package/docs/classes/Components.VariantSelectorComponent.html +24 -3
  55. package/docs/classes/Components.VisualSearchFieldComponent.html +24 -3
  56. package/docs/enums/Models.AutocompleteItemType.html +1 -0
  57. package/docs/enums/Models.EventType.html +1 -0
  58. package/docs/enums/Models.PageType.html +1 -0
  59. package/docs/enums/Models.SearchType.html +1 -0
  60. package/docs/index.html +15 -3
  61. package/docs/interfaces/Configuration.HawkSearchConfig.html +1 -1
  62. package/docs/interfaces/Models.AutocompleteCategories.html +1 -0
  63. package/docs/interfaces/Models.AutocompleteCategory.html +1 -0
  64. package/docs/interfaces/Models.AutocompleteComponentModel.html +1 -0
  65. package/docs/interfaces/Models.AutocompleteContent.html +1 -0
  66. package/docs/interfaces/Models.AutocompleteContentResult.html +1 -0
  67. package/docs/interfaces/Models.AutocompleteProductResult.html +1 -0
  68. package/docs/interfaces/Models.AutocompleteProducts.html +1 -0
  69. package/docs/interfaces/Models.AutocompleteQueries.html +1 -0
  70. package/docs/interfaces/Models.AutocompleteQuery.html +1 -0
  71. package/docs/interfaces/Models.AutocompleteRequest.html +1 -0
  72. package/docs/interfaces/Models.AutocompleteResponse.html +1 -0
  73. package/docs/interfaces/Models.BaseComponentModel.html +1 -0
  74. package/docs/interfaces/Models.CalendarDay.html +1 -0
  75. package/docs/interfaces/Models.CheckboxListFacetComponentModel.html +1 -0
  76. package/docs/interfaces/Models.CheckboxListFacetValue.html +1 -0
  77. package/docs/interfaces/Models.ColorFacetComponentModel.html +1 -0
  78. package/docs/interfaces/Models.ColorFacetValue.html +1 -0
  79. package/docs/interfaces/Models.ContentConfiguration.html +1 -0
  80. package/docs/interfaces/Models.ContentType.html +1 -0
  81. package/docs/interfaces/Models.ContentZone.html +1 -0
  82. package/docs/interfaces/Models.ContentZoneComponentModel.html +1 -0
  83. package/docs/interfaces/Models.ContentZoneItem.html +1 -0
  84. package/docs/interfaces/Models.ContentZones.html +1 -0
  85. package/docs/interfaces/Models.ConversationalSearchComponentModel.html +1 -0
  86. package/docs/interfaces/Models.CustomContent.html +1 -0
  87. package/docs/interfaces/Models.CustomContentComponentModel.html +1 -0
  88. package/docs/interfaces/Models.CustomWidgetContent.html +1 -0
  89. package/docs/interfaces/Models.DateFacetRange.html +1 -0
  90. package/docs/interfaces/Models.DatePickerComponentModel.html +1 -0
  91. package/docs/interfaces/Models.DateRangeFacetComponentModel.html +1 -0
  92. package/docs/interfaces/Models.Facet.html +1 -0
  93. package/docs/interfaces/Models.FacetScrolling.html +1 -0
  94. package/docs/interfaces/Models.FacetSearch.html +1 -0
  95. package/docs/interfaces/Models.FacetTruncation.html +1 -0
  96. package/docs/interfaces/Models.FacetValue.html +1 -0
  97. package/docs/interfaces/Models.FacetValueColor.html +1 -0
  98. package/docs/interfaces/Models.FacetWrapperComponentModel.html +1 -0
  99. package/docs/interfaces/Models.FacetsListComponentModel.html +1 -0
  100. package/docs/interfaces/Models.FeaturedItemsContent.html +1 -0
  101. package/docs/interfaces/Models.FeaturedItemsContentComponentModel.html +1 -0
  102. package/docs/interfaces/Models.FeaturedItemsContentItem.html +1 -0
  103. package/docs/interfaces/Models.FeaturedItemsContentItemComponentModel.html +1 -0
  104. package/docs/interfaces/Models.IconComponentModel.html +1 -0
  105. package/docs/interfaces/Models.ImageContent.html +1 -0
  106. package/docs/interfaces/Models.ImageContentComponentModel.html +1 -0
  107. package/docs/interfaces/Models.Item.html +1 -0
  108. package/docs/interfaces/Models.ItemVariant.html +1 -0
  109. package/docs/interfaces/Models.LandingPageComponentModel.html +1 -0
  110. package/docs/interfaces/Models.LinkListFacetComponentModel.html +1 -0
  111. package/docs/interfaces/Models.LinkListFacetValue.html +1 -0
  112. package/docs/interfaces/Models.MessageItem.html +1 -0
  113. package/docs/interfaces/Models.MessageItemList.html +2 -1
  114. package/docs/interfaces/Models.ModifiedQueryComponentModel.html +1 -0
  115. package/docs/interfaces/Models.ModifiedQueryData.html +1 -0
  116. package/docs/interfaces/Models.NumericFacetRange.html +1 -0
  117. package/docs/interfaces/Models.NumericRangeFacetComponentModel.html +1 -0
  118. package/docs/interfaces/Models.PageSizeComponentModel.html +1 -0
  119. package/docs/interfaces/Models.Pagination.html +1 -0
  120. package/docs/interfaces/Models.PaginationComponentModel.html +1 -0
  121. package/docs/interfaces/Models.PaginationOption.html +1 -0
  122. package/docs/interfaces/Models.PopularQueriesContent.html +1 -0
  123. package/docs/interfaces/Models.PopularQueriesContentComponentModel.html +1 -0
  124. package/docs/interfaces/Models.PopularQueriesContentItem.html +1 -0
  125. package/docs/interfaces/Models.QuerySuggestionsComponentModel.html +1 -0
  126. package/docs/interfaces/Models.QuerySuggestionsData.html +1 -0
  127. package/docs/interfaces/Models.RangeSliderComponentModel.html +1 -0
  128. package/docs/interfaces/Models.RangeSliderEventData.html +1 -0
  129. package/docs/interfaces/Models.RangeSliderFacetComponentModel.html +1 -0
  130. package/docs/interfaces/Models.RatingComponentModel.html +1 -0
  131. package/docs/interfaces/Models.RecentSearchesFacetComponentModel.html +1 -0
  132. package/docs/interfaces/Models.RecommendationsCarouselData.html +232 -0
  133. package/docs/interfaces/Models.RecommendationsComponentModel.html +7 -0
  134. package/docs/interfaces/Models.RecommendationsItem.html +1 -0
  135. package/docs/interfaces/Models.RecommendationsItemComponentModel.html +1 -0
  136. package/docs/interfaces/Models.RecommendationsRequest.html +1 -0
  137. package/docs/interfaces/Models.RecommendationsResponse.html +1 -0
  138. package/docs/interfaces/Models.RecommendationsWidget.html +6 -0
  139. package/docs/interfaces/Models.Redirect.html +1 -0
  140. package/docs/interfaces/Models.RelatedSearchesFacetComponentModel.html +1 -0
  141. package/docs/interfaces/Models.SearchFieldComponentModel.html +1 -0
  142. package/docs/interfaces/Models.SearchRequest.html +1 -0
  143. package/docs/interfaces/Models.SearchResponse.html +1 -0
  144. package/docs/interfaces/Models.SearchResultsComponentModel.html +1 -0
  145. package/docs/interfaces/Models.SearchResultsItem.html +1 -0
  146. package/docs/interfaces/Models.SearchResultsItemComponentModel.html +1 -0
  147. package/docs/interfaces/Models.SearchResultsItemVariant.html +1 -0
  148. package/docs/interfaces/Models.SearchResultsListComponentModel.html +1 -0
  149. package/docs/interfaces/Models.SearchWithinFacetComponentModel.html +1 -0
  150. package/docs/interfaces/Models.SelectedFacet.html +1 -0
  151. package/docs/interfaces/Models.SelectedFacetValue.html +1 -0
  152. package/docs/interfaces/Models.SelectedFacetsComponentModel.html +1 -0
  153. package/docs/interfaces/Models.SeoConfiguration.html +1 -0
  154. package/docs/interfaces/Models.SizeFacetComponentModel.html +1 -0
  155. package/docs/interfaces/Models.SizeFacetValue.html +1 -0
  156. package/docs/interfaces/Models.SmartResponseComponentModel.html +1 -0
  157. package/docs/interfaces/Models.SmartResponseRequest.html +1 -0
  158. package/docs/interfaces/Models.SmartResponseResponse.html +1 -0
  159. package/docs/interfaces/Models.SmartSearchFieldComponentModel.html +1 -0
  160. package/docs/interfaces/Models.Sorting.html +1 -0
  161. package/docs/interfaces/Models.SortingComponentModel.html +1 -0
  162. package/docs/interfaces/Models.SortingOption.html +1 -0
  163. package/docs/interfaces/Models.TabsComponentModel.html +1 -0
  164. package/docs/interfaces/Models.TooltipComponentModel.html +1 -0
  165. package/docs/interfaces/Models.VariantSelectorComponentModel.html +1 -0
  166. package/docs/interfaces/Models.Variants.html +1 -0
  167. package/docs/interfaces/Models.VisualSearchFieldComponentModel.html +1 -0
  168. package/docs/modules/Components.html +1 -1
  169. package/docs/modules/Models.html +3 -1
  170. package/docs/types/Models.FacetState.html +1 -0
  171. package/docs/types/Models.FacetType.html +1 -0
  172. package/docs/types/Models.FacetValueState.html +1 -0
  173. package/docs/types/Models.IconName.html +1 -0
  174. package/docs/types/Models.ItemType.html +1 -0
  175. package/docs/types/Models.MessageRole.html +1 -0
  176. package/docs/types/Models.RequestType.html +1 -0
  177. package/docs/types/Models.SearchResultsMode.html +1 -0
  178. package/docs/types/Models.SearchTypes.html +1 -0
  179. package/docs/types/Models.SelectedFacets.html +1 -0
  180. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * name: @bridgeline-digital/hawksearch-handlebars-ui
3
3
  *
4
- * version: v6.2.3
4
+ * version: v6.2.5
5
5
  *
6
6
  * description: The HawkSearch Handlebars UI package allows you to add a highly-customizable search results page to your website powered by HawkSearch.
7
7
  *
@@ -6009,6 +6009,10 @@ class BaseComponent extends HTMLElement {
6009
6009
  });
6010
6010
  return output;
6011
6011
  }
6012
+ triggerEvent(name, data) {
6013
+ const event = new CustomEvent(name, { detail: data });
6014
+ window.dispatchEvent(event);
6015
+ }
6012
6016
  }
6013
6017
  class BaseContentComponent extends BaseComponent {
6014
6018
  constructor() {
@@ -6317,6 +6321,9 @@ function formatNumber(value, decimals = 2) {
6317
6321
  maximumFractionDigits: decimals
6318
6322
  });
6319
6323
  }
6324
+ function isQueryBase64Image(query) {
6325
+ return !!query && query.includes("data:image/");
6326
+ }
6320
6327
  const defaultHtml$B = `<div class="date-picker">
6321
6328
  <input type="text" value="{{value}}" hawksearch-input readonly class="date-picker__input" aria-label="{{strings.label}}" />
6322
6329
  {{#if modalVisible}}
@@ -7025,6 +7032,14 @@ class RecommendationsComponent extends BaseComponent {
7025
7032
  get carouselPosition() {
7026
7033
  return this.carousel ? `${-1 * this.selectedIndex * 100 / this.itemsToDisplay}%` : void 0;
7027
7034
  }
7035
+ get paginationEnabled() {
7036
+ var _a, _b, _c, _d;
7037
+ return ((_b = (_a = this.data) == null ? void 0 : _a.carouselData) == null ? void 0 : _b.showDots) ?? ((_d = (_c = this.configuration) == null ? void 0 : _c.carousel) == null ? void 0 : _d.paginationEnabled) ?? false;
7038
+ }
7039
+ get buttonsEnabled() {
7040
+ var _a, _b, _c;
7041
+ return ((_a = this.data) == null ? void 0 : _a.carouselData.showNextPrevButtons) ?? ((_c = (_b = this.configuration) == null ? void 0 : _b.carousel) == null ? void 0 : _c.buttonsEnabled) ?? true;
7042
+ }
7028
7043
  get displayType() {
7029
7044
  var _a, _b;
7030
7045
  const width = window.innerWidth;
@@ -7102,23 +7117,23 @@ class RecommendationsComponent extends BaseComponent {
7102
7117
  return !!((_b = (_a = this.data) == null ? void 0 : _a.items) == null ? void 0 : _b.length);
7103
7118
  }
7104
7119
  getContentModel() {
7105
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
7120
+ var _a, _b, _c, _d, _e;
7106
7121
  this.previousDisplayType = this.displayType;
7107
7122
  return {
7108
7123
  ...this.data,
7109
- buttonsEnabled: ((_b = (_a = this.configuration) == null ? void 0 : _a.carousel) == null ? void 0 : _b.buttonsEnabled) ?? true,
7110
7124
  carousel: this.carousel,
7111
7125
  carouselPosition: this.carouselPosition,
7112
- headingEnabled: ((_c = this.configuration) == null ? void 0 : _c.headingEnabled) ?? true,
7126
+ headingEnabled: ((_a = this.configuration) == null ? void 0 : _a.headingEnabled) ?? true,
7113
7127
  itemWidth: this.itemWidth,
7114
- paginationEnabled: ((_e = (_d = this.configuration) == null ? void 0 : _d.carousel) == null ? void 0 : _e.paginationEnabled) ?? true,
7128
+ buttonsEnabled: this.buttonsEnabled,
7129
+ paginationEnabled: this.paginationEnabled,
7115
7130
  paginationItems: this.data.items.map((item, index) => ({
7116
7131
  selected: this.getSelected(index),
7117
7132
  title: item.title
7118
7133
  })),
7119
7134
  strings: {
7120
- next: ((_g = (_f = this.configuration) == null ? void 0 : _f.strings) == null ? void 0 : _g.next) ?? "Next",
7121
- previous: ((_i = (_h = this.configuration) == null ? void 0 : _h.strings) == null ? void 0 : _i.previous) ?? "Previous"
7135
+ next: ((_c = (_b = this.configuration) == null ? void 0 : _b.strings) == null ? void 0 : _c.next) ?? "Next",
7136
+ previous: ((_e = (_d = this.configuration) == null ? void 0 : _d.strings) == null ? void 0 : _e.previous) ?? "Previous"
7122
7137
  }
7123
7138
  };
7124
7139
  }
@@ -9403,52 +9418,43 @@ class SmartResponseComponent extends BaseComponent {
9403
9418
  get schema() {
9404
9419
  var _a, _b;
9405
9420
  return ((_b = (_a = this.configuration) == null ? void 0 : _a.prompt) == null ? void 0 : _b.schema) || {
9406
- "name": "smartresponse_summary",
9407
- "description": "Recommedation message and product details which includes name, description, url, price and imageUrl",
9408
- "strict": true,
9409
- "schema": {
9410
- "type": "object",
9411
- "properties": {
9412
- "recommendation": {
9413
- "type": "string"
9421
+ name: "smartresponse_summary",
9422
+ description: "Recommedation message and product details which includes name, description, url, price and imageUrl",
9423
+ strict: true,
9424
+ schema: {
9425
+ type: "object",
9426
+ properties: {
9427
+ recommendation: {
9428
+ type: "string"
9414
9429
  },
9415
- "products": {
9416
- "type": "array",
9417
- "items": {
9418
- "type": "object",
9419
- "properties": {
9420
- "name": {
9421
- "type": "string"
9430
+ products: {
9431
+ type: "array",
9432
+ items: {
9433
+ type: "object",
9434
+ properties: {
9435
+ name: {
9436
+ type: "string"
9422
9437
  },
9423
- "url": {
9424
- "type": "string"
9438
+ url: {
9439
+ type: "string"
9425
9440
  },
9426
- "description": {
9427
- "type": "string"
9441
+ description: {
9442
+ type: "string"
9428
9443
  },
9429
- "price": {
9430
- "type": "number"
9444
+ price: {
9445
+ type: "number"
9431
9446
  },
9432
- "imageUrl": {
9433
- "type": "string"
9447
+ imageUrl: {
9448
+ type: "string"
9434
9449
  }
9435
9450
  },
9436
- "required": [
9437
- "name",
9438
- "url",
9439
- "description",
9440
- "price",
9441
- "imageUrl"
9442
- ],
9443
- "additionalProperties": false
9451
+ required: ["name", "url", "description", "price", "imageUrl"],
9452
+ additionalProperties: false
9444
9453
  }
9445
9454
  }
9446
9455
  },
9447
- "required": [
9448
- "recommendation",
9449
- "products"
9450
- ],
9451
- "additionalProperties": false
9456
+ required: ["recommendation", "products"],
9457
+ additionalProperties: false
9452
9458
  }
9453
9459
  };
9454
9460
  }
@@ -9506,9 +9512,9 @@ class SmartResponseComponent extends BaseComponent {
9506
9512
  { role: "user", content: `USER INPUT: "${this.currentQuery}", PRODUCTS:${JSON.stringify(this.currentResponse)}` }
9507
9513
  ],
9508
9514
  {
9509
- "response_format": {
9510
- "type": "json_schema",
9511
- "json_schema": this.schema
9515
+ response_format: {
9516
+ type: "json_schema",
9517
+ json_schema: this.schema
9512
9518
  }
9513
9519
  }
9514
9520
  ).then((result) => {
@@ -9627,31 +9633,32 @@ class VisualSearchFieldComponent extends BaseComponent {
9627
9633
  var _a;
9628
9634
  const file = files[0];
9629
9635
  const extension = (_a = file.name.split(".").pop()) == null ? void 0 : _a.toLowerCase();
9630
- if (file.type.startsWith("image/") && file.size <= this.maxSize && this.allowedExtensions.includes(extension)) {
9631
- const reader = new FileReader();
9632
- reader.onload = (e) => {
9633
- var _a2;
9634
- const img = new Image();
9635
- img.src = reader.result;
9636
- this.rootElement.querySelectorAll("[hawksearch-visualsearch-display]").forEach((e2) => {
9637
- if (e2.lastChild) {
9638
- e2.removeChild(e2.lastChild);
9639
- }
9640
- e2.appendChild(img);
9641
- });
9642
- const base64Data = (_a2 = e.target) == null ? void 0 : _a2.result;
9643
- if (base64Data) {
9644
- this.previousValue = base64Data;
9645
- HawkSearch.services.search.query({
9646
- queryString: base64Data,
9647
- requestType: "ImageData"
9648
- });
9636
+ if (!this.isValidFile(file, extension))
9637
+ return;
9638
+ const reader = new FileReader();
9639
+ reader.onload = (e) => {
9640
+ var _a2;
9641
+ const img = new Image();
9642
+ img.src = reader.result;
9643
+ this.rootElement.querySelectorAll("[hawksearch-visualsearch-display]").forEach((e2) => {
9644
+ if (e2.lastChild) {
9645
+ e2.removeChild(e2.lastChild);
9649
9646
  }
9650
- };
9651
- reader.readAsDataURL(file);
9652
- } else {
9653
- console.warn("File type, size, or extension not supported:", file.type, file.size, extension);
9654
- }
9647
+ e2.appendChild(img);
9648
+ });
9649
+ const base64Data = (_a2 = e.target) == null ? void 0 : _a2.result;
9650
+ if (base64Data) {
9651
+ this.previousValue = base64Data;
9652
+ HawkSearch.services.search.query({
9653
+ queryString: base64Data,
9654
+ requestType: "ImageData"
9655
+ });
9656
+ }
9657
+ };
9658
+ reader.onerror = (error) => {
9659
+ this.triggerUploadFailed("file_read_unsuccessful", { error });
9660
+ };
9661
+ reader.readAsDataURL(file);
9655
9662
  }
9656
9663
  connectedCallback() {
9657
9664
  super.connectedCallback();
@@ -9715,6 +9722,27 @@ class VisualSearchFieldComponent extends BaseComponent {
9715
9722
  });
9716
9723
  });
9717
9724
  }
9725
+ isValidFile(file, extension) {
9726
+ if (!file.type.startsWith("image/")) {
9727
+ this.triggerUploadFailed("file_type_unsupported", { type: file.type });
9728
+ return false;
9729
+ }
9730
+ if (file.size > this.maxSize) {
9731
+ this.triggerUploadFailed("file_too_large", { size: `${Math.round(file.size / 1024 / 1024)}MB` });
9732
+ return false;
9733
+ }
9734
+ if (!this.allowedExtensions.includes(extension)) {
9735
+ this.triggerUploadFailed("file_extension_unsupported", { extension });
9736
+ return false;
9737
+ }
9738
+ return true;
9739
+ }
9740
+ triggerUploadFailed(reason, data) {
9741
+ this.triggerEvent("hawksearch:visualsearch-upload-failed", {
9742
+ reason,
9743
+ ...data
9744
+ });
9745
+ }
9718
9746
  }
9719
9747
  const defaultHtml = `{{#if (arrayHasObjectsWithValue items "color")}}
9720
9748
  <div class="variant-selector-list">
@@ -10225,7 +10253,7 @@ class ConversationalService extends BaseService {
10225
10253
  async executeSearch(messages, options) {
10226
10254
  this.bindComponents(messages);
10227
10255
  const rawConversationalSearchRequest = {
10228
- "api_key": this.API_KEY,
10256
+ api_key: this.API_KEY,
10229
10257
  messages,
10230
10258
  ...options
10231
10259
  };
@@ -10351,6 +10379,7 @@ class RecommendationsService extends BaseService {
10351
10379
  requestId: rawRecommendationsResponse.requestId,
10352
10380
  title: w.widgetName,
10353
10381
  carousel: w.isCarousel,
10382
+ carouselData: w.carouselData,
10354
10383
  items: (_a2 = w.recommendationItems) == null ? void 0 : _a2.map((i) => getItem(i))
10355
10384
  };
10356
10385
  })
@@ -10402,7 +10431,7 @@ class SearchService extends BaseService {
10402
10431
  window.location.assign(url);
10403
10432
  return Promise.resolve();
10404
10433
  }
10405
- if (queryString && !queryString.includes("data:image/")) {
10434
+ if (queryString && !isQueryBase64Image(queryString)) {
10406
10435
  const recentQueries = this.getRecentQueries();
10407
10436
  const recentQueryLimit = 5;
10408
10437
  if (!recentQueries.includes(queryString)) {
@@ -11235,7 +11264,7 @@ class SearchService extends BaseService {
11235
11264
  const url = new URL(searchPage ? window.location.href : this.searchUrl, window.location.origin);
11236
11265
  const nonFacetParams = Object.keys(this.queryStringParams);
11237
11266
  url.searchParams.delete(this.queryStringParams.query);
11238
- if (searchRequest.query) {
11267
+ if (searchRequest.query && !isQueryBase64Image(searchRequest.query)) {
11239
11268
  url.searchParams.set(this.queryStringParams.query, searchRequest.query);
11240
11269
  }
11241
11270
  Array.from(url.searchParams.keys()).filter((p) => !nonFacetParams.includes(p)).forEach((p) => url.searchParams.delete(p));