@athoscommerce/snap-preact 1.10.1-beta.150 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +11 -56
  2. package/dist/cjs/components/src/components/Atoms/Icon/paths.js +0 -13
  3. package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +5 -1
  4. package/dist/cjs/components/src/components/Molecules/Grid/Grid.js +9 -13
  5. package/dist/cjs/components/src/components/Molecules/List/List.js +9 -13
  6. package/dist/cjs/components/src/components/Molecules/RadioList/RadioList.js +9 -13
  7. package/dist/cjs/components/src/components/Molecules/Result/Result.js +6 -53
  8. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +2 -28
  9. package/dist/cjs/components/src/components/Molecules/Select/Select.js +9 -13
  10. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +28 -24
  11. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +1 -5
  12. package/dist/cjs/components/src/components/Molecules/TabSelection/TabSelection.js +108 -0
  13. package/dist/cjs/components/src/components/{Templates/ChatButton → Molecules/TabSelection}/index.js +1 -1
  14. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.js +1 -1
  15. package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +17 -2
  16. package/dist/cjs/components/src/components/Organisms/Facet/Facet.js +5 -1
  17. package/dist/cjs/components/src/components/Organisms/Layout/Layout.js +15 -1
  18. package/dist/cjs/components/src/components/Organisms/Results/Results.js +4 -4
  19. package/dist/cjs/components/src/components/Organisms/Toolbar/Toolbar.js +2 -1
  20. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +10 -8
  21. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +10 -8
  22. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +10 -8
  23. package/dist/cjs/components/src/components/Templates/Search/Search.js +10 -3
  24. package/dist/cjs/components/src/hooks/useAcRenderedInput.js +14 -3
  25. package/dist/cjs/components/src/hooks/useCreateController.js +24 -3
  26. package/dist/cjs/components/src/index.js +2 -17
  27. package/dist/cjs/components/src/providers/themeComponents.js +1 -20
  28. package/dist/cjs/components/src/setupTests.js +0 -14
  29. package/dist/cjs/components/src/themes/base/components/templates/index.js +0 -10
  30. package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +0 -10
  31. package/dist/cjs/components/src/themes/pike/components/templates/index.js +0 -10
  32. package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +0 -10
  33. package/dist/cjs/components/src/themes/snappy/components/templates/index.js +0 -10
  34. package/dist/cjs/components/src/utilities/Colour/Colour.js +0 -41
  35. package/dist/cjs/components/src/utilities/index.js +1 -0
  36. package/dist/cjs/components/src/utilities/selectionKey.js +12 -0
  37. package/dist/cjs/components/src/utilities/snapify.js +0 -27
  38. package/dist/cjs/src/Snap.js +0 -70
  39. package/dist/cjs/src/Templates/SnapTemplates.js +147 -86
  40. package/dist/cjs/src/Templates/Stores/LibraryStore.js +3 -51
  41. package/dist/cjs/src/Templates/Stores/TabManagerStore.js +151 -0
  42. package/dist/cjs/src/Templates/Stores/TemplateStore.js +23 -2
  43. package/dist/cjs/src/Templates/Stores/library/languages/es.js +20 -487
  44. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +20 -487
  45. package/dist/cjs/src/create/createAutocompleteController.js +6 -1
  46. package/dist/cjs/src/create/index.js +1 -3
  47. package/dist/cjs/src/setupEvents.js +0 -44
  48. package/dist/cjs/src/utils/index.js +1 -3
  49. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -3
  50. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  51. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts +1 -6
  52. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  53. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +12 -57
  54. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +0 -13
  55. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
  56. package/dist/esm/components/src/components/Atoms/Icon/paths.js +0 -13
  57. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts.map +1 -1
  58. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +5 -1
  59. package/dist/esm/components/src/components/Molecules/Grid/Grid.d.ts.map +1 -1
  60. package/dist/esm/components/src/components/Molecules/Grid/Grid.js +10 -14
  61. package/dist/esm/components/src/components/Molecules/List/List.d.ts.map +1 -1
  62. package/dist/esm/components/src/components/Molecules/List/List.js +10 -14
  63. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts +2 -2
  64. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
  65. package/dist/esm/components/src/components/Molecules/RadioList/RadioList.d.ts.map +1 -1
  66. package/dist/esm/components/src/components/Molecules/RadioList/RadioList.js +10 -14
  67. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +3 -7
  68. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  69. package/dist/esm/components/src/components/Molecules/Result/Result.js +6 -53
  70. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +0 -3
  71. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  72. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +2 -28
  73. package/dist/esm/components/src/components/Molecules/Select/Select.d.ts.map +1 -1
  74. package/dist/esm/components/src/components/Molecules/Select/Select.js +10 -14
  75. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  76. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +29 -25
  77. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  78. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +1 -5
  79. package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.d.ts +32 -0
  80. package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.d.ts.map +1 -0
  81. package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.js +102 -0
  82. package/dist/esm/components/src/components/Molecules/TabSelection/index.d.ts +2 -0
  83. package/dist/esm/components/src/components/Molecules/TabSelection/index.d.ts.map +1 -0
  84. package/dist/esm/components/src/components/Molecules/TabSelection/index.js +1 -0
  85. package/dist/esm/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.d.ts.map +1 -1
  86. package/dist/esm/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.js +1 -1
  87. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.d.ts +3 -1
  88. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.d.ts.map +1 -1
  89. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +17 -2
  90. package/dist/esm/components/src/components/Organisms/Facet/Facet.d.ts.map +1 -1
  91. package/dist/esm/components/src/components/Organisms/Facet/Facet.js +5 -1
  92. package/dist/esm/components/src/components/Organisms/Layout/Layout.d.ts +3 -1
  93. package/dist/esm/components/src/components/Organisms/Layout/Layout.d.ts.map +1 -1
  94. package/dist/esm/components/src/components/Organisms/Layout/Layout.js +15 -1
  95. package/dist/esm/components/src/components/Organisms/Results/Results.d.ts.map +1 -1
  96. package/dist/esm/components/src/components/Organisms/Results/Results.js +4 -4
  97. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.d.ts +3 -1
  98. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.d.ts.map +1 -1
  99. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.js +2 -1
  100. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts +2 -0
  101. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  102. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +10 -8
  103. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts +2 -0
  104. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  105. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +10 -8
  106. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts +2 -0
  107. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  108. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +10 -8
  109. package/dist/esm/components/src/components/Templates/Search/Search.d.ts +2 -0
  110. package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
  111. package/dist/esm/components/src/components/Templates/Search/Search.js +10 -3
  112. package/dist/esm/components/src/hooks/useAcRenderedInput.d.ts +2 -2
  113. package/dist/esm/components/src/hooks/useAcRenderedInput.d.ts.map +1 -1
  114. package/dist/esm/components/src/hooks/useAcRenderedInput.js +15 -4
  115. package/dist/esm/components/src/hooks/useCreateController.d.ts.map +1 -1
  116. package/dist/esm/components/src/hooks/useCreateController.js +24 -3
  117. package/dist/esm/components/src/index.d.ts +1 -14
  118. package/dist/esm/components/src/index.d.ts.map +1 -1
  119. package/dist/esm/components/src/index.js +1 -14
  120. package/dist/esm/components/src/providers/langComponents.d.ts +2 -20
  121. package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
  122. package/dist/esm/components/src/providers/themeComponents.d.ts +41 -209
  123. package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
  124. package/dist/esm/components/src/providers/themeComponents.js +1 -20
  125. package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
  126. package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
  127. package/dist/esm/components/src/setupTests.js +0 -14
  128. package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  129. package/dist/esm/components/src/themes/base/components/templates/index.js +0 -10
  130. package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  131. package/dist/esm/components/src/themes/bocachica/components/templates/index.js +0 -10
  132. package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  133. package/dist/esm/components/src/themes/pike/components/templates/index.js +0 -10
  134. package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  135. package/dist/esm/components/src/themes/snapnco/components/templates/index.js +0 -10
  136. package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  137. package/dist/esm/components/src/themes/snappy/components/templates/index.js +0 -10
  138. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +0 -15
  139. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  140. package/dist/esm/components/src/utilities/Colour/Colour.js +0 -41
  141. package/dist/esm/components/src/utilities/index.d.ts +1 -0
  142. package/dist/esm/components/src/utilities/index.d.ts.map +1 -1
  143. package/dist/esm/components/src/utilities/index.js +1 -0
  144. package/dist/esm/components/src/utilities/selectionKey.d.ts +3 -0
  145. package/dist/esm/components/src/utilities/selectionKey.d.ts.map +1 -0
  146. package/dist/esm/components/src/utilities/selectionKey.js +9 -0
  147. package/dist/esm/components/src/utilities/snapify.d.ts +2 -3
  148. package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
  149. package/dist/esm/components/src/utilities/snapify.js +2 -29
  150. package/dist/esm/src/Snap.d.ts +1 -2
  151. package/dist/esm/src/Snap.d.ts.map +1 -1
  152. package/dist/esm/src/Snap.js +1 -71
  153. package/dist/esm/src/Templates/SnapTemplates.d.ts +7 -5
  154. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  155. package/dist/esm/src/Templates/SnapTemplates.js +146 -85
  156. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +2 -43
  157. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  158. package/dist/esm/src/Templates/Stores/LibraryStore.js +3 -51
  159. package/dist/esm/src/Templates/Stores/TabManagerStore.d.ts +29 -0
  160. package/dist/esm/src/Templates/Stores/TabManagerStore.d.ts.map +1 -0
  161. package/dist/esm/src/Templates/Stores/TabManagerStore.js +146 -0
  162. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +28 -22
  163. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  164. package/dist/esm/src/Templates/Stores/TemplateStore.js +23 -2
  165. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  166. package/dist/esm/src/Templates/Stores/library/languages/es.js +20 -487
  167. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  168. package/dist/esm/src/Templates/Stores/library/languages/fr.js +20 -487
  169. package/dist/esm/src/create/createAutocompleteController.js +6 -1
  170. package/dist/esm/src/create/index.d.ts +0 -1
  171. package/dist/esm/src/create/index.d.ts.map +1 -1
  172. package/dist/esm/src/create/index.js +0 -1
  173. package/dist/esm/src/setupEvents.d.ts +0 -13
  174. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  175. package/dist/esm/src/setupEvents.js +0 -44
  176. package/dist/esm/src/types.d.ts +9 -14
  177. package/dist/esm/src/types.d.ts.map +1 -1
  178. package/dist/esm/src/utils/index.d.ts +0 -1
  179. package/dist/esm/src/utils/index.d.ts.map +1 -1
  180. package/dist/esm/src/utils/index.js +0 -1
  181. package/package.json +12 -14
  182. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +0 -99
  183. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +0 -17
  184. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +0 -221
  185. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.js +0 -17
  186. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +0 -209
  187. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +0 -17
  188. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +0 -258
  189. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.js +0 -17
  190. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +0 -282
  191. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.js +0 -17
  192. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +0 -173
  193. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +0 -17
  194. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +0 -577
  195. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.js +0 -17
  196. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.js +0 -252
  197. package/dist/cjs/components/src/components/Molecules/ChatResult/index.js +0 -17
  198. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +0 -113
  199. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.js +0 -17
  200. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +0 -107
  201. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.js +0 -17
  202. package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +0 -621
  203. package/dist/cjs/components/src/components/Organisms/Chat/Chat.lang.js +0 -105
  204. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatAttachments.js +0 -104
  205. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +0 -161
  206. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComposer.js +0 -166
  207. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +0 -369
  208. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatHistory.js +0 -130
  209. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatMessages.js +0 -218
  210. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +0 -123
  211. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSideChat.js +0 -173
  212. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +0 -149
  213. package/dist/cjs/components/src/components/Organisms/Chat/components/chatAccentTheme.js +0 -60
  214. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +0 -66
  215. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.js +0 -96
  216. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +0 -113
  217. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +0 -135
  218. package/dist/cjs/components/src/components/Organisms/Chat/index.js +0 -18
  219. package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.js +0 -94
  220. package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.lang.js +0 -11
  221. package/dist/cjs/components/src/components/Organisms/ChatButton/index.js +0 -18
  222. package/dist/cjs/components/src/components/Templates/Chat/Chat.js +0 -47
  223. package/dist/cjs/components/src/components/Templates/Chat/index.js +0 -17
  224. package/dist/cjs/components/src/components/Templates/ChatButton/ChatButton.js +0 -47
  225. package/dist/cjs/components/src/themes/base/components/templates/chat.js +0 -6
  226. package/dist/cjs/components/src/themes/base/components/templates/chatButton.js +0 -6
  227. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +0 -6
  228. package/dist/cjs/components/src/themes/bocachica/components/templates/chatButton.js +0 -6
  229. package/dist/cjs/components/src/themes/pike/components/templates/chat.js +0 -6
  230. package/dist/cjs/components/src/themes/pike/components/templates/chatButton.js +0 -6
  231. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +0 -6
  232. package/dist/cjs/components/src/themes/snapnco/components/templates/chatButton.js +0 -6
  233. package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +0 -6
  234. package/dist/cjs/components/src/themes/snappy/components/templates/chatButton.js +0 -6
  235. package/dist/cjs/components/src/themes/themeComponents/chat.js +0 -14
  236. package/dist/cjs/components/src/themes/themeComponents/chatButton.js +0 -9
  237. package/dist/cjs/src/Templates/Stores/library/components/Chat.js +0 -5
  238. package/dist/cjs/src/Templates/Stores/library/components/ChatButton.js +0 -5
  239. package/dist/cjs/src/create/createChatController.js +0 -30
  240. package/dist/cjs/src/utils/applyChatTargetInject.js +0 -25
  241. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +0 -17
  242. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +0 -1
  243. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +0 -92
  244. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +0 -2
  245. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +0 -1
  246. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.js +0 -1
  247. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +0 -30
  248. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +0 -1
  249. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +0 -215
  250. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +0 -2
  251. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +0 -1
  252. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.js +0 -1
  253. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +0 -19
  254. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +0 -1
  255. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +0 -203
  256. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +0 -2
  257. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +0 -1
  258. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.js +0 -1
  259. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +0 -36
  260. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +0 -1
  261. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +0 -252
  262. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts +0 -2
  263. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts.map +0 -1
  264. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.js +0 -1
  265. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +0 -38
  266. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +0 -1
  267. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +0 -276
  268. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts +0 -2
  269. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +0 -1
  270. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.js +0 -1
  271. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +0 -19
  272. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +0 -1
  273. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +0 -167
  274. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +0 -2
  275. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +0 -1
  276. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.js +0 -1
  277. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +0 -38
  278. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +0 -1
  279. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +0 -571
  280. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +0 -2
  281. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +0 -1
  282. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.js +0 -1
  283. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts +0 -35
  284. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +0 -1
  285. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.js +0 -246
  286. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts +0 -2
  287. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts.map +0 -1
  288. package/dist/esm/components/src/components/Molecules/ChatResult/index.js +0 -1
  289. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +0 -24
  290. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +0 -1
  291. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +0 -107
  292. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +0 -2
  293. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +0 -1
  294. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.js +0 -1
  295. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +0 -16
  296. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +0 -1
  297. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +0 -101
  298. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +0 -2
  299. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +0 -1
  300. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.js +0 -1
  301. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +0 -41
  302. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +0 -1
  303. package/dist/esm/components/src/components/Organisms/Chat/Chat.js +0 -615
  304. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts +0 -76
  305. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts.map +0 -1
  306. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.js +0 -100
  307. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts +0 -26
  308. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts.map +0 -1
  309. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.js +0 -98
  310. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts +0 -13
  311. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts.map +0 -1
  312. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +0 -155
  313. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts +0 -19
  314. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts.map +0 -1
  315. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.js +0 -160
  316. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts +0 -18
  317. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts.map +0 -1
  318. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +0 -363
  319. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts +0 -11
  320. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts.map +0 -1
  321. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.js +0 -124
  322. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts +0 -30
  323. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts.map +0 -1
  324. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.js +0 -212
  325. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts +0 -13
  326. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts.map +0 -1
  327. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +0 -117
  328. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts +0 -19
  329. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts.map +0 -1
  330. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.js +0 -167
  331. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts +0 -14
  332. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts.map +0 -1
  333. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +0 -143
  334. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts +0 -15
  335. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts.map +0 -1
  336. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.js +0 -56
  337. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +0 -32
  338. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +0 -1
  339. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +0 -62
  340. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +0 -40
  341. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +0 -1
  342. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.js +0 -92
  343. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +0 -43
  344. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +0 -1
  345. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +0 -109
  346. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts +0 -26
  347. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts.map +0 -1
  348. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +0 -131
  349. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +0 -3
  350. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts.map +0 -1
  351. package/dist/esm/components/src/components/Organisms/Chat/index.js +0 -2
  352. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts +0 -18
  353. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts.map +0 -1
  354. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.js +0 -88
  355. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts +0 -7
  356. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts.map +0 -1
  357. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.js +0 -8
  358. package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts +0 -3
  359. package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts.map +0 -1
  360. package/dist/esm/components/src/components/Organisms/ChatButton/index.js +0 -2
  361. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +0 -12
  362. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +0 -1
  363. package/dist/esm/components/src/components/Templates/Chat/Chat.js +0 -41
  364. package/dist/esm/components/src/components/Templates/Chat/index.d.ts +0 -2
  365. package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +0 -1
  366. package/dist/esm/components/src/components/Templates/Chat/index.js +0 -1
  367. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts +0 -13
  368. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts.map +0 -1
  369. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.js +0 -41
  370. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts +0 -2
  371. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts.map +0 -1
  372. package/dist/esm/components/src/components/Templates/ChatButton/index.js +0 -1
  373. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +0 -4
  374. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +0 -1
  375. package/dist/esm/components/src/themes/base/components/templates/chat.js +0 -3
  376. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts +0 -4
  377. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts.map +0 -1
  378. package/dist/esm/components/src/themes/base/components/templates/chatButton.js +0 -3
  379. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +0 -4
  380. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +0 -1
  381. package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +0 -3
  382. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts +0 -4
  383. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts.map +0 -1
  384. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.js +0 -3
  385. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +0 -4
  386. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +0 -1
  387. package/dist/esm/components/src/themes/pike/components/templates/chat.js +0 -3
  388. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts +0 -4
  389. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts.map +0 -1
  390. package/dist/esm/components/src/themes/pike/components/templates/chatButton.js +0 -3
  391. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +0 -4
  392. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +0 -1
  393. package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +0 -3
  394. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts +0 -4
  395. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts.map +0 -1
  396. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.js +0 -3
  397. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +0 -4
  398. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +0 -1
  399. package/dist/esm/components/src/themes/snappy/components/templates/chat.js +0 -3
  400. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts +0 -4
  401. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts.map +0 -1
  402. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.js +0 -3
  403. package/dist/esm/components/src/themes/themeComponents/chat.d.ts +0 -4
  404. package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +0 -1
  405. package/dist/esm/components/src/themes/themeComponents/chat.js +0 -11
  406. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts +0 -4
  407. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts.map +0 -1
  408. package/dist/esm/components/src/themes/themeComponents/chatButton.js +0 -6
  409. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +0 -2
  410. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +0 -1
  411. package/dist/esm/src/Templates/Stores/library/components/Chat.js +0 -1
  412. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts +0 -2
  413. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts.map +0 -1
  414. package/dist/esm/src/Templates/Stores/library/components/ChatButton.js +0 -1
  415. package/dist/esm/src/create/createChatController.d.ts +0 -5
  416. package/dist/esm/src/create/createChatController.d.ts.map +0 -1
  417. package/dist/esm/src/create/createChatController.js +0 -28
  418. package/dist/esm/src/utils/applyChatTargetInject.d.ts +0 -3
  419. package/dist/esm/src/utils/applyChatTargetInject.d.ts.map +0 -1
  420. package/dist/esm/src/utils/applyChatTargetInject.js +0 -22
