@athoscommerce/snap-preact 1.13.1 → 1.13.3-beta.168

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 (402) hide show
  1. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +99 -0
  2. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +17 -0
  3. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +56 -11
  4. package/dist/cjs/components/src/components/Atoms/Icon/paths.js +13 -0
  5. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +221 -0
  6. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.js +17 -0
  7. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +209 -0
  8. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +17 -0
  9. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +258 -0
  10. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.js +17 -0
  11. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +282 -0
  12. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.js +17 -0
  13. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +173 -0
  14. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +17 -0
  15. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +577 -0
  16. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.js +17 -0
  17. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.js +252 -0
  18. package/dist/cjs/components/src/components/Molecules/ChatResult/index.js +17 -0
  19. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +113 -0
  20. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.js +17 -0
  21. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +107 -0
  22. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.js +17 -0
  23. package/dist/cjs/components/src/components/Molecules/Result/Result.js +51 -4
  24. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +28 -2
  25. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +24 -28
  26. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +44 -30
  27. package/dist/cjs/components/src/components/Molecules/TabSelection/TabSelection.js +5 -3
  28. package/dist/cjs/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -1
  29. package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +621 -0
  30. package/dist/cjs/components/src/components/Organisms/Chat/Chat.lang.js +105 -0
  31. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatAttachments.js +104 -0
  32. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +161 -0
  33. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatComposer.js +166 -0
  34. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +369 -0
  35. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatHistory.js +130 -0
  36. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatMessages.js +218 -0
  37. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +123 -0
  38. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatSideChat.js +173 -0
  39. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +149 -0
  40. package/dist/cjs/components/src/components/Organisms/Chat/components/chatAccentTheme.js +60 -0
  41. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +66 -0
  42. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.js +96 -0
  43. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +113 -0
  44. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +135 -0
  45. package/dist/cjs/components/src/components/Organisms/Chat/index.js +18 -0
  46. package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.js +94 -0
  47. package/dist/cjs/components/src/components/Organisms/ChatButton/ChatButton.lang.js +11 -0
  48. package/dist/cjs/components/src/components/Organisms/ChatButton/index.js +18 -0
  49. package/dist/cjs/components/src/components/Organisms/Results/Results.js +1 -1
  50. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
  51. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
  52. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
  53. package/dist/cjs/components/src/components/Templates/Chat/Chat.js +47 -0
  54. package/dist/cjs/components/src/components/Templates/Chat/index.js +17 -0
  55. package/dist/cjs/components/src/components/Templates/ChatButton/ChatButton.js +47 -0
  56. package/dist/cjs/components/src/components/Templates/ChatButton/index.js +17 -0
  57. package/dist/cjs/components/src/components/Templates/Search/Search.js +9 -1
  58. package/dist/cjs/components/src/index.js +17 -1
  59. package/dist/cjs/components/src/providers/themeComponents.js +20 -0
  60. package/dist/cjs/components/src/themes/base/components/templates/chat.js +6 -0
  61. package/dist/cjs/components/src/themes/base/components/templates/chatButton.js +6 -0
  62. package/dist/cjs/components/src/themes/base/components/templates/index.js +10 -0
  63. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +6 -0
  64. package/dist/cjs/components/src/themes/bocachica/components/templates/chatButton.js +6 -0
  65. package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +10 -0
  66. package/dist/cjs/components/src/themes/pike/components/templates/chat.js +6 -0
  67. package/dist/cjs/components/src/themes/pike/components/templates/chatButton.js +6 -0
  68. package/dist/cjs/components/src/themes/pike/components/templates/index.js +10 -0
  69. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +6 -0
  70. package/dist/cjs/components/src/themes/snapnco/components/templates/chatButton.js +6 -0
  71. package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +10 -0
  72. package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +6 -0
  73. package/dist/cjs/components/src/themes/snappy/components/templates/chatButton.js +6 -0
  74. package/dist/cjs/components/src/themes/snappy/components/templates/index.js +10 -0
  75. package/dist/cjs/components/src/themes/themeComponents/chat.js +14 -0
  76. package/dist/cjs/components/src/themes/themeComponents/chatButton.js +9 -0
  77. package/dist/cjs/components/src/utilities/Colour/Colour.js +41 -0
  78. package/dist/cjs/components/src/utilities/mergeProps.js +2 -1
  79. package/dist/cjs/components/src/utilities/snapify.js +27 -0
  80. package/dist/cjs/src/Instantiators/RecommendationInstantiator.js +4 -1
  81. package/dist/cjs/src/Snap.js +72 -2
  82. package/dist/cjs/src/Templates/SnapTemplates.js +55 -5
  83. package/dist/cjs/src/Templates/Stores/LibraryStore.js +51 -1
  84. package/dist/cjs/src/Templates/Stores/TemplateStore.js +3 -3
  85. package/dist/cjs/src/Templates/Stores/library/components/Chat.js +5 -0
  86. package/dist/cjs/src/Templates/Stores/library/components/ChatButton.js +5 -0
  87. package/dist/cjs/src/Templates/Stores/library/languages/ar.js +474 -0
  88. package/dist/cjs/src/Templates/Stores/library/languages/de.js +474 -0
  89. package/dist/cjs/src/Templates/Stores/library/languages/es.js +479 -0
  90. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +479 -0
  91. package/dist/cjs/src/Templates/Stores/library/languages/hi.js +474 -0
  92. package/dist/cjs/src/Templates/Stores/library/languages/it.js +474 -0
  93. package/dist/cjs/src/Templates/Stores/library/languages/ja.js +474 -0
  94. package/dist/cjs/src/Templates/Stores/library/languages/ko.js +474 -0
  95. package/dist/cjs/src/Templates/Stores/library/languages/nl.js +474 -0
  96. package/dist/cjs/src/Templates/Stores/library/languages/pt.js +474 -0
  97. package/dist/cjs/src/Templates/Stores/library/languages/ru.js +474 -0
  98. package/dist/cjs/src/Templates/Stores/library/languages/tr.js +474 -0
  99. package/dist/cjs/src/Templates/Stores/library/languages/vi.js +474 -0
  100. package/dist/cjs/src/Templates/Stores/library/languages/zh.js +474 -0
  101. package/dist/cjs/src/create/createChatController.js +30 -0
  102. package/dist/cjs/src/create/index.js +3 -1
  103. package/dist/cjs/src/setupEvents.js +44 -0
  104. package/dist/cjs/src/utils/applyChatTargetInject.js +25 -0
  105. package/dist/cjs/src/utils/index.js +3 -1
  106. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +3 -1
  107. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  108. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +17 -0
  109. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +1 -0
  110. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +92 -0
  111. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +2 -0
  112. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +1 -0
  113. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.js +1 -0
  114. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts +6 -1
  115. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  116. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +57 -12
  117. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +13 -0
  118. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
  119. package/dist/esm/components/src/components/Atoms/Icon/paths.js +13 -0
  120. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +30 -0
  121. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +1 -0
  122. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +215 -0
  123. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +2 -0
  124. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +1 -0
  125. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.js +1 -0
  126. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +19 -0
  127. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -0
  128. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +203 -0
  129. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +2 -0
  130. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +1 -0
  131. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.js +1 -0
  132. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +36 -0
  133. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +1 -0
  134. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +252 -0
  135. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts +2 -0
  136. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts.map +1 -0
  137. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.js +1 -0
  138. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +38 -0
  139. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +1 -0
  140. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +276 -0
  141. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts +2 -0
  142. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +1 -0
  143. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.js +1 -0
  144. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +19 -0
  145. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +1 -0
  146. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +167 -0
  147. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +2 -0
  148. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +1 -0
  149. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.js +1 -0
  150. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +38 -0
  151. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -0
  152. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +571 -0
  153. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +2 -0
  154. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +1 -0
  155. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.js +1 -0
  156. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts +35 -0
  157. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +1 -0
  158. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.js +246 -0
  159. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts +2 -0
  160. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts.map +1 -0
  161. package/dist/esm/components/src/components/Molecules/ChatResult/index.js +1 -0
  162. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +24 -0
  163. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +1 -0
  164. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +107 -0
  165. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +2 -0
  166. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +1 -0
  167. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.js +1 -0
  168. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +16 -0
  169. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +1 -0
  170. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +101 -0
  171. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +2 -0
  172. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +1 -0
  173. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.js +1 -0
  174. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts +2 -2
  175. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.d.ts.map +1 -1
  176. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +7 -3
  177. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  178. package/dist/esm/components/src/components/Molecules/Result/Result.js +51 -4
  179. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +3 -0
  180. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  181. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +28 -2
  182. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  183. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +25 -29
  184. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  185. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +44 -30
  186. package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.d.ts.map +1 -1
  187. package/dist/esm/components/src/components/Molecules/TabSelection/TabSelection.js +5 -3
  188. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.d.ts.map +1 -1
  189. package/dist/esm/components/src/components/Organisms/AutocompleteLayout/AutocompleteLayout.js +8 -1
  190. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +41 -0
  191. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -0
  192. package/dist/esm/components/src/components/Organisms/Chat/Chat.js +615 -0
  193. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts +76 -0
  194. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts.map +1 -0
  195. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.js +100 -0
  196. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts +26 -0
  197. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.d.ts.map +1 -0
  198. package/dist/esm/components/src/components/Organisms/Chat/components/ChatAttachments.js +98 -0
  199. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts +13 -0
  200. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.d.ts.map +1 -0
  201. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComparisonsTray.js +155 -0
  202. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts +19 -0
  203. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.d.ts.map +1 -0
  204. package/dist/esm/components/src/components/Organisms/Chat/components/ChatComposer.js +160 -0
  205. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts +18 -0
  206. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.d.ts.map +1 -0
  207. package/dist/esm/components/src/components/Organisms/Chat/components/ChatFacetsBar.js +363 -0
  208. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts +11 -0
  209. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.d.ts.map +1 -0
  210. package/dist/esm/components/src/components/Organisms/Chat/components/ChatHistory.js +124 -0
  211. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts +30 -0
  212. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.d.ts.map +1 -0
  213. package/dist/esm/components/src/components/Organisms/Chat/components/ChatMessages.js +212 -0
  214. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts +13 -0
  215. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.d.ts.map +1 -0
  216. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSessionFeedback.js +117 -0
  217. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts +19 -0
  218. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.d.ts.map +1 -0
  219. package/dist/esm/components/src/components/Organisms/Chat/components/ChatSideChat.js +167 -0
  220. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts +14 -0
  221. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.d.ts.map +1 -0
  222. package/dist/esm/components/src/components/Organisms/Chat/components/ChatTopicDrift.js +143 -0
  223. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts +15 -0
  224. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.d.ts.map +1 -0
  225. package/dist/esm/components/src/components/Organisms/Chat/components/chatAccentTheme.js +56 -0
  226. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +32 -0
  227. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +1 -0
  228. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +62 -0
  229. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +40 -0
  230. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +1 -0
  231. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.js +92 -0
  232. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +43 -0
  233. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +1 -0
  234. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +109 -0
  235. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts +26 -0
  236. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.d.ts.map +1 -0
  237. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatScrollLock.js +131 -0
  238. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +3 -0
  239. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts.map +1 -0
  240. package/dist/esm/components/src/components/Organisms/Chat/index.js +2 -0
  241. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts +18 -0
  242. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.d.ts.map +1 -0
  243. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.js +88 -0
  244. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts +7 -0
  245. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.d.ts.map +1 -0
  246. package/dist/esm/components/src/components/Organisms/ChatButton/ChatButton.lang.js +8 -0
  247. package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts +3 -0
  248. package/dist/esm/components/src/components/Organisms/ChatButton/index.d.ts.map +1 -0
  249. package/dist/esm/components/src/components/Organisms/ChatButton/index.js +2 -0
  250. package/dist/esm/components/src/components/Organisms/Results/Results.js +1 -1
  251. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  252. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
  253. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  254. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
  255. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  256. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
  257. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +12 -0
  258. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +1 -0
  259. package/dist/esm/components/src/components/Templates/Chat/Chat.js +41 -0
  260. package/dist/esm/components/src/components/Templates/Chat/index.d.ts +2 -0
  261. package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +1 -0
  262. package/dist/esm/components/src/components/Templates/Chat/index.js +1 -0
  263. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts +13 -0
  264. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts.map +1 -0
  265. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.js +41 -0
  266. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts +2 -0
  267. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts.map +1 -0
  268. package/dist/esm/components/src/components/Templates/ChatButton/index.js +1 -0
  269. package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
  270. package/dist/esm/components/src/components/Templates/Search/Search.js +9 -1
  271. package/dist/esm/components/src/index.d.ts +14 -0
  272. package/dist/esm/components/src/index.d.ts.map +1 -1
  273. package/dist/esm/components/src/index.js +14 -0
  274. package/dist/esm/components/src/providers/langComponents.d.ts +20 -0
  275. package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
  276. package/dist/esm/components/src/providers/themeComponents.d.ts +203 -1
  277. package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
  278. package/dist/esm/components/src/providers/themeComponents.js +20 -0
  279. package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
  280. package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
  281. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +4 -0
  282. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +1 -0
  283. package/dist/esm/components/src/themes/base/components/templates/chat.js +3 -0
  284. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts +4 -0
  285. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts.map +1 -0
  286. package/dist/esm/components/src/themes/base/components/templates/chatButton.js +3 -0
  287. package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  288. package/dist/esm/components/src/themes/base/components/templates/index.js +10 -0
  289. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +4 -0
  290. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +1 -0
  291. package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +3 -0
  292. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts +4 -0
  293. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts.map +1 -0
  294. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.js +3 -0
  295. package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  296. package/dist/esm/components/src/themes/bocachica/components/templates/index.js +10 -0
  297. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +4 -0
  298. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +1 -0
  299. package/dist/esm/components/src/themes/pike/components/templates/chat.js +3 -0
  300. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts +4 -0
  301. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts.map +1 -0
  302. package/dist/esm/components/src/themes/pike/components/templates/chatButton.js +3 -0
  303. package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  304. package/dist/esm/components/src/themes/pike/components/templates/index.js +10 -0
  305. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +4 -0
  306. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +1 -0
  307. package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +3 -0
  308. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts +4 -0
  309. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts.map +1 -0
  310. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.js +3 -0
  311. package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  312. package/dist/esm/components/src/themes/snapnco/components/templates/index.js +10 -0
  313. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +4 -0
  314. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +1 -0
  315. package/dist/esm/components/src/themes/snappy/components/templates/chat.js +3 -0
  316. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts +4 -0
  317. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts.map +1 -0
  318. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.js +3 -0
  319. package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  320. package/dist/esm/components/src/themes/snappy/components/templates/index.js +10 -0
  321. package/dist/esm/components/src/themes/themeComponents/chat.d.ts +4 -0
  322. package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +1 -0
  323. package/dist/esm/components/src/themes/themeComponents/chat.js +11 -0
  324. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts +4 -0
  325. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts.map +1 -0
  326. package/dist/esm/components/src/themes/themeComponents/chatButton.js +6 -0
  327. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +15 -0
  328. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  329. package/dist/esm/components/src/utilities/Colour/Colour.js +41 -0
  330. package/dist/esm/components/src/utilities/mergeProps.d.ts.map +1 -1
  331. package/dist/esm/components/src/utilities/mergeProps.js +2 -1
  332. package/dist/esm/components/src/utilities/snapify.d.ts +3 -2
  333. package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
  334. package/dist/esm/components/src/utilities/snapify.js +29 -2
  335. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +4 -1
  336. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  337. package/dist/esm/src/Instantiators/RecommendationInstantiator.js +4 -1
  338. package/dist/esm/src/Snap.d.ts +2 -1
  339. package/dist/esm/src/Snap.d.ts.map +1 -1
  340. package/dist/esm/src/Snap.js +73 -3
  341. package/dist/esm/src/Templates/SnapTemplates.d.ts +2 -1
  342. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  343. package/dist/esm/src/Templates/SnapTemplates.js +54 -5
  344. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +43 -0
  345. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  346. package/dist/esm/src/Templates/Stores/LibraryStore.js +51 -1
  347. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +20 -6
  348. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  349. package/dist/esm/src/Templates/Stores/TemplateStore.js +3 -3
  350. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +2 -0
  351. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
  352. package/dist/esm/src/Templates/Stores/library/components/Chat.js +1 -0
  353. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts +2 -0
  354. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts.map +1 -0
  355. package/dist/esm/src/Templates/Stores/library/components/ChatButton.js +1 -0
  356. package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts.map +1 -1
  357. package/dist/esm/src/Templates/Stores/library/languages/ar.js +474 -0
  358. package/dist/esm/src/Templates/Stores/library/languages/de.d.ts.map +1 -1
  359. package/dist/esm/src/Templates/Stores/library/languages/de.js +474 -0
  360. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  361. package/dist/esm/src/Templates/Stores/library/languages/es.js +479 -0
  362. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  363. package/dist/esm/src/Templates/Stores/library/languages/fr.js +479 -0
  364. package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts.map +1 -1
  365. package/dist/esm/src/Templates/Stores/library/languages/hi.js +474 -0
  366. package/dist/esm/src/Templates/Stores/library/languages/it.d.ts.map +1 -1
  367. package/dist/esm/src/Templates/Stores/library/languages/it.js +474 -0
  368. package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts.map +1 -1
  369. package/dist/esm/src/Templates/Stores/library/languages/ja.js +474 -0
  370. package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts.map +1 -1
  371. package/dist/esm/src/Templates/Stores/library/languages/ko.js +474 -0
  372. package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts.map +1 -1
  373. package/dist/esm/src/Templates/Stores/library/languages/nl.js +474 -0
  374. package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts.map +1 -1
  375. package/dist/esm/src/Templates/Stores/library/languages/pt.js +474 -0
  376. package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts.map +1 -1
  377. package/dist/esm/src/Templates/Stores/library/languages/ru.js +474 -0
  378. package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts.map +1 -1
  379. package/dist/esm/src/Templates/Stores/library/languages/tr.js +474 -0
  380. package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts.map +1 -1
  381. package/dist/esm/src/Templates/Stores/library/languages/vi.js +474 -0
  382. package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts.map +1 -1
  383. package/dist/esm/src/Templates/Stores/library/languages/zh.js +474 -0
  384. package/dist/esm/src/create/createChatController.d.ts +5 -0
  385. package/dist/esm/src/create/createChatController.d.ts.map +1 -0
  386. package/dist/esm/src/create/createChatController.js +28 -0
  387. package/dist/esm/src/create/index.d.ts +1 -0
  388. package/dist/esm/src/create/index.d.ts.map +1 -1
  389. package/dist/esm/src/create/index.js +1 -0
  390. package/dist/esm/src/setupEvents.d.ts +13 -0
  391. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  392. package/dist/esm/src/setupEvents.js +44 -0
  393. package/dist/esm/src/types.d.ts +13 -3
  394. package/dist/esm/src/types.d.ts.map +1 -1
  395. package/dist/esm/src/utils/applyChatTargetInject.d.ts +3 -0
  396. package/dist/esm/src/utils/applyChatTargetInject.d.ts.map +1 -0
  397. package/dist/esm/src/utils/applyChatTargetInject.js +22 -0
  398. package/dist/esm/src/utils/index.d.ts +1 -0
  399. package/dist/esm/src/utils/index.d.ts.map +1 -1
  400. package/dist/esm/src/utils/index.js +1 -0
  401. package/eslint/src/validate-config.cjs +140 -98
  402. package/package.json +14 -12
