@bridgeline-digital/hawksearch-handlebars-ui 6.2.3 → 6.2.4

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 (183) hide show
  1. package/changelog.md +11 -1
  2. package/dist/hawksearch-handlebars-ui.cjs +2 -2
  3. package/dist/hawksearch-handlebars-ui.js +66 -31
  4. package/dist/hawksearch-handlebars-ui.min.js +53 -53
  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 +25 -3
  10. package/docs/classes/Components.BaseComponent.html +24 -2
  11. package/docs/classes/Components.BaseContentComponent.html +24 -2
  12. package/docs/classes/Components.BaseFacetComponent.html +24 -2
  13. package/docs/classes/Components.CheckboxListFacetComponent.html +25 -3
  14. package/docs/classes/Components.ColorFacetComponent.html +25 -3
  15. package/docs/classes/Components.ConceptSearchFieldComponent.html +24 -2
  16. package/docs/classes/Components.ContentZoneComponent.html +25 -3
  17. package/docs/classes/Components.ConversationalSearchComponent.html +25 -3
  18. package/docs/classes/Components.CustomContentComponent.html +24 -2
  19. package/docs/classes/Components.DatePickerComponent.html +25 -3
  20. package/docs/classes/Components.DateRangeFacetComponent.html +25 -3
  21. package/docs/classes/Components.FacetWrapperComponent.html +25 -3
  22. package/docs/classes/Components.FacetsListComponent.html +25 -3
  23. package/docs/classes/Components.FeaturedItemsContentComponent.html +25 -3
  24. package/docs/classes/Components.FeaturedItemsContentItemComponent.html +25 -3
  25. package/docs/classes/Components.IconComponent.html +25 -3
  26. package/docs/classes/Components.ImageContentComponent.html +24 -2
  27. package/docs/classes/Components.ImageSearchFieldComponent.html +24 -2
  28. package/docs/classes/Components.LandingPageComponent.html +25 -3
  29. package/docs/classes/Components.LinkListFacetComponent.html +24 -2
  30. package/docs/classes/Components.ModifiedQueryComponent.html +25 -3
  31. package/docs/classes/Components.NumericRangeFacetComponent.html +24 -2
  32. package/docs/classes/Components.PageSizeComponent.html +24 -2
  33. package/docs/classes/Components.PaginationComponent.html +25 -3
  34. package/docs/classes/Components.PopularQueriesContentComponent.html +24 -2
  35. package/docs/classes/Components.QuerySuggestionsComponent.html +25 -3
  36. package/docs/classes/Components.RangeSliderComponent.html +25 -3
  37. package/docs/classes/Components.RangeSliderFacetComponent.html +25 -3
  38. package/docs/classes/Components.RatingComponent.html +25 -3
  39. package/docs/classes/Components.RecentSearchesFacetComponent.html +24 -2
  40. package/docs/classes/Components.RecommendationsComponent.html +25 -3
  41. package/docs/classes/Components.RecommendationsItemComponent.html +25 -3
  42. package/docs/classes/Components.RelatedSearchesFacetComponent.html +24 -2
  43. package/docs/classes/Components.SearchFieldComponent.html +25 -3
  44. package/docs/classes/Components.SearchResultsComponent.html +25 -3
  45. package/docs/classes/Components.SearchResultsItemComponent.html +25 -3
  46. package/docs/classes/Components.SearchResultsListComponent.html +25 -3
  47. package/docs/classes/Components.SearchWithinFacetComponent.html +24 -2
  48. package/docs/classes/Components.SelectedFacetsComponent.html +25 -3
  49. package/docs/classes/Components.SizeFacetComponent.html +25 -3
  50. package/docs/classes/Components.SmartResponseComponent.html +25 -3
  51. package/docs/classes/Components.SortingComponent.html +24 -2
  52. package/docs/classes/Components.TabsComponent.html +24 -2
  53. package/docs/classes/Components.TooltipComponent.html +25 -3
  54. package/docs/classes/Components.UnifiedSearchFieldComponent.html +361 -0
  55. package/docs/classes/Components.VariantSelectorComponent.html +25 -3
  56. package/docs/classes/Components.VisualSearchFieldComponent.html +25 -3
  57. package/docs/enums/Models.AutocompleteItemType.html +1 -0
  58. package/docs/enums/Models.EventType.html +1 -0
  59. package/docs/enums/Models.PageType.html +1 -0
  60. package/docs/enums/Models.SearchType.html +1 -0
  61. package/docs/index.html +15 -3
  62. package/docs/interfaces/Configuration.HawkSearchComponents.html +5 -0
  63. package/docs/interfaces/Configuration.HawkSearchConfig.html +1 -1
  64. package/docs/interfaces/Configuration.SmartSearchFieldComponentConfig.html +2 -2
  65. package/docs/interfaces/Models.AutocompleteCategories.html +1 -0
  66. package/docs/interfaces/Models.AutocompleteCategory.html +1 -0
  67. package/docs/interfaces/Models.AutocompleteComponentModel.html +1 -0
  68. package/docs/interfaces/Models.AutocompleteContent.html +1 -0
  69. package/docs/interfaces/Models.AutocompleteContentResult.html +1 -0
  70. package/docs/interfaces/Models.AutocompleteProductResult.html +1 -0
  71. package/docs/interfaces/Models.AutocompleteProducts.html +1 -0
  72. package/docs/interfaces/Models.AutocompleteQueries.html +1 -0
  73. package/docs/interfaces/Models.AutocompleteQuery.html +1 -0
  74. package/docs/interfaces/Models.AutocompleteRequest.html +1 -0
  75. package/docs/interfaces/Models.AutocompleteResponse.html +1 -0
  76. package/docs/interfaces/Models.BaseComponentModel.html +1 -0
  77. package/docs/interfaces/Models.CalendarDay.html +1 -0
  78. package/docs/interfaces/Models.CheckboxListFacetComponentModel.html +1 -0
  79. package/docs/interfaces/Models.CheckboxListFacetValue.html +1 -0
  80. package/docs/interfaces/Models.ColorFacetComponentModel.html +1 -0
  81. package/docs/interfaces/Models.ColorFacetValue.html +1 -0
  82. package/docs/interfaces/Models.ContentConfiguration.html +1 -0
  83. package/docs/interfaces/Models.ContentType.html +1 -0
  84. package/docs/interfaces/Models.ContentZone.html +1 -0
  85. package/docs/interfaces/Models.ContentZoneComponentModel.html +1 -0
  86. package/docs/interfaces/Models.ContentZoneItem.html +1 -0
  87. package/docs/interfaces/Models.ContentZones.html +1 -0
  88. package/docs/interfaces/Models.ConversationalSearchComponentModel.html +1 -0
  89. package/docs/interfaces/Models.CustomContent.html +1 -0
  90. package/docs/interfaces/Models.CustomContentComponentModel.html +1 -0
  91. package/docs/interfaces/Models.CustomWidgetContent.html +1 -0
  92. package/docs/interfaces/Models.DateFacetRange.html +1 -0
  93. package/docs/interfaces/Models.DatePickerComponentModel.html +1 -0
  94. package/docs/interfaces/Models.DateRangeFacetComponentModel.html +1 -0
  95. package/docs/interfaces/Models.Facet.html +1 -0
  96. package/docs/interfaces/Models.FacetScrolling.html +1 -0
  97. package/docs/interfaces/Models.FacetSearch.html +1 -0
  98. package/docs/interfaces/Models.FacetTruncation.html +1 -0
  99. package/docs/interfaces/Models.FacetValue.html +1 -0
  100. package/docs/interfaces/Models.FacetValueColor.html +1 -0
  101. package/docs/interfaces/Models.FacetWrapperComponentModel.html +1 -0
  102. package/docs/interfaces/Models.FacetsListComponentModel.html +1 -0
  103. package/docs/interfaces/Models.FeaturedItemsContent.html +1 -0
  104. package/docs/interfaces/Models.FeaturedItemsContentComponentModel.html +1 -0
  105. package/docs/interfaces/Models.FeaturedItemsContentItem.html +1 -0
  106. package/docs/interfaces/Models.FeaturedItemsContentItemComponentModel.html +1 -0
  107. package/docs/interfaces/Models.IconComponentModel.html +1 -0
  108. package/docs/interfaces/Models.ImageContent.html +1 -0
  109. package/docs/interfaces/Models.ImageContentComponentModel.html +1 -0
  110. package/docs/interfaces/Models.Item.html +1 -0
  111. package/docs/interfaces/Models.ItemVariant.html +1 -0
  112. package/docs/interfaces/Models.LandingPageComponentModel.html +1 -0
  113. package/docs/interfaces/Models.LinkListFacetComponentModel.html +1 -0
  114. package/docs/interfaces/Models.LinkListFacetValue.html +1 -0
  115. package/docs/interfaces/Models.MessageItem.html +1 -0
  116. package/docs/interfaces/Models.MessageItemList.html +2 -1
  117. package/docs/interfaces/Models.ModifiedQueryComponentModel.html +1 -0
  118. package/docs/interfaces/Models.ModifiedQueryData.html +1 -0
  119. package/docs/interfaces/Models.NumericFacetRange.html +1 -0
  120. package/docs/interfaces/Models.NumericRangeFacetComponentModel.html +1 -0
  121. package/docs/interfaces/Models.PageSizeComponentModel.html +1 -0
  122. package/docs/interfaces/Models.Pagination.html +1 -0
  123. package/docs/interfaces/Models.PaginationComponentModel.html +1 -0
  124. package/docs/interfaces/Models.PaginationOption.html +1 -0
  125. package/docs/interfaces/Models.PopularQueriesContent.html +1 -0
  126. package/docs/interfaces/Models.PopularQueriesContentComponentModel.html +1 -0
  127. package/docs/interfaces/Models.PopularQueriesContentItem.html +1 -0
  128. package/docs/interfaces/Models.QuerySuggestionsComponentModel.html +1 -0
  129. package/docs/interfaces/Models.QuerySuggestionsData.html +1 -0
  130. package/docs/interfaces/Models.RangeSliderComponentModel.html +1 -0
  131. package/docs/interfaces/Models.RangeSliderEventData.html +1 -0
  132. package/docs/interfaces/Models.RangeSliderFacetComponentModel.html +1 -0
  133. package/docs/interfaces/Models.RatingComponentModel.html +1 -0
  134. package/docs/interfaces/Models.RecentSearchesFacetComponentModel.html +1 -0
  135. package/docs/interfaces/Models.RecommendationsCarouselData.html +232 -0
  136. package/docs/interfaces/Models.RecommendationsComponentModel.html +7 -0
  137. package/docs/interfaces/Models.RecommendationsItem.html +1 -0
  138. package/docs/interfaces/Models.RecommendationsItemComponentModel.html +1 -0
  139. package/docs/interfaces/Models.RecommendationsRequest.html +1 -0
  140. package/docs/interfaces/Models.RecommendationsResponse.html +1 -0
  141. package/docs/interfaces/Models.RecommendationsWidget.html +6 -0
  142. package/docs/interfaces/Models.Redirect.html +1 -0
  143. package/docs/interfaces/Models.RelatedSearchesFacetComponentModel.html +1 -0
  144. package/docs/interfaces/Models.SearchFieldComponentModel.html +1 -0
  145. package/docs/interfaces/Models.SearchRequest.html +1 -0
  146. package/docs/interfaces/Models.SearchResponse.html +1 -0
  147. package/docs/interfaces/Models.SearchResultsComponentModel.html +1 -0
  148. package/docs/interfaces/Models.SearchResultsItem.html +1 -0
  149. package/docs/interfaces/Models.SearchResultsItemComponentModel.html +1 -0
  150. package/docs/interfaces/Models.SearchResultsItemVariant.html +1 -0
  151. package/docs/interfaces/Models.SearchResultsListComponentModel.html +1 -0
  152. package/docs/interfaces/Models.SearchWithinFacetComponentModel.html +1 -0
  153. package/docs/interfaces/Models.SelectedFacet.html +1 -0
  154. package/docs/interfaces/Models.SelectedFacetValue.html +1 -0
  155. package/docs/interfaces/Models.SelectedFacetsComponentModel.html +1 -0
  156. package/docs/interfaces/Models.SeoConfiguration.html +1 -0
  157. package/docs/interfaces/Models.SizeFacetComponentModel.html +1 -0
  158. package/docs/interfaces/Models.SizeFacetValue.html +1 -0
  159. package/docs/interfaces/Models.SmartResponseComponentModel.html +1 -0
  160. package/docs/interfaces/Models.SmartResponseRequest.html +1 -0
  161. package/docs/interfaces/Models.SmartResponseResponse.html +1 -0
  162. package/docs/interfaces/Models.SmartSearchFieldComponentModel.html +3 -2
  163. package/docs/interfaces/Models.Sorting.html +1 -0
  164. package/docs/interfaces/Models.SortingComponentModel.html +1 -0
  165. package/docs/interfaces/Models.SortingOption.html +1 -0
  166. package/docs/interfaces/Models.TabsComponentModel.html +1 -0
  167. package/docs/interfaces/Models.TooltipComponentModel.html +1 -0
  168. package/docs/interfaces/Models.VariantSelectorComponentModel.html +1 -0
  169. package/docs/interfaces/Models.Variants.html +1 -0
  170. package/docs/interfaces/Models.VisualSearchFieldComponentModel.html +1 -0
  171. package/docs/modules/Components.html +3 -1
  172. package/docs/modules/Models.html +3 -1
  173. package/docs/types/Models.FacetState.html +1 -0
  174. package/docs/types/Models.FacetType.html +1 -0
  175. package/docs/types/Models.FacetValueState.html +1 -0
  176. package/docs/types/Models.IconName.html +1 -0
  177. package/docs/types/Models.ItemType.html +1 -0
  178. package/docs/types/Models.MessageRole.html +1 -0
  179. package/docs/types/Models.RequestType.html +1 -0
  180. package/docs/types/Models.SearchResultsMode.html +1 -0
  181. package/docs/types/Models.SearchTypes.html +1 -0
  182. package/docs/types/Models.SelectedFacets.html +1 -0
  183. 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.4
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() {
@@ -7025,6 +7029,14 @@ class RecommendationsComponent extends BaseComponent {
7025
7029
  get carouselPosition() {
7026
7030
  return this.carousel ? `${-1 * this.selectedIndex * 100 / this.itemsToDisplay}%` : void 0;
7027
7031
  }
7032
+ get paginationEnabled() {
7033
+ var _a, _b, _c, _d;
7034
+ 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;
7035
+ }
7036
+ get buttonsEnabled() {
7037
+ var _a, _b, _c;
7038
+ 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;
7039
+ }
7028
7040
  get displayType() {
7029
7041
  var _a, _b;
7030
7042
  const width = window.innerWidth;
@@ -7102,23 +7114,23 @@ class RecommendationsComponent extends BaseComponent {
7102
7114
  return !!((_b = (_a = this.data) == null ? void 0 : _a.items) == null ? void 0 : _b.length);
7103
7115
  }
7104
7116
  getContentModel() {
7105
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
7117
+ var _a, _b, _c, _d, _e;
7106
7118
  this.previousDisplayType = this.displayType;
7107
7119
  return {
7108
7120
  ...this.data,
7109
- buttonsEnabled: ((_b = (_a = this.configuration) == null ? void 0 : _a.carousel) == null ? void 0 : _b.buttonsEnabled) ?? true,
7110
7121
  carousel: this.carousel,
7111
7122
  carouselPosition: this.carouselPosition,
7112
- headingEnabled: ((_c = this.configuration) == null ? void 0 : _c.headingEnabled) ?? true,
7123
+ headingEnabled: ((_a = this.configuration) == null ? void 0 : _a.headingEnabled) ?? true,
7113
7124
  itemWidth: this.itemWidth,
7114
- paginationEnabled: ((_e = (_d = this.configuration) == null ? void 0 : _d.carousel) == null ? void 0 : _e.paginationEnabled) ?? true,
7125
+ buttonsEnabled: this.buttonsEnabled,
7126
+ paginationEnabled: this.paginationEnabled,
7115
7127
  paginationItems: this.data.items.map((item, index) => ({
7116
7128
  selected: this.getSelected(index),
7117
7129
  title: item.title
7118
7130
  })),
7119
7131
  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"
7132
+ next: ((_c = (_b = this.configuration) == null ? void 0 : _b.strings) == null ? void 0 : _c.next) ?? "Next",
7133
+ previous: ((_e = (_d = this.configuration) == null ? void 0 : _d.strings) == null ? void 0 : _e.previous) ?? "Previous"
7122
7134
  }
7123
7135
  };
7124
7136
  }
@@ -9627,31 +9639,32 @@ class VisualSearchFieldComponent extends BaseComponent {
9627
9639
  var _a;
9628
9640
  const file = files[0];
9629
9641
  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
- });
9642
+ if (!this.isValidFile(file, extension))
9643
+ return;
9644
+ const reader = new FileReader();
9645
+ reader.onload = (e) => {
9646
+ var _a2;
9647
+ const img = new Image();
9648
+ img.src = reader.result;
9649
+ this.rootElement.querySelectorAll("[hawksearch-visualsearch-display]").forEach((e2) => {
9650
+ if (e2.lastChild) {
9651
+ e2.removeChild(e2.lastChild);
9649
9652
  }
9650
- };
9651
- reader.readAsDataURL(file);
9652
- } else {
9653
- console.warn("File type, size, or extension not supported:", file.type, file.size, extension);
9654
- }
9653
+ e2.appendChild(img);
9654
+ });
9655
+ const base64Data = (_a2 = e.target) == null ? void 0 : _a2.result;
9656
+ if (base64Data) {
9657
+ this.previousValue = base64Data;
9658
+ HawkSearch.services.search.query({
9659
+ queryString: base64Data,
9660
+ requestType: "ImageData"
9661
+ });
9662
+ }
9663
+ };
9664
+ reader.onerror = (error) => {
9665
+ this.triggerUploadFailed("file_read_unsuccessful", { error });
9666
+ };
9667
+ reader.readAsDataURL(file);
9655
9668
  }