@@ -3,12 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createChatTargeters = exports.createSearchTargeters = exports.SnapTemplates = exports.applyAutomaticThemeOverrides = exports.DEFAULT_AUTOCOMPLETE_CONTROLLER_SETTINGS = exports.DEFAULT_FEATURES = exports.TEMPLATE_EDITOR_UI_PARAM = exports.TEMPLATE_EDITOR_COOKIE = void 0;
6
+ exports.createSearchTargeters = exports.SnapTemplates = exports.applyAutomaticThemeOverrides = exports.TAB_PREFIXED_PARAMS = exports.DEFAULT_AUTOCOMPLETE_CONTROLLER_SETTINGS = exports.DEFAULT_FEATURES = exports.TEMPLATE_EDITOR_UI_PARAM = exports.TEMPLATE_EDITOR_COOKIE = void 0;
7
7
  exports.mapBreakpoints = mapBreakpoints;
8
8
  exports.createAutocompleteTargeters = createAutocompleteTargeters;
9
9
  exports.createRecommendationComponentMapping = createRecommendationComponentMapping;
10
10
  exports.createSnapConfig = createSnapConfig;
11
11
  exports.createPlugins = createPlugins;
12
+ exports.createTabPlugins = createTabPlugins;
12
13
  const jsx_runtime_1 = require("@emotion/react/jsx-runtime");