@@ -0,0 +1,3 @@
1
+ import type { ExtendedTarget } from '../Snap';
2
+ export declare function applyChatTargetInject(target: ExtendedTarget): ExtendedTarget;
3
+ //# sourceMappingURL=applyChatTargetInject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyChatTargetInject.d.ts","sourceRoot":"","sources":["../../../../src/utils/applyChatTargetInject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM9C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAiB5E"}
@@ -0,0 +1,22 @@
1
+ // Chat targets never render *into* the matched element — DomTargeter would empty it
2
+ // (and hideTarget would hide it, e.g. a merchant's nav while injecting a ChatButton).
3
+ // Instead, append a dedicated container to render into and never hide the host.
4
+ // An explicit `inject` in the target config always wins.
5
+ export function applyChatTargetInject(target) {
6
+ if (target.inject) {
7
+ return target;
8
+ }
9
+ const isBody = target.selector === 'body';
10
+ return {
11
+ ...target,
12
+ hideTarget: false,
13
+ inject: {
14
+ action: 'append',
15
+ element: () => {
16
+ const container = document.createElement('div');
17
+ container.className = isBody ? 'ss__chat--target' : 'ss__chat--inline-target';
18
+ return container;
19
+ },
20
+ },
21
+ };
22
+ }
@@ -1,3 +1,4 @@
1
+ export { applyChatTargetInject } from './applyChatTargetInject';
1
2
  export { configureSnapFeatures } from './configureSnapFeatures/configureSnapFeatures';
