@empathyco/x-components 6.0.0-alpha.5 → 6.0.0-alpha.51

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 (761) hide show
  1. package/CHANGELOG.md +448 -0
  2. package/core/index.js +8 -1
  3. package/core/index.js.map +1 -1
  4. package/design-system/deprecated-full-theme.css +596 -596
  5. package/docs/API-reference/api/x-adapter-platform.md +12 -0
  6. package/docs/API-reference/api/x-adapter-platform.nextqueriesrelatedpromptsschema.md +11 -0
  7. package/docs/API-reference/api/x-adapter-platform.platformadapter.relatedprompts.md +11 -0
  8. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompt.md +23 -0
  9. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompt.nextqueries.md +11 -0
  10. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompt.suggestiontext.md +11 -0
  11. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompt.tagging.md +11 -0
  12. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompt.type.md +11 -0
  13. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptnextqueriestagging.md +22 -0
  14. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptnextqueriestagging.toolingdisplay.md +11 -0
  15. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptnextqueriestagging.toolingdisplayadd2cart.md +11 -0
  16. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptnextqueriestagging.toolingdisplayclick.md +11 -0
  17. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptsrequest.md +15 -0
  18. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptsresponse.data.md +13 -0
  19. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptsresponse.md +21 -0
  20. package/docs/API-reference/api/x-adapter-platform.platformrelatedpromptsresponse.status.md +11 -0
  21. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompttagging.md +22 -0
  22. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompttagging.nextqueries.md +11 -0
  23. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompttagging.toolingdisplay.md +11 -0
  24. package/docs/API-reference/api/x-adapter-platform.platformrelatedprompttagging.toolingdisplayclick.md +11 -0
  25. package/docs/API-reference/api/x-adapter-platform.platformsearchresponse.catalog.md +6 -0
  26. package/docs/API-reference/api/x-adapter-platform.platformsearchresponse.md +1 -1
  27. package/docs/API-reference/api/x-adapter-platform.relatedpromptschema.md +13 -0
  28. package/docs/API-reference/api/x-adapter-platform.relatedpromptsendpointadapter.md +13 -0
  29. package/docs/API-reference/api/x-adapter-platform.relatedpromptsrequestmapper.md +13 -0
  30. package/docs/API-reference/api/x-adapter-platform.relatedpromptsrequestschema.md +13 -0
  31. package/docs/API-reference/api/x-adapter-platform.relatedpromptsresponsemapper.md +13 -0
  32. package/docs/API-reference/api/x-adapter-platform.relatedpromptsresponseschema.md +13 -0
  33. package/docs/API-reference/api/x-components.animationprop.md +6 -1
  34. package/docs/API-reference/api/x-components.bannerslist.md +3 -3
  35. package/docs/API-reference/api/x-components.baseaddtocart.md +1 -0
  36. package/docs/API-reference/api/x-components.basedropdown.md +5 -5
  37. package/docs/API-reference/api/x-components.baseeventsmodal.md +2 -2
  38. package/docs/API-reference/api/x-components.basegrid.md +3 -3
  39. package/docs/API-reference/api/x-components.baseheadertogglepanel.md +5 -5
  40. package/docs/API-reference/api/x-components.baseidmodal.md +2 -2
  41. package/docs/API-reference/api/x-components.baseidtogglepanel.md +5 -5
  42. package/docs/API-reference/api/x-components.basemodal.md +10 -10
  43. package/docs/API-reference/api/x-components.baseresultimage.md +9 -9
  44. package/docs/API-reference/api/x-components.baseslider.md +70 -0
  45. package/docs/API-reference/api/x-components.basesuggestions.md +3 -3
  46. package/docs/API-reference/api/x-components.basetabspanel.md +8 -8
  47. package/docs/API-reference/api/x-components.basetogglepanel.md +3 -3
  48. package/docs/API-reference/api/x-components.basevariablecolumngrid.md +3 -3
  49. package/docs/API-reference/api/x-components.cancelfetchandsaverelatedprompts.md +13 -0
  50. package/docs/API-reference/api/x-components.configmutations.config.md +11 -0
  51. package/docs/API-reference/api/x-components.configmutations.md +29 -0
  52. package/docs/API-reference/api/x-components.configmutations.mergeconfig.md +24 -0
  53. package/docs/API-reference/api/x-components.configmutations.setconfig.md +24 -0
  54. package/docs/API-reference/api/x-components.createrelatedtagsquerygetter.md +26 -0
  55. package/docs/API-reference/api/x-components.createrelatedtagsquerygetteroptions.getrelatedtags.md +13 -0
  56. package/docs/API-reference/api/x-components.createrelatedtagsquerygetteroptions.md +20 -0
  57. package/docs/API-reference/api/x-components.createtrackrelatedprompttoolingdisplayclickwire.md +19 -0
  58. package/docs/API-reference/api/x-components.createtracktoolingadd2cartwire.md +19 -0
  59. package/docs/API-reference/api/x-components.createtracktoolingdisplaywire.md +19 -0
  60. package/docs/API-reference/api/{x-components.defaultpdpaddtocartservice._constructor_.md → x-components.defaultexternaltaggingservice._constructor_.md} +3 -3
  61. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.add_to_cart_id_key.md +13 -0
  62. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.instance.md +13 -0
  63. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.localstorageservice.md +11 -0
  64. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.md +43 -0
  65. package/docs/API-reference/api/{x-components.defaultpdpaddtocartservice.movetosessionstorage.md → x-components.defaultexternaltaggingservice.movetosessionstorage.md} +2 -2
  66. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.result_clicked_id_key.md +13 -0
  67. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.sessionstorageservice.md +11 -0
  68. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.storagekey.md +11 -0
  69. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.storagettlms.md +11 -0
  70. package/docs/API-reference/api/{x-components.defaultpdpaddtocartservice.store.md → x-components.defaultexternaltaggingservice.store.md} +2 -2
  71. package/docs/API-reference/api/x-components.defaultexternaltaggingservice.storeaddtocart.md +24 -0
  72. package/docs/API-reference/api/{x-components.defaultpdpaddtocartservice.storeresultclicked.md → x-components.defaultexternaltaggingservice.storeresultclicked.md} +3 -3
  73. package/docs/API-reference/api/{x-components.defaultpdpaddtocartservice.trackaddtocart.md → x-components.defaultexternaltaggingservice.trackaddtocart.md} +3 -3
  74. package/docs/API-reference/api/x-components.displayclickprovider.md +66 -0
  75. package/docs/API-reference/api/x-components.empathize.md +6 -6
  76. package/docs/API-reference/api/x-components.empathizemutations.md +1 -1
  77. package/docs/API-reference/api/x-components.externaltaggingservice.md +23 -0
  78. package/docs/API-reference/api/{x-components.pdpaddtocartservice.movetosessionstorage.md → x-components.externaltaggingservice.movetosessionstorage.md} +2 -2
  79. package/docs/API-reference/api/x-components.externaltaggingservice.storeaddtocart.md +24 -0
  80. package/docs/API-reference/api/{x-components.pdpaddtocartservice.storeresultclicked.md → x-components.externaltaggingservice.storeresultclicked.md} +3 -3
  81. package/docs/API-reference/api/{x-components.pdpaddtocartservice.trackaddtocart.md → x-components.externaltaggingservice.trackaddtocart.md} +3 -3
  82. package/docs/API-reference/api/x-components.facets.md +3 -3
  83. package/docs/API-reference/api/x-components.facetsmutations.md +1 -1
  84. package/docs/API-reference/api/x-components.featurelocation.md +1 -1
  85. package/docs/API-reference/api/x-components.fetchandsaverelatedprompts.md +13 -0
  86. package/docs/API-reference/api/x-components.fetchrelatedprompts.md +13 -0
  87. package/docs/API-reference/api/x-components.filterslist.md +3 -3
  88. package/docs/API-reference/api/x-components.globalxbus.md +12 -0
  89. package/docs/API-reference/api/x-components.hierarchicalfilter.md +8 -2
  90. package/docs/API-reference/api/x-components.historyqueriesmutations.md +1 -1
  91. package/docs/API-reference/api/x-components.historyqueriesstate.md +1 -1
  92. package/docs/API-reference/api/x-components.identifierresults.md +3 -3
  93. package/docs/API-reference/api/x-components.identifierresultsmutations.md +1 -1
  94. package/docs/API-reference/api/x-components.identifierresultsstate.md +1 -1
  95. package/docs/API-reference/api/x-components.installxoptions.domelement.md +1 -1
  96. package/docs/API-reference/api/x-components.installxoptions.installextraplugins.md +2 -2
  97. package/docs/API-reference/api/x-components.installxoptions.md +1 -1
  98. package/docs/API-reference/api/x-components.itemslist.md +3 -3
  99. package/docs/API-reference/api/x-components.mainmodal.md +2 -2
  100. package/docs/API-reference/api/x-components.md +38 -3
  101. package/docs/API-reference/api/x-components.mergeconfig.md +27 -0
  102. package/docs/API-reference/api/x-components.multicolumnmaxwidthlayout.md +5 -5
  103. package/docs/API-reference/api/x-components.myhistory.md +3 -3
  104. package/docs/API-reference/api/x-components.nextqueriesgroup.md +22 -0
  105. package/docs/API-reference/api/x-components.nextqueriesgroup.modelname.md +11 -0
  106. package/docs/API-reference/api/x-components.nextqueriesgroup.nextqueries.md +11 -0
  107. package/docs/API-reference/api/x-components.nextquerieslist.md +3 -3
  108. package/docs/API-reference/api/x-components.nextqueriesmutations.md +1 -1
  109. package/docs/API-reference/api/x-components.nextqueriesstate.md +1 -1
  110. package/docs/API-reference/api/x-components.pageselector.md +80 -0
  111. package/docs/API-reference/api/x-components.partialresultslist.md +3 -3
  112. package/docs/API-reference/api/x-components.popularsearchesmutations.md +1 -1
  113. package/docs/API-reference/api/x-components.promotedslist.md +3 -3
  114. package/docs/API-reference/api/x-components.queriespreviewmutations.md +1 -1
  115. package/docs/API-reference/api/x-components.queryfeature.md +1 -1
  116. package/docs/API-reference/api/x-components.querymutations.md +20 -0
  117. package/docs/API-reference/api/x-components.querymutations.setquery.md +24 -0
  118. package/docs/API-reference/api/x-components.querypreviewlist.md +3 -3
  119. package/docs/API-reference/api/x-components.querystate.md +20 -0
  120. package/docs/API-reference/api/x-components.querystate.query.md +13 -0
  121. package/docs/API-reference/api/x-components.querysuggestionsmutations.md +1 -1
  122. package/docs/API-reference/api/x-components.querysuggestionsstate.md +1 -1
  123. package/docs/API-reference/api/x-components.recommendations.md +3 -3
  124. package/docs/API-reference/api/x-components.recommendationsmutations.md +1 -1
  125. package/docs/API-reference/api/x-components.relatedprompt.md +33 -0
  126. package/docs/API-reference/api/x-components.relatedpromptrequest.md +13 -0
  127. package/docs/API-reference/api/x-components.relatedpromptsactioncontext.md +15 -0
  128. package/docs/API-reference/api/x-components.relatedpromptsactions.cancelfetchandsaverelatedprompts.md +17 -0
  129. package/docs/API-reference/api/x-components.relatedpromptsactions.fetchandsaverelatedprompts.md +24 -0
  130. package/docs/API-reference/api/x-components.relatedpromptsactions.fetchrelatedprompts.md +24 -0
  131. package/docs/API-reference/api/x-components.relatedpromptsactions.md +22 -0
  132. package/docs/API-reference/api/x-components.relatedpromptsgetters.md +20 -0
  133. package/docs/API-reference/api/x-components.relatedpromptsgetters.request.md +13 -0
  134. package/docs/API-reference/api/x-components.relatedpromptslist.md +72 -0
  135. package/docs/API-reference/api/x-components.relatedpromptsmutations.md +26 -0
  136. package/docs/API-reference/api/x-components.relatedpromptsmutations.resetrelatedpromptsstate.md +17 -0
  137. package/docs/API-reference/api/x-components.relatedpromptsmutations.resetselectedprompt.md +17 -0
  138. package/docs/API-reference/api/x-components.relatedpromptsmutations.setparams.md +24 -0
  139. package/docs/API-reference/api/x-components.relatedpromptsmutations.setrelatedpromptsproducts.md +24 -0
  140. package/docs/API-reference/api/x-components.relatedpromptsmutations.setselectedprompt.md +24 -0
  141. package/docs/API-reference/api/x-components.relatedpromptsmutations.setselectedquery.md +24 -0
  142. package/docs/API-reference/api/x-components.relatedpromptsstate.md +24 -0
  143. package/docs/API-reference/api/x-components.relatedpromptsstate.params.md +13 -0
  144. package/docs/API-reference/api/x-components.relatedpromptsstate.relatedprompts.md +13 -0
  145. package/docs/API-reference/api/x-components.relatedpromptsstate.selectedprompt.md +13 -0
  146. package/docs/API-reference/api/x-components.relatedpromptsstate.selectedquery.md +13 -0
  147. package/docs/API-reference/api/x-components.relatedpromptstaglist.md +73 -0
  148. package/docs/API-reference/api/x-components.relatedpromptsxevents.md +24 -0
  149. package/docs/API-reference/api/x-components.relatedpromptsxevents.relatedpromptsrequestupdated.md +13 -0
  150. package/docs/API-reference/api/x-components.relatedpromptsxevents.userclickedarelatedpromptadd2cart.md +13 -0
  151. package/docs/API-reference/api/x-components.relatedpromptsxevents.userclickedarelatedpromptresult.md +13 -0
  152. package/docs/API-reference/api/x-components.relatedpromptsxevents.userselectedarelatedprompt.md +13 -0
  153. package/docs/API-reference/api/x-components.relatedpromptsxevents.userselectedarelatedpromptquery.md +13 -0
  154. package/docs/API-reference/api/x-components.relatedpromptsxmodule.md +13 -0
  155. package/docs/API-reference/api/x-components.relatedpromptsxstoremodule.md +15 -0
  156. package/docs/API-reference/api/x-components.relatedtags.md +3 -3
  157. package/docs/API-reference/api/x-components.relatedtagsmutations.md +1 -1
  158. package/docs/API-reference/api/x-components.relatedtagsstate.md +1 -1
  159. package/docs/API-reference/api/x-components.resultslist.md +3 -3
  160. package/docs/API-reference/api/x-components.scrolltotop.md +5 -5
  161. package/docs/API-reference/api/x-components.searchboxmutations.md +1 -1
  162. package/docs/API-reference/api/x-components.searchboxstate.md +1 -1
  163. package/docs/API-reference/api/x-components.searchconfig.md +1 -0
  164. package/docs/API-reference/api/x-components.searchconfig.pagemode.md +11 -0
  165. package/docs/API-reference/api/x-components.searchinputplaceholder.md +3 -3
  166. package/docs/API-reference/api/x-components.searchmutations.md +2 -1
  167. package/docs/API-reference/api/x-components.searchmutations.setstats.md +24 -0
  168. package/docs/API-reference/api/x-components.searchstate.md +2 -1
  169. package/docs/API-reference/api/x-components.searchstate.stats.md +13 -0
  170. package/docs/API-reference/api/x-components.searchxevents.md +1 -0
  171. package/docs/API-reference/api/x-components.searchxevents.userselectedapage.md +13 -0
  172. package/docs/API-reference/api/x-components.selectedfilterslist.md +3 -3
  173. package/docs/API-reference/api/x-components.semanticqueriesmutations.md +1 -1
  174. package/docs/API-reference/api/x-components.semanticqueriesstate.md +1 -1
  175. package/docs/API-reference/api/x-components.setconfig.md +27 -0
  176. package/docs/API-reference/api/x-components.setquery.md +25 -0
  177. package/docs/API-reference/api/x-components.simplefilter.md +6 -0
  178. package/docs/API-reference/api/x-components.singlecolumnlayout.md +3 -3
  179. package/docs/API-reference/api/x-components.slidingpanel.md +13 -5
  180. package/docs/API-reference/api/x-components.snippetcallbacks.md +6 -0
  181. package/docs/API-reference/api/x-components.sortdropdown.md +1 -1
  182. package/docs/API-reference/api/x-components.tagging.md +6 -6
  183. package/docs/API-reference/api/x-components.taggingconfig.md +2 -2
  184. package/docs/API-reference/api/{x-components.taggingconfig.clickedresultstoragekey.md → x-components.taggingconfig.storagekey.md} +3 -3
  185. package/docs/API-reference/api/x-components.taggingconfig.storagettlms.md +13 -0
  186. package/docs/API-reference/api/x-components.taggingmutations.md +1 -1
  187. package/docs/API-reference/api/x-components.taggingxevents.md +1 -1
  188. package/docs/API-reference/api/x-components.taggingxevents.resulturltrackingenabled.md +1 -1
  189. package/docs/API-reference/api/x-components.trackrelatedprompttoolingdisplayclickwire.md +13 -0
  190. package/docs/API-reference/api/x-components.tracktoolingadd2cartwire.md +13 -0
  191. package/docs/API-reference/api/x-components.tracktoolingdisplayclickedwire.md +13 -0
  192. package/docs/API-reference/api/x-components.typing.md +13 -0
  193. package/docs/API-reference/api/x-components.typingoptions.md +22 -0
  194. package/docs/API-reference/api/x-components.typingoptions.speed.md +13 -0
  195. package/docs/API-reference/api/x-components.typingoptions.targetattr.md +18 -0
  196. package/docs/API-reference/api/x-components.typingoptions.text.md +13 -0
  197. package/docs/API-reference/api/x-components.urlmutations.md +1 -1
  198. package/docs/API-reference/api/x-components.urlstate.md +1 -1
  199. package/docs/API-reference/api/x-components.usealiasapi.md +1 -0
  200. package/docs/API-reference/api/x-components.usealiasapi.pricestats.md +16 -0
  201. package/docs/API-reference/api/x-components.xeventstypes.md +3 -3
  202. package/docs/API-reference/api/x-components.xmodulestree.md +1 -0
  203. package/docs/API-reference/api/x-components.xmodulestree.relatedprompts.md +11 -0
  204. package/docs/API-reference/api/x-types.md +5 -0
  205. package/docs/API-reference/api/x-types.relatedprompt.md +26 -0
  206. package/docs/API-reference/api/x-types.relatedprompt.nextqueries.md +13 -0
  207. package/docs/API-reference/api/x-types.relatedprompt.relatedpromptnextqueries.md +13 -0
  208. package/docs/API-reference/api/x-types.relatedprompt.suggestiontext.md +13 -0
  209. package/docs/API-reference/api/x-types.relatedprompt.tagging.md +17 -0
  210. package/docs/API-reference/api/x-types.relatedprompt.toolingdisplaytagging.md +13 -0
  211. package/docs/API-reference/api/x-types.relatedprompt.type.md +13 -0
  212. package/docs/API-reference/api/x-types.relatedpromptnextquery.md +23 -0
  213. package/docs/API-reference/api/x-types.relatedpromptnextquery.query.md +13 -0
  214. package/docs/API-reference/api/x-types.relatedpromptnextquery.toolingdisplayadd2carttagging.md +13 -0
  215. package/docs/API-reference/api/x-types.relatedpromptnextquery.toolingdisplayclicktagging.md +13 -0
  216. package/docs/API-reference/api/x-types.relatedpromptnextquery.toolingdisplaytagging.md +13 -0
  217. package/docs/API-reference/api/x-types.relatedpromptsrequest.md +15 -0
  218. package/docs/API-reference/api/x-types.relatedpromptsresponse.md +20 -0
  219. package/docs/API-reference/api/x-types.relatedpromptsresponse.relatedprompts.md +11 -0
  220. package/docs/API-reference/api/x-types.searchresponse.md +1 -0
  221. package/docs/API-reference/api/x-types.searchresponse.stats.md +11 -0
  222. package/docs/API-reference/api/x-types.stats.md +22 -0
  223. package/docs/API-reference/api/x-types.stats.price.md +14 -0
  224. package/docs/API-reference/api/x-types.xcomponentsadapter.md +1 -0
  225. package/docs/API-reference/api/x-types.xcomponentsadapter.relatedprompts.md +11 -0
  226. package/docs/API-reference/components/common/result/x-components.base-result-image.md +2 -2
  227. package/docs/API-reference/components/common/x-components.base-slider.md +189 -0
  228. package/docs/API-reference/components/common/x-components.display-click-provider.md +17 -0
  229. package/docs/API-reference/components/common/x-components.items-list.md +1 -1
  230. package/docs/API-reference/components/common/x-components.page-selector.md +136 -0
  231. package/docs/API-reference/components/common/x-components.sliding-panel.md +7 -7
  232. package/docs/API-reference/components/facets/x-components.facets/facets.md +1 -1
  233. package/docs/API-reference/components/facets/x-components.lists/selected-filters-list.md +1 -1
  234. package/docs/API-reference/components/related-prompts/x-components.related-prompt.md +22 -0
  235. package/docs/API-reference/components/related-prompts/x-components.related-prompts-list.md +196 -0
  236. package/docs/API-reference/components/related-prompts/x-components.related-prompts-tag-list.md +32 -0
  237. package/docs/API-reference/components/search/x-components.results-list.md +1 -1
  238. package/docs/API-reference/components/tagging/x-components.tagging.md +15 -16
  239. package/js/components/animations/fade-and-slide.vue.js +1 -2
  240. package/js/components/animations/fade-and-slide.vue.js.map +1 -1
  241. package/js/components/base-dropdown.vue.js +1 -3
  242. package/js/components/base-dropdown.vue.js.map +1 -1
  243. package/js/components/base-dropdown.vue2.js +1 -7
  244. package/js/components/base-dropdown.vue2.js.map +1 -1
  245. package/js/components/base-event-button.vue.js +1 -2
  246. package/js/components/base-event-button.vue.js.map +1 -1
  247. package/js/components/base-grid.vue.js +11 -18
  248. package/js/components/base-grid.vue.js.map +1 -1
  249. package/js/components/base-grid.vue2.js.map +1 -1
  250. package/js/components/base-grid.vue3.js +1 -1
  251. package/js/components/base-keyboard-navigation.vue.js +1 -2
  252. package/js/components/base-keyboard-navigation.vue.js.map +1 -1
  253. package/js/components/base-rating.vue.js +1 -3
  254. package/js/components/base-rating.vue.js.map +1 -1
  255. package/js/components/base-slider.vue.js +65 -0
  256. package/js/components/base-slider.vue.js.map +1 -0
  257. package/js/components/base-slider.vue2.js +109 -0
  258. package/js/components/base-slider.vue2.js.map +1 -0
  259. package/js/components/base-slider.vue3.js +7 -0
  260. package/js/components/base-slider.vue3.js.map +1 -0
  261. package/js/components/base-variable-column-grid.vue.js +1 -2
  262. package/js/components/base-variable-column-grid.vue.js.map +1 -1
  263. package/js/components/column-picker/base-column-picker-dropdown.vue.js +1 -3
  264. package/js/components/column-picker/base-column-picker-dropdown.vue.js.map +1 -1
  265. package/js/components/column-picker/base-column-picker-list.vue.js +1 -3
  266. package/js/components/column-picker/base-column-picker-list.vue.js.map +1 -1
  267. package/js/components/display-click-provider.vue.js +74 -0
  268. package/js/components/display-click-provider.vue.js.map +1 -0
  269. package/js/components/display-click-provider.vue2.js +6 -0
  270. package/js/components/display-click-provider.vue2.js.map +1 -0
  271. package/js/components/filters/labels/base-rating-filter-label.vue.js +1 -3
  272. package/js/components/filters/labels/base-rating-filter-label.vue.js.map +1 -1
  273. package/js/components/icons/cross-tiny.vue.js +2 -2
  274. package/js/components/icons/plus.vue.js +2 -2
  275. package/js/components/items-list.vue.js +1 -2
  276. package/js/components/items-list.vue.js.map +1 -1
  277. package/js/components/items-list.vue2.js +2 -2
  278. package/js/components/items-list.vue2.js.map +1 -1
  279. package/js/components/layouts/fixed-header-and-asides-layout.vue.js +1 -7
  280. package/js/components/layouts/fixed-header-and-asides-layout.vue.js.map +1 -1
  281. package/js/components/layouts/multi-column-max-width-layout.vue.js +1 -9
  282. package/js/components/layouts/multi-column-max-width-layout.vue.js.map +1 -1
  283. package/js/components/layouts/single-column-layout.vue.js +1 -9
  284. package/js/components/layouts/single-column-layout.vue.js.map +1 -1
  285. package/js/components/modals/base-events-modal-close.vue.js +1 -2
  286. package/js/components/modals/base-events-modal-close.vue.js.map +1 -1
  287. package/js/components/modals/base-events-modal-open.vue.js +1 -2
  288. package/js/components/modals/base-events-modal-open.vue.js.map +1 -1
  289. package/js/components/modals/base-id-modal-close.vue.js +1 -2
  290. package/js/components/modals/base-id-modal-close.vue.js.map +1 -1
  291. package/js/components/modals/base-id-modal-open.vue.js +1 -2
  292. package/js/components/modals/base-id-modal-open.vue.js.map +1 -1
  293. package/js/components/modals/base-modal.vue.js +1 -2
  294. package/js/components/modals/base-modal.vue.js.map +1 -1
  295. package/js/components/modals/base-modal.vue2.js +13 -6
  296. package/js/components/modals/base-modal.vue2.js.map +1 -1
  297. package/js/components/page-loader-button.vue.js +8 -10
  298. package/js/components/page-loader-button.vue.js.map +1 -1
  299. package/js/components/page-loader-button.vue2.js.map +1 -1
  300. package/js/components/page-loader-button.vue3.js +7 -0
  301. package/js/components/page-loader-button.vue3.js.map +1 -0
  302. package/js/components/page-selector.vue.js +78 -0
  303. package/js/components/page-selector.vue.js.map +1 -0
  304. package/js/components/page-selector.vue2.js +128 -0
  305. package/js/components/page-selector.vue2.js.map +1 -0
  306. package/js/components/page-selector.vue3.js +7 -0
  307. package/js/components/page-selector.vue3.js.map +1 -0
  308. package/js/components/panels/base-header-toggle-panel.vue.js +1 -5
  309. package/js/components/panels/base-header-toggle-panel.vue.js.map +1 -1
  310. package/js/components/panels/base-id-toggle-panel-button.vue.js +1 -2
  311. package/js/components/panels/base-id-toggle-panel-button.vue.js.map +1 -1
  312. package/js/components/panels/base-id-toggle-panel.vue.js +1 -2
  313. package/js/components/panels/base-id-toggle-panel.vue.js.map +1 -1
  314. package/js/components/panels/base-tabs-panel.vue.js +1 -4
  315. package/js/components/panels/base-tabs-panel.vue.js.map +1 -1
  316. package/js/components/panels/base-toggle-panel.vue.js +1 -2
  317. package/js/components/panels/base-toggle-panel.vue.js.map +1 -1
  318. package/js/components/result/base-result-add-to-cart.vue.js +3 -3
  319. package/js/components/result/base-result-add-to-cart.vue.js.map +1 -1
  320. package/js/components/result/base-result-add-to-cart.vue2.js +19 -5
  321. package/js/components/result/base-result-add-to-cart.vue2.js.map +1 -1
  322. package/js/components/result/base-result-current-price.vue.js +1 -2
  323. package/js/components/result/base-result-current-price.vue.js.map +1 -1
  324. package/js/components/result/base-result-image.vue.js +39 -59
  325. package/js/components/result/base-result-image.vue.js.map +1 -1
  326. package/js/components/result/base-result-image.vue2.js +5 -5
  327. package/js/components/result/base-result-image.vue2.js.map +1 -1
  328. package/js/components/result/base-result-link.vue.js +1 -2
  329. package/js/components/result/base-result-link.vue.js.map +1 -1
  330. package/js/components/result/base-result-previous-price.vue.js +1 -2
  331. package/js/components/result/base-result-previous-price.vue.js.map +1 -1
  332. package/js/components/result/base-result-rating.vue.js +1 -4
  333. package/js/components/result/base-result-rating.vue.js.map +1 -1
  334. package/js/components/result/result-variant-selector.vue.js +1 -3
  335. package/js/components/result/result-variant-selector.vue.js.map +1 -1
  336. package/js/components/sliding-panel.vue.js +3 -6
  337. package/js/components/sliding-panel.vue.js.map +1 -1
  338. package/js/components/sliding-panel.vue2.js +2 -2
  339. package/js/components/sliding-panel.vue2.js.map +1 -1
  340. package/js/components/suggestions/base-suggestion.vue.js +1 -2
  341. package/js/components/suggestions/base-suggestion.vue.js.map +1 -1
  342. package/js/components/suggestions/base-suggestions.vue.js +1 -2
  343. package/js/components/suggestions/base-suggestions.vue.js.map +1 -1
  344. package/js/composables/use-alias-api.js +4 -1
  345. package/js/composables/use-alias-api.js.map +1 -1
  346. package/js/composables/use-getter.js +1 -1
  347. package/js/composables/use-state.js +1 -1
  348. package/js/directives/typing.js +58 -0
  349. package/js/directives/typing.js.map +1 -0
  350. package/js/index.js +20 -3
  351. package/js/index.js.map +1 -1
  352. package/js/types/animation-prop.js +5 -0
  353. package/js/types/animation-prop.js.map +1 -1
  354. package/js/x-installer/x-installer/x-installer.js +3 -3
  355. package/js/x-installer/x-installer/x-installer.js.map +1 -1
  356. package/js/x-modules/device/store/emitters.js +1 -0
  357. package/js/x-modules/device/store/emitters.js.map +1 -1
  358. package/js/x-modules/empathize/components/empathize.vue.js +1 -2
  359. package/js/x-modules/empathize/components/empathize.vue.js.map +1 -1
  360. package/js/x-modules/empathize/components/empathize.vue2.js +8 -3
  361. package/js/x-modules/empathize/components/empathize.vue2.js.map +1 -1
  362. package/js/x-modules/empathize/store/emitters.js +1 -0
  363. package/js/x-modules/empathize/store/emitters.js.map +1 -1
  364. package/js/x-modules/experience-controls/store/emitters.js +1 -0
  365. package/js/x-modules/experience-controls/store/emitters.js.map +1 -1
  366. package/js/x-modules/extra-params/components/extra-params.vue.js +1 -1
  367. package/js/x-modules/extra-params/components/extra-params.vue.js.map +1 -1
  368. package/js/x-modules/extra-params/store/emitters.js +1 -0
  369. package/js/x-modules/extra-params/store/emitters.js.map +1 -1
  370. package/js/x-modules/facets/components/facets/facets.vue.js +20 -33
  371. package/js/x-modules/facets/components/facets/facets.vue.js.map +1 -1
  372. package/js/x-modules/facets/components/facets/facets.vue2.js +2 -2
  373. package/js/x-modules/facets/components/facets/facets.vue2.js.map +1 -1
  374. package/js/x-modules/facets/components/filters/all-filter.vue.js +1 -2
  375. package/js/x-modules/facets/components/filters/all-filter.vue.js.map +1 -1
  376. package/js/x-modules/facets/components/filters/editable-number-range-filter.vue.js +1 -6
  377. package/js/x-modules/facets/components/filters/editable-number-range-filter.vue.js.map +1 -1
  378. package/js/x-modules/facets/components/filters/hierarchical-filter.vue.js +1 -3
  379. package/js/x-modules/facets/components/filters/hierarchical-filter.vue.js.map +1 -1
  380. package/js/x-modules/facets/components/filters/number-range-filter.vue.js +1 -3
  381. package/js/x-modules/facets/components/filters/number-range-filter.vue.js.map +1 -1
  382. package/js/x-modules/facets/components/filters/simple-filter.vue.js +1 -3
  383. package/js/x-modules/facets/components/filters/simple-filter.vue.js.map +1 -1
  384. package/js/x-modules/facets/components/lists/filters-list.vue.js +1 -2
  385. package/js/x-modules/facets/components/lists/filters-list.vue.js.map +1 -1
  386. package/js/x-modules/facets/components/lists/filters-search.vue.js +1 -3
  387. package/js/x-modules/facets/components/lists/filters-search.vue.js.map +1 -1
  388. package/js/x-modules/facets/components/lists/selected-filters-list.vue.js +11 -18
  389. package/js/x-modules/facets/components/lists/selected-filters-list.vue.js.map +1 -1
  390. package/js/x-modules/facets/components/lists/selected-filters-list.vue2.js +2 -2
  391. package/js/x-modules/facets/components/lists/selected-filters-list.vue2.js.map +1 -1
  392. package/js/x-modules/facets/components/lists/sliced-filters.vue.js +1 -4
  393. package/js/x-modules/facets/components/lists/sliced-filters.vue.js.map +1 -1
  394. package/js/x-modules/history-queries/components/clear-history-queries.vue.js +1 -2
  395. package/js/x-modules/history-queries/components/clear-history-queries.vue.js.map +1 -1
  396. package/js/x-modules/history-queries/components/history-queries.vue.js +1 -10
  397. package/js/x-modules/history-queries/components/history-queries.vue.js.map +1 -1
  398. package/js/x-modules/history-queries/components/history-query.vue.js +1 -6
  399. package/js/x-modules/history-queries/components/history-query.vue.js.map +1 -1
  400. package/js/x-modules/history-queries/components/my-history.vue.js +1 -4
  401. package/js/x-modules/history-queries/components/my-history.vue.js.map +1 -1
  402. package/js/x-modules/history-queries/components/remove-history-query.vue.js +1 -2
  403. package/js/x-modules/history-queries/components/remove-history-query.vue.js.map +1 -1
  404. package/js/x-modules/history-queries/store/emitters.js +1 -0
  405. package/js/x-modules/history-queries/store/emitters.js.map +1 -1
  406. package/js/x-modules/identifier-results/components/identifier-results.vue.js +1 -2
  407. package/js/x-modules/identifier-results/components/identifier-results.vue.js.map +1 -1
  408. package/js/x-modules/identifier-results/store/emitters.js +1 -0
  409. package/js/x-modules/identifier-results/store/emitters.js.map +1 -1
  410. package/js/x-modules/next-queries/components/next-queries.vue.js +1 -7
  411. package/js/x-modules/next-queries/components/next-queries.vue.js.map +1 -1
  412. package/js/x-modules/next-queries/components/next-query-preview.vue.js +1 -3
  413. package/js/x-modules/next-queries/components/next-query-preview.vue.js.map +1 -1
  414. package/js/x-modules/next-queries/components/next-query.vue.js +1 -4
  415. package/js/x-modules/next-queries/components/next-query.vue.js.map +1 -1
  416. package/js/x-modules/next-queries/store/emitters.js +1 -0
  417. package/js/x-modules/next-queries/store/emitters.js.map +1 -1
  418. package/js/x-modules/popular-searches/components/popular-search.vue.js +1 -4
  419. package/js/x-modules/popular-searches/components/popular-search.vue.js.map +1 -1
  420. package/js/x-modules/popular-searches/components/popular-searches.vue.js +1 -7
  421. package/js/x-modules/popular-searches/components/popular-searches.vue.js.map +1 -1
  422. package/js/x-modules/queries-preview/components/query-preview-button.vue.js +1 -2
  423. package/js/x-modules/queries-preview/components/query-preview-button.vue.js.map +1 -1
  424. package/js/x-modules/queries-preview/components/query-preview-button.vue2.js +6 -0
  425. package/js/x-modules/queries-preview/components/query-preview-button.vue2.js.map +1 -1
  426. package/js/x-modules/queries-preview/components/query-preview-list.vue.js.map +1 -1
  427. package/js/x-modules/queries-preview/components/query-preview-list.vue2.js +15 -2
  428. package/js/x-modules/queries-preview/components/query-preview-list.vue2.js.map +1 -1
  429. package/js/x-modules/queries-preview/components/query-preview.vue.js +1 -2
  430. package/js/x-modules/queries-preview/components/query-preview.vue.js.map +1 -1
  431. package/js/x-modules/queries-preview/components/query-preview.vue2.js +7 -1
  432. package/js/x-modules/queries-preview/components/query-preview.vue2.js.map +1 -1
  433. package/js/x-modules/queries-preview/store/actions/fetch-and-save-query-preview.action.js +2 -1
  434. package/js/x-modules/queries-preview/store/actions/fetch-and-save-query-preview.action.js.map +1 -1
  435. package/js/x-modules/queries-preview/store/emitters.js +1 -0
  436. package/js/x-modules/queries-preview/store/emitters.js.map +1 -1
  437. package/js/x-modules/queries-preview/store/module.js +1 -1
  438. package/js/x-modules/queries-preview/store/module.js.map +1 -1
  439. package/js/x-modules/queries-preview/utils/get-hash-from-query-preview.js +6 -4
  440. package/js/x-modules/queries-preview/utils/get-hash-from-query-preview.js.map +1 -1
  441. package/js/x-modules/query-suggestions/components/query-suggestion.vue.js +1 -4
  442. package/js/x-modules/query-suggestions/components/query-suggestion.vue.js.map +1 -1
  443. package/js/x-modules/query-suggestions/components/query-suggestions.vue.js +1 -7
  444. package/js/x-modules/query-suggestions/components/query-suggestions.vue.js.map +1 -1
  445. package/js/x-modules/query-suggestions/store/emitters.js +1 -0
  446. package/js/x-modules/query-suggestions/store/emitters.js.map +1 -1
  447. package/js/x-modules/recommendations/components/recommendations.vue.js +1 -2
  448. package/js/x-modules/recommendations/components/recommendations.vue.js.map +1 -1
  449. package/js/x-modules/recommendations/store/emitters.js +1 -0
  450. package/js/x-modules/recommendations/store/emitters.js.map +1 -1
  451. package/js/x-modules/related-prompts/components/related-prompt.vue.js +26 -0
  452. package/js/x-modules/related-prompts/components/related-prompt.vue.js.map +1 -0
  453. package/js/x-modules/related-prompts/components/related-prompt.vue2.js +31 -0
  454. package/js/x-modules/related-prompts/components/related-prompt.vue2.js.map +1 -0
  455. package/js/x-modules/related-prompts/components/related-prompt.vue3.js +7 -0
  456. package/js/x-modules/related-prompts/components/related-prompt.vue3.js.map +1 -0
  457. package/js/x-modules/related-prompts/components/related-prompts-list.vue.js +154 -0
  458. package/js/x-modules/related-prompts/components/related-prompts-list.vue.js.map +1 -0
  459. package/js/x-modules/related-prompts/components/related-prompts-list.vue2.js +6 -0
  460. package/js/x-modules/related-prompts/components/related-prompts-list.vue2.js.map +1 -0
  461. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue.js +98 -0
  462. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue.js.map +1 -0
  463. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue2.js +226 -0
  464. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue2.js.map +1 -0
  465. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue3.js +7 -0
  466. package/js/x-modules/related-prompts/components/related-prompts-tag-list.vue3.js.map +1 -0
  467. package/js/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.js +29 -0
  468. package/js/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.js.map +1 -0
  469. package/js/x-modules/related-prompts/store/actions/fetch-related-prompts.action.js +20 -0
  470. package/js/x-modules/related-prompts/store/actions/fetch-related-prompts.action.js.map +1 -0
  471. package/js/x-modules/related-prompts/store/emitters.js +15 -0
  472. package/js/x-modules/related-prompts/store/emitters.js.map +1 -0
  473. package/js/x-modules/related-prompts/store/getters/request.getter.js +16 -0
  474. package/js/x-modules/related-prompts/store/getters/request.getter.js.map +1 -0
  475. package/js/x-modules/related-prompts/store/module.js +61 -0
  476. package/js/x-modules/related-prompts/store/module.js.map +1 -0
  477. package/js/x-modules/related-prompts/wiring.js +99 -0
  478. package/js/x-modules/related-prompts/wiring.js.map +1 -0
  479. package/js/x-modules/related-prompts/x-module.js +21 -0
  480. package/js/x-modules/related-prompts/x-module.js.map +1 -0
  481. package/js/x-modules/related-tags/components/related-tag.vue.js +1 -2
  482. package/js/x-modules/related-tags/components/related-tag.vue.js.map +1 -1
  483. package/js/x-modules/related-tags/components/related-tags.vue.js +1 -4
  484. package/js/x-modules/related-tags/components/related-tags.vue.js.map +1 -1
  485. package/js/x-modules/related-tags/store/emitters.js +1 -0
  486. package/js/x-modules/related-tags/store/emitters.js.map +1 -1
  487. package/js/x-modules/scroll/components/scroll-to-top.vue.js +1 -2
  488. package/js/x-modules/scroll/components/scroll-to-top.vue.js.map +1 -1
  489. package/js/x-modules/scroll/components/scroll-to-top.vue2.js +6 -0
  490. package/js/x-modules/scroll/components/scroll-to-top.vue2.js.map +1 -1
  491. package/js/x-modules/scroll/store/emitters.js +1 -0
  492. package/js/x-modules/scroll/store/emitters.js.map +1 -1
  493. package/js/x-modules/search/components/partial-results-list.vue.js +1 -2
  494. package/js/x-modules/search/components/partial-results-list.vue.js.map +1 -1
  495. package/js/x-modules/search/components/results-list.vue.js +2 -2
  496. package/js/x-modules/search/components/results-list.vue.js.map +1 -1
  497. package/js/x-modules/search/components/sort-dropdown.vue.js +1 -3
  498. package/js/x-modules/search/components/sort-dropdown.vue.js.map +1 -1
  499. package/js/x-modules/search/store/actions/fetch-and-save-search-response.action.js +10 -3
  500. package/js/x-modules/search/store/actions/fetch-and-save-search-response.action.js.map +1 -1
  501. package/js/x-modules/search/store/actions/save-search-response.action.js +3 -1
  502. package/js/x-modules/search/store/actions/save-search-response.action.js.map +1 -1
  503. package/js/x-modules/search/store/emitters.js +1 -0
  504. package/js/x-modules/search/store/emitters.js.map +1 -1
  505. package/js/x-modules/search/store/module.js +9 -3
  506. package/js/x-modules/search/store/module.js.map +1 -1
  507. package/js/x-modules/search/wiring.js +4 -0
  508. package/js/x-modules/search/wiring.js.map +1 -1
  509. package/js/x-modules/search-box/components/clear-search-input.vue.js +1 -2
  510. package/js/x-modules/search-box/components/clear-search-input.vue.js.map +1 -1
  511. package/js/x-modules/search-box/components/search-button.vue.js +1 -2
  512. package/js/x-modules/search-box/components/search-button.vue.js.map +1 -1
  513. package/js/x-modules/search-box/store/emitters.js +1 -0
  514. package/js/x-modules/search-box/store/emitters.js.map +1 -1
  515. package/js/x-modules/semantic-queries/components/semantic-queries.vue.js +1 -3
  516. package/js/x-modules/semantic-queries/components/semantic-queries.vue.js.map +1 -1
  517. package/js/x-modules/semantic-queries/components/semantic-query.vue.js +1 -4
  518. package/js/x-modules/semantic-queries/components/semantic-query.vue.js.map +1 -1
  519. package/js/x-modules/tagging/components/tagging.vue.js +8 -7
  520. package/js/x-modules/tagging/components/tagging.vue.js.map +1 -1
  521. package/js/x-modules/tagging/service/{pdp-add-to-cart.service.js → external-tagging.service.js} +56 -25
  522. package/js/x-modules/tagging/service/external-tagging.service.js.map +1 -0
  523. package/js/x-modules/tagging/store/emitters.js +1 -1
  524. package/js/x-modules/tagging/store/emitters.js.map +1 -1
  525. package/js/x-modules/tagging/store/module.js +7 -3
  526. package/js/x-modules/tagging/store/module.js.map +1 -1
  527. package/js/x-modules/tagging/wiring.js +105 -8
  528. package/js/x-modules/tagging/wiring.js.map +1 -1
  529. package/js/x-modules/url/components/url-handler.vue.js.map +1 -1
  530. package/js/x-modules/url/components/url-handler.vue2.js +2 -1
  531. package/js/x-modules/url/components/url-handler.vue2.js.map +1 -1
  532. package/js/x-modules/url/store/emitters.js +1 -0
  533. package/js/x-modules/url/store/emitters.js.map +1 -1
  534. package/package.json +50 -49
  535. package/related-prompts/index.d.ts +1 -0
  536. package/related-prompts/index.js +10 -0
  537. package/report/x-adapter-platform.api.json +936 -81
  538. package/report/x-components.api.json +16366 -17517
  539. package/report/x-components.api.md +806 -213
  540. package/report/x-types.api.json +577 -0
  541. package/tagging/index.js +2 -2
  542. package/types/adapter/e2e-adapter.d.ts.map +1 -1
  543. package/types/adapter/mocked-responses.d.ts +3 -0
  544. package/types/adapter/mocked-responses.d.ts.map +1 -1
  545. package/types/components/base-dropdown.vue.d.ts +5 -5
  546. package/types/components/base-dropdown.vue.d.ts.map +1 -1
  547. package/types/components/base-grid.vue.d.ts +3 -3
  548. package/types/components/base-slider.vue.d.ts +74 -0
  549. package/types/components/base-slider.vue.d.ts.map +1 -0
  550. package/types/components/base-variable-column-grid.vue.d.ts +3 -3
  551. package/types/components/display-click-provider.vue.d.ts +61 -0
  552. package/types/components/display-click-provider.vue.d.ts.map +1 -0
  553. package/types/components/global-x-bus.vue.d.ts +12 -0
  554. package/types/components/global-x-bus.vue.d.ts.map +1 -1
  555. package/types/components/index.d.ts +3 -0
  556. package/types/components/index.d.ts.map +1 -1
  557. package/types/components/items-list.vue.d.ts +3 -3
  558. package/types/components/layouts/multi-column-max-width-layout.vue.d.ts +5 -5
  559. package/types/components/layouts/single-column-layout.vue.d.ts +3 -3
  560. package/types/components/modals/base-events-modal.vue.d.ts +2 -2
  561. package/types/components/modals/base-id-modal.vue.d.ts +2 -2
  562. package/types/components/modals/base-modal.vue.d.ts +10 -10
  563. package/types/components/modals/base-modal.vue.d.ts.map +1 -1
  564. package/types/components/modals/main-modal.vue.d.ts +2 -2
  565. package/types/components/page-selector.vue.d.ts +125 -0
  566. package/types/components/page-selector.vue.d.ts.map +1 -0
  567. package/types/components/panels/base-header-toggle-panel.vue.d.ts +5 -5
  568. package/types/components/panels/base-id-toggle-panel.vue.d.ts +5 -5
  569. package/types/components/panels/base-tabs-panel.vue.d.ts +8 -8
  570. package/types/components/panels/base-toggle-panel.vue.d.ts +3 -3
  571. package/types/components/result/base-result-add-to-cart.vue.d.ts +2 -0
  572. package/types/components/result/base-result-add-to-cart.vue.d.ts.map +1 -1
  573. package/types/components/result/base-result-image.vue.d.ts +10 -10
  574. package/types/components/result/base-result-image.vue.d.ts.map +1 -1
  575. package/types/components/sliding-panel.vue.d.ts +15 -5
  576. package/types/components/sliding-panel.vue.d.ts.map +1 -1
  577. package/types/components/snippet-callbacks.vue.d.ts +6 -0
  578. package/types/components/snippet-callbacks.vue.d.ts.map +1 -1
  579. package/types/components/suggestions/base-suggestions.vue.d.ts +3 -3
  580. package/types/composables/use-alias-api.d.ts +5 -0
  581. package/types/composables/use-alias-api.d.ts.map +1 -1
  582. package/types/composables/use-store.d.ts +2 -2
  583. package/types/composables/use-store.d.ts.map +1 -1
  584. package/types/directives/index.d.ts +1 -0
  585. package/types/directives/index.d.ts.map +1 -1
  586. package/types/directives/typing.d.ts +35 -0
  587. package/types/directives/typing.d.ts.map +1 -0
  588. package/types/index.d.ts +1 -0
  589. package/types/index.d.ts.map +1 -1
  590. package/types/store/index.d.ts +4 -1
  591. package/types/store/index.d.ts.map +1 -1
  592. package/types/tailwind/plugin-options.d.ts +1 -2
  593. package/types/tailwind/plugin-options.d.ts.map +1 -1
  594. package/types/types/animation-prop.d.ts +6 -2
  595. package/types/types/animation-prop.d.ts.map +1 -1
  596. package/types/types/origin.d.ts +2 -2
  597. package/types/types/origin.d.ts.map +1 -1
  598. package/types/types/page-mode.d.ts +2 -0
  599. package/types/types/page-mode.d.ts.map +1 -0
  600. package/types/views/home/types.d.ts +3 -0
  601. package/types/views/home/types.d.ts.map +1 -1
  602. package/types/wiring/events.types.d.ts +3 -1
  603. package/types/wiring/events.types.d.ts.map +1 -1
  604. package/types/x-installer/x-installer/types.d.ts +2 -2
  605. package/types/x-installer/x-installer/types.d.ts.map +1 -1
  606. package/types/x-installer/x-installer/x-installer.d.ts +4 -4
  607. package/types/x-installer/x-installer/x-installer.d.ts.map +1 -1
  608. package/types/x-modules/empathize/components/empathize.vue.d.ts +6 -6
  609. package/types/x-modules/empathize/components/empathize.vue.d.ts.map +1 -1
  610. package/types/x-modules/facets/components/facets/facets.vue.d.ts +3 -3
  611. package/types/x-modules/facets/components/filters/hierarchical-filter.vue.d.ts +8 -2
  612. package/types/x-modules/facets/components/filters/hierarchical-filter.vue.d.ts.map +1 -1
  613. package/types/x-modules/facets/components/filters/simple-filter.vue.d.ts +6 -0
  614. package/types/x-modules/facets/components/filters/simple-filter.vue.d.ts.map +1 -1
  615. package/types/x-modules/facets/components/lists/filters-list.vue.d.ts +3 -3
  616. package/types/x-modules/facets/components/lists/selected-filters-list.vue.d.ts +3 -3
  617. package/types/x-modules/history-queries/components/my-history.vue.d.ts +3 -3
  618. package/types/x-modules/identifier-results/components/identifier-results.vue.d.ts +3 -3
  619. package/types/x-modules/next-queries/components/next-queries-list.vue.d.ts +3 -3
  620. package/types/x-modules/next-queries/index.d.ts +1 -0
  621. package/types/x-modules/next-queries/index.d.ts.map +1 -1
  622. package/types/x-modules/queries-preview/components/query-preview-list.vue.d.ts +3 -3
  623. package/types/x-modules/queries-preview/components/query-preview-list.vue.d.ts.map +1 -1
  624. package/types/x-modules/queries-preview/components/query-preview.vue.d.ts.map +1 -1
  625. package/types/x-modules/queries-preview/store/actions/fetch-and-save-query-preview.action.d.ts.map +1 -1
  626. package/types/x-modules/queries-preview/store/module.d.ts.map +1 -1
  627. package/types/x-modules/queries-preview/utils/get-hash-from-query-preview.d.ts +4 -2
  628. package/types/x-modules/queries-preview/utils/get-hash-from-query-preview.d.ts.map +1 -1
  629. package/types/x-modules/recommendations/components/recommendations.vue.d.ts +3 -3
  630. package/types/x-modules/related-prompts/components/index.d.ts +4 -0
  631. package/types/x-modules/related-prompts/components/index.d.ts.map +1 -0
  632. package/types/x-modules/related-prompts/components/related-prompt.vue.d.ts +28 -0
  633. package/types/x-modules/related-prompts/components/related-prompt.vue.d.ts.map +1 -0
  634. package/types/x-modules/related-prompts/components/related-prompts-list.vue.d.ts +106 -0
  635. package/types/x-modules/related-prompts/components/related-prompts-list.vue.d.ts.map +1 -0
  636. package/types/x-modules/related-prompts/components/related-prompts-tag-list.vue.d.ts +132 -0
  637. package/types/x-modules/related-prompts/components/related-prompts-tag-list.vue.d.ts.map +1 -0
  638. package/types/x-modules/related-prompts/events.types.d.ts +36 -0
  639. package/types/x-modules/related-prompts/events.types.d.ts.map +1 -0
  640. package/types/x-modules/related-prompts/index.d.ts +6 -0
  641. package/types/x-modules/related-prompts/index.d.ts.map +1 -0
  642. package/types/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.d.ts +17 -0
  643. package/types/x-modules/related-prompts/store/actions/fetch-and-save-related-prompts.action.d.ts.map +1 -0
  644. package/types/x-modules/related-prompts/store/actions/fetch-related-prompts.action.d.ts +13 -0
  645. package/types/x-modules/related-prompts/store/actions/fetch-related-prompts.action.d.ts.map +1 -0
  646. package/types/x-modules/related-prompts/store/emitters.d.ts +9 -0
  647. package/types/x-modules/related-prompts/store/emitters.d.ts.map +1 -0
  648. package/types/x-modules/related-prompts/store/getters/request.getter.d.ts +13 -0
  649. package/types/x-modules/related-prompts/store/getters/request.getter.d.ts.map +1 -0
  650. package/types/x-modules/related-prompts/store/index.d.ts +7 -0
  651. package/types/x-modules/related-prompts/store/index.d.ts.map +1 -0
  652. package/types/x-modules/related-prompts/store/module.d.ts +8 -0
  653. package/types/x-modules/related-prompts/store/module.d.ts.map +1 -0
  654. package/types/x-modules/related-prompts/store/types.d.ts +108 -0
  655. package/types/x-modules/related-prompts/store/types.d.ts.map +1 -0
  656. package/types/x-modules/related-prompts/types.d.ts +10 -0
  657. package/types/x-modules/related-prompts/types.d.ts.map +1 -0
  658. package/types/x-modules/related-prompts/wiring.d.ts +38 -0
  659. package/types/x-modules/related-prompts/wiring.d.ts.map +1 -0
  660. package/types/x-modules/related-prompts/x-module.d.ts +16 -0
  661. package/types/x-modules/related-prompts/x-module.d.ts.map +1 -0
  662. package/types/x-modules/related-tags/components/related-tags.vue.d.ts +3 -3
  663. package/types/x-modules/scroll/components/scroll-to-top.vue.d.ts +5 -5
  664. package/types/x-modules/search/components/banners-list.vue.d.ts +3 -3
  665. package/types/x-modules/search/components/partial-results-list.vue.d.ts +3 -3
  666. package/types/x-modules/search/components/promoteds-list.vue.d.ts +3 -3
  667. package/types/x-modules/search/components/results-list.vue.d.ts +3 -3
  668. package/types/x-modules/search/components/sort-dropdown.vue.d.ts +1 -1
  669. package/types/x-modules/search/config.types.d.ts +2 -0
  670. package/types/x-modules/search/config.types.d.ts.map +1 -1
  671. package/types/x-modules/search/events.types.d.ts +4 -0
  672. package/types/x-modules/search/events.types.d.ts.map +1 -1
  673. package/types/x-modules/search/store/actions/fetch-and-save-search-response.action.d.ts.map +1 -1
  674. package/types/x-modules/search/store/actions/save-search-response.action.d.ts.map +1 -1
  675. package/types/x-modules/search/store/module.d.ts +2 -0
  676. package/types/x-modules/search/store/module.d.ts.map +1 -1
  677. package/types/x-modules/search/store/types.d.ts +9 -1
  678. package/types/x-modules/search/store/types.d.ts.map +1 -1
  679. package/types/x-modules/search/wiring.d.ts +4 -0
  680. package/types/x-modules/search/wiring.d.ts.map +1 -1
  681. package/types/x-modules/search-box/components/search-input-placeholder.vue.d.ts +3 -3
  682. package/types/x-modules/tagging/components/tagging.vue.d.ts +14 -12
  683. package/types/x-modules/tagging/components/tagging.vue.d.ts.map +1 -1
  684. package/types/x-modules/tagging/config.types.d.ts +3 -3
  685. package/types/x-modules/tagging/config.types.d.ts.map +1 -1
  686. package/types/x-modules/tagging/events.types.d.ts +2 -2
  687. package/types/x-modules/tagging/service/{pdp-add-to-cart.service.d.ts → external-tagging.service.d.ts} +31 -13
  688. package/types/x-modules/tagging/service/external-tagging.service.d.ts.map +1 -0
  689. package/types/x-modules/tagging/service/index.d.ts +1 -1
  690. package/types/x-modules/tagging/service/index.d.ts.map +1 -1
  691. package/types/x-modules/tagging/service/types.d.ts +13 -4
  692. package/types/x-modules/tagging/service/types.d.ts.map +1 -1
  693. package/types/x-modules/tagging/store/module.d.ts.map +1 -1
  694. package/types/x-modules/tagging/wiring.d.ts +54 -2
  695. package/types/x-modules/tagging/wiring.d.ts.map +1 -1
  696. package/types/x-modules/url/components/url-handler.vue.d.ts.map +1 -1
  697. package/types/x-modules/x-modules.types.d.ts +2 -0
  698. package/types/x-modules/x-modules.types.d.ts.map +1 -1
  699. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.clickedresultstoragekey.md +0 -11
  700. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.clickedresultstoragettlms.md +0 -11
  701. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.instance.md +0 -13
  702. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.localstorageservice.md +0 -11
  703. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.md +0 -41
  704. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.result_clicked_id_key.md +0 -13
  705. package/docs/API-reference/api/x-components.defaultpdpaddtocartservice.sessionstorageservice.md +0 -11
  706. package/docs/API-reference/api/x-components.pdpaddtocartservice.md +0 -22
  707. package/docs/API-reference/api/x-components.taggingconfig.clickedresultstoragettlms.md +0 -13
  708. package/docs/API-reference/api/x-components.usestore.md +0 -19
  709. package/docs/assets/features/overview-my-history.svg +0 -279
  710. package/docs/assets/features/overview-product-results-card.svg +0 -128
  711. package/docs/assets/interface/build-search-ui.svg +0 -167
  712. package/docs/assets/interface/experience-search-intro.svg +0 -1
  713. package/docs/assets/interface/integration-guide.svg +0 -1
  714. package/docs/assets/interface/integration-video.png +0 -0
  715. package/docs/assets/interface/x-architecture.svg +0 -1
  716. package/docs/assets/interface/x-empathize.gif +0 -0
  717. package/docs/assets/interface/x-facets.gif +0 -0
  718. package/docs/assets/interface/x-facets.svg +0 -189
  719. package/docs/assets/interface/x-history-queries.gif +0 -0
  720. package/docs/assets/interface/x-id-results.gif +0 -0
  721. package/docs/assets/interface/x-next-queries.gif +0 -0
  722. package/docs/assets/interface/x-popular-searches.gif +0 -0
  723. package/docs/assets/interface/x-query-suggestions.gif +0 -0
  724. package/docs/assets/interface/x-recommendations.gif +0 -0
  725. package/docs/assets/interface/x-recommendations.svg +0 -472
  726. package/docs/assets/interface/x-related-tags.gif +0 -0
  727. package/docs/assets/interface/x-results-layout.svg +0 -259
  728. package/docs/assets/interface/x-search-box-elements.svg +0 -1
  729. package/docs/assets/interface/x-search-box.svg +0 -60
  730. package/docs/build-search-ui/README.md +0 -127
  731. package/docs/build-search-ui/sidebar.js +0 -7
  732. package/docs/build-search-ui/web-archetype-development-guide.md +0 -186
  733. package/docs/build-search-ui/web-archetype-integration-guide.md +0 -458
  734. package/docs/build-search-ui/web-how-to-use-x-components-guide.md +0 -200
  735. package/docs/build-search-ui/web-x-architecture.md +0 -83
  736. package/docs/build-search-ui/web-x-components-development-guide.md +0 -157
  737. package/docs/experience-search-and-discovery/README.md +0 -132
  738. package/docs/experience-search-and-discovery/empathize.md +0 -119
  739. package/docs/experience-search-and-discovery/facets-and-filters.md +0 -154
  740. package/docs/experience-search-and-discovery/history-queries.md +0 -70
  741. package/docs/experience-search-and-discovery/id-results.md +0 -49
  742. package/docs/experience-search-and-discovery/my-history.md +0 -60
  743. package/docs/experience-search-and-discovery/next-queries.md +0 -72
  744. package/docs/experience-search-and-discovery/popular-searches.md +0 -50
  745. package/docs/experience-search-and-discovery/product-results-ui.md +0 -82
  746. package/docs/experience-search-and-discovery/query-suggestions.md +0 -48
  747. package/docs/experience-search-and-discovery/recommendations.md +0 -134
  748. package/docs/experience-search-and-discovery/related-tags.md +0 -66
  749. package/docs/experience-search-and-discovery/search-box.md +0 -99
  750. package/docs/experience-search-and-discovery/serp-ui.md +0 -125
  751. package/docs/experience-search-and-discovery/sidebar.js +0 -17
  752. package/docs/experience-search-and-discovery/web-local-storage.md +0 -30
  753. package/docs/input-status-machine-state.png +0 -0
  754. package/js/composables/use-store.js +0 -15
  755. package/js/composables/use-store.js.map +0 -1
  756. package/js/utils/options-api.js +0 -4
  757. package/js/utils/options-api.js.map +0 -1
  758. package/js/x-modules/tagging/service/pdp-add-to-cart.service.js.map +0 -1
  759. package/types/utils/options-api.d.ts +0 -3
  760. package/types/utils/options-api.d.ts.map +0 -1
  761. package/types/x-modules/tagging/service/pdp-add-to-cart.service.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tagging.vue.js","sources":["../../../../../src/x-modules/tagging/components/tagging.vue"],"sourcesContent":["<script lang=\"ts\">\n import { computed, defineComponent, inject, onMounted, watch } from 'vue';\n import { SnippetConfig } from '../../../x-installer/api/api.types';\n import { taggingXModule } from '../x-module';\n import { TaggingConfig } from '../config.types';\n import { useXBus } from '../../../composables/use-x-bus';\n /**\n * This component enables and manages the sending of information to the\n * [Empathy Tagging API](https://docs.empathy.co/develop-empathy-platform/api-reference/tagging-api.html).\n * It allows you to activate or deactivate the session id management through the `consent` prop.\n *\n * @public\n */\n export default defineComponent({\n name: 'Tagging',\n xModule: taggingXModule.name,\n props: {\n /**\n * The TTL in milliseconds for storing the clicked result info.\n */\n clickedResultStorageTTLMs: {\n type: Number,\n default: 30000\n },\n /**\n * The Object key of the {@link @empathyco/x-types#Result} clicked by the user\n * that will be used as id for the storage. By default, the Result url will be used.\n */\n clickedResultStorageKey: {\n type: String,\n default: 'url'\n },\n /**\n * The session TTL in milliseconds.\n */\n sessionTTLMs: Number,\n /**\n * The debounce time in milliseconds to track the query.\n */\n queryTaggingDebounceMs: {\n type: Number,\n default: 2000\n },\n /**\n * The consent to be emitted.\n */\n consent: {\n type: Boolean,\n default: null\n }\n },\n setup(props) {\n const xBus = useXBus();\n\n /**\n * It injects {@link SnippetConfig} provided by an ancestor as snippetConfig.\n */\n const snippetConfig = inject<SnippetConfig | undefined>('snippetConfig');\n\n /**\n * The active consent, selected from the `consent` prop and the `snippetConfig.consent`\n * property. False by default.\n *\n * @remarks If the consent is undefined in the prop and in the snippetConfig, it will return\n * false.\n *\n * @returns A boolean that represents if the consent is accepted or not.\n */\n const activeConsent = computed(() => props.consent ?? snippetConfig?.consent ?? false);\n\n /**\n * The tagging config to be emitted.\n */\n const taggingConfig = computed<TaggingConfig>(() => {\n return {\n queryTaggingDebounceMs: props.queryTaggingDebounceMs,\n sessionTTLMs: props.sessionTTLMs as number,\n clickedResultStorageTTLMs: props.clickedResultStorageTTLMs,\n clickedResultStorageKey: props.clickedResultStorageKey\n };\n });\n\n /**\n * Emits the {@link TaggingXEvents.PDPIsLoaded} XEvent if the snippet config contains\n * a product id.\n */\n onMounted(() => {\n if (snippetConfig?.productId) {\n xBus.emit('PDPIsLoaded', snippetConfig.productId);\n }\n });\n\n /**\n * Emmits the consent when it changes.\n */\n watch(activeConsent, () => xBus.emit('ConsentProvided', activeConsent.value), {\n immediate: true\n });\n\n /**\n * Emmits the tagging config when it changes.\n */\n watch(taggingConfig, () => xBus.emit('TaggingConfigProvided', taggingConfig.value), {\n immediate: true\n });\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n });\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`ConsentProvided`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`TaggingConfigProvided`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nThis component manages the tagging of the API to track the different features. This component\ndoesn't render elements to the DOM.\n\n```vue\n<template>\n <Tagging />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\n### Play with props\n\nIn this example, the `Tagging` component will emit `ConsentProvided` with payload false by default\nif the consent is not provided, the `TaggingConfigProvided` event will be emitted only if the props\n`queryTaggingDebounceMs`, `sessionDurationMs`, `clickedResultStorageTTLMs` or\n`clickedResultStorageKey`are defined.\n\nEvery time the user clicks a result the information for the clicked product will be stored on the\nbrowser during 30 seconds which is the default value for the prop `clickedResultStorageTTLMs`. To\ndistinguish the storage information for the different results the product url will be used since\n`clickedResultStorageKey` default value is 'url'.\n\n```vue\n<template>\n <Tagging :consent=\"true\" :queryTaggingDebounceMs=\"300\" :sessionDurationMs=\"30000\" />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\nIn this example, the clicked result information will be stored on the browser during 60 seconds and\nthe product id will be used as storage key.\n\n```vue\n<template>\n <Tagging :clickedResultStorageTTLMs=\"60000\" :clickedResultStorageKey=\"'id'\" />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\n### Play with events\n\nThe `Tagging` will emit the `ConsentProvided` when the component is loaded and the consent is set by\nthe prop or getting the value from the snippet config.\n\nThe `Tagging` will emit the `TaggingConfigProvided` when the component is loaded with the new\n[`TaggingConfig`](./../../api/x-components.taggingconfig.md) using the prop values.\n</docs>\n"],"names":[],"mappings":";;;;AAME;;;;;;AAME;AACF,gBAAe,eAAe,CAAC;AAC7B,IAAA,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,cAAc,CAAC,IAAI;AAC5B,IAAA,KAAK,EAAE;AACL;;AAEE;AACF,QAAA,yBAAyB,EAAE;AACzB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,KAAI;AACd,SAAA;AACD;;;AAGE;AACF,QAAA,uBAAuB,EAAE;AACvB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,KAAI;AACd,SAAA;AACD;;AAEE;AACF,QAAA,YAAY,EAAE,MAAM;AACpB;;AAEE;AACF,QAAA,sBAAsB,EAAE;AACtB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,IAAG;AACb,SAAA;AACD;;AAEE;AACF,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAG;AACd,SAAA;AACD,KAAA;AACD,IAAA,KAAK,CAAC,KAAK,EAAA;AACT,QAAA,MAAM,IAAG,GAAI,OAAO,EAAE,CAAA;AAEtB;;AAEE;AACF,QAAA,MAAM,aAAY,GAAI,MAAM,CAA4B,eAAe,CAAC,CAAA;AAExE;;;;;;;;AAQE;AACF,QAAA,MAAM,aAAY,GAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,OAAM,IAAK,aAAa,EAAE,OAAQ,IAAG,KAAK,CAAC,CAAA;AAEtF;;AAEE;AACF,QAAA,MAAM,gBAAgB,QAAQ,CAAgB,MAAM;YAClD,OAAO;gBACL,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,YAAY,EAAE,KAAK,CAAC,YAAsB;gBAC1C,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;gBAC1D,uBAAuB,EAAE,KAAK,CAAC,uBAAsB;aACtD,CAAA;AACH,SAAC,CAAC,CAAA;AAEF;;;AAGE;QACF,SAAS,CAAC,MAAM;YACd,IAAI,aAAa,EAAE,SAAS,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;AACnD,aAAA;AACF,SAAC,CAAC,CAAA;AAEF;;AAEE;AACF,QAAA,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC5E,YAAA,SAAS,EAAE,IAAG;AACf,SAAA,CAAC,CAAA;AAEF;;AAEE;AACF,QAAA,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAClF,YAAA,SAAS,EAAE,IAAG;AACf,SAAA,CAAC,CAAA;;AAGF,QAAA,OAAO,MAAO,GAAC,CAAA;KACjB;AACD,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"tagging.vue.js","sources":["../../../../../src/x-modules/tagging/components/tagging.vue"],"sourcesContent":["<script lang=\"ts\">\n import { computed, defineComponent, inject, onMounted, watch } from 'vue';\n import { SnippetConfig } from '../../../x-installer/api/api.types';\n import { taggingXModule } from '../x-module';\n import { TaggingConfig } from '../config.types';\n import { useXBus } from '../../../composables/use-x-bus';\n /**\n * This component enables and manages the sending of information to the\n * [Empathy Tagging API](https://docs.empathy.co/develop-empathy-platform/api-reference/tagging-api.html).\n * It allows you to activate or deactivate the session id management through the `consent` prop.\n *\n * @public\n */\n export default defineComponent({\n name: 'Tagging',\n xModule: taggingXModule.name,\n props: {\n /**\n * The TTL in milliseconds for storing the result info.\n */\n storageTTLMs: {\n type: Number,\n default: 30000\n },\n /**\n * The Object key of the {@link @empathyco/x-types#Result} clicked or added to the cart by the user\n * that will be used as id for the storage.\n * By default, the Result url will be used.\n */\n storageKey: {\n type: String,\n default: 'url'\n },\n /**\n * The session TTL in milliseconds.\n */\n sessionTTLMs: Number,\n /**\n * The debounce time in milliseconds to track the query.\n */\n queryTaggingDebounceMs: {\n type: Number,\n default: 2000\n },\n /**\n * The consent to be emitted.\n */\n consent: {\n type: Boolean,\n default: null\n }\n },\n setup(props) {\n const xBus = useXBus();\n\n /**\n * It injects {@link SnippetConfig} provided by an ancestor as snippetConfig.\n */\n const snippetConfig = inject<SnippetConfig | undefined>('snippetConfig');\n\n /**\n * The active consent, selected from the `consent` prop and the `snippetConfig.consent`\n * property. False by default.\n *\n * @remarks If the consent is undefined in the prop and in the snippetConfig, it will return\n * false.\n *\n * @returns A boolean that represents if the consent is accepted or not.\n */\n const activeConsent = computed(() => props.consent ?? snippetConfig?.consent ?? false);\n\n /**\n * The tagging config to be emitted.\n */\n const taggingConfig = computed<TaggingConfig>(() => {\n return {\n queryTaggingDebounceMs: props.queryTaggingDebounceMs,\n sessionTTLMs: props.sessionTTLMs as number,\n storageTTLMs: props.storageTTLMs,\n storageKey: props.storageKey\n };\n });\n\n /**\n * Emits the {@link TaggingXEvents.PDPIsLoaded} XEvent if the snippet config contains\n * a product id.\n */\n onMounted(() => {\n if (snippetConfig?.productId) {\n xBus.emit('PDPIsLoaded', snippetConfig.productId);\n }\n });\n\n /**\n * Emmits the consent when it changes.\n */\n watch(activeConsent, () => xBus.emit('ConsentProvided', activeConsent.value), {\n immediate: true\n });\n\n /**\n * Emmits the tagging config when it changes.\n */\n watch(taggingConfig, () => xBus.emit('TaggingConfigProvided', taggingConfig.value), {\n immediate: true\n });\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n });\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`ConsentProvided`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`TaggingConfigProvided`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nThis component manages the tagging of the API to track the different features. This component\ndoesn't render elements to the DOM.\n\n```vue\n<template>\n <Tagging />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\n### Play with props\n\nIn this example, the `Tagging` component will emit `ConsentProvided` with payload false by default\nif the consent is not provided, the `TaggingConfigProvided` event will be emitted only if the props\n`queryTaggingDebounceMs`, `sessionDurationMs`, `storageTTLMs` or `storageKey`are defined.\n\nEvery time the user clicks a result or adds a result to the cart, the information for the product\nwill be stored on the browser during 30 seconds which is the default value for the prop\n`storageTTLMs`. To distinguish the storage information for the different results the product url\nwill be used since `storageKey` default value is 'url'.\n\n```vue\n<template>\n <Tagging :consent=\"true\" :queryTaggingDebounceMs=\"300\" :sessionDurationMs=\"30000\" />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\nIn this example, the clicked or added to cart result information will be stored on the browser\nduring 60 seconds and the product id will be used as storage key\n\n```vue\n<template>\n <Tagging :storageTTLMs=\"60000\" :storageKey=\"'id'\" />\n</template>\n\n<script>\n import { Tagging } from '@empathyco/x-components/tagging';\n\n export default {\n name: 'TaggingDemo',\n components: {\n Tagging\n }\n };\n</script>\n```\n\n### Play with events\n\nThe `Tagging` will emit the `ConsentProvided` when the component is loaded and the consent is set by\nthe prop or getting the value from the snippet config.\n\nThe `Tagging` will emit the `TaggingConfigProvided` when the component is loaded with the new\n[`TaggingConfig`](./../../api/x-components.taggingconfig.md) using the prop values.\n</docs>\n"],"names":[],"mappings":";;;;AAME;;;;;;AAME;AACF,gBAAe,eAAe,CAAC;AAC7B,IAAA,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,cAAc,CAAC,IAAI;AAC5B,IAAA,KAAK,EAAE;AACL;;AAEE;AACF,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,KAAI;AACd,SAAA;AACD;;;;AAIE;AACF,QAAA,UAAU,EAAE;AACV,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,KAAI;AACd,SAAA;AACD;;AAEE;AACF,QAAA,YAAY,EAAE,MAAM;AACpB;;AAEE;AACF,QAAA,sBAAsB,EAAE;AACtB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,IAAG;AACb,SAAA;AACD;;AAEE;AACF,QAAA,OAAO,EAAE;AACP,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAG;AACd,SAAA;AACD,KAAA;AACD,IAAA,KAAK,CAAC,KAAK,EAAA;AACT,QAAA,MAAM,IAAG,GAAI,OAAO,EAAE,CAAA;AAEtB;;AAEE;AACF,QAAA,MAAM,aAAY,GAAI,MAAM,CAA4B,eAAe,CAAC,CAAA;AAExE;;;;;;;;AAQE;AACF,QAAA,MAAM,aAAY,GAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,OAAM,IAAK,aAAa,EAAE,OAAQ,IAAG,KAAK,CAAC,CAAA;AAEtF;;AAEE;AACF,QAAA,MAAM,gBAAgB,QAAQ,CAAgB,MAAM;YAClD,OAAO;gBACL,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;gBACpD,YAAY,EAAE,KAAK,CAAC,YAAsB;gBAC1C,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAS;aAC5B,CAAA;AACH,SAAC,CAAC,CAAA;AAEF;;;AAGE;QACF,SAAS,CAAC,MAAM;YACd,IAAI,aAAa,EAAE,SAAS,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;AACnD,aAAA;AACF,SAAC,CAAC,CAAA;AAEF;;AAEE;AACF,QAAA,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC5E,YAAA,SAAS,EAAE,IAAG;AACf,SAAA,CAAC,CAAA;AAEF;;AAEE;AACF,QAAA,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAClF,YAAA,SAAS,EAAE,IAAG;AACf,SAAA,CAAC,CAAA;;AAGF,QAAA,OAAO,MAAO,GAAC,CAAA;KACjB;AACD,CAAA,CAAC;;;;"}