13
14
  const preact_1 = require("preact");
14
15
  const deepmerge_1 = __importDefault(require("deepmerge"));
@@ -16,6 +17,9 @@ const Snap_1 = require("../Snap");
16
17
  const TemplateSelect_1 = require("../../components/src/components/Atoms/TemplateSelect");
17
18
  const snap_toolbox_1 = require("@athoscommerce/snap-toolbox");
18
19
  const TemplateStore_1 = require("./Stores/TemplateStore");
20
+ const TabManagerStore_1 = require("./Stores/TabManagerStore");
21
+ const snap_client_1 = require("@athoscommerce/snap-client");
22
+ const snap_tracker_1 = require("@athoscommerce/snap-tracker");
19
23
  const shopify_1 = require("@athoscommerce/snap-platforms/shopify");
20
24
  const utils_1 = require("../utils");
21
25
  exports.TEMPLATE_EDITOR_COOKIE = 'athosEditor';
@@ -26,6 +30,8 @@ exports.DEFAULT_AUTOCOMPLETE_CONTROLLER_SETTINGS = {
26
30
  limit: 5,
27
31
  },
28
32
  };
33
+ // tabs namespace their catalog specific url state - the query is shared so a single search spans every tab
34
+ exports.TAB_PREFIXED_PARAMS = ['filter', 'sort', 'pageSize', 'rq', 'page'];
29
35
  const hasShopifyMarketsPluginConfig = (templateConfig) => {
30
36
  const pluginConfigs = [
31
37
  templateConfig.plugins?.shopify?.markets,
@@ -105,8 +111,8 @@ class SnapTemplates extends Snap_1.Snap {
105
111
  // attach to the window object
106
112
  window.athos = window.athos || {};
107
113
  window.athos.editor = templateEditorStore;
108
- const searchController = this.controllers['search'];
109
- const autocompleteController = this.controllers['autocomplete'];
114
+ const searchController = this.getTemplateController('search');
115
+ const autocompleteController = this.getTemplateController('autocomplete');
110
116
  if (searchController) {
111
117
  templateEditorStore.registerController(searchController);
112
118
  }
@@ -152,6 +158,16 @@ class SnapTemplates extends Snap_1.Snap {
152
158
  }
153
159
  });
154
160
  }