2
3
  export { combineMerge } from './combineMerge';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,2 +1,3 @@
1
+ export { applyChatTargetInject } from './applyChatTargetInject';
1
2
  export { configureSnapFeatures } from './configureSnapFeatures/configureSnapFeatures';
2
3
  export { combineMerge } from './combineMerge';
@@ -42,14 +42,17 @@ module.exports = {
42
42
  noResultComponents: '"{{ value }}" is not a valid resultComponent. No keys found in components.result.',
43
43
  invalidGlobalResultComponent: '"{{ value }}" is not a valid globalResultComponent. Must be one of: {{ validKeys }}.',
44
44
  noGlobalResultComponents: '"{{ value }}" is not a valid globalResultComponent. No keys found in components.result.',
45
+ // tab values are rendered by `staticValue` - literals quoted, references in backticks
45
46
  duplicateTabId:
46
- 'Tab id "{{ id }}" is used by more than one tab controller. Every search/autocomplete tab id must be unique, since it becomes the controller id.',
47
- mismatchedTabParam:
48
- 'Tab "{{ id }}" (siteId "{{ siteId }}") uses param "{{ param }}", but other tabs sharing siteId "{{ siteId }}" use param "{{ expectedParam }}". Tab controllers across search and autocomplete that share a siteId must use the same param.',
47
+ 'Tab id {{ id }} is used by more than one tab controller. Every search/autocomplete tab id must be unique, since it becomes the controller id.',
49
48
  duplicateSiteIdInFeature:
50
- 'Tab "{{ id }}" uses siteId "{{ siteId }}", which is already used by another tab in {{ feature }}.tabs. Tabs within the same feature must target unique siteIds.',
49
+ 'Tab {{ id }} uses siteId {{ siteId }}, which is already used by another tab in {{ feature }}.tabs. Tabs within the same feature must target unique siteIds.',
50
+ duplicateParamInFeature:
51
+ 'Tab {{ id }} uses param {{ param }}, which is already used by another tab in {{ feature }}.tabs. Tabs within the same feature must use unique params, since the param identifies the tab in the URL and namespaces its URL state.',
52
+ mismatchedTabParam:
53
+ 'Tab {{ id }} (siteId {{ siteId }}) uses param {{ param }}, but other tabs sharing siteId {{ siteId }} use param {{ expectedParam }}. Tab controllers across search and autocomplete that share a siteId must use the same param.',
51
54
  mismatchedTabSiteId:
52
- 'Tab "{{ id }}" (param "{{ param }}") uses siteId "{{ siteId }}", but other tabs sharing param "{{ param }}" use siteId "{{ expectedSiteId }}". Tab controllers that share a param must use the same siteId.',
55
+ 'Tab {{ id }} (param {{ param }}) uses siteId {{ siteId }}, but other tabs sharing param {{ param }} use siteId {{ expectedSiteId }}. Tab controllers across search and autocomplete that share a param must use the same siteId.',
53
56
  invalidOpenNamedSelectorProp:
54
57
  '"{{ value }}" is not a valid prop for the "{{ selector }}" override ({{ componentType }} resolves to {{ typeName }}). Must be one of: {{ validKeys }}.',
55
58
  invalidOpenNamedSelectorPropType:
@@ -690,102 +693,109 @@ module.exports = {
690
693
  }
691
694
 
692
695
  /**
693
- * Validate that every search/autocomplete tab id is unique (it becomes the
694
- * controller id), that siteIds are unique within a feature's tabs, and that
695
- * tabs sharing a siteId or a param (across search and autocomplete, or
696
- * within a feature) agree on the other value too — a siteId and its param
697
- * identify the same catalog, so they must move together.
696
+ * Validate the search/autocomplete tab controller configs:
697
+ *
698
+ * - every tab id is unique across the whole config (it becomes the controller id)
699
+ * - within a feature, every tab has its own siteId and its own param - the param is the
700
+ * tab's identity in the url and namespaces its url state, so two tabs sharing one
701
+ * collide, and selecting the second writes a url that resolves back to the first
702
+ * - across search and autocomplete, tabs sharing a siteId or a param agree on the other
703
+ * value too - a siteId and its param identify the same catalog, so they must move
704
+ * together
705
+ *
706
+ * Values are compared statically (see `staticValue`): string literals by value, and
707
+ * identifiers or member chains (`siteId`, `config.siteId`) by source text, since the same
708
+ * expression reads the same value. Two DIFFERENT expressions are never assumed to differ,
709
+ * so the mismatch checks only ever compare literals.
698
710
  */
699
711
  function validateTabs(configObjectExpression, context) {
700
- const tabs = collectTabs(configObjectExpression);
712
+ const tabs = collectTabs(configObjectExpression, context);
701
713
  if (tabs.length === 0) return;
702
714
 
703
- const tabsById = new Map();
704
- for (const tab of tabs) {
705
- if (tab.id === undefined) continue;
706
- if (!tabsById.has(tab.id)) tabsById.set(tab.id, []);
707
- tabsById.get(tab.id).push(tab);
708
- }
709
- for (const [id, group] of tabsById) {
710
- if (group.length > 1) {
711
- for (const tab of group) {
712
- context.report({
713
- node: tab.idNode,
714
- messageId: 'duplicateTabId',
715
- data: { id },
716
- });
717
- }
715
+ // duplicate ids anywhere in the config
716
+ for (const group of groupTabs(tabs, (tab) => tab.id?.key)) {
717
+ if (group.length < 2) continue;
718
+ for (const tab of group) {
719
+ context.report({
720
+ node: tab.id.node,
721
+ messageId: 'duplicateTabId',
722
+ data: { id: tab.id.display },
723
+ });
718
724
  }
719
725
  }
720
726
 
721
- const tabsByFeatureAndSiteId = new Map();
722
- for (const tab of tabs) {
723
- if (tab.siteId === undefined) continue;
724
- const key = `${tab.feature} ${tab.siteId}`;
725
- if (!tabsByFeatureAndSiteId.has(key)) tabsByFeatureAndSiteId.set(key, []);
726
- tabsByFeatureAndSiteId.get(key).push(tab);
727
- }
728
- for (const group of tabsByFeatureAndSiteId.values()) {
729
- if (group.length > 1) {
730
- for (const tab of group) {
731
- context.report({
732
- node: tab.siteIdNode,
733
- messageId: 'duplicateSiteIdInFeature',
734
- data: { id: tab.id, siteId: tab.siteId, feature: tab.feature },
735
- });
736
- }
727
+ // duplicate siteIds and params within a feature
728
+ for (const group of groupTabs(tabs, (tab) => tab.siteId && `${tab.feature} ${tab.siteId.key}`)) {
729
+ if (group.length < 2) continue;
730
+ for (const tab of group) {
731
+ context.report({
732
+ node: tab.siteId.node,
733
+ messageId: 'duplicateSiteIdInFeature',
734
+ data: { id: displayOf(tab.id), siteId: tab.siteId.display, feature: tab.feature },
735
+ });
737
736
  }
738
737
  }
739
-
740
- const tabsBySiteId = new Map();
741
- for (const tab of tabs) {
742
- if (tab.siteId === undefined || tab.param === undefined) continue;
743
- if (!tabsBySiteId.has(tab.siteId)) tabsBySiteId.set(tab.siteId, []);
744
- tabsBySiteId.get(tab.siteId).push(tab);
745
- }
746
- for (const [siteId, group] of tabsBySiteId) {
747
- // only enforce when the siteId is shared across both search and autocomplete tabs
748
- if (!group.some((tab) => tab.feature === 'search') || !group.some((tab) => tab.feature === 'autocomplete')) {
749
- continue;
738
+ for (const group of groupTabs(tabs, (tab) => tab.param && `${tab.feature} ${tab.param.key}`)) {
739
+ if (group.length < 2) continue;
740
+ for (const tab of group) {
741
+ context.report({
742
+ node: tab.param.node,
743
+ messageId: 'duplicateParamInFeature',
744
+ data: { id: displayOf(tab.id), param: tab.param.display, feature: tab.feature },
745
+ });
750
746
  }
747
+ }
751
748
 
752
- const expectedParam = group[0].param;
753
- for (const tab of group) {
754
- if (tab.param !== expectedParam) {
755
- context.report({
756
- node: tab.paramNode,
757
- messageId: 'mismatchedTabParam',
758
- data: { id: tab.id, siteId, param: tab.param, expectedParam },
759
- });
760
- }
749
+ // tabs sharing a siteId across features must share a param, and vice versa. within a
750
+ // feature the duplicate checks above already own the collision, so only groups that span
751
+ // both features are compared here - otherwise a duplicate param would also be reported as
752
+ // a siteId mismatch
753
+ reportMismatches(tabs, { shared: 'siteId', compared: 'param', messageId: 'mismatchedTabParam', expectedKey: 'expectedParam' }, context);
754
+ reportMismatches(tabs, { shared: 'param', compared: 'siteId', messageId: 'mismatchedTabSiteId', expectedKey: 'expectedSiteId' }, context);
755
+ }
756
+
757
+ function reportMismatches(tabs, { shared, compared, messageId, expectedKey }, context) {
758
+ for (const group of groupTabs(tabs, (tab) => tab[shared] && tab[compared] && tab[shared].key)) {
759
+ if (!group.some((tab) => tab.feature === 'search') || !group.some((tab) => tab.feature === 'autocomplete')) continue;
760
+
761
+ // two different references may still hold the same value, so only literals are compared
762
+ const literals = group.filter((tab) => tab[compared].literal !== undefined);
763
+ const expected = literals[0];
764
+ for (const tab of literals) {
765
+ if (tab[compared].key === expected[compared].key) continue;
766
+ context.report({
767
+ node: tab[compared].node,
768
+ messageId,
769
+ data: {
770
+ id: displayOf(tab.id),
771
+ siteId: tab.siteId.display,
772
+ param: tab.param.display,
773
+ [expectedKey]: expected[compared].display,
774
+ },
775
+ });
761
776
  }
762
777
  }
778
+ }
763
779
 
764
- const tabsByParam = new Map();
780
+ /**
781
+ * Group tabs by a key; tabs whose key is falsy (missing or unreadable value) are left out.
782
+ */
783
+ function groupTabs(tabs, keyOf) {
784
+ const groups = new Map();
765
785
  for (const tab of tabs) {
766
- if (tab.param === undefined || tab.siteId === undefined) continue;
767
- if (!tabsByParam.has(tab.param)) tabsByParam.set(tab.param, []);
768
- tabsByParam.get(tab.param).push(tab);
769
- }
770
- for (const [param, group] of tabsByParam) {
771
- const expectedSiteId = group[0].siteId;
772
- for (const tab of group) {
773
- if (tab.siteId !== expectedSiteId) {
774
- context.report({
775
- node: tab.siteIdNode,
776
- messageId: 'mismatchedTabSiteId',
777
- data: { id: tab.id, param, siteId: tab.siteId, expectedSiteId },
778
- });
779
- }
780
- }
786
+ const key = keyOf(tab);
787
+ if (!key) continue;
788
+ if (!groups.has(key)) groups.set(key, []);
789
+ groups.get(key).push(tab);
781
790
  }
791
+ return groups.values();
782
792
  }
783
793
 
784
794
  /**
785
- * Collect { feature, id, idNode, siteId, siteIdNode, param, paramNode } for
786
- * every tab in config.search.tabs and config.autocomplete.tabs.
795
+ * Collect { feature, id, siteId, param } for every tab in config.search.tabs and
796
+ * config.autocomplete.tabs, each value described by `staticValue` (or undefined).
787
797
  */
788
- function collectTabs(configObjectExpression) {
798
+ function collectTabs(configObjectExpression, context) {
789
799
  const tabs = [];
790
800
 
791
801
  for (const feature of ['search', 'autocomplete']) {
@@ -798,18 +808,11 @@ module.exports = {
798
808
  for (const element of tabsProp.value.elements) {
799
809
  if (!element || element.type !== 'ObjectExpression') continue;
800
810
 
801
- const idProp = findProperty(element, 'id');
802
- const siteIdProp = findProperty(element, 'siteId');
803
- const paramProp = findProperty(element, 'param');
804
-
805
811
  tabs.push({
806
812
  feature,
807
- id: literalStringValue(idProp),
808
- idNode: idProp?.value,
809
- siteId: literalStringValue(siteIdProp),
810
- siteIdNode: siteIdProp?.value,
811
- param: literalStringValue(paramProp),
812
- paramNode: paramProp?.value,
813
+ id: staticValue(findProperty(element, 'id'), context),
814
+ siteId: staticValue(findProperty(element, 'siteId'), context),
815
+ param: staticValue(findProperty(element, 'param'), context),
813
816
  });
814
817
  }
815
818
  }
@@ -818,15 +821,54 @@ module.exports = {
818
821
  }
819
822
 
820
823
  /**
821
- * Get the string value of a property whose value is a string literal,
822
- * or undefined if the property is missing or not a string literal
823
- * (e.g. a computed/spread value we can't statically check).
824
+ * Describe a tab property's value for comparison:
825
+ * - `key` is equal for two values that are certainly equal at runtime
826
+ * - `literal` is the string value when it is known statically, else undefined
827
+ * - `display` is how the value reads in a message: literals quoted, references in backticks
828
+ *
829
+ * Returns undefined when the property is missing or its value cannot be reasoned about
830
+ * statically (a call, a conditional, a spread...), which excludes it from every check.
824
831
  */
825
- function literalStringValue(property) {
826
- if (!property || property.value.type !== 'Literal' || typeof property.value.value !== 'string') {
827
- return undefined;
832
+ function staticValue(property, context) {
833
+ if (!property) return undefined;
834
+
835
+ let node = property.value;
836
+ // `siteId as string`, `siteId!`, `siteId satisfies string` all read the inner expression
837
+ while (node.type === 'TSAsExpression' || node.type === 'TSNonNullExpression' || node.type === 'TSSatisfiesExpression') {
838
+ node = node.expression;
839
+ }
840
+
841
+ if (node.type === 'Literal' && typeof node.value === 'string') {
842
+ return { node: property.value, key: JSON.stringify(node.value), literal: node.value, display: JSON.stringify(node.value) };
843
+ }
844
+ if (node.type === 'TemplateLiteral' && node.expressions.length === 0) {
845
+ const value = node.quasis[0].value.cooked;
846
+ return { node: property.value, key: JSON.stringify(value), literal: value, display: JSON.stringify(value) };
828
847
  }
829
- return property.value.value;
848
+ if (isStableReference(node)) {
849
+ const sourceCode = context.sourceCode ?? context.getSourceCode();
850
+ const text = sourceCode.getText(node);
851
+ return { node: property.value, key: `ref ${text}`, literal: undefined, display: `\`${text}\`` };
852
+ }
853
+
854
+ return undefined;
855
+ }
856
+
857
+ /**
858
+ * An identifier or a member chain over identifiers (`siteId`, `config.siteId`,
859
+ * `sites['blog']`) - the same text reads the same value, unlike a call or a conditional.
860
+ */
861
+ function isStableReference(node) {
862
+ if (node.type === 'Identifier' || node.type === 'ThisExpression') return true;
863
+ if (node.type === 'MemberExpression') {
864
+ const propertyIsStable = node.computed ? node.property.type === 'Literal' : node.property.type === 'Identifier';
865
+ return propertyIsStable && isStableReference(node.object);
866
+ }
867
+ return false;
868
+ }
869
+
870
+ function displayOf(value) {
871
+ return value ? value.display : '<unknown>';
830
872
  }
831
873
 
832
874
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@athoscommerce/snap-preact",
3
- "version": "1.13.1",
3
+ "version": "1.13.3-beta.168+f48f5a0d2",
4
4
  "description": "Snap Preact",
5
5
  "main": "dist/cjs/src/index.js",
6
6
  "module": "dist/esm/src/index.js",
@@ -28,24 +28,26 @@
28
28
  "storybook": "storybook dev -c ./components/.storybook -p 6006"
29
29
  },
30
30
  "dependencies": {
31
- "@athoscommerce/snap-client": "1.13.1",
32
- "@athoscommerce/snap-controller": "1.13.1",
33
- "@athoscommerce/snap-event-manager": "1.13.1",
34
- "@athoscommerce/snap-logger": "1.13.1",
35
- "@athoscommerce/snap-platforms": "1.13.1",
36
- "@athoscommerce/snap-profiler": "1.13.1",
37
- "@athoscommerce/snap-store-mobx": "1.13.1",
38
- "@athoscommerce/snap-toolbox": "1.13.1",
39
- "@athoscommerce/snap-tracker": "1.13.1",
40
- "@athoscommerce/snap-url-manager": "1.13.1",
31
+ "@athoscommerce/snap-client": "1.13.3-beta.168+f48f5a0d2",
32
+ "@athoscommerce/snap-controller": "1.13.3-beta.168+f48f5a0d2",
33
+ "@athoscommerce/snap-event-manager": "1.13.3-beta.168+f48f5a0d2",
34
+ "@athoscommerce/snap-logger": "1.13.3-beta.168+f48f5a0d2",
35
+ "@athoscommerce/snap-platforms": "1.13.3-beta.168+f48f5a0d2",
36
+ "@athoscommerce/snap-profiler": "1.13.3-beta.168+f48f5a0d2",
37
+ "@athoscommerce/snap-store-mobx": "1.13.3-beta.168+f48f5a0d2",
38
+ "@athoscommerce/snap-toolbox": "1.13.3-beta.168+f48f5a0d2",
39
+ "@athoscommerce/snap-tracker": "1.13.3-beta.168+f48f5a0d2",
40
+ "@athoscommerce/snap-url-manager": "1.13.3-beta.168+f48f5a0d2",
41
41
  "@emotion/react": "11.13.0",
42
42
  "acorn": "8.16.0",
43
43
  "classnames": "^2.3.2",
44
44
  "colord": "^2.9.3",
45
45
  "deepmerge": "4.3.1",
46
46
  "dequal": "2.0.3",
47
+ "dompurify": "^3.2.4",
47
48
  "intersection-observer": "0.12.2",
48
49
  "is-plain-object": "5.1.0",
50
+ "marked": "17.0.6",
49
51
  "react-ranger": "2.1.0",
50
52
  "swiper": "11.0.7"
51
53
  },
@@ -106,5 +108,5 @@
106
108
  "./webpack": "./webpack/index.js",
107
109
  "./eslintplugin": "./eslint/src/index.cjs"
108
110
  },
109
- "gitHead": "8808ef454ae5e882a32c71dd68ef602fc782af6e"
111
+ "gitHead": "f48f5a0d20e1ffda1884d2cba6524d6bfbe6c6bc"
110
112
  }