@@ -9,11 +9,11 @@ import '../../../plugins/x-bus.js';
9
9
  import { XPlugin } from '../../../plugins/x-plugin.js';
10
10
 
11
11
  /**
12
- * Default implementation for the {@link PDPAddToCartService}.
12
+ * Default implementation for the {@link ExternalTaggingService}.
13
13
  *
14
14
  * @public
15
15
  */
16
- class DefaultPDPAddToCartService {
16
+ class DefaultExternalTaggingService {
17
17
  constructor(localStorageService = new BrowserStorageService(localStorage, 'x'), sessionStorageService = new BrowserStorageService(sessionStorage, 'x')) {
18
18
  this.localStorageService = localStorageService;
19
19
  this.sessionStorageService = sessionStorageService;
@@ -21,25 +21,41 @@ class DefaultPDPAddToCartService {
21
21
  get store() {
22
22
  return XPlugin.store;
23
23
  }
24
- get clickedResultStorageKey() {
25
- return this.store.state.x.tagging.config.clickedResultStorageKey;
24
+ get storageKey() {
25
+ return this.store.state.x.tagging.config.storageKey;
26
26
  }
27
- get clickedResultStorageTTLMs() {
28
- return this.store.state.x.tagging.config.clickedResultStorageTTLMs;
27
+ get storageTTLMs() {
28
+ return this.store.state.x.tagging.config.storageTTLMs;
29
29
  }
30
30
  /**
31
31
  * Stores in the local storage the information from the Result clicked by the user
32
- * in order to be able to track later on.
32
+ * in order to be able to track the add to cart later on the result's PDP.
33
33
  *
34
34
  * @param result - The result to store.
35
35
  *
36
36
  * @public
37
37
  */
38
38
  storeResultClicked(result) {
39
- const key = result[this.clickedResultStorageKey];
40
- const storageId = this.getStorageId(key);
39
+ const key = result[this.storageKey];
40
+ const storageId = this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, key);
41
41
  if (storageId) {
42
- this.localStorageService.setItem(storageId, result, this.clickedResultStorageTTLMs);
42
+ this.localStorageService.setItem(storageId, result, this.storageTTLMs);
43
+ }
44
+ }
45
+ /**
46
+ * Stores in the session storage the information from the Result added to the cart
47
+ * by the user in order to be able to track the checkout later on when the checkout
48
+ * process has been completed by shopper.
49
+ *
50
+ * @param result - The result to store.
51
+ *
52
+ * @public
53
+ */
54
+ storeAddToCart(result) {
55
+ const key = result[this.storageKey];
56
+ const storageId = this.getStorageId(DefaultExternalTaggingService.ADD_TO_CART_ID_KEY, key);
57
+ if (storageId) {
58
+ this.sessionStorageService.setItem(storageId, result);
43
59
  }
44
60
  }
45
61
  /**
@@ -51,7 +67,7 @@ class DefaultPDPAddToCartService {
51
67
  * @public
52
68
  */
53
69
  moveToSessionStorage(id) {
54
- const storageId = this.getStorageId(id);
70
+ const storageId = this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, id);
55
71
  if (storageId) {
56
72
  const result = this.localStorageService.removeItem(storageId);
57
73
  if (result) {
@@ -60,41 +76,50 @@ class DefaultPDPAddToCartService {
60
76
  }
61
77
  }
62
78
  /**
63
- * Checks if the session storage contains a result information for given id or the current url
64
- * and tracks the add to cart if exists.
79
+ * Checks if the session storage contains a result information for a given id or the current url.
80
+ * If exists, it tracks the add to cart and saves the add to cart information into session
81
+ * storage.
65
82
  *
66
83
  * @param id - The id of the result to track.
67
84
  *
68
85
  * @public
69
86
  */
70
87
  trackAddToCart(id) {
71
- const storageId = this.clickedResultStorageKey === 'url' ? this.getStorageId() : this.getStorageId(id);
88
+ const storageId = this.storageKey === 'url'
89
+ ? this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY)
90
+ : this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, id);
72
91
  if (storageId) {
73
92
  const result = this.sessionStorageService.getItem(storageId);
74
93
  if (result?.tagging?.add2cart) {
75
94
  result.tagging.add2cart.params.location = 'pdp';
76
95
  this.store.dispatch('x/tagging/track', result.tagging.add2cart);
96
+ /**
97
+ * Done after tracking the add to cart to avoid tracking the checkout without
98
+ * an add to cart, in case the tracking fails.
99
+ */
100
+ this.storeAddToCart(result);
77
101
  }
78
102
  }
79
103
  }
80
104
  /**
81
105
  * Calculates the browser storage key for the given id.
82
106
  *
107
+ * @param keyPrefix - The key prefix to use in the storage.
83
108
  * @param id - The id to be used for the storage key.
84
109
  *
85
110
  * @returns The complete key to be used for storage.
86
111
  *
87
112
  * @internal
88
113
  */
89
- getStorageId(id) {
90
- if (this.clickedResultStorageKey === 'url') {
114
+ getStorageId(keyPrefix, id) {
115
+ if (this.storageKey === 'url') {
91
116
  let url = id ?? window.location.href;
92
117
  url = url.replace(/\s|\+/g, '%20');
93
118
  const pathName = this.getPathName(url);
94
- return `${DefaultPDPAddToCartService.RESULT_CLICKED_ID_KEY}-${pathName}`;
119
+ return `${keyPrefix}-${pathName}`;
95
120
  }
96
121
  else if (id) {
97
- return `${DefaultPDPAddToCartService.RESULT_CLICKED_ID_KEY}-${id}`;
122
+ return `${keyPrefix}-${id}`;
98
123
  }
99
124
  else {
100
125
  this.showWarningMessage();
@@ -107,7 +132,7 @@ class DefaultPDPAddToCartService {
107
132
  * @internal
108
133
  */
109
134
  showWarningMessage() {
110
- if (this.clickedResultStorageKey !== 'url') {
135
+ if (this.storageKey !== 'url') {
111
136
  //TODO: add here logger
112
137
  //eslint-disable-next-line no-console
113
138
  console.warn('No product id was provided but the storage was not configured to use the url');
@@ -143,15 +168,21 @@ class DefaultPDPAddToCartService {
143
168
  }
144
169
  }
145
170
  /**
146
- * Session id key to use as key in the storage.
171
+ * Session id key to use as key in the storage for result clicks.
172
+ *
173
+ * @public
174
+ */
175
+ DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY = 'add-to-cart';
176
+ /**
177
+ * Session id key to use as key in the storage for add to carts.
147
178
  *
148
179
  * @public
149
180
  */
150
- DefaultPDPAddToCartService.RESULT_CLICKED_ID_KEY = 'add-to-cart';
181
+ DefaultExternalTaggingService.ADD_TO_CART_ID_KEY = 'checkout';
151
182
  /**
152
- * Global instance of the {@link PDPAddToCartService}.
183
+ * Global instance of the {@link ExternalTaggingService}.
153
184
  */
154
- DefaultPDPAddToCartService.instance = new DefaultPDPAddToCartService();
185
+ DefaultExternalTaggingService.instance = new DefaultExternalTaggingService();
155
186
 
156
- export { DefaultPDPAddToCartService };
157
- //# sourceMappingURL=pdp-add-to-cart.service.js.map
187
+ export { DefaultExternalTaggingService };
188
+ //# sourceMappingURL=external-tagging.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-tagging.service.js","sources":["../../../../../src/x-modules/tagging/service/external-tagging.service.ts"],"sourcesContent":["import { Store } from 'vuex';\nimport { Result } from '@empathyco/x-types';\nimport { BrowserStorageService, StorageService } from '@empathyco/x-storage-service';\nimport { RootXStoreState } from '../../../store/index';\nimport { XPlugin } from '../../../plugins/index';\nimport { ExternalTaggingService } from './types';\n\n/**\n * Default implementation for the {@link ExternalTaggingService}.\n *\n * @public\n */\nexport class DefaultExternalTaggingService implements ExternalTaggingService {\n /**\n * Session id key to use as key in the storage for result clicks.\n *\n * @public\n */\n public static readonly RESULT_CLICKED_ID_KEY = 'add-to-cart';\n\n /**\n * Session id key to use as key in the storage for add to carts.\n *\n * @public\n */\n public static readonly ADD_TO_CART_ID_KEY = 'checkout';\n\n /**\n * Global instance of the {@link ExternalTaggingService}.\n */\n public static instance: ExternalTaggingService = new DefaultExternalTaggingService();\n\n public constructor(\n protected localStorageService: StorageService = new BrowserStorageService(localStorage, 'x'),\n protected sessionStorageService: StorageService = new BrowserStorageService(sessionStorage, 'x')\n ) {}\n\n protected get store(): Store<RootXStoreState> {\n return XPlugin.store;\n }\n\n protected get storageKey(): string {\n return this.store.state.x.tagging.config.storageKey as string;\n }\n\n protected get storageTTLMs(): number {\n return this.store.state.x.tagging.config.storageTTLMs as number;\n }\n\n /**\n * Stores in the local storage the information from the Result clicked by the user\n * in order to be able to track the add to cart later on the result's PDP.\n *\n * @param result - The result to store.\n *\n * @public\n */\n storeResultClicked(result: Result): void {\n const key = result[this.storageKey as keyof Result] as string;\n const storageId = this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, key);\n if (storageId) {\n this.localStorageService.setItem(storageId, result, this.storageTTLMs);\n }\n }\n\n /**\n * Stores in the session storage the information from the Result added to the cart\n * by the user in order to be able to track the checkout later on when the checkout\n * process has been completed by shopper.\n *\n * @param result - The result to store.\n *\n * @public\n */\n storeAddToCart(result: Result): void {\n const key = result[this.storageKey as keyof Result] as string;\n const storageId = this.getStorageId(DefaultExternalTaggingService.ADD_TO_CART_ID_KEY, key);\n if (storageId) {\n this.sessionStorageService.setItem(storageId, result);\n }\n }\n\n /**\n * Checks if the local storage contains a result information for the given id and moves\n * the result info from the local storage to the session storage.\n *\n * @param id - The id of the result to move to the session storage.\n *\n * @public\n */\n moveToSessionStorage(id?: string): void {\n const storageId = this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, id);\n if (storageId) {\n const result = this.localStorageService.removeItem(storageId);\n if (result) {\n this.sessionStorageService.setItem(storageId, result);\n }\n }\n }\n\n /**\n * Checks if the session storage contains a result information for a given id or the current url.\n * If exists, it tracks the add to cart and saves the add to cart information into session\n * storage.\n *\n * @param id - The id of the result to track.\n *\n * @public\n */\n trackAddToCart(id?: string): void {\n const storageId =\n this.storageKey === 'url'\n ? this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY)\n : this.getStorageId(DefaultExternalTaggingService.RESULT_CLICKED_ID_KEY, id);\n if (storageId) {\n const result = this.sessionStorageService.getItem<Result>(storageId);\n if (result?.tagging?.add2cart) {\n result.tagging.add2cart.params.location = 'pdp';\n this.store.dispatch('x/tagging/track', result.tagging.add2cart);\n /**\n * Done after tracking the add to cart to avoid tracking the checkout without\n * an add to cart, in case the tracking fails.\n */\n this.storeAddToCart(result);\n }\n }\n }\n\n /**\n * Calculates the browser storage key for the given id.\n *\n * @param keyPrefix - The key prefix to use in the storage.\n * @param id - The id to be used for the storage key.\n *\n * @returns The complete key to be used for storage.\n *\n * @internal\n */\n protected getStorageId(keyPrefix: string, id?: string): string | null {\n if (this.storageKey === 'url') {\n let url = id ?? window.location.href;\n url = url.replace(/\\s|\\+/g, '%20');\n const pathName = this.getPathName(url);\n return `${keyPrefix}-${pathName}`;\n } else if (id) {\n return `${keyPrefix}-${id}`;\n } else {\n this.showWarningMessage();\n return null;\n }\n }\n\n /**\n * Logs a warning message in case the tracking cannot be done.\n *\n * @internal\n */\n protected showWarningMessage(): void {\n if (this.storageKey !== 'url') {\n //TODO: add here logger\n //eslint-disable-next-line no-console\n console.warn('No product id was provided but the storage was not configured to use the url');\n }\n }\n\n /**\n * Returns the pathname for a given url.\n *\n * @param url - The url to get the pathname from.\n *\n * @returns The pathname of the url.\n *\n * @internal\n */\n protected getPathName(url: string): string {\n let urlObject: URL;\n try {\n // Check if the url is relative or absolute path\n if (/^(\\.\\.\\/|\\.\\/|\\/)/.test(url)) {\n urlObject = new URL(url, location.origin);\n } else {\n urlObject = new URL(url);\n }\n return urlObject.pathname;\n } catch (e) {\n //TODO: add here logger\n //eslint-disable-next-line no-console\n console.warn(`There was a problem with url ${url}`);\n return url;\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ const taggingEmitters = createStoreEmitters(taggingXStoreModule, {
10
10
  ConsentChanged: state => state.consent,
11
11
  SearchTaggingReceived: state => state.queryTaggingInfo,
12
12
  ResultURLTrackingEnabled: {
13
- selector: state => state.config.clickedResultStorageKey,
13
+ selector: state => state.config.storageKey,
14
14
  filter: newValue => newValue === 'url'
15
15
  }
16
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"emitters.js","sources":["../../../../../src/x-modules/tagging/store/emitters.ts"],"sourcesContent":["import { createStoreEmitters } from '../../../store/utils/store-emitters.utils';\nimport { taggingXStoreModule } from './module';\n\n/**\n * {@link StoreEmitters} For the tagging module.\n *\n * @internal\n */\nexport const taggingEmitters = createStoreEmitters(taggingXStoreModule, {\n ConsentChanged: state => state.consent!,\n SearchTaggingReceived: state => state.queryTaggingInfo!,\n ResultURLTrackingEnabled: {\n selector: state => state.config.clickedResultStorageKey!,\n filter: newValue => newValue === 'url'\n }\n});\n"],"names":[],"mappings":";;;AAGA;;;;AAIG;AACU,MAAA,eAAe,GAAG,mBAAmB,CAAC,mBAAmB,EAAE;AACtE,IAAA,cAAc,EAAE,KAAK,IAAI,KAAK,CAAC,OAAQ;AACvC,IAAA,qBAAqB,EAAE,KAAK,IAAI,KAAK,CAAC,gBAAiB;AACvD,IAAA,wBAAwB,EAAE;QACxB,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAwB;AACxD,QAAA,MAAM,EAAE,QAAQ,IAAI,QAAQ,KAAK,KAAK;AACvC,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"emitters.js","sources":["../../../../../src/x-modules/tagging/store/emitters.ts"],"sourcesContent":["import { createStoreEmitters } from '../../../store/utils/store-emitters.utils';\nimport { taggingXStoreModule } from './module';\n\n/**\n * {@link StoreEmitters} For the tagging module.\n *\n * @internal\n */\nexport const taggingEmitters = createStoreEmitters(taggingXStoreModule, {\n ConsentChanged: state => state.consent!,\n SearchTaggingReceived: state => state.queryTaggingInfo!,\n ResultURLTrackingEnabled: {\n selector: state => state.config.storageKey!,\n filter: newValue => newValue === 'url'\n }\n});\n"],"names":[],"mappings":";;;AAGA;;;;AAIG;AACU,MAAA,eAAe,GAAG,mBAAmB,CAAC,mBAAmB,EAAE;AACtE,IAAA,cAAc,EAAE,KAAK,IAAI,KAAK,CAAC,OAAQ;AACvC,IAAA,qBAAqB,EAAE,KAAK,IAAI,KAAK,CAAC,gBAAiB;AACvD,IAAA,wBAAwB,EAAE;QACxB,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,UAAW;AAC3C,QAAA,MAAM,EAAE,QAAQ,IAAI,QAAQ,KAAK,KAAK;AACvC,KAAA;AACF,CAAA;;;;"}
@@ -11,12 +11,16 @@ const taggingXStoreModule = {
11
11
  config: {
12
12
  sessionTTLMs: 30 * 60 * 1000,
13
13
  queryTaggingDebounceMs: 2000,
14
- clickedResultStorageKey: null,
15
- clickedResultStorageTTLMs: null
14
+ storageKey: null,
15
+ storageTTLMs: null
16
16
  },
17
17
  consent: null,
18
18
  noResultsTaggingEnabled: false,
19
- queryTaggingInfo: null
19
+ queryTaggingInfo: null,
20
+ toolingTaggingInfo: {
21
+ toolingDisplayClick: null,
22
+ toolingDisplayAdd2Cart: null
23
+ }
20
24
  }),
21
25
  getters: {},
22
26
  mutations: {
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sources":["../../../../../src/x-modules/tagging/store/module.ts"],"sourcesContent":["import { TaggingRequest } from '@empathyco/x-types';\nimport { mergeConfig, setConfig } from '../../../store/utils/config-store.utils';\nimport { track } from './actions/track.action';\nimport { TaggingXStoreModule } from './types';\n\n/**\n * {@link XStoreModule} For the tagging module.\n *\n * @internal\n */\nexport const taggingXStoreModule: TaggingXStoreModule = {\n state: () => ({\n config: {\n sessionTTLMs: 30 * 60 * 1000,\n queryTaggingDebounceMs: 2000,\n clickedResultStorageKey: null,\n clickedResultStorageTTLMs: null\n },\n consent: null,\n noResultsTaggingEnabled: false,\n queryTaggingInfo: null\n }),\n getters: {},\n mutations: {\n setConsent(state, consent) {\n state.consent = consent;\n },\n setQueryTaggingInfo(state, queryTaggingInfo: TaggingRequest) {\n state.queryTaggingInfo = queryTaggingInfo;\n },\n setNoResultsTaggingEnabled(state, module) {\n if (module === 'semanticQueries') {\n state.noResultsTaggingEnabled = true;\n }\n },\n setConfig,\n mergeConfig\n },\n actions: {\n track\n }\n};\n"],"names":[],"mappings":";;;AAKA;;;;AAIG;AACU,MAAA,mBAAmB,GAAwB;AACtD,IAAA,KAAK,EAAE,OAAO;AACZ,QAAA,MAAM,EAAE;AACN,YAAA,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;AAC5B,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,uBAAuB,EAAE,IAAI;AAC7B,YAAA,yBAAyB,EAAE,IAAI;AAChC,SAAA;AACD,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,uBAAuB,EAAE,KAAK;AAC9B,QAAA,gBAAgB,EAAE,IAAI;KACvB,CAAC;AACF,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,SAAS,EAAE;QACT,UAAU,CAAC,KAAK,EAAE,OAAO,EAAA;AACvB,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SACzB;QACD,mBAAmB,CAAC,KAAK,EAAE,gBAAgC,EAAA;AACzD,YAAA,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;SAC3C;QACD,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAA;YACtC,IAAI,MAAM,KAAK,iBAAiB,EAAE;AAChC,gBAAA,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACtC,aAAA;SACF;QACD,SAAS;QACT,WAAW;AACZ,KAAA;AACD,IAAA,OAAO,EAAE;QACP,KAAK;AACN,KAAA;;;;;"}
1
+ {"version":3,"file":"module.js","sources":["../../../../../src/x-modules/tagging/store/module.ts"],"sourcesContent":["import { TaggingRequest } from '@empathyco/x-types';\nimport { mergeConfig, setConfig } from '../../../store/utils/config-store.utils';\nimport { track } from './actions/track.action';\nimport { TaggingXStoreModule } from './types';\n\n/**\n * {@link XStoreModule} For the tagging module.\n *\n * @internal\n */\nexport const taggingXStoreModule: TaggingXStoreModule = {\n state: () => ({\n config: {\n sessionTTLMs: 30 * 60 * 1000,\n queryTaggingDebounceMs: 2000,\n storageKey: null,\n storageTTLMs: null\n },\n consent: null,\n noResultsTaggingEnabled: false,\n queryTaggingInfo: null,\n toolingTaggingInfo: {\n toolingDisplayClick: null,\n toolingDisplayAdd2Cart: null\n }\n }),\n getters: {},\n mutations: {\n setConsent(state, consent) {\n state.consent = consent;\n },\n setQueryTaggingInfo(state, queryTaggingInfo: TaggingRequest) {\n state.queryTaggingInfo = queryTaggingInfo;\n },\n setNoResultsTaggingEnabled(state, module) {\n if (module === 'semanticQueries') {\n state.noResultsTaggingEnabled = true;\n }\n },\n setConfig,\n mergeConfig\n },\n actions: {\n track\n }\n};\n"],"names":[],"mappings":";;;AAKA;;;;AAIG;AACU,MAAA,mBAAmB,GAAwB;AACtD,IAAA,KAAK,EAAE,OAAO;AACZ,QAAA,MAAM,EAAE;AACN,YAAA,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;AAC5B,YAAA,sBAAsB,EAAE,IAAI;AAC5B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA;AACD,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,uBAAuB,EAAE,KAAK;AAC9B,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,kBAAkB,EAAE;AAClB,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,sBAAsB,EAAE,IAAI;AAC7B,SAAA;KACF,CAAC;AACF,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,SAAS,EAAE;QACT,UAAU,CAAC,KAAK,EAAE,OAAO,EAAA;AACvB,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;SACzB;QACD,mBAAmB,CAAC,KAAK,EAAE,gBAAgC,EAAA;AACzD,YAAA,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;SAC3C;QACD,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAA;YACtC,IAAI,MAAM,KAAK,iBAAiB,EAAE;AAChC,gBAAA,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACtC,aAAA;SACF;QACD,SAAS;QACT,WAAW;AACZ,KAAA;AACD,IAAA,OAAO,EAAE;QACP,KAAK;AACN,KAAA;;;;;"}
@@ -6,7 +6,7 @@ import { filter, mapWire } from '../../wiring/wires.operators.js';
6
6
  import { createWiring } from '../../wiring/wiring.utils.js';
7
7
  import { createOrigin } from '../../utils/origin.js';
8
8
  import '../../utils/storage.js';
9
- import { DefaultPDPAddToCartService } from './service/pdp-add-to-cart.service.js';
9
+ import { DefaultExternalTaggingService } from './service/external-tagging.service.js';
10
10
 
11
11
  /**
12
12
  * `tagging` {@link XModuleName | XModule name}.
@@ -35,21 +35,27 @@ const wireDispatch = namespacedWireDispatch(moduleName);
35
35
  */
36
36
  const wireSessionServiceWithoutPayload = wireServiceWithoutPayload(DefaultSessionService.instance);
37
37
  /**
38
- * Wires factory for {@link DefaultPDPAddToCartService}.
38
+ * Wires factory for {@link DefaultExternalTaggingService}.
39
39
  */
40
- const wirePDPAddToCartService = wireService(DefaultPDPAddToCartService.instance);
40
+ const wireExternalTaggingService = wireService(DefaultExternalTaggingService.instance);
41
41
  /**
42
42
  * Stores the given result on the local storage.
43
43
  *
44
44
  * @public
45
45
  */
46
- const storeClickedResultWire = wirePDPAddToCartService('storeResultClicked');
46
+ const storeClickedResultWire = wireExternalTaggingService('storeResultClicked');
47
+ /**
48
+ * Stores the result added to cart on the local storage.
49
+ *
50
+ * @public
51
+ */
52
+ const storeAddToCartWire = wireExternalTaggingService('storeAddToCart');
47
53
  /**
48
54
  * Moves the result information from the local storage to session storage.
49
55
  *
50
56
  * @public
51
57
  */
52
- const moveClickedResultToSessionWire = mapWire(wirePDPAddToCartService('moveToSessionStorage'), (payload) => {
58
+ const moveClickedResultToSessionWire = mapWire(wireExternalTaggingService('moveToSessionStorage'), (payload) => {
53
59
  return payload === 'url' ? undefined : payload;
54
60
  });
55
61
  /**
@@ -57,7 +63,7 @@ const moveClickedResultToSessionWire = mapWire(wirePDPAddToCartService('moveToSe
57
63
  *
58
64
  * @public
59
65
  */
60
- const trackAddToCartFromSessionStorage = wirePDPAddToCartService('trackAddToCart');
66
+ const trackAddToCartFromSessionStorage = wireExternalTaggingService('trackAddToCart');
61
67
  /**
62
68
  * Clears the session id.
63
69
  *
@@ -135,6 +141,24 @@ const trackAddToCartWire = createTrackWire('add2cart');
135
141
  * @public
136
142
  */
137
143
  const trackDisplayClickedWire = createTrackDisplayWire('displayClick');
144
+ /**
145
+ * Performs a track of a display result being clicked.
146
+ *
147
+ * @public
148
+ */
149
+ const trackToolingDisplayClickedWire = createTrackToolingDisplayWire();
150
+ /**
151
+ * Performs a track of a display result being clicked.
152
+ *
153
+ * @public
154
+ */
155
+ const trackToolingAdd2CartWire = createTrackToolingAdd2CartWire();
156
+ /**
157
+ * Performs a track of a clicked related prompt.
158
+ *
159
+ * @public
160
+ */
161
+ const trackRelatedPromptToolingDisplayClickWire = createTrackRelatedPromptToolingDisplayClickWire();
138
162
  /**
139
163
  * Performs a track of a display element appearing.
140
164
  *
@@ -198,6 +222,69 @@ function createTrackDisplayWire(property) {
198
222
  return taggingInfo;
199
223
  }), ({ eventPayload: { tagging } }) => !!tagging?.[property]);
200
224
  }
225
+ /**
226
+ * Update the tooling tagging params with the result information.
227
+ *
228
+ * @param taggingRequest - The tooling tagging request to be updated.
229
+ * @param result - The clicked result.
230
+ * @returns The tagging request updated.
231
+ *
232
+ * @internal
233
+ */
234
+ function updateToolingTaggingWithResult(taggingRequest, result) {
235
+ taggingRequest.params.productId = result.id;
236
+ taggingRequest.params.title = result.name;
237
+ taggingRequest.params.url = result.url;
238
+ return taggingRequest;
239
+ }
240
+ /**
241
+ * Factory helper to create a wire for the track of the tooling display click.
242
+ *
243
+ * @returns A new wire for the tooling display click of the taggable element.
244
+ *
245
+ * @public
246
+ */
247
+ function createTrackToolingDisplayWire() {
248
+ return filter(wireDispatch('track', ({ eventPayload, metadata }) => {
249
+ const taggingInfo = metadata.toolingTagging;
250
+ const resultInfo = eventPayload;
251
+ updateToolingTaggingWithResult(taggingInfo, resultInfo);
252
+ return taggingInfo;
253
+ }), ({ metadata }) => !!metadata?.toolingTagging);
254
+ }
255
+ /**
256
+ * Factory helper to create a wire for the track of the tooling display add to cart.
257
+ *
258
+ * @returns A new wire for the tooling display add to cart of the taggable element.
259
+ *
260
+ * @public
261
+ */
262
+ function createTrackToolingAdd2CartWire() {
263
+ return filter(wireDispatch('track', ({ eventPayload, metadata }) => {
264
+ const taggingInfo = metadata.toolingAdd2CartTagging;
265
+ const resultInfo = eventPayload;
266
+ updateToolingTaggingWithResult(taggingInfo, resultInfo);
267
+ return taggingInfo;
268
+ }), ({ metadata }) => !!metadata?.toolingAdd2CartTagging);
269
+ }
270
+ /**
271
+ * Factory helper to create a wire for the track of the tooling display click in a related prompt.
272
+ *
273
+ * @returns A new wire for the tooling display click of the taggable element.
274
+ *
275
+ * @public
276
+ */
277
+ function createTrackRelatedPromptToolingDisplayClickWire() {
278
+ return filter(wireDispatch('track', ({ metadata }) => {
279
+ const relatedPrompt = metadata.relatedPrompt;
280
+ const taggingInfo = relatedPrompt.tagging
281
+ ?.toolingDisplayClickTagging;
282
+ taggingInfo.params.productId = 'EXPAND';
283
+ taggingInfo.params.title = relatedPrompt.suggestionText;
284
+ taggingInfo.params.url = 'none';
285
+ return taggingInfo;
286
+ }), ({ metadata }) => metadata?.selectedPrompt === -1);
287
+ }
201
288
  /**
202
289
  * Factory helper to create a wire to set the queryTagging.
203
290
  *
@@ -244,7 +331,8 @@ const taggingWiring = createWiring({
244
331
  },
245
332
  UserClickedResultAddToCart: {
246
333
  trackAddToCartWire,
247
- trackResultClickedWire
334
+ trackResultClickedWire,
335
+ storeAddToCartWire
248
336
  },
249
337
  UserClickedPDPAddToCart: {
250
338
  trackAddToCartFromSessionStorage
@@ -261,8 +349,17 @@ const taggingWiring = createWiring({
261
349
  },
262
350
  ModuleRegistered: {
263
351
  setNoResultsTaggingEnabledWire
352
+ },
353
+ UserClickedARelatedPromptResult: {
354
+ trackToolingDisplayClickedWire
355
+ },
356
+ UserClickedARelatedPromptAdd2Cart: {
357
+ trackToolingAdd2CartWire
358
+ },
359
+ UserSelectedARelatedPrompt: {
360
+ trackRelatedPromptToolingDisplayClickWire
264
361
  }
265
362
  });
266
363
 
267
- export { createSetQueryTaggingFromQueryPreview, createTrackDisplayWire, createTrackWire, setConsent, setNoResultsTaggingEnabledWire, setQueryTaggingFromQueryPreview, setQueryTaggingInfo, setTaggingConfig, taggingWiring, trackAddToCartWire, trackBannerClickedWire, trackDisplayClickedWire, trackElementDisplayedWire, trackNoResultsQueryWithSemanticsWire, trackNoResultsQueryWithSemanticsWireDebounced, trackQueryWire, trackResultClickedWire };
364
+ export { createSetQueryTaggingFromQueryPreview, createTrackDisplayWire, createTrackRelatedPromptToolingDisplayClickWire, createTrackToolingAdd2CartWire, createTrackToolingDisplayWire, createTrackWire, setConsent, setNoResultsTaggingEnabledWire, setQueryTaggingFromQueryPreview, setQueryTaggingInfo, setTaggingConfig, taggingWiring, trackAddToCartWire, trackBannerClickedWire, trackDisplayClickedWire, trackElementDisplayedWire, trackNoResultsQueryWithSemanticsWire, trackNoResultsQueryWithSemanticsWireDebounced, trackQueryWire, trackRelatedPromptToolingDisplayClickWire, trackResultClickedWire, trackToolingAdd2CartWire, trackToolingDisplayClickedWire };
268
365
  //# sourceMappingURL=wiring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.js","sources":["../../../../src/x-modules/tagging/wiring.ts"],"sourcesContent":["import { SemanticQuery, Taggable, Tagging, TaggingRequest } from '@empathyco/x-types';\nimport { DefaultSessionService } from '@empathyco/x-utils';\nimport {\n namespacedWireCommit,\n namespacedWireDispatch\n} from '../../wiring/namespaced-wires.factory';\nimport { namespacedDebounce } from '../../wiring/namespaced-wires.operators';\nimport { wireService, wireServiceWithoutPayload } from '../../wiring/wires.factory';\nimport { filter, mapWire } from '../../wiring/wires.operators';\nimport { DisplayWireMetadata, Wire } from '../../wiring/wiring.types';\nimport { createWiring } from '../../wiring/wiring.utils';\nimport { createOrigin } from '../../utils/index';\nimport { FeatureLocation } from '../../types/index';\nimport { DefaultPDPAddToCartService } from './service/pdp-add-to-cart.service';\n\n/**\n * `tagging` {@link XModuleName | XModule name}.\n *\n * @internal\n */\nconst moduleName = 'tagging';\n\n/**\n * Debounce function for the module.\n */\nconst moduleDebounce = namespacedDebounce(moduleName);\n\n/**\n * WireCommit for {@link TaggingXModule}.\n *\n * @internal\n */\nconst wireCommit = namespacedWireCommit(moduleName);\n\n/**\n * WireDispatch for {@link TaggingXModule}.\n *\n * @internal\n */\nconst wireDispatch = namespacedWireDispatch(moduleName);\n\n/**\n * Wires without payload factory for {@link DefaultSessionService}.\n */\nconst wireSessionServiceWithoutPayload = wireServiceWithoutPayload(DefaultSessionService.instance);\n\n/**\n * Wires factory for {@link DefaultPDPAddToCartService}.\n */\nconst wirePDPAddToCartService = wireService(DefaultPDPAddToCartService.instance);\n\n/**\n * Stores the given result on the local storage.\n *\n * @public\n */\nconst storeClickedResultWire = wirePDPAddToCartService('storeResultClicked');\n\n/**\n * Moves the result information from the local storage to session storage.\n *\n * @public\n */\nconst moveClickedResultToSessionWire = mapWire(\n wirePDPAddToCartService('moveToSessionStorage'),\n (payload: string) => {\n return payload === 'url' ? undefined : payload;\n }\n);\n\n/**\n * Triggers the add to cart tracking.\n *\n * @public\n */\nconst trackAddToCartFromSessionStorage = wirePDPAddToCartService('trackAddToCart');\n\n/**\n * Clears the session id.\n *\n * @public\n */\nconst clearSessionWire = filter(\n wireSessionServiceWithoutPayload('clearSessionId'),\n ({ eventPayload: consent }) => !consent\n);\n\n/**\n * Sets the tagging state `consent`.\n *\n * @public\n */\nexport const setConsent = wireCommit('setConsent');\n\n/**\n * Sets the tagging state `noResultsTaggingEnabled`.\n *\n * @public\n */\nexport const setNoResultsTaggingEnabledWire = wireCommit('setNoResultsTaggingEnabled');\n\n/**\n * Sets the tagging config state.\n *\n * @public\n */\nexport const setTaggingConfig = wireCommit('mergeConfig');\n\n/**\n * Tracks the tagging of the query.\n *\n * @public\n */\nexport const trackQueryWire = filter(\n wireDispatch('track'),\n ({ eventPayload, store }) =>\n (eventPayload as TaggingRequest).params.totalHits > 0 ||\n !store.state.x.tagging.noResultsTaggingEnabled\n);\n\n/**\n * Sets the tagging state of the query tagging info using a debounce which ends if the user\n * accepts a query.\n *\n * @public\n */\nexport const setQueryTaggingInfo = moduleDebounce(\n wireCommit('setQueryTaggingInfo'),\n ({ state }) => state.config.queryTaggingDebounceMs,\n {\n cancelOn: 'UserClearedQuery',\n forceOn: [\n 'UserClickedAResult',\n 'UserClickedAPromoted',\n 'UserClickedABanner',\n 'UserClickedARedirection',\n 'UserReachedResultsListEnd'\n ]\n }\n);\n\n/**\n * Sets the tagging state of the query tagging info using.\n *\n * @public\n */\nexport const setQueryTaggingFromQueryPreview = createSetQueryTaggingFromQueryPreview();\n\n/**\n * Tracks the tagging of the result.\n *\n * @public\n */\nexport const trackResultClickedWire = createTrackWire('click');\n\n/**\n * Tracks the tagging of the banner.\n *\n * @public\n */\nexport const trackBannerClickedWire = createTrackWire('click');\n\n/**\n * Performs a track of a result added to the cart.\n *\n * @public\n */\nexport const trackAddToCartWire = createTrackWire('add2cart');\n\n/**\n * Performs a track of a display result being clicked.\n *\n * @public\n */\nexport const trackDisplayClickedWire = createTrackDisplayWire('displayClick');\n\n/**\n * Performs a track of a display element appearing.\n *\n * @public\n */\nexport const trackElementDisplayedWire = createTrackDisplayWire('display');\n\n/**\n * Factory helper to create a wire for the track of a taggable element.\n *\n * @param property - Key of the tagging object to track.\n * @returns A new wire for the given property of the taggable element.\n *\n * @public\n */\nexport function createTrackWire(property: keyof Tagging): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload: { tagging }, metadata: { location } }) => {\n const taggingInfo: TaggingRequest = tagging[property];\n taggingInfo.params.location = location as string;\n return taggingInfo;\n }),\n ({ eventPayload: { tagging }, metadata: { ignoreInModules } }) =>\n !!tagging?.[property] && !ignoreInModules?.includes(moduleName)\n );\n}\n\n/**\n * Performs a track of a query with no results that used semantics as fallback.\n * The totalHits will be changed to -1 if semantic queries are found in order to differentiate\n * it from scenarios where the user encounters a no-results page without any semantic queries.\n *\n * @public\n */\nexport const trackNoResultsQueryWithSemanticsWire = filter(\n wireDispatch('track', ({ eventPayload, state }) => {\n const { queryTaggingInfo } = state;\n const totalHits = (eventPayload as SemanticQuery[]).length > 0 ? -1 : 0;\n return {\n params: { ...queryTaggingInfo?.params, totalHits },\n url: queryTaggingInfo?.url ?? ''\n };\n }),\n ({ store }) => Number(store.state.x.tagging.queryTaggingInfo?.params.totalHits)! === 0\n);\n\n/**.\n * Debounced version of {@link trackNoResultsQueryWithSemanticsWire}\n *\n * @public\n */\nexport const trackNoResultsQueryWithSemanticsWireDebounced = moduleDebounce(\n trackNoResultsQueryWithSemanticsWire,\n ({ state }) => state.config.queryTaggingDebounceMs,\n { cancelOn: 'QueryPreviewUnmounted' }\n);\n\n/**\n * Factory helper to create a wire for the track of the display click.\n *\n * @param property - Key of the tagging object to track.\n * @returns A new wire for the display click of the taggable element.\n *\n * @public\n */\nexport function createTrackDisplayWire(property: keyof Tagging): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload: { tagging }, metadata }) => {\n const taggingInfo: TaggingRequest = tagging[property];\n const location = metadata.location as FeatureLocation;\n\n taggingInfo.params.location = location;\n taggingInfo.params.displayFamily = createOrigin({\n feature: metadata.feature,\n location\n })!;\n taggingInfo.params.q = (metadata as DisplayWireMetadata).displayOriginalQuery;\n\n return taggingInfo;\n }),\n ({ eventPayload: { tagging } }) => !!tagging?.[property]\n );\n}\n\n/**\n * Factory helper to create a wire to set the queryTagging.\n *\n * @returns A new wire for the query of a result of a queryPreview.\n *\n * @public\n */\nexport function createSetQueryTaggingFromQueryPreview(): Wire<Taggable> {\n return filter(\n wireCommit(\n 'setQueryTaggingInfo',\n ({ metadata: { queryTagging } }) => queryTagging as TaggingRequest\n ),\n ({ metadata: { queryTagging } }) => !!queryTagging\n );\n}\n\n/**\n * Wiring configuration for the {@link TaggingXModule | tagging module}.\n *\n * @internal\n */\nexport const taggingWiring = createWiring({\n ConsentProvided: {\n setConsent\n },\n ConsentChanged: {\n clearSessionWire\n },\n PDPIsLoaded: {\n moveClickedResultToSessionWire\n },\n ResultURLTrackingEnabled: {\n moveClickedResultToSessionWire\n },\n SearchTaggingChanged: {\n setQueryTaggingInfo\n },\n SearchTaggingReceived: {\n trackQueryWire\n },\n TrackableElementDisplayed: {\n trackElementDisplayedWire\n },\n TaggingConfigProvided: {\n setTaggingConfig\n },\n UserClickedAResult: {\n trackResultClickedWire,\n storeClickedResultWire\n },\n UserClickedResultAddToCart: {\n trackAddToCartWire,\n trackResultClickedWire\n },\n UserClickedPDPAddToCart: {\n trackAddToCartFromSessionStorage\n },\n UserClickedABanner: {\n trackBannerClickedWire\n },\n UserClickedADisplayResult: {\n trackDisplayClickedWire,\n setQueryTaggingFromQueryPreview\n },\n SemanticQueriesResponseChanged: {\n trackNoResultsQueryWithSemanticsWireDebounced\n },\n ModuleRegistered: {\n setNoResultsTaggingEnabledWire\n }\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiring.js","sources":["../../../../src/x-modules/tagging/wiring.ts"],"sourcesContent":["import {\n RelatedPrompt,\n Result,\n SemanticQuery,\n Taggable,\n Tagging,\n TaggingRequest\n} from '@empathyco/x-types';\nimport { DefaultSessionService } from '@empathyco/x-utils';\nimport {\n namespacedWireCommit,\n namespacedWireDispatch\n} from '../../wiring/namespaced-wires.factory';\nimport { namespacedDebounce } from '../../wiring/namespaced-wires.operators';\nimport { wireService, wireServiceWithoutPayload } from '../../wiring/wires.factory';\nimport { filter, mapWire } from '../../wiring/wires.operators';\nimport { DisplayWireMetadata, Wire } from '../../wiring/wiring.types';\nimport { createWiring } from '../../wiring/wiring.utils';\nimport { createOrigin } from '../../utils/index';\nimport { FeatureLocation } from '../../types/index';\nimport { DefaultExternalTaggingService } from './service/external-tagging.service';\n\n/**\n * `tagging` {@link XModuleName | XModule name}.\n *\n * @internal\n */\nconst moduleName = 'tagging';\n\n/**\n * Debounce function for the module.\n */\nconst moduleDebounce = namespacedDebounce(moduleName);\n\n/**\n * WireCommit for {@link TaggingXModule}.\n *\n * @internal\n */\nconst wireCommit = namespacedWireCommit(moduleName);\n\n/**\n * WireDispatch for {@link TaggingXModule}.\n *\n * @internal\n */\nconst wireDispatch = namespacedWireDispatch(moduleName);\n\n/**\n * Wires without payload factory for {@link DefaultSessionService}.\n */\nconst wireSessionServiceWithoutPayload = wireServiceWithoutPayload(DefaultSessionService.instance);\n\n/**\n * Wires factory for {@link DefaultExternalTaggingService}.\n */\nconst wireExternalTaggingService = wireService(DefaultExternalTaggingService.instance);\n\n/**\n * Stores the given result on the local storage.\n *\n * @public\n */\nconst storeClickedResultWire = wireExternalTaggingService('storeResultClicked');\n\n/**\n * Stores the result added to cart on the local storage.\n *\n * @public\n */\nconst storeAddToCartWire = wireExternalTaggingService('storeAddToCart');\n\n/**\n * Moves the result information from the local storage to session storage.\n *\n * @public\n */\nconst moveClickedResultToSessionWire = mapWire(\n wireExternalTaggingService('moveToSessionStorage'),\n (payload: string) => {\n return payload === 'url' ? undefined : payload;\n }\n);\n\n/**\n * Triggers the add to cart tracking.\n *\n * @public\n */\nconst trackAddToCartFromSessionStorage = wireExternalTaggingService('trackAddToCart');\n\n/**\n * Clears the session id.\n *\n * @public\n */\nconst clearSessionWire = filter(\n wireSessionServiceWithoutPayload('clearSessionId'),\n ({ eventPayload: consent }) => !consent\n);\n\n/**\n * Sets the tagging state `consent`.\n *\n * @public\n */\nexport const setConsent = wireCommit('setConsent');\n\n/**\n * Sets the tagging state `noResultsTaggingEnabled`.\n *\n * @public\n */\nexport const setNoResultsTaggingEnabledWire = wireCommit('setNoResultsTaggingEnabled');\n\n/**\n * Sets the tagging config state.\n *\n * @public\n */\nexport const setTaggingConfig = wireCommit('mergeConfig');\n\n/**\n * Tracks the tagging of the query.\n *\n * @public\n */\nexport const trackQueryWire = filter(\n wireDispatch('track'),\n ({ eventPayload, store }) =>\n ((eventPayload as TaggingRequest).params.totalHits as number) > 0 ||\n !store.state.x.tagging.noResultsTaggingEnabled\n);\n\n/**\n * Sets the tagging state of the query tagging info using a debounce which ends if the user\n * accepts a query.\n *\n * @public\n */\nexport const setQueryTaggingInfo = moduleDebounce(\n wireCommit('setQueryTaggingInfo'),\n ({ state }) => state.config.queryTaggingDebounceMs,\n {\n cancelOn: 'UserClearedQuery',\n forceOn: [\n 'UserClickedAResult',\n 'UserClickedAPromoted',\n 'UserClickedABanner',\n 'UserClickedARedirection',\n 'UserReachedResultsListEnd'\n ]\n }\n);\n\n/**\n * Sets the tagging state of the query tagging info using.\n *\n * @public\n */\nexport const setQueryTaggingFromQueryPreview = createSetQueryTaggingFromQueryPreview();\n\n/**\n * Tracks the tagging of the result.\n *\n * @public\n */\nexport const trackResultClickedWire = createTrackWire('click');\n\n/**\n * Tracks the tagging of the banner.\n *\n * @public\n */\nexport const trackBannerClickedWire = createTrackWire('click');\n\n/**\n * Performs a track of a result added to the cart.\n *\n * @public\n */\nexport const trackAddToCartWire = createTrackWire('add2cart');\n\n/**\n * Performs a track of a display result being clicked.\n *\n * @public\n */\nexport const trackDisplayClickedWire = createTrackDisplayWire('displayClick');\n\n/**\n * Performs a track of a display result being clicked.\n *\n * @public\n */\nexport const trackToolingDisplayClickedWire = createTrackToolingDisplayWire();\n\n/**\n * Performs a track of a display result being clicked.\n *\n * @public\n */\nexport const trackToolingAdd2CartWire = createTrackToolingAdd2CartWire();\n\n/**\n * Performs a track of a clicked related prompt.\n *\n * @public\n */\nexport const trackRelatedPromptToolingDisplayClickWire =\n createTrackRelatedPromptToolingDisplayClickWire();\n\n/**\n * Performs a track of a display element appearing.\n *\n * @public\n */\nexport const trackElementDisplayedWire = createTrackDisplayWire('display');\n\n/**\n * Factory helper to create a wire for the track of a taggable element.\n *\n * @param property - Key of the tagging object to track.\n * @returns A new wire for the given property of the taggable element.\n *\n * @public\n */\nexport function createTrackWire(property: keyof Tagging): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload: { tagging }, metadata: { location } }) => {\n const taggingInfo: TaggingRequest = tagging[property];\n taggingInfo.params.location = location as string;\n return taggingInfo;\n }),\n ({ eventPayload: { tagging }, metadata: { ignoreInModules } }) =>\n !!tagging?.[property] && !ignoreInModules?.includes(moduleName)\n );\n}\n\n/**\n * Performs a track of a query with no results that used semantics as fallback.\n * The totalHits will be changed to -1 if semantic queries are found in order to differentiate\n * it from scenarios where the user encounters a no-results page without any semantic queries.\n *\n * @public\n */\nexport const trackNoResultsQueryWithSemanticsWire = filter(\n wireDispatch('track', ({ eventPayload, state }) => {\n const { queryTaggingInfo } = state;\n const totalHits = (eventPayload as SemanticQuery[]).length > 0 ? -1 : 0;\n return {\n params: { ...queryTaggingInfo?.params, totalHits },\n url: queryTaggingInfo?.url ?? ''\n };\n }),\n ({ store }) => Number(store.state.x.tagging.queryTaggingInfo?.params.totalHits)! === 0\n);\n\n/**.\n * Debounced version of {@link trackNoResultsQueryWithSemanticsWire}\n *\n * @public\n */\nexport const trackNoResultsQueryWithSemanticsWireDebounced = moduleDebounce(\n trackNoResultsQueryWithSemanticsWire,\n ({ state }) => state.config.queryTaggingDebounceMs,\n { cancelOn: 'QueryPreviewUnmounted' }\n);\n\n/**\n * Factory helper to create a wire for the track of the display click.\n *\n * @param property - Key of the tagging object to track.\n * @returns A new wire for the display click of the taggable element.\n *\n * @public\n */\nexport function createTrackDisplayWire(property: keyof Tagging): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload: { tagging }, metadata }) => {\n const taggingInfo: TaggingRequest = tagging[property];\n const location = metadata.location as FeatureLocation;\n\n taggingInfo.params.location = location;\n taggingInfo.params.displayFamily = createOrigin({\n feature: metadata.feature,\n location\n })!;\n taggingInfo.params.q = (metadata as DisplayWireMetadata).displayOriginalQuery;\n\n return taggingInfo;\n }),\n ({ eventPayload: { tagging } }) => !!tagging?.[property]\n );\n}\n\n/**\n * Update the tooling tagging params with the result information.\n *\n * @param taggingRequest - The tooling tagging request to be updated.\n * @param result - The clicked result.\n * @returns The tagging request updated.\n *\n * @internal\n */\nfunction updateToolingTaggingWithResult(\n taggingRequest: TaggingRequest,\n result: Result\n): TaggingRequest {\n taggingRequest.params.productId = result.id;\n taggingRequest.params.title = result.name!;\n taggingRequest.params.url = result.url!;\n\n return taggingRequest;\n}\n\n/**\n * Factory helper to create a wire for the track of the tooling display click.\n *\n * @returns A new wire for the tooling display click of the taggable element.\n *\n * @public\n */\nexport function createTrackToolingDisplayWire(): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload, metadata }) => {\n const taggingInfo: TaggingRequest = metadata.toolingTagging as TaggingRequest;\n const resultInfo = eventPayload as Result;\n\n updateToolingTaggingWithResult(taggingInfo, resultInfo);\n\n return taggingInfo;\n }),\n ({ metadata }) => !!metadata?.toolingTagging\n );\n}\n\n/**\n * Factory helper to create a wire for the track of the tooling display add to cart.\n *\n * @returns A new wire for the tooling display add to cart of the taggable element.\n *\n * @public\n */\nexport function createTrackToolingAdd2CartWire(): Wire<Taggable> {\n return filter(\n wireDispatch('track', ({ eventPayload, metadata }) => {\n const taggingInfo: TaggingRequest = metadata.toolingAdd2CartTagging as TaggingRequest;\n const resultInfo = eventPayload as Result;\n\n updateToolingTaggingWithResult(taggingInfo, resultInfo);\n\n return taggingInfo;\n }),\n ({ metadata }) => !!metadata?.toolingAdd2CartTagging\n );\n}\n\n/**\n * Factory helper to create a wire for the track of the tooling display click in a related prompt.\n *\n * @returns A new wire for the tooling display click of the taggable element.\n *\n * @public\n */\nexport function createTrackRelatedPromptToolingDisplayClickWire() {\n return filter(\n wireDispatch('track', ({ metadata }) => {\n const relatedPrompt = metadata.relatedPrompt as RelatedPrompt;\n const taggingInfo: TaggingRequest = relatedPrompt.tagging\n ?.toolingDisplayClickTagging as TaggingRequest;\n\n taggingInfo.params.productId = 'EXPAND';\n taggingInfo.params.title = relatedPrompt.suggestionText;\n taggingInfo.params.url = 'none';\n\n return taggingInfo;\n }),\n ({ metadata }) => metadata?.selectedPrompt === -1\n );\n}\n\n/**\n * Factory helper to create a wire to set the queryTagging.\n *\n * @returns A new wire for the query of a result of a queryPreview.\n *\n * @public\n */\nexport function createSetQueryTaggingFromQueryPreview(): Wire<Taggable> {\n return filter(\n wireCommit(\n 'setQueryTaggingInfo',\n ({ metadata: { queryTagging } }) => queryTagging as TaggingRequest\n ),\n ({ metadata: { queryTagging } }) => !!queryTagging\n );\n}\n\n/**\n * Wiring configuration for the {@link TaggingXModule | tagging module}.\n *\n * @internal\n */\nexport const taggingWiring = createWiring({\n ConsentProvided: {\n setConsent\n },\n ConsentChanged: {\n clearSessionWire\n },\n PDPIsLoaded: {\n moveClickedResultToSessionWire\n },\n ResultURLTrackingEnabled: {\n moveClickedResultToSessionWire\n },\n SearchTaggingChanged: {\n setQueryTaggingInfo\n },\n SearchTaggingReceived: {\n trackQueryWire\n },\n TrackableElementDisplayed: {\n trackElementDisplayedWire\n },\n TaggingConfigProvided: {\n setTaggingConfig\n },\n UserClickedAResult: {\n trackResultClickedWire,\n storeClickedResultWire\n },\n UserClickedResultAddToCart: {\n trackAddToCartWire,\n trackResultClickedWire,\n storeAddToCartWire\n },\n UserClickedPDPAddToCart: {\n trackAddToCartFromSessionStorage\n },\n UserClickedABanner: {\n trackBannerClickedWire\n },\n UserClickedADisplayResult: {\n trackDisplayClickedWire,\n setQueryTaggingFromQueryPreview\n },\n SemanticQueriesResponseChanged: {\n trackNoResultsQueryWithSemanticsWireDebounced\n },\n ModuleRegistered: {\n setNoResultsTaggingEnabledWire\n },\n UserClickedARelatedPromptResult: {\n trackToolingDisplayClickedWire\n },\n UserClickedARelatedPromptAdd2Cart: {\n trackToolingAdd2CartWire\n },\n UserSelectedARelatedPrompt: {\n trackRelatedPromptToolingDisplayClickWire\n }\n});\n"],"names":[],"mappings":";;;;;;;;;;AAsBA;;;;AAIG;AACH,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B;;AAEG;AACH,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAEtD;;;;AAIG;AACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAEpD;;;;AAIG;AACH,MAAM,YAAY,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAExD;;AAEG;AACH,MAAM,gCAAgC,GAAG,yBAAyB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEnG;;AAEG;AACH,MAAM,0BAA0B,GAAG,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AAEvF;;;;AAIG;AACH,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,oBAAoB,CAAC,CAAC;AAEhF;;;;AAIG;AACH,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;AAExE;;;;AAIG;AACH,MAAM,8BAA8B,GAAG,OAAO,CAC5C,0BAA0B,CAAC,sBAAsB,CAAC,EAClD,CAAC,OAAe,KAAI;IAClB,OAAO,OAAO,KAAK,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AACjD,CAAC,CACF,CAAC;AAEF;;;;AAIG;AACH,MAAM,gCAAgC,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;AAEtF;;;;AAIG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAC7B,gCAAgC,CAAC,gBAAgB,CAAC,EAClD,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CACxC,CAAC;AAEF;;;;AAIG;MACU,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE;AAEnD;;;;AAIG;MACU,8BAA8B,GAAG,UAAU,CAAC,4BAA4B,EAAE;AAEvF;;;;AAIG;MACU,gBAAgB,GAAG,UAAU,CAAC,aAAa,EAAE;AAE1D;;;;AAIG;AACU,MAAA,cAAc,GAAG,MAAM,CAClC,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,KACpB,YAA+B,CAAC,MAAM,CAAC,SAAoB,GAAG,CAAC;IACjE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAChD;AAEF;;;;;AAKG;MACU,mBAAmB,GAAG,cAAc,CAC/C,UAAU,CAAC,qBAAqB,CAAC,EACjC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAClD;AACE,IAAA,QAAQ,EAAE,kBAAkB;AAC5B,IAAA,OAAO,EAAE;QACP,oBAAoB;QACpB,sBAAsB;QACtB,oBAAoB;QACpB,yBAAyB;QACzB,2BAA2B;AAC5B,KAAA;AACF,CAAA,EACD;AAEF;;;;AAIG;AACU,MAAA,+BAA+B,GAAG,qCAAqC,GAAG;AAEvF;;;;AAIG;MACU,sBAAsB,GAAG,eAAe,CAAC,OAAO,EAAE;AAE/D;;;;AAIG;MACU,sBAAsB,GAAG,eAAe,CAAC,OAAO,EAAE;AAE/D;;;;AAIG;MACU,kBAAkB,GAAG,eAAe,CAAC,UAAU,EAAE;AAE9D;;;;AAIG;MACU,uBAAuB,GAAG,sBAAsB,CAAC,cAAc,EAAE;AAE9E;;;;AAIG;AACU,MAAA,8BAA8B,GAAG,6BAA6B,GAAG;AAE9E;;;;AAIG;AACU,MAAA,wBAAwB,GAAG,8BAA8B,GAAG;AAEzE;;;;AAIG;AACU,MAAA,yCAAyC,GACpD,+CAA+C,GAAG;AAEpD;;;;AAIG;MACU,yBAAyB,GAAG,sBAAsB,CAAC,SAAS,EAAE;AAE3E;;;;;;;AAOG;AACG,SAAU,eAAe,CAAC,QAAuB,EAAA;IACrD,OAAO,MAAM,CACX,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAI;AAC9E,QAAA,MAAM,WAAW,GAAmB,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAkB,CAAC;AACjD,QAAA,OAAO,WAAW,CAAC;AACrB,KAAC,CAAC,EACF,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,KAC3D,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,CAClE,CAAC;AACJ,CAAC;AAED;;;;;;AAMG;AACU,MAAA,oCAAoC,GAAG,MAAM,CACxD,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,KAAI;AAChD,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;AACnC,IAAA,MAAM,SAAS,GAAI,YAAgC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACxE,OAAO;QACL,MAAM,EAAE,EAAE,GAAG,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE;AAClD,QAAA,GAAG,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC,CAAC,EACF,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAE,KAAK,CAAC,EACtF;AAEF;;;;AAIG;AACU,MAAA,6CAA6C,GAAG,cAAc,CACzE,oCAAoC,EACpC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAClD,EAAE,QAAQ,EAAE,uBAAuB,EAAE,EACrC;AAEF;;;;;;;AAOG;AACG,SAAU,sBAAsB,CAAC,QAAuB,EAAA;AAC5D,IAAA,OAAO,MAAM,CACX,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAI;AAChE,QAAA,MAAM,WAAW,GAAmB,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAA2B,CAAC;AAEtD,QAAA,WAAW,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvC,QAAA,WAAW,CAAC,MAAM,CAAC,aAAa,GAAG,YAAY,CAAC;YAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,QAAQ;AACT,SAAA,CAAE,CAAC;QACJ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAI,QAAgC,CAAC,oBAAoB,CAAC;AAE9E,QAAA,OAAO,WAAW,CAAC;KACpB,CAAC,EACF,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CACzD,CAAC;AACJ,CAAC;AAED;;;;;;;;AAQG;AACH,SAAS,8BAA8B,CACrC,cAA8B,EAC9B,MAAc,EAAA;IAEd,cAAc,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5C,cAAc,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAK,CAAC;IAC3C,cAAc,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAI,CAAC;AAExC,IAAA,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;AAMG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAO,MAAM,CACX,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAI;AACnD,QAAA,MAAM,WAAW,GAAmB,QAAQ,CAAC,cAAgC,CAAC;QAC9E,MAAM,UAAU,GAAG,YAAsB,CAAC;AAE1C,QAAA,8BAA8B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAExD,QAAA,OAAO,WAAW,CAAC;AACrB,KAAC,CAAC,EACF,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,cAAc,CAC7C,CAAC;AACJ,CAAC;AAED;;;;;;AAMG;SACa,8BAA8B,GAAA;AAC5C,IAAA,OAAO,MAAM,CACX,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAI;AACnD,QAAA,MAAM,WAAW,GAAmB,QAAQ,CAAC,sBAAwC,CAAC;QACtF,MAAM,UAAU,GAAG,YAAsB,CAAC;AAE1C,QAAA,8BAA8B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAExD,QAAA,OAAO,WAAW,CAAC;AACrB,KAAC,CAAC,EACF,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,sBAAsB,CACrD,CAAC;AACJ,CAAC;AAED;;;;;;AAMG;SACa,+CAA+C,GAAA;IAC7D,OAAO,MAAM,CACX,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAI;AACrC,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAA8B,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAmB,aAAa,CAAC,OAAO;AACvD,cAAE,0BAA4C,CAAC;AAEjD,QAAA,WAAW,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;QACxC,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC;AACxD,QAAA,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAEhC,QAAA,OAAO,WAAW,CAAC;AACrB,KAAC,CAAC,EACF,CAAC,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,cAAc,KAAK,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC;AAED;;;;;;AAMG;SACa,qCAAqC,GAAA;AACnD,IAAA,OAAO,MAAM,CACX,UAAU,CACR,qBAAqB,EACrB,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,YAA8B,CACnE,EACD,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC,YAAY,CACnD,CAAC;AACJ,CAAC;AAED;;;;AAIG;AACI,MAAM,aAAa,GAAG,YAAY,CAAC;AACxC,IAAA,eAAe,EAAE;QACf,UAAU;AACX,KAAA;AACD,IAAA,cAAc,EAAE;QACd,gBAAgB;AACjB,KAAA;AACD,IAAA,WAAW,EAAE;QACX,8BAA8B;AAC/B,KAAA;AACD,IAAA,wBAAwB,EAAE;QACxB,8BAA8B;AAC/B,KAAA;AACD,IAAA,oBAAoB,EAAE;QACpB,mBAAmB;AACpB,KAAA;AACD,IAAA,qBAAqB,EAAE;QACrB,cAAc;AACf,KAAA;AACD,IAAA,yBAAyB,EAAE;QACzB,yBAAyB;AAC1B,KAAA;AACD,IAAA,qBAAqB,EAAE;QACrB,gBAAgB;AACjB,KAAA;AACD,IAAA,kBAAkB,EAAE;QAClB,sBAAsB;QACtB,sBAAsB;AACvB,KAAA;AACD,IAAA,0BAA0B,EAAE;QAC1B,kBAAkB;QAClB,sBAAsB;QACtB,kBAAkB;AACnB,KAAA;AACD,IAAA,uBAAuB,EAAE;QACvB,gCAAgC;AACjC,KAAA;AACD,IAAA,kBAAkB,EAAE;QAClB,sBAAsB;AACvB,KAAA;AACD,IAAA,yBAAyB,EAAE;QACzB,uBAAuB;QACvB,+BAA+B;AAChC,KAAA;AACD,IAAA,8BAA8B,EAAE;QAC9B,6CAA6C;AAC9C,KAAA;AACD,IAAA,gBAAgB,EAAE;QAChB,8BAA8B;AAC/B,KAAA;AACD,IAAA,+BAA+B,EAAE;QAC/B,8BAA8B;AAC/B,KAAA;AACD,IAAA,iCAAiC,EAAE;QACjC,wBAAwB;AACzB,KAAA;AACD,IAAA,0BAA0B,EAAE;QAC1B,yCAAyC;AAC1C,KAAA;AACF,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"url-handler.vue.js","sources":["../../../../../src/x-modules/url/components/url-handler.vue"],"sourcesContent":["<template>\n <GlobalEvents @pageshow=\"onPageShow\" @popstate=\"emitEvents\" target=\"window\" />\n</template>\n\n<script lang=\"ts\">\n import { Dictionary, objectFilter } from '@empathyco/x-utils';\n import { computed, defineComponent, inject, onMounted, ref } from 'vue';\n import { GlobalEvents } from 'vue-global-events';\n import { FeatureLocation } from '../../../types/origin';\n import { UrlParams } from '../../../types/url-params';\n import { isArrayEmpty } from '../../../utils/array';\n import { WireMetadata } from '../../../wiring/wiring.types';\n import { SnippetConfig } from '../../../x-installer/api/api.types';\n import { initialUrlState } from '../store/initial-state';\n import { UrlParamValue } from '../store/types';\n import { urlXModule } from '../x-module';\n import { use$x } from '../../../composables/use-$x';\n import { useState } from '../../../composables/use-state';\n\n interface ParsedUrlParams {\n all: UrlParams;\n extra: Dictionary<unknown>;\n }\n\n /**\n * This component manages the browser URL parameters to preserve them through reloads and browser\n * history navigation. It allow to configure the default url parameter names using its attributes.\n * This component doesn't render elements to the DOM.\n *\n * @public\n */\n export default defineComponent({\n name: 'UrlHandler',\n components: {\n GlobalEvents\n },\n xModule: urlXModule.name,\n setup: function (props, { attrs }) {\n const $x = use$x();\n\n const initialExtraParams = useState('url', ['initialExtraParams']).initialExtraParams;\n\n /**\n * The {@link SnippetConfig} provided by an ancestor.\n *\n * @internal\n */\n const snippetConfig = inject<SnippetConfig | undefined>('snippetConfig');\n\n /**\n * Flag to know if the params were already loaded from the URL.\n *\n * @internal\n */\n const urlLoaded = ref(false);\n\n /**\n * The page URL. It is used to compare against the current URL to check navigation state.\n *\n * @internal\n */\n const url = ref<URL | undefined>(undefined);\n\n /**\n * Flag to know if the page has been persisted by the browser's back-forward cache.\n *\n * @internal\n */\n const isPagePersisted = ref(false);\n\n /**\n * Computed to know which params we must get from URL. It gets the params names from the initial\n * state, to get all default params names, and also from the `$attrs` to get the extra params\n * names to take into account.\n *\n * @returns An array with the name of the params.\n *\n * @internal\n */\n const managedParamsNames = computed(() => {\n return Object.keys({ ...initialUrlState, ...attrs });\n });\n\n /**\n * Returns the mapping of the param keys used in the URL is configured through $attrs. This way\n * we can support any param and extra param, no matters its name.\n *\n * @param paramName - The param name to get the Url key.\n * @returns The key used in the URL for the `paramName` passed.\n *\n * @internal\n */\n const getUrlKey = (paramName: string): string => {\n const paramValue = attrs[paramName];\n return typeof paramValue === 'string' ? paramValue : paramName;\n };\n\n /**\n * Deletes all the parameters in the passed URL.\n *\n * @param url - The URL to remove parameters from.\n * @internal\n */\n const deleteUrlParameters = (url: URL): void => {\n managedParamsNames.value.forEach(paramName =>\n url.searchParams.delete(getUrlKey(paramName))\n );\n };\n\n /**\n * Sorts the params in a tuple array [key,value] to generate always the same URL with the params\n * in the same order.\n *\n * @param urlParams - The {@link UrlParams} to sort.\n * @returns An array of tuples with the key-value of each paramter, sorted by key.\n * @internal\n */\n const sortParams = (urlParams: UrlParams): Array<[string, unknown]> => {\n return Object.entries(urlParams).sort(([param1], [param2]) => {\n return param1 < param2 ? -1 : 1;\n });\n };\n\n /**\n * Set all the provided parameters to the url with the mapped key.\n *\n * @param url - The current URL.\n * @param urlParams - The list of parameters to add.\n * @remarks The params are filtered because there maybe received extra params which will not be\n * managed by URL. This is defined by the `managedParamsNames` computed. Also, the parameters\n * are sorted Alphabetically to produce always the same URL with the same parameters.This is\n * important for SEO purposes.\n *\n * @internal\n */\n const setUrlParameters = (url: URL, urlParams: UrlParams): void => {\n // Only when there is a query the rest of the parameters are valid.\n if (!urlParams.query) {\n return;\n }\n const filteredParams = objectFilter(urlParams, paramName =>\n managedParamsNames.value.includes(paramName as string)\n );\n const sortedParameters = sortParams(filteredParams);\n sortedParameters.forEach(([paramName, paramValue]) => {\n const urlParamKey = getUrlKey(paramName);\n if (Array.isArray(paramValue)) {\n paramValue.forEach(value => {\n url.searchParams.append(urlParamKey, String(value));\n });\n } else {\n url.searchParams.set(urlParamKey, String(paramValue));\n }\n });\n };\n\n /**\n * Updates the browser URL with the passed `newUrlParams` and using the browser history method\n * passed as `historyMethod`. It only updates the browser history if the new URL is different\n * from the current.\n *\n * @param newUrlParams - The new params to add to the browser URL.\n * @param historyMethod - The browser history method used to add the new URL.\n *\n * @internal\n */\n const updateUrl = (\n newUrlParams: UrlParams,\n historyMethod: History['pushState'] | History['replaceState']\n ): void => {\n if (urlLoaded.value) {\n const newUrl = new URL(window.location.href);\n deleteUrlParameters(newUrl);\n setUrlParameters(newUrl, newUrlParams);\n\n newUrl.href = newUrl.href.replace(/\\+/g, '%20');\n\n if (newUrl.href !== window.location.href) {\n historyMethod({ ...window.history.state }, document.title, newUrl.href);\n }\n url.value = newUrl;\n }\n };\n\n /**\n * Updates the browser URL with the new {@link UrlParams} using the history `pushState` method.\n *\n * @param newUrlParams - The new params to update browser URL.\n */\n $x.on('PushableUrlStateUpdated', false).subscribe((newUrlParams: UrlParams) => {\n updateUrl(newUrlParams, window.history.pushState.bind(window.history));\n });\n\n /**\n * Updates the browser URL with the new {@link UrlParams} using the history `replaceState`\n * method.\n *\n * @param newUrlParams - The new params to update browser URL.\n */\n $x.on('ReplaceableUrlStateUpdated', false).subscribe((newUrlParams: UrlParams) => {\n updateUrl(newUrlParams, window.history.replaceState.bind(window.history));\n });\n\n /**\n * Handler of the\n * [pageshow](https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event)\n * event.\n *\n * @remarks The pageshow event is listened to check if the browser has performed a navigation\n * using the back-forward cache. This information is available in the\n * PageTransitionEvent.persisted property.\n *\n * @param event - The page transition event.\n * @internal\n */\n const onPageShow = (event: PageTransitionEvent) => {\n isPagePersisted.value = event.persisted;\n if (event.persisted) {\n // The internal url is reset due to the back-forward cache storing the previous value which\n // is no longer valid.\n url.value = undefined;\n }\n };\n\n /**\n * Returns the URL param value parsed depending on its type in the initial store state. As we\n * can not know what type can have an extra param, all extra params are parsed as strings. We\n * know if it is an extra param because it is not in the initial state.\n *\n * @param name - The name of the param in {@link UrlParams}.\n * @param value - The `URLSearchParams` value as an arry of strings.\n * @returns The parsed value.\n *\n * @internal\n */\n const parseUrlParam = (name: string, value: string[]): UrlParamValue => {\n switch (typeof initialUrlState[name]) {\n case 'number':\n return Number(value[0]);\n case 'boolean':\n return value[0].toLowerCase() === 'true';\n case 'string':\n return value[0];\n default:\n // array\n return value;\n }\n };\n\n /**\n * Gets the {@link UrlParams} from the URL, including only the params defined by `paramsNames`.\n *\n * @returns ParsedUrlParams obtained from URL.\n * @internal\n */\n const parseUrlParams = (): ParsedUrlParams => {\n const urlSearchParams = new URL(window.location.href).searchParams;\n return managedParamsNames.value.reduce<ParsedUrlParams>(\n (params, name) => {\n const urlKey = getUrlKey(name);\n if (urlSearchParams.has(urlKey)) {\n if (name in initialUrlState) {\n const urlValue = urlSearchParams.getAll(urlKey);\n params.all[name] = parseUrlParam(name, urlValue);\n } else {\n params.all[name] = params.extra[name] = urlSearchParams.get(urlKey);\n }\n }\n return params;\n },\n { all: { ...initialUrlState }, extra: { ...initialExtraParams.value } }\n );\n };\n\n /**\n * Check if the navigation is from a product page.\n *\n * @remarks Due to Safari 14 not supporting the new and standard PerformanceNavigationTiming\n * API, we are falling back to the deprecated one, PerformanceNavigation. We also fallback to\n * this API whenever we get a navigationType equal to reload, because Safari has a bug that the\n * navigationType is permanently set to reload after you have reload the page and it never\n * resets. As some browsers have a back-forward cache implemented, we also take into account if\n * the page is persisted.\n *\n * @returns True if the navigation is from a product page, false otherwise.\n * @internal\n */\n const isNavigatingFromPdp = (): boolean => {\n const isPagePersistedValue = isPagePersisted.value;\n const navigationEntries = window.performance.getEntriesByType('navigation');\n const navigationType = (navigationEntries[0] as PerformanceNavigationTiming)?.type;\n const useFallbackStrategy =\n !navigationEntries.length &&\n (isArrayEmpty(navigationEntries) || navigationType === 'reload');\n\n // Reset internal isPagePersisted property value\n isPagePersisted.value = false;\n\n if (useFallbackStrategy) {\n const isNavigatingInSpa = !!snippetConfig?.isSpa && navigationType === 'navigate';\n return navigationType === 'back_forward' || isNavigatingInSpa || isPagePersistedValue;\n } else {\n const isNavigatingInSpa = !!snippetConfig?.isSpa && navigationType === 'navigate';\n return navigationType === 'back_forward' || isNavigatingInSpa || isPagePersistedValue;\n }\n };\n\n /**\n * Detects the {@link FeatureLocation} used to build the\n * {@link QueryOriginInit} data.\n *\n * @returns The {@link FeatureLocation}.\n * @internal\n */\n const detectLocation = (): FeatureLocation => {\n const currentUrl = new URL(window.location.href);\n const previousUrl = url.value;\n url.value = currentUrl;\n\n const isInternalNavigation =\n previousUrl?.search !== currentUrl.search &&\n previousUrl?.pathname === currentUrl.pathname;\n if (isInternalNavigation) {\n return 'url_history';\n }\n\n if (isNavigatingFromPdp()) {\n return 'url_history_pdp';\n }\n\n return 'external';\n };\n\n /**\n * Creates the wire metadata to include in every emitted {@link XEvent}.\n *\n * @returns The {@link WireMetadata}.\n * @internal\n */\n const createWireMetadata = (): Pick<WireMetadata, 'feature' | 'location'> => {\n return {\n feature: 'url',\n location: detectLocation()\n };\n };\n\n /**\n * Emits the {@link UrlXEvents.ParamsLoadedFromUrl} XEvent,\n * the {@link UrlXEvents.ExtraParamsLoadedFromUrl} XEvent and, if there is query, also emits\n * the {@link XEventsTypes.UserOpenXProgrammatically}.\n *\n * @internal\n */\n const emitEvents = () => {\n const { all, extra } = parseUrlParams();\n const metadata = createWireMetadata();\n $x.emit('ParamsLoadedFromUrl', all, metadata);\n $x.emit('ExtraParamsLoadedFromUrl', extra, metadata);\n if (all.query) {\n $x.emit('UserOpenXProgrammatically', undefined, metadata);\n }\n urlLoaded.value = true;\n };\n\n /**\n * To emit the Url events just when the URL is load, and before the components mounted events\n * and state changes, we do it in the created of this component.\n */\n onMounted(() => {\n emitEvents();\n });\n\n return {\n onPageShow,\n emitEvents\n };\n }\n });\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`ParamsLoadedFromUrl`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`ExtraParamsLoadedFromUrl`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`UserOpenXProgrammatically`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nThis component manages the browser URL parameters to preserve them through reloads and browser\nhistory navigation. It allow to configure the default url parameter names using its attributes. This\ncomponent doesn't render elements to the DOM.\n\n_Try to make some requests and take a look to the url!_\n\n```vue\n<template>\n <UrlHandler />\n</template>\n\n<script>\n import { UrlHandler } from '@empathyco/x-components/url-handler';\n\n export default {\n name: 'UrlHandlerDemo',\n components: {\n UrlHandler\n }\n };\n</script>\n```\n\n### Play with props\n\nIn this example, the `UrlHandler` component changes the following query parameter names:\n\n- `query` to be `q`.\n- `page` to be `p`.\n- `filter` to be `f`\n- `sort` to be `s`\n\n_Try to make some requests and take a look to the url!_\n\n```vue\n<template>\n <UrlHandler query=\"q\" page=\"p\" filter=\"f\" sort=\"s\" />\n</template>\n\n<script>\n import { UrlHandler } from '@empathyco/x-components/url-handler';\n\n export default {\n name: 'UrlHandlerDemo',\n components: {\n UrlHandler\n }\n };\n</script>\n```\n\n### Play with events\n\nThe `UrlHandler` will emit the `ParamsLoadedFromUrl` when the page is loaded.\n\nThe `UrlHandler` will emit the `ExtraParamsLoadedFromUrl` when the page is loaded with an extra\nparam configured and with a value in URL.\n\nThe `UrlHandler` will emit the `UserOpenXProgrammatically` when the page is loaded with a query in\nthe URL.\n</docs>\n"],"names":["_resolveComponent","_openBlock","_createBlock"],"mappings":";;;;;kCACEA,gBAA8E,CAAA,cAAA,CAAA,CAAA;AAAxC,EAAA,OAAAC,SAAA,EAAoB,EAAAC,WAAA,CAAA,uBAAA,EAAA;AAAA,IAAE,YAAO,IAAQ,CAAA,UAAA;AAAA,IAAA,UAAA,EAAA,IAAA,CAAA,UAAA;;;;;;;;"}