161
+ // when tabs are configured there is no controller using the `search` / `autocomplete` id -
162
+ // the default tab controller is used instead
163
+ getTemplateController(type) {
164
+ const tabs = this.templates.config[type]?.tabs;
165
+ if (tabs?.length) {
166
+ const defaultTab = tabs.filter((tab) => tab.default)[0] || tabs[0];
167
+ return this.controllers[defaultTab.id];
168
+ }
169
+ return this.controllers[type];
170
+ }
155
171
  }
156
172
  exports.SnapTemplates = SnapTemplates;
157
173
  function mapBreakpoints(breakpointsKeys, breakpointSettings) {
@@ -194,36 +210,6 @@ const createSearchTargeters = (templateConfig, templatesStore) => {
194
210
  });
195
211
  };
196
212
  exports.createSearchTargeters = createSearchTargeters;
197
- const createChatTargeters = (templateConfig, templatesStore) => {
198
- // initial target configs
199
- const targetConfigs = templateConfig.chat?.targets || [];
200
- let mergedConfigs;
201
- if (templatesStore.settings.editMode) {
202
- const overrideConfigs = (templatesStore.storage.get('overrides.targets.chat') || []);
203
- mergedConfigs = (0, deepmerge_1.default)(targetConfigs, overrideConfigs, { arrayMerge: utils_1.combineMerge });
204
- }
205
- else {
206
- mergedConfigs = targetConfigs;
207
- }
208
- return mergedConfigs.map((targetConfig) => {
209
- const target = templatesStore.addTarget({ ...targetConfig, type: 'chat' });
210
- const targeter = {
211
- selector: targetConfig.selector,
212
- // inline selectors (e.g. a nav slot) may render after DOMContentLoaded;
213
- // re-injection at already-targeted elements is prevented by DomTargeter
214
- autoRetarget: true,
215
- component: async () => {
216
- const componentImportPromises = [];
217
- componentImportPromises.push(templatesStore.library.import.component.chat[targetConfig.component]());
218
- await Promise.all(componentImportPromises);
219
- return TemplateSelect_1.TemplateSelect;
220
- },
221
- props: { target, templatesStore },
222
- };
223
- return (0, utils_1.applyChatTargetInject)(targeter);
224
- });
225
- };
226
- exports.createChatTargeters = createChatTargeters;
227
213
  function createAutocompleteTargeters(templateConfig, templatesStore) {
228
214
  // initial target configs
229
215
  const targetConfigs = templateConfig.autocomplete?.targets || [];
@@ -307,10 +293,19 @@ function createRecommendationComponentMapping(templateConfig, templatesStore) {
307
293
  return mapping;
308
294
  }, {});