9656
9669
  connectedCallback() {
9657
9670
  super.connectedCallback();
@@ -9715,6 +9728,27 @@ class VisualSearchFieldComponent extends BaseComponent {
9715
9728
  });
9716
9729
  });
9717
9730
  }
9731
+ isValidFile(file, extension) {
9732
+ if (!file.type.startsWith("image/")) {
9733
+ this.triggerUploadFailed("file_type_unsupported", { type: file.type });
9734
+ return false;
9735
+ }
9736
+ if (file.size > this.maxSize) {
9737
+ this.triggerUploadFailed("file_too_large", { size: `${Math.round(file.size / 1024 / 1024)}MB` });
9738
+ return false;
9739
+ }
9740
+ if (!this.allowedExtensions.includes(extension)) {
9741
+ this.triggerUploadFailed("file_extension_unsupported", { extension });
9742
+ return false;
9743
+ }
9744
+ return true;
9745
+ }
9746
+ triggerUploadFailed(reason, data) {
9747
+ this.triggerEvent("hawksearch:visualsearch-upload-failed", {
9748
+ reason,
9749
+ ...data
9750
+ });
9751
+ }
9718
9752
  }
9719
9753
  const defaultHtml = `{{#if (arrayHasObjectsWithValue items "color")}}
9720
9754
  <div class="variant-selector-list">
@@ -10351,6 +10385,7 @@ class RecommendationsService extends BaseService {
10351
10385
  requestId: rawRecommendationsResponse.requestId,
10352
10386
  title: w.widgetName,
10353
10387
  carousel: w.isCarousel,
10388
+ carouselData: w.carouselData,
10354
10389
  items: (_a2 = w.recommendationItems) == null ? void 0 : _a2.map((i) => getItem(i))
10355
10390
  };
10356
10391
  })