1
+ {"version":3,"file":"url-handler.vue.js","sources":["../../../../../src/x-modules/url/components/url-handler.vue"],"sourcesContent":["<template>\n <GlobalEvents @pageshow=\"onPageShow\" @popstate=\"emitEvents\" target=\"window\" />\n</template>\n\n<script lang=\"ts\">\n import { Dictionary, objectFilter } from '@empathyco/x-utils';\n import { computed, defineComponent, inject, onMounted, ref } from 'vue';\n import { GlobalEvents } from 'vue-global-events';\n import { FeatureLocation } from '../../../types/origin';\n import { UrlParams } from '../../../types/url-params';\n import { isArrayEmpty } from '../../../utils/array';\n import { WireMetadata } from '../../../wiring/wiring.types';\n import { SnippetConfig } from '../../../x-installer/api/api.types';\n import { initialUrlState } from '../store/initial-state';\n import { UrlParamValue } from '../store/types';\n import { urlXModule } from '../x-module';\n import { use$x } from '../../../composables/use-$x';\n import { useState } from '../../../composables/use-state';\n\n interface ParsedUrlParams {\n all: UrlParams;\n extra: Dictionary<unknown>;\n }\n\n /**\n * This component manages the browser URL parameters to preserve them through reloads and browser\n * history navigation. It allow to configure the default url parameter names using its attributes.\n * This component doesn't render elements to the DOM.\n *\n * @public\n */\n export default defineComponent({\n name: 'UrlHandler',\n components: {\n GlobalEvents\n },\n xModule: urlXModule.name,\n setup: function (props, { attrs }) {\n const $x = use$x();\n\n const initialExtraParams = useState('url', ['initialExtraParams']).initialExtraParams;\n\n /**\n * The {@link SnippetConfig} provided by an ancestor.\n *\n * @internal\n */\n const snippetConfig = inject<SnippetConfig | undefined>('snippetConfig');\n\n /**\n * Flag to know if the params were already loaded from the URL.\n *\n * @internal\n */\n const urlLoaded = ref(false);\n\n /**\n * The page URL. It is used to compare against the current URL to check navigation state.\n *\n * @internal\n */\n const url = ref<URL | undefined>(undefined);\n\n /**\n * Flag to know if the page has been persisted by the browser's back-forward cache.\n *\n * @internal\n */\n const isPagePersisted = ref(false);\n\n /**\n * Computed to know which params we must get from URL. It gets the params names from the initial\n * state, to get all default params names, and also from the `$attrs` to get the extra params\n * names to take into account.\n *\n * @returns An array with the name of the params.\n *\n * @internal\n */\n const managedParamsNames = computed(() => {\n return Object.keys({ ...initialUrlState, ...attrs });\n });\n\n /**\n * Returns the mapping of the param keys used in the URL is configured through $attrs. This way\n * we can support any param and extra param, no matters its name.\n *\n * @param paramName - The param name to get the Url key.\n * @returns The key used in the URL for the `paramName` passed.\n *\n * @internal\n */\n const getUrlKey = (paramName: string): string => {\n const paramValue = attrs[paramName];\n return typeof paramValue === 'string' ? paramValue : paramName;\n };\n\n /**\n * Deletes all the parameters in the passed URL.\n *\n * @param url - The URL to remove parameters from.\n * @internal\n */\n const deleteUrlParameters = (url: URL): void => {\n managedParamsNames.value.forEach(paramName =>\n url.searchParams.delete(getUrlKey(paramName))\n );\n };\n\n /**\n * Sorts the params in a tuple array [key,value] to generate always the same URL with the params\n * in the same order.\n *\n * @param urlParams - The {@link UrlParams} to sort.\n * @returns An array of tuples with the key-value of each paramter, sorted by key.\n * @internal\n */\n const sortParams = (urlParams: UrlParams): Array<[string, unknown]> => {\n return Object.entries(urlParams).sort(([param1], [param2]) => {\n return param1 < param2 ? -1 : 1;\n });\n };\n\n /**\n * Set all the provided parameters to the url with the mapped key.\n *\n * @param url - The current URL.\n * @param urlParams - The list of parameters to add.\n * @remarks The params are filtered because there maybe received extra params which will not be\n * managed by URL. This is defined by the `managedParamsNames` computed. Also, the parameters\n * are sorted Alphabetically to produce always the same URL with the same parameters.This is\n * important for SEO purposes.\n *\n * @internal\n */\n const setUrlParameters = (url: URL, urlParams: UrlParams): void => {\n // Only when there is a query the rest of the parameters are valid.\n if (!urlParams.query) {\n return;\n }\n const filteredParams = objectFilter(urlParams, paramName =>\n managedParamsNames.value.includes(paramName as string)\n );\n const sortedParameters = sortParams(filteredParams);\n sortedParameters.forEach(([paramName, paramValue]) => {\n const urlParamKey = getUrlKey(paramName);\n if (Array.isArray(paramValue)) {\n paramValue.forEach(value => {\n url.searchParams.append(urlParamKey, String(value));\n });\n } else {\n url.searchParams.set(urlParamKey, String(paramValue));\n }\n });\n };\n\n /**\n * Updates the browser URL with the passed `newUrlParams` and using the browser history method\n * passed as `historyMethod`. It only updates the browser history if the new URL is different\n * from the current.\n *\n * @param newUrlParams - The new params to add to the browser URL.\n * @param historyMethod - The browser history method used to add the new URL.\n *\n * @internal\n */\n const updateUrl = (\n newUrlParams: UrlParams,\n historyMethod: History['pushState'] | History['replaceState']\n ): void => {\n if (urlLoaded.value) {\n const newUrl = new URL(window.location.href);\n deleteUrlParameters(newUrl);\n setUrlParameters(newUrl, newUrlParams);\n\n // Normalize '+' characters into '%20' for spaces in url params.\n newUrl.search = newUrl.search.replace(/\\+/g, '%20');\n\n if (newUrl.href !== window.location.href) {\n historyMethod({ ...window.history.state }, document.title, newUrl.href);\n }\n url.value = newUrl;\n }\n };\n\n /**\n * Updates the browser URL with the new {@link UrlParams} using the history `pushState` method.\n *\n * @param newUrlParams - The new params to update browser URL.\n */\n $x.on('PushableUrlStateUpdated', false).subscribe((newUrlParams: UrlParams) => {\n updateUrl(newUrlParams, window.history.pushState.bind(window.history));\n });\n\n /**\n * Updates the browser URL with the new {@link UrlParams} using the history `replaceState`\n * method.\n *\n * @param newUrlParams - The new params to update browser URL.\n */\n $x.on('ReplaceableUrlStateUpdated', false).subscribe((newUrlParams: UrlParams) => {\n updateUrl(newUrlParams, window.history.replaceState.bind(window.history));\n });\n\n /**\n * Handler of the\n * [pageshow](https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event)\n * event.\n *\n * @remarks The pageshow event is listened to check if the browser has performed a navigation\n * using the back-forward cache. This information is available in the\n * PageTransitionEvent.persisted property.\n *\n * @param event - The page transition event.\n * @internal\n */\n const onPageShow = (event: PageTransitionEvent) => {\n isPagePersisted.value = event.persisted;\n if (event.persisted) {\n // The internal url is reset due to the back-forward cache storing the previous value which\n // is no longer valid.\n url.value = undefined;\n }\n };\n\n /**\n * Returns the URL param value parsed depending on its type in the initial store state. As we\n * can not know what type can have an extra param, all extra params are parsed as strings. We\n * know if it is an extra param because it is not in the initial state.\n *\n * @param name - The name of the param in {@link UrlParams}.\n * @param value - The `URLSearchParams` value as an arry of strings.\n * @returns The parsed value.\n *\n * @internal\n */\n const parseUrlParam = (name: string, value: string[]): UrlParamValue => {\n switch (typeof initialUrlState[name]) {\n case 'number':\n return Number(value[0]);\n case 'boolean':\n return value[0].toLowerCase() === 'true';\n case 'string':\n return value[0];\n default:\n // array\n return value;\n }\n };\n\n /**\n * Gets the {@link UrlParams} from the URL, including only the params defined by `paramsNames`.\n *\n * @returns ParsedUrlParams obtained from URL.\n * @internal\n */\n const parseUrlParams = (): ParsedUrlParams => {\n const urlSearchParams = new URL(window.location.href).searchParams;\n return managedParamsNames.value.reduce<ParsedUrlParams>(\n (params, name) => {\n const urlKey = getUrlKey(name);\n if (urlSearchParams.has(urlKey)) {\n if (name in initialUrlState) {\n const urlValue = urlSearchParams.getAll(urlKey);\n params.all[name] = parseUrlParam(name, urlValue);\n } else {\n params.all[name] = params.extra[name] = urlSearchParams.get(urlKey);\n }\n }\n return params;\n },\n { all: { ...initialUrlState }, extra: { ...initialExtraParams.value } }\n );\n };\n\n /**\n * Check if the navigation is from a product page.\n *\n * @remarks Due to Safari 14 not supporting the new and standard PerformanceNavigationTiming\n * API, we are falling back to the deprecated one, PerformanceNavigation. We also fallback to\n * this API whenever we get a navigationType equal to reload, because Safari has a bug that the\n * navigationType is permanently set to reload after you have reload the page and it never\n * resets. As some browsers have a back-forward cache implemented, we also take into account if\n * the page is persisted.\n *\n * @returns True if the navigation is from a product page, false otherwise.\n * @internal\n */\n const isNavigatingFromPdp = (): boolean => {\n const isPagePersistedValue = isPagePersisted.value;\n const navigationEntries = window.performance.getEntriesByType('navigation');\n const navigationType = (navigationEntries[0] as PerformanceNavigationTiming)?.type;\n const useFallbackStrategy =\n !navigationEntries.length &&\n (isArrayEmpty(navigationEntries) || navigationType === 'reload');\n\n // Reset internal isPagePersisted property value\n isPagePersisted.value = false;\n\n if (useFallbackStrategy) {\n const isNavigatingInSpa = !!snippetConfig?.isSpa && navigationType === 'navigate';\n return navigationType === 'back_forward' || isNavigatingInSpa || isPagePersistedValue;\n } else {\n const isNavigatingInSpa = !!snippetConfig?.isSpa && navigationType === 'navigate';\n return navigationType === 'back_forward' || isNavigatingInSpa || isPagePersistedValue;\n }\n };\n\n /**\n * Detects the {@link FeatureLocation} used to build the\n * {@link QueryOriginInit} data.\n *\n * @returns The {@link FeatureLocation}.\n * @internal\n */\n const detectLocation = (): FeatureLocation => {\n const currentUrl = new URL(window.location.href);\n const previousUrl = url.value;\n url.value = currentUrl;\n\n const isInternalNavigation =\n previousUrl?.search !== currentUrl.search &&\n previousUrl?.pathname === currentUrl.pathname;\n if (isInternalNavigation) {\n return 'url_history';\n }\n\n if (isNavigatingFromPdp()) {\n return 'url_history_pdp';\n }\n\n return 'external';\n };\n\n /**\n * Creates the wire metadata to include in every emitted {@link XEvent}.\n *\n * @returns The {@link WireMetadata}.\n * @internal\n */\n const createWireMetadata = (): Pick<WireMetadata, 'feature' | 'location'> => {\n return {\n feature: 'url',\n location: detectLocation()\n };\n };\n\n /**\n * Emits the {@link UrlXEvents.ParamsLoadedFromUrl} XEvent,\n * the {@link UrlXEvents.ExtraParamsLoadedFromUrl} XEvent and, if there is query, also emits\n * the {@link XEventsTypes.UserOpenXProgrammatically}.\n *\n * @internal\n */\n const emitEvents = () => {\n const { all, extra } = parseUrlParams();\n const metadata = createWireMetadata();\n $x.emit('ParamsLoadedFromUrl', all, metadata);\n $x.emit('ExtraParamsLoadedFromUrl', extra, metadata);\n if (all.query) {\n $x.emit('UserOpenXProgrammatically', undefined, metadata);\n }\n urlLoaded.value = true;\n };\n\n /**\n * To emit the Url events just when the URL is load, and before the components mounted events\n * and state changes, we do it in the created of this component.\n */\n onMounted(() => {\n emitEvents();\n });\n\n return {\n onPageShow,\n emitEvents\n };\n }\n });\n</script>\n\n<docs lang=\"mdx\">\n## Events\n\nThis component emits the following events:\n\n- [`ParamsLoadedFromUrl`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`ExtraParamsLoadedFromUrl`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n- [`UserOpenXProgrammatically`](https://github.com/empathyco/x/blob/main/packages/x-components/src/wiring/events.types.ts)\n\n## See it in action\n\nThis component manages the browser URL parameters to preserve them through reloads and browser\nhistory navigation. It allow to configure the default url parameter names using its attributes. This\ncomponent doesn't render elements to the DOM.\n\n_Try to make some requests and take a look to the url!_\n\n```vue\n<template>\n <UrlHandler />\n</template>\n\n<script>\n import { UrlHandler } from '@empathyco/x-components/url-handler';\n\n export default {\n name: 'UrlHandlerDemo',\n components: {\n UrlHandler\n }\n };\n</script>\n```\n\n### Play with props\n\nIn this example, the `UrlHandler` component changes the following query parameter names:\n\n- `query` to be `q`.\n- `page` to be `p`.\n- `filter` to be `f`\n- `sort` to be `s`\n\n_Try to make some requests and take a look to the url!_\n\n```vue\n<template>\n <UrlHandler query=\"q\" page=\"p\" filter=\"f\" sort=\"s\" />\n</template>\n\n<script>\n import { UrlHandler } from '@empathyco/x-components/url-handler';\n\n export default {\n name: 'UrlHandlerDemo',\n components: {\n UrlHandler\n }\n };\n</script>\n```\n\n### Play with events\n\nThe `UrlHandler` will emit the `ParamsLoadedFromUrl` when the page is loaded.\n\nThe `UrlHandler` will emit the `ExtraParamsLoadedFromUrl` when the page is loaded with an extra\nparam configured and with a value in URL.\n\nThe `UrlHandler` will emit the `UserOpenXProgrammatically` when the page is loaded with a query in\nthe URL.\n</docs>\n"],"names":["_resolveComponent","_openBlock","_createBlock"],"mappings":";;;;;kCACEA,gBAA8E,CAAA,cAAA,CAAA,CAAA;AAAxC,EAAA,OAAAC,SAAA,EAAoB,EAAAC,WAAA,CAAA,uBAAA,EAAA;AAAA,IAAE,YAAO,IAAQ,CAAA,UAAA;AAAA,IAAA,UAAA,EAAA,IAAA,CAAA,UAAA;;;;;;;;"}