309
295
  }
296
+ function createTabServices(snapConfig, siteId) {
297
+ const tabGlobals = {
298
+ ...snapConfig.client?.globals,
299
+ siteId,
300
+ };
301
+ return {
302
+ client: new snap_client_1.Client(tabGlobals, snapConfig.client?.config),
303
+ tracker: new snap_tracker_1.Tracker(tabGlobals, snapConfig.tracker?.config),
304
+ };
305
+ }
310
306
  function createSnapConfig(templateConfig, templatesStore) {
311
307
  const initiatorPrefix = window?.athos?.managed ? `managed/` : '';
312
308
  const snapConfig = {
313
- mode: templateConfig.config?.mode,
314
309
  features: templateConfig.features || exports.DEFAULT_FEATURES,
315
310
  client: {
316
311
  globals: {},
@@ -338,37 +333,63 @@ function createSnapConfig(templateConfig, templatesStore) {
338
333
  }
339
334
  /* SEARCH CONTROLLER */
340
335
  if (templateConfig.search && snapConfig.controllers) {
341
- const searchControllerConfig = {
342
- config: {
343
- id: 'search',
344
- plugins: createPlugins(templateConfig, templatesStore, 'search'),
345
- globals: templateConfig.search.globals || {},
346
- settings: templateConfig.search.settings || {},
347
- },
348
- targeters: (0, exports.createSearchTargeters)(templateConfig, templatesStore),
349
- };
350
- // merge the responsive settings if there are any
351
- // if (templateConfig.config.theme.variables?.breakpoints && templateConfig.search.breakpointSettings) {
352
- // const mappedBreakpoints = mapBreakpoints(templateConfig.config.theme.variables.breakpoints, templateConfig.search.breakpointSettings || []);
353
- // const breakpointSettings = getDisplaySettings(mappedBreakpoints) as SearchStoreConfigSettings;
354
- // searchControllerConfig.config.settings = deepmerge(searchControllerConfig.config.settings, breakpointSettings);
355
- // }
356
- snapConfig.controllers.search = [searchControllerConfig];
336
+ const searchTabs = templateConfig.search.tabs || [];
337
+ const searchTargeters = (0, exports.createSearchTargeters)(templateConfig, templatesStore);
338
+ const searchSettings = templateConfig.search.settings || {};
339
+ const searchGlobals = templateConfig.search.globals || {};
340
+ snapConfig.controllers.search = [];
341
+ if (!searchTabs.length) {
342
+ snapConfig.controllers.search.push({
343
+ config: {
344
+ id: 'search',
345
+ plugins: createPlugins(templateConfig, templatesStore, 'search'),
346
+ globals: searchGlobals,
347
+ settings: searchSettings,
348
+ },
349
+ targeters: searchTargeters,
350
+ });
351
+ }
352
+ else {
353
+ // when tabs are configured, the tab controllers do all of the searching - an additional
354
+ // non-tab controller would only produce a redundant API request, so the targeters are
355
+ // attached to the active tab controller instead. targeting kicks off a search before the
356
+ // TabManagerStore exists to gate redirects, so this must be the tab the shopper is viewing
357
+ const targetedTab = (0, TabManagerStore_1.getActiveTabConfig)(searchTabs) || searchTabs[0];
358
+ searchTabs.forEach((tab) => {
359
+ const tabParam = tab.param;
360
+ snapConfig.controllers.search.push({
361
+ url: {
362
+ settings: {
363
+ // the query is shared across tabs - only per-catalog state is namespaced
364
+ ...(tabParam ? { corePrefix: tabParam, corePrefixParams: exports.TAB_PREFIXED_PARAMS } : {}),
365
+ },
366
+ parameters: {
367
+ custom: {
368
+ [TabManagerStore_1.TAB_ID_DEFAULT_PARAM]: { type: 'query' },
369
+ },
370
+ },
371
+ },
372
+ config: {
373
+ id: tab.id,
374
+ plugins: tab.plugins ? createTabPlugins(tab.plugins, templatesStore) : createPlugins(templateConfig, templatesStore, 'search'),
375
+ settings: {
376
+ ...(0, deepmerge_1.default)(searchSettings, tab.settings || {}),
377
+ },
378
+ globals: (0, deepmerge_1.default)(searchGlobals, tab.globals || {}),
379
+ },
380
+ services: createTabServices(snapConfig, tab.siteId),
381
+ ...(tab === targetedTab ? { targeters: searchTargeters } : {}),
382
+ });
383
+ });
384
+ }
357
385
  }
358
386
  /* AUTOCOMPLETE CONTROLLER */
359
387
  if (templateConfig.autocomplete && snapConfig.controllers) {
360
388
  const autocompleteControllerSettings = (0, deepmerge_1.default)(exports.DEFAULT_AUTOCOMPLETE_CONTROLLER_SETTINGS, templateConfig.autocomplete.settings || {});
361
- const autocompleteControllerConfig = {
362
- config: {
363
- id: 'autocomplete',
364
- plugins: createPlugins(templateConfig, templatesStore, 'autocomplete'),
365
- selector: templateConfig.autocomplete.targets.map((target) => target.inputSelector).join(', '),
366
- action: templateConfig.autocomplete.action || '',
367
- globals: templateConfig.autocomplete.globals || {},
368
- settings: autocompleteControllerSettings,
369
- },
370
- targeters: createAutocompleteTargeters(templateConfig, templatesStore),
371
- };
389
+ const autocompleteSelector = templateConfig.autocomplete.targets.map((target) => target.inputSelector).join(', ');
390
+ const autocompleteTabs = templateConfig.autocomplete.tabs || [];
391
+ const autocompleteGlobals = templateConfig.autocomplete.globals || {};
392
+ const autocompleteTargeters = createAutocompleteTargeters(templateConfig, templatesStore);
372
393
  // merge the responsive settings if there are any
373
394
  // if (templateConfig.config.theme.variables?.breakpoints && templateConfig.autocomplete.breakpointSettings) {
374
395
  // const mappedBreakpoints = mapBreakpoints(
@@ -376,9 +397,61 @@ function createSnapConfig(templateConfig, templatesStore) {
376
397
  // templateConfig.autocomplete.breakpointSettings || []
377
398
  // );
378
399
  // const breakpointSettings = getDisplaySettings(mappedBreakpoints) as AutocompleteStoreConfigSettings;
379
- // autocompleteControllerConfig.config.settings = deepmerge(autocompleteControllerConfig.config.settings, breakpointSettings);
400
+ // autocompleteControllerSettings = deepmerge(autocompleteControllerSettings, breakpointSettings);
380
401
  // }
381
- snapConfig.controllers.autocomplete = [autocompleteControllerConfig];
402
+ snapConfig.controllers.autocomplete = [];
403
+ if (!autocompleteTabs.length) {
404
+ snapConfig.controllers.autocomplete.push({
405
+ config: {
406
+ id: 'autocomplete',
407
+ plugins: createPlugins(templateConfig, templatesStore, 'autocomplete'),
408
+ selector: autocompleteSelector,
409
+ action: templateConfig.autocomplete.action || '',
410
+ globals: autocompleteGlobals,
411
+ settings: autocompleteControllerSettings,
412
+ },
413
+ targeters: autocompleteTargeters,
414
+ });
415
+ }
416
+ else {
417
+ // when tabs are configured, every tab controller binds to the same input - an additional
418
+ // non-tab controller would only produce redundant API requests, so the targeters are
419
+ // attached to the default tab controller instead
420
+ const defaultTab = autocompleteTabs.filter((tab) => tab.default)[0] || autocompleteTabs[0];
421
+ autocompleteTabs.forEach((tab) => {
422
+ const tabParam = tab.param;
423
+ snapConfig.controllers.autocomplete.push({
424
+ url: {
425
+ settings: {
426
+ // the query is shared across tabs - only per-catalog state is namespaced
427
+ ...(tabParam ? { corePrefix: tabParam, corePrefixParams: exports.TAB_PREFIXED_PARAMS } : {}),
428
+ },
429
+ parameters: {
430
+ custom: {
431
+ [TabManagerStore_1.TAB_ID_DEFAULT_PARAM]: { type: 'query' },
432
+ },
433
+ },
434
+ // every url the autocomplete builds must carry the tab it belongs to
435
+ globals: [
436
+ {
437
+ param: TabManagerStore_1.TAB_ID_DEFAULT_PARAM,
438
+ value: tab.param,
439
+ },
440
+ ],
441
+ },
442
+ config: {
443
+ id: tab.id,
444
+ plugins: tab.plugins ? createTabPlugins(tab.plugins, templatesStore) : createPlugins(templateConfig, templatesStore, 'autocomplete'),
445
+ selector: autocompleteSelector,
446
+ action: templateConfig.autocomplete.action || '',
447
+ settings: (0, deepmerge_1.default)(autocompleteControllerSettings, tab.settings || {}),
448
+ globals: (0, deepmerge_1.default)(autocompleteGlobals, tab.globals || {}),
449
+ },
450
+ services: createTabServices(snapConfig, tab.siteId),
451
+ ...(tab === defaultTab ? { targeters: autocompleteTargeters } : {}),
452
+ });
453
+ });
454
+ }
382
455
  }
383
456
  /* RECOMMENDATION INSTANTIATOR */
384
457
  const originalRecsConfig = templateConfig.recommendation || {};
@@ -433,21 +506,6 @@ function createSnapConfig(templateConfig, templatesStore) {
433
506
  // }
434
507
  snapConfig.instantiators.recommendation = recommendationInstantiatorConfig;
435
508
  }
436
- /* CHAT CONTROLLER */
437
- if (templateConfig.chat && snapConfig.controllers) {
438
- const chatControllerConfig = {
439
- config: {
440
- id: 'chat',
441
- plugins: createPlugins(templateConfig, templatesStore, 'chat'),
442
- settings: {
443
- languageCode: templatesStore.language,
444
- ...(templateConfig.chat.settings || {}),
445
- },
446
- },
447
- targeters: (0, exports.createChatTargeters)(templateConfig, templatesStore),
448
- };
449
- snapConfig.controllers.chat = [chatControllerConfig];
450
- }
451
509
  return snapConfig;
452
510
  }
453
511
  function createPlugins(templateConfig, templatesStore, controllerType) {
@@ -456,14 +514,10 @@ function createPlugins(templateConfig, templatesStore, controllerType) {
456
514
  if (controllerType) {
457
515
  controllerConfig = templateConfig[controllerType] || {};
458
516
  }
459
- // backgroundFilters writes `config.globals.filters`, which the chat endpoint has no
460
- // field for — chat carries background filters via `settings.bgFilters` instead
461
- if (controllerType !== 'chat') {
462
- plugins.push([
463
- templatesStore.library.import.plugins.common.backgroundFilters,
464
- (0, deepmerge_1.default)(templateConfig.plugins?.common?.backgroundFilters || {}, controllerConfig?.plugins?.common?.backgroundFilters || {}),
465
- ]);
466
- }
517
+ plugins.push([
518
+ templatesStore.library.import.plugins.common.backgroundFilters,
519
+ (0, deepmerge_1.default)(templateConfig.plugins?.common?.backgroundFilters || {}, controllerConfig?.plugins?.common?.backgroundFilters || {}),
520
+ ]);
467
521
  plugins.push([
468
522
  templatesStore.library.import.plugins.common.scrollToTop,
469
523
  (0, deepmerge_1.default)(templateConfig.plugins?.common?.scrollToTop || {}, controllerConfig?.plugins?.common?.scrollToTop || {}),
@@ -538,3 +592,10 @@ function createPlugins(templateConfig, templatesStore, controllerType) {
538
592
  });
539
593
  return plugins;
540
594
  }
595
+ // tab level plugins do not inherit global or controller level plugins - only the plugins configured on the tab are used
596
+ function createTabPlugins(tabPlugins, templatesStore) {
597
+ const plugins = createPlugins({ plugins: tabPlugins }, templatesStore);
598
+ const customPluginFunctions = Object.values(tabPlugins.custom || {}).map((customPlugin) => customPlugin.function);
599
+ // built-in plugins are always created - keep only the ones that were given configuration on the tab
600
+ return plugins.filter((plugin) => customPluginFunctions.includes(plugin[0]) || Object.keys(plugin[1] || {}).length > 0);
601
+ }
@@ -29,26 +29,6 @@ class LibraryStore {
29
29
  default: {},
30
30
  email: {},
31
31
  },
32
- chat: {},
33
- chatButton: {},
34
- chatLoadingIndicator: {},
35
- chatAttachmentContext: {},
36
- chatInspirationResultMessage: {},
37
- chatMessageText: {},
38
- chatMessageUser: {},
39
- chatProductComparisonMessage: {},
40
- chatProductQueryMessage: {},
41
- chatResult: {},
42
- chatResultsDisplay: {},
43
- chatSuggestedQuestions: {},
44
- chatComparisonsTray: {},
45
- chatComposer: {},
46
- chatFacetsBar: {},
47
- chatHistory: {},
48
- chatMessages: {},
49
- chatSessionFeedback: {},
50
- chatSideChat: {},
51
- chatTopicDrift: {},
52
32
  badge: {},
53
33
  result: {},
54
34
  overlayResult: {},
@@ -97,6 +77,7 @@ class LibraryStore {
97
77
  slideout: {},
98
78
  sortBy: {},
99
79
  swatches: {},
80
+ tabSelection: {},
100
81
  variantSelection: {},
101
82
  terms: {},
102
83
  branchOverride: {},
@@ -227,33 +208,6 @@ class LibraryStore {
227
208
  },
228
209
  },
229
210
  },
230
- chat: {
231
- Chat: async () => {
232
- return this.components.chat.Chat || (this.components.chat.Chat = (await import('./library/components/Chat')).Chat);
233
- },
234
- ChatButton: async () => {
235
- return this.components.chat.ChatButton || (this.components.chat.ChatButton = (await import('./library/components/ChatButton')).ChatButton);
236
- },
237
- },
238
- chatButton: {},
239
- chatLoadingIndicator: {},
240
- chatAttachmentContext: {},
241
- chatInspirationResultMessage: {},
242
- chatMessageText: {},
243
- chatMessageUser: {},
244
- chatProductComparisonMessage: {},
245
- chatProductQueryMessage: {},
246
- chatResult: {},
247
- chatResultsDisplay: {},
248
- chatSuggestedQuestions: {},
249
- chatComparisonsTray: {},
250
- chatComposer: {},
251
- chatFacetsBar: {},
252
- chatHistory: {},
253
- chatMessages: {},
254
- chatSessionFeedback: {},
255
- chatSideChat: {},
256
- chatTopicDrift: {},
257
211
  badge: {},
258
212
  result: {
259
213
  Result: async () => {
@@ -310,6 +264,7 @@ class LibraryStore {
310
264
  slideout: {},
311
265
  sortBy: {},
312
266
  swatches: {},
267
+ tabSelection: {},
313
268
  variantSelection: {},
314
269
  terms: {},
315
270
  branchOverride: {},
@@ -376,10 +331,7 @@ class LibraryStore {
376
331
  async addComponentImport(type, name, componentFn) {
377
332
  // only allow certain types based on unlocked status
378
333
  if (this.allowedComponentTypes.includes(type) && this.components[type]) {
379
- // `chat` declares its library entry with literal keys so template targets stay
380
- // literal-checked; custom overrides register by arbitrary name, hence the cast
381
- const componentImports = this.import.component[type];
382
- componentImports[name] = async () => {
334
+ this.import.component[type][name] = async () => {
383
335
  return (this.components[type][name] ||
384
336
  (this.components[type][name] = await (0, CustomComponent_1.CustomComponent)({
385
337
  type,
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TabManagerStore = exports.TAB_ID_DEFAULT_PARAM = void 0;
4
+ exports.getActiveTabConfig = getActiveTabConfig;
5
+ const mobx_1 = require("mobx");
6
+ const snap_controller_1 = require("@athoscommerce/snap-controller");
7
+ const snap_toolbox_1 = require("@athoscommerce/snap-toolbox");
8
+ exports.TAB_ID_DEFAULT_PARAM = 'tab';
9
+ // resolves the active tab straight from the url - tab controllers begin searching as soon as they
10
+ // are targeted, which happens before any TabManagerStore exists
11
+ function getActiveTabConfig(tabs) {
12
+ const defaultTab = tabs.filter((tab) => tab.default)[0] || tabs[0];
13
+ const paramValue = (0, snap_toolbox_1.url)(window.location.href)?.params.query[exports.TAB_ID_DEFAULT_PARAM];
14
+ if (!paramValue) {
15
+ return defaultTab;
16
+ }
17
+ const activeParam = decodeURIComponent(paramValue);
18
+ return tabs.filter((tab) => tab.param == activeParam)[0] || defaultTab;
19
+ }
20
+ class TabManagerStore {
21
+ constructor(tabConfigs, controllers) {
22
+ this.tabs = [];
23
+ this.setActive = (id, updateUrl = true) => {
24
+ const tabToSelect = this.getTab(id);
25
+ if (!tabToSelect || tabToSelect.id === this.active?.id) {
26
+ return;
27
+ }
28
+ const previousTab = this.active;
29
+ this.setRedirects(previousTab, false);
30
+ this.active = tabToSelect;
31
+ this.setRedirects(tabToSelect, true);
32
+ if (tabToSelect.controller.type == snap_controller_1.ControllerTypes.search) {
33
+ if (updateUrl) {
34
+ // to remove page chain: `.remove('page')` to urlManager.set(...)
35
+ tabToSelect.controller.urlManager.set(this.param, tabToSelect.param).go();
36
+ }
37
+ this.searchTab(tabToSelect);
38
+ }
39
+ };
40
+ // every tab shares the url and the autocomplete input, so an inactive tab landing on a single
41
+ // result or a merchandising redirect would navigate away from the tab the shopper is viewing
42
+ this.setRedirects = (tab, enabled) => {
43
+ if (!tab) {
44
+ return;
45
+ }
46
+ const config = tab.controller.config;
47
+ config.settings = config.settings || {};
48
+ config.settings.redirects = enabled ? { ...tab.redirects } : { merchandising: false, singleResult: false };
49
+ };
50
+ this.searchTab = (tab) => {
51
+ if (tab.controller.type != snap_controller_1.ControllerTypes.search) {
52
+ return;
53
+ }
54
+ const searchController = tab.controller;
55
+ if (!searchController.store.loading && !searchController.store.loaded) {
56
+ searchController.search();
57
+ }
58
+ };
59
+ this.getTab = (id) => {
60
+ return this.tabs?.filter((tab) => tab.id == id)[0];
61
+ };
62
+ this.getTabByParam = (param) => {
63
+ return this.tabs?.filter((tab) => tab.param == param)[0];
64
+ };
65
+ this.param = exports.TAB_ID_DEFAULT_PARAM;
66
+ const startingTabConfig = tabConfigs.filter((tab) => tab.default)[0] || tabConfigs[0];
67
+ let urlParam;
68
+ tabConfigs.forEach((tabConfig) => {
69
+ const cntrlr = controllers.filter((controller) => controller.id == tabConfig.id)[0];
70
+ if (!cntrlr) {
71
+ return;
72
+ }
73
+ const newTab = {
74
+ id: tabConfig.id,
75
+ label: tabConfig.label,
76
+ siteId: tabConfig.siteId,
77
+ param: tabConfig.param,
78
+ controller: cntrlr,
79
+ // search-tab only setting - autocomplete has nothing to fetch until the shopper types
80
+ prefetch: 'prefetch' in tabConfig ? tabConfig.prefetch ?? true : true,
81
+ redirects: { ...(cntrlr.config.settings?.redirects || {}) },
82
+ };
83
+ if (cntrlr.type == snap_controller_1.ControllerTypes.autocomplete) {
84
+ const autocompleteController = cntrlr;
85
+ // hidden form inputs for tab selections
86
+ if (!autocompleteController.config.action) {
87
+ autocompleteController.eventManager.on('beforeSubmit', async (context, next) => {
88
+ if (context.input?.form) {
89
+ addHiddenFormInput(context.input.form, this.param, this.active?.param || newTab.param);
90
+ }
91
+ await next();
92
+ });
93
+ }
94
+ }
95
+ if (cntrlr.type == snap_controller_1.ControllerTypes.search) {
96
+ const searchController = cntrlr;
97
+ // read the active tab from the url on initial load
98
+ if (!urlParam) {
99
+ urlParam = getTabParamFromUrlState(searchController.urlManager.state[this.param]);
100
+ }
101
+ // functionality for back/forward browser buttons
102
+ searchController.urlManager.subscribe((prev, next) => {
103
+ const nextParam = getTabParamFromUrlState(next?.[this.param]);
104
+ const nextTab = (nextParam && this.getTabByParam(nextParam)) || this.getTab(startingTabConfig.id);
105
+ if (nextTab) {
106
+ this.setActive(nextTab.id, false);
107
+ }
108
+ });
109
+ }
110
+ this.tabs.push(newTab);
111
+ });
112
+ this.active = (urlParam && this.getTabByParam(urlParam)) || this.getTab(startingTabConfig.id) || this.tabs[0];
113
+ (0, mobx_1.makeObservable)(this, {
114
+ tabs: mobx_1.observable,
115
+ active: mobx_1.observable,
116
+ setActive: mobx_1.action,
117
+ });
118
+ // the active tab always searches - the rest only when they opt into prefetching
119
+ this.tabs.forEach((tab) => {
120
+ if (tab.id != this.active?.id) {
121
+ this.setRedirects(tab, false);
122
+ }
123
+ if (tab.prefetch || tab.id == this.active?.id) {
124
+ this.searchTab(tab);
125
+ }
126
+ });
127
+ }
128
+ }
129
+ exports.TabManagerStore = TabManagerStore;
130
+ function addHiddenFormInput(form, name, value) {
131
+ // match by property rather than an interpolated attribute selector to avoid selector injection
132
+ const existingElem = Array.from(form.querySelectorAll('input[type="hidden"]')).find((elem) => elem.name === name);
133
+ if (existingElem) {
134
+ // keep the value current - the active tab can change after the input was first appended
135
+ existingElem.value = value;
136
+ return;
137
+ }
138
+ const inputElem = document.createElement('input');
139
+ inputElem.type = 'hidden';
140
+ inputElem.name = name;
141
+ inputElem.value = value;
142
+ form.append(inputElem);
143
+ }
144
+ // custom url params always deserialize as arrays when parsed fresh from the url, but can be a
145
+ // plain string when read back from an in-session localState set() - handle both shapes
146
+ function getTabParamFromUrlState(value) {
147
+ if (Array.isArray(value)) {
148
+ return value[0];
149
+ }
150
+ return typeof value == 'string' ? value : undefined;
151
+ }
@@ -6,6 +6,7 @@ const mobx_1 = require("mobx");
6
6
  const snap_toolbox_1 = require("@athoscommerce/snap-toolbox");
7
7
  const ThemeStore_1 = require("./ThemeStore");
8
8
  const TargetStore_1 = require("./TargetStore");
9
+ const TabManagerStore_1 = require("./TabManagerStore");
9
10
  const LibraryStore_1 = require("./LibraryStore");
10
11
  const snap_toolbox_2 = require("@athoscommerce/snap-toolbox");
11
12
  const RESIZE_DEBOUNCE = 100;
@@ -14,6 +15,7 @@ class TemplatesStore {
14
15
  constructor(params) {
15
16
  this.loading = false;
16
17
  this.window = { innerWidth: 0 };
18
+ this.tabManagers = {};
17
19
  const { config, settings } = params || {};
18
20
  this.config = config;
19
21
  this.platform = config.config?.platform || 'other';
@@ -25,7 +27,6 @@ class TemplatesStore {
25
27
  this.targets = {
26
28
  search: [],
27
29
  autocomplete: [],
28
- chat: [],
29
30
  recommendation: {
30
31
  bundle: [],
31
32
  default: [],
@@ -125,6 +126,26 @@ class TemplatesStore {
125
126
  getTarget(type, targetIndex) {
126
127
  return getTargetArray(this.targets, type)?.[targetIndex];
127
128
  }
129
+ // one store per controller type
130
+ getTabManager(type, controllers) {
131
+ const tabs = this.config[type]?.tabs;
132
+ if (!tabs || tabs.length < 2) {
133
+ return undefined;
134
+ }
135
+ const mappedTabs = tabs.map((tab) => ({
136
+ id: tab.id,
137
+ param: tab.param,
138
+ siteId: tab.siteId,
139
+ label: tab.label,
140
+ default: tab.default,
141
+ prefetch: tab.prefetch,
142
+ }));
143
+ if (!this.tabManagers[type]) {
144
+ const tabControllers = tabs.map((tab) => controllers[tab.id]).filter((controller) => Boolean(controller));
145
+ this.tabManagers[type] = new TabManagerStore_1.TabManagerStore(mappedTabs, tabControllers);
146
+ }
147
+ return this.tabManagers[type];
148
+ }
128
149
  addTheme(config) {
129
150
  const theme = new ThemeStore_1.ThemeStore({
130
151
  config,
@@ -220,7 +241,7 @@ function getTargetArray(targets, type) {
220
241
  if (category === 'recommendation' && subcategory) {
221
242
  return targets.recommendation[subcategory];
222
243
  }
223
- if (category === 'search' || category === 'autocomplete' || category === 'chat') {
244
+ if (category === 'search' || category === 'autocomplete') {
224
245
  return targets[category];
225
246
  }
226
247
  return undefined;