@athoscommerce/snap-preact 1.13.2 → 1.13.3-beta.187

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 (403) 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 +211 -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 +259 -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 +286 -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 +174 -0
  14. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +17 -0
  15. package/dist/cjs/components/src/components/Molecules/ChatQuickview/ChatQuickview.js +514 -0
  16. package/dist/cjs/components/src/components/Molecules/ChatQuickview/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 +88 -47
  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 +628 -0
  30. package/dist/cjs/components/src/components/Organisms/Chat/Chat.lang.js +110 -0
  31. package/dist/cjs/components/src/components/Organisms/Chat/components/ChatAttachments.js +105 -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 +62 -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/QuickviewLayout/QuickviewLayout.js +44 -11
  50. package/dist/cjs/components/src/components/Organisms/Results/Results.js +1 -1
  51. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
  52. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
  53. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
  54. package/dist/cjs/components/src/components/Templates/Chat/Chat.js +47 -0
  55. package/dist/cjs/components/src/components/Templates/Chat/index.js +17 -0
  56. package/dist/cjs/components/src/components/Templates/ChatButton/ChatButton.js +47 -0
  57. package/dist/cjs/components/src/components/Templates/ChatButton/index.js +17 -0
  58. package/dist/cjs/components/src/components/Templates/Search/Search.js +9 -1
  59. package/dist/cjs/components/src/index.js +17 -1
  60. package/dist/cjs/components/src/providers/themeComponents.js +20 -0
  61. package/dist/cjs/components/src/themes/base/components/templates/chat.js +6 -0
  62. package/dist/cjs/components/src/themes/base/components/templates/chatButton.js +6 -0
  63. package/dist/cjs/components/src/themes/base/components/templates/index.js +10 -0
  64. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +6 -0
  65. package/dist/cjs/components/src/themes/bocachica/components/templates/chatButton.js +6 -0
  66. package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +10 -0
  67. package/dist/cjs/components/src/themes/pike/components/templates/chat.js +6 -0
  68. package/dist/cjs/components/src/themes/pike/components/templates/chatButton.js +6 -0
  69. package/dist/cjs/components/src/themes/pike/components/templates/index.js +10 -0
  70. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +6 -0
  71. package/dist/cjs/components/src/themes/snapnco/components/templates/chatButton.js +6 -0
  72. package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +10 -0
  73. package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +6 -0
  74. package/dist/cjs/components/src/themes/snappy/components/templates/chatButton.js +6 -0
  75. package/dist/cjs/components/src/themes/snappy/components/templates/index.js +10 -0
  76. package/dist/cjs/components/src/themes/themeComponents/chat.js +14 -0
  77. package/dist/cjs/components/src/themes/themeComponents/chatButton.js +9 -0
  78. package/dist/cjs/components/src/utilities/Colour/Colour.js +41 -0
  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 +83 -1
  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 +485 -0
  88. package/dist/cjs/src/Templates/Stores/library/languages/de.js +485 -0
  89. package/dist/cjs/src/Templates/Stores/library/languages/es.js +490 -0
  90. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +490 -0
  91. package/dist/cjs/src/Templates/Stores/library/languages/hi.js +485 -0
  92. package/dist/cjs/src/Templates/Stores/library/languages/it.js +485 -0
  93. package/dist/cjs/src/Templates/Stores/library/languages/ja.js +485 -0
  94. package/dist/cjs/src/Templates/Stores/library/languages/ko.js +485 -0
  95. package/dist/cjs/src/Templates/Stores/library/languages/nl.js +485 -0
  96. package/dist/cjs/src/Templates/Stores/library/languages/pt.js +485 -0
  97. package/dist/cjs/src/Templates/Stores/library/languages/ru.js +485 -0
  98. package/dist/cjs/src/Templates/Stores/library/languages/tr.js +485 -0
  99. package/dist/cjs/src/Templates/Stores/library/languages/vi.js +485 -0
  100. package/dist/cjs/src/Templates/Stores/library/languages/zh.js +485 -0
  101. package/dist/cjs/src/create/createChatController.js +31 -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 +37 -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 +30 -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 +205 -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 +253 -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 +52 -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 +280 -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 +25 -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 +168 -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/ChatQuickview/ChatQuickview.d.ts +30 -0
  151. package/dist/esm/components/src/components/Molecules/ChatQuickview/ChatQuickview.d.ts.map +1 -0
  152. package/dist/esm/components/src/components/Molecules/ChatQuickview/ChatQuickview.js +508 -0
  153. package/dist/esm/components/src/components/Molecules/ChatQuickview/index.d.ts +2 -0
  154. package/dist/esm/components/src/components/Molecules/ChatQuickview/index.d.ts.map +1 -0
  155. package/dist/esm/components/src/components/Molecules/ChatQuickview/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 +88 -47
  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 +622 -0
  193. package/dist/esm/components/src/components/Organisms/Chat/Chat.lang.d.ts +79 -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 +105 -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 +99 -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 +58 -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/QuickviewLayout/QuickviewLayout.d.ts +5 -1
  251. package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.d.ts.map +1 -1
  252. package/dist/esm/components/src/components/Organisms/QuickviewLayout/QuickviewLayout.js +44 -11
  253. package/dist/esm/components/src/components/Organisms/Results/Results.js +1 -1
  254. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  255. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +5 -0
  256. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  257. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +5 -0
  258. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  259. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +5 -0
  260. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +12 -0
  261. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +1 -0
  262. package/dist/esm/components/src/components/Templates/Chat/Chat.js +41 -0
  263. package/dist/esm/components/src/components/Templates/Chat/index.d.ts +2 -0
  264. package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +1 -0
  265. package/dist/esm/components/src/components/Templates/Chat/index.js +1 -0
  266. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts +13 -0
  267. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.d.ts.map +1 -0
  268. package/dist/esm/components/src/components/Templates/ChatButton/ChatButton.js +41 -0
  269. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts +2 -0
  270. package/dist/esm/components/src/components/Templates/ChatButton/index.d.ts.map +1 -0
  271. package/dist/esm/components/src/components/Templates/ChatButton/index.js +1 -0
  272. package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
  273. package/dist/esm/components/src/components/Templates/Search/Search.js +9 -1
  274. package/dist/esm/components/src/index.d.ts +14 -0
  275. package/dist/esm/components/src/index.d.ts.map +1 -1
  276. package/dist/esm/components/src/index.js +14 -0
  277. package/dist/esm/components/src/providers/langComponents.d.ts +20 -0
  278. package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
  279. package/dist/esm/components/src/providers/themeComponents.d.ts +203 -1
  280. package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
  281. package/dist/esm/components/src/providers/themeComponents.js +20 -0
  282. package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
  283. package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
  284. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +4 -0
  285. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +1 -0
  286. package/dist/esm/components/src/themes/base/components/templates/chat.js +3 -0
  287. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts +4 -0
  288. package/dist/esm/components/src/themes/base/components/templates/chatButton.d.ts.map +1 -0
  289. package/dist/esm/components/src/themes/base/components/templates/chatButton.js +3 -0
  290. package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  291. package/dist/esm/components/src/themes/base/components/templates/index.js +10 -0
  292. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +4 -0
  293. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +1 -0
  294. package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +3 -0
  295. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts +4 -0
  296. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.d.ts.map +1 -0
  297. package/dist/esm/components/src/themes/bocachica/components/templates/chatButton.js +3 -0
  298. package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  299. package/dist/esm/components/src/themes/bocachica/components/templates/index.js +10 -0
  300. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +4 -0
  301. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +1 -0
  302. package/dist/esm/components/src/themes/pike/components/templates/chat.js +3 -0
  303. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts +4 -0
  304. package/dist/esm/components/src/themes/pike/components/templates/chatButton.d.ts.map +1 -0
  305. package/dist/esm/components/src/themes/pike/components/templates/chatButton.js +3 -0
  306. package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  307. package/dist/esm/components/src/themes/pike/components/templates/index.js +10 -0
  308. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +4 -0
  309. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +1 -0
  310. package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +3 -0
  311. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts +4 -0
  312. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.d.ts.map +1 -0
  313. package/dist/esm/components/src/themes/snapnco/components/templates/chatButton.js +3 -0
  314. package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  315. package/dist/esm/components/src/themes/snapnco/components/templates/index.js +10 -0
  316. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +4 -0
  317. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +1 -0
  318. package/dist/esm/components/src/themes/snappy/components/templates/chat.js +3 -0
  319. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts +4 -0
  320. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.d.ts.map +1 -0
  321. package/dist/esm/components/src/themes/snappy/components/templates/chatButton.js +3 -0
  322. package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  323. package/dist/esm/components/src/themes/snappy/components/templates/index.js +10 -0
  324. package/dist/esm/components/src/themes/themeComponents/chat.d.ts +4 -0
  325. package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +1 -0
  326. package/dist/esm/components/src/themes/themeComponents/chat.js +11 -0
  327. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts +4 -0
  328. package/dist/esm/components/src/themes/themeComponents/chatButton.d.ts.map +1 -0
  329. package/dist/esm/components/src/themes/themeComponents/chatButton.js +6 -0
  330. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +15 -0
  331. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  332. package/dist/esm/components/src/utilities/Colour/Colour.js +41 -0
  333. package/dist/esm/components/src/utilities/snapify.d.ts +3 -2
  334. package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
  335. package/dist/esm/components/src/utilities/snapify.js +29 -2
  336. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +4 -1
  337. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  338. package/dist/esm/src/Instantiators/RecommendationInstantiator.js +4 -1
  339. package/dist/esm/src/Snap.d.ts +3 -1
  340. package/dist/esm/src/Snap.d.ts.map +1 -1
  341. package/dist/esm/src/Snap.js +84 -2
  342. package/dist/esm/src/Templates/SnapTemplates.d.ts +2 -1
  343. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  344. package/dist/esm/src/Templates/SnapTemplates.js +54 -5
  345. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +43 -0
  346. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  347. package/dist/esm/src/Templates/Stores/LibraryStore.js +51 -1
  348. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +20 -6
  349. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  350. package/dist/esm/src/Templates/Stores/TemplateStore.js +3 -3
  351. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +2 -0
  352. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
  353. package/dist/esm/src/Templates/Stores/library/components/Chat.js +1 -0
  354. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts +2 -0
  355. package/dist/esm/src/Templates/Stores/library/components/ChatButton.d.ts.map +1 -0
  356. package/dist/esm/src/Templates/Stores/library/components/ChatButton.js +1 -0
  357. package/dist/esm/src/Templates/Stores/library/languages/ar.d.ts.map +1 -1
  358. package/dist/esm/src/Templates/Stores/library/languages/ar.js +485 -0
  359. package/dist/esm/src/Templates/Stores/library/languages/de.d.ts.map +1 -1
  360. package/dist/esm/src/Templates/Stores/library/languages/de.js +485 -0
  361. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  362. package/dist/esm/src/Templates/Stores/library/languages/es.js +490 -0
  363. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  364. package/dist/esm/src/Templates/Stores/library/languages/fr.js +490 -0
  365. package/dist/esm/src/Templates/Stores/library/languages/hi.d.ts.map +1 -1
  366. package/dist/esm/src/Templates/Stores/library/languages/hi.js +485 -0
  367. package/dist/esm/src/Templates/Stores/library/languages/it.d.ts.map +1 -1
  368. package/dist/esm/src/Templates/Stores/library/languages/it.js +485 -0
  369. package/dist/esm/src/Templates/Stores/library/languages/ja.d.ts.map +1 -1
  370. package/dist/esm/src/Templates/Stores/library/languages/ja.js +485 -0
  371. package/dist/esm/src/Templates/Stores/library/languages/ko.d.ts.map +1 -1
  372. package/dist/esm/src/Templates/Stores/library/languages/ko.js +485 -0
  373. package/dist/esm/src/Templates/Stores/library/languages/nl.d.ts.map +1 -1
  374. package/dist/esm/src/Templates/Stores/library/languages/nl.js +485 -0
  375. package/dist/esm/src/Templates/Stores/library/languages/pt.d.ts.map +1 -1
  376. package/dist/esm/src/Templates/Stores/library/languages/pt.js +485 -0
  377. package/dist/esm/src/Templates/Stores/library/languages/ru.d.ts.map +1 -1
  378. package/dist/esm/src/Templates/Stores/library/languages/ru.js +485 -0
  379. package/dist/esm/src/Templates/Stores/library/languages/tr.d.ts.map +1 -1
  380. package/dist/esm/src/Templates/Stores/library/languages/tr.js +485 -0
  381. package/dist/esm/src/Templates/Stores/library/languages/vi.d.ts.map +1 -1
  382. package/dist/esm/src/Templates/Stores/library/languages/vi.js +485 -0
  383. package/dist/esm/src/Templates/Stores/library/languages/zh.d.ts.map +1 -1
  384. package/dist/esm/src/Templates/Stores/library/languages/zh.js +485 -0
  385. package/dist/esm/src/create/createChatController.d.ts +5 -0
  386. package/dist/esm/src/create/createChatController.d.ts.map +1 -0
  387. package/dist/esm/src/create/createChatController.js +29 -0
  388. package/dist/esm/src/create/index.d.ts +1 -0
  389. package/dist/esm/src/create/index.d.ts.map +1 -1
  390. package/dist/esm/src/create/index.js +1 -0
  391. package/dist/esm/src/setupEvents.d.ts +13 -0
  392. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  393. package/dist/esm/src/setupEvents.js +44 -0
  394. package/dist/esm/src/types.d.ts +13 -3
  395. package/dist/esm/src/types.d.ts.map +1 -1
  396. package/dist/esm/src/utils/applyChatTargetInject.d.ts +3 -0
  397. package/dist/esm/src/utils/applyChatTargetInject.d.ts.map +1 -0
  398. package/dist/esm/src/utils/applyChatTargetInject.js +22 -0
  399. package/dist/esm/src/utils/index.d.ts +1 -0
  400. package/dist/esm/src/utils/index.d.ts.map +1 -1
  401. package/dist/esm/src/utils/index.js +1 -0
  402. package/eslint/src/validate-config.cjs +140 -98
  403. package/package.json +14 -12
@@ -82,7 +82,15 @@ exports.SearchInput = (0, mobx_react_lite_1.observer)((properties) => {
82
82
  //passed in properties
83
83
  ...properties?.closeSearchButton,
84
84
  };
85
- const { placeholderText, value, submitSearchButton, closeSearchButton, clearSearchButton, hideSubmitSearchButton, hideClearSearchButton, hideCloseSearchButton, inputRef, inputName, onChange, onClick, onKeyDown, onKeyUp, disabled, disableStyles, className, internalClassName, treePath, } = props;
85
+ props.chatButton = {
86
+ //defaults
87
+ ...defaultProps.chatButton,
88
+ //theme
89
+ ...props.chatButton,
90
+ //passed in properties
91
+ ...properties?.chatButton,
92
+ };
93
+ const { placeholderText, value, submitSearchButton, closeSearchButton, clearSearchButton, chatButton, hideSubmitSearchButton, hideClearSearchButton, hideCloseSearchButton, hideChatButton, inputRef, inputName, onChange, onClick, onKeyDown, onKeyUp, disabled, disableStyles, className, internalClassName, treePath, } = props;
86
94
  const { overrideElement, shouldRenderDefault } = (0, hooks_2.useCustomComponentOverride)('searchInput', props);
87
95
  if (!shouldRenderDefault) {
88
96
  return overrideElement;
@@ -147,6 +155,19 @@ exports.SearchInput = (0, mobx_react_lite_1.observer)((properties) => {
147
155
  theme: props?.theme,
148
156
  treePath,
149
157
  },
158
+ chatButton: {
159
+ // default props
160
+ ...chatButton,
161
+ internalClassName: 'ss__search-input__button--chat-button',
162
+ name: 'chat',
163
+ // inherited props
164
+ ...(0, utilities_1.defined)({
165
+ disableStyles,
166
+ }),
167
+ // component theme overrides
168
+ theme: props?.theme,
169
+ treePath,
170
+ },
150
171
  };
151
172
  const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
152
173
  //initialize lang
@@ -171,6 +192,11 @@ exports.SearchInput = (0, mobx_react_lite_1.observer)((properties) => {
171
192
  'aria-label': 'Submit Search',
172
193
  },
173
194
  },
195
+ chatButton: {
196
+ attributes: {
197
+ 'aria-label': 'Open Chat',
198
+ },
199
+ },
174
200
  };
175
201
  //deep merge with props.lang
176
202
  const lang = (0, deepmerge_1.default)(defaultLang, props.lang || {});
@@ -180,5 +206,5 @@ exports.SearchInput = (0, mobx_react_lite_1.observer)((properties) => {
180
206
  setInputValue(e.target.value || '');
181
207
  }
182
208
  onChange && onChange(e);
183
- }, disabled: disabled }), (0, jsx_runtime_1.jsxs)("div", { className: "ss__search-input__icons", children: [!hideClearSearchButton && clearSearchButton && inputValue?.length ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.clearSearchButton, ...mergedLang.clearSearchButton.all })) : null, !hideSubmitSearchButton && submitSearchButton && (0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.submitSearchButton, ...mergedLang.submitSearchButton.all })] })] }) }));
209
+ }, disabled: disabled }), (0, jsx_runtime_1.jsxs)("div", { className: "ss__search-input__icons", children: [!hideClearSearchButton && clearSearchButton && inputValue?.length ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.clearSearchButton, ...mergedLang.clearSearchButton.all })) : null, !hideChatButton && chatButton?.icon ? (0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.chatButton, ...mergedLang.chatButton.all }) : null, !hideSubmitSearchButton && submitSearchButton && (0, jsx_runtime_1.jsx)(Button_1.Button, { ...subProps.submitSearchButton, ...mergedLang.submitSearchButton.all })] })] }) }));
184
210
  });
@@ -75,22 +75,21 @@ exports.Slideout = (0, mobx_react_lite_1.observer)((properties) => {
75
75
  // state
76
76
  const [isActive, setActive] = (0, hooks_1.useState)(Boolean(active));
77
77
  const [renderContent, setRenderContent] = (0, hooks_1.useState)(Boolean(active));
78
- const toggleActive = () => {
79
- const newActive = !isActive;
80
- if (isActive) {
81
- setActive(false);
82
- if (rerender) {
83
- setTimeout(() => {
84
- setRenderContent(false);
85
- }, 250);
86
- }
87
- }
88
- else {
89
- setActive(true);
78
+ const isActiveRef = (0, hooks_1.useRef)(isActive);
79
+ isActiveRef.current = isActive;
80
+ const toggleActive = (force) => {
81
+ const next = typeof force === 'boolean' ? force : !isActiveRef.current;
82
+ setActive(next);
83
+ if (next) {
90
84
  setRenderContent(true);
91
85
  }
92
- document.body.style.overflow = newActive ? 'hidden' : '';
93
- onChange && onChange(newActive);
86
+ else if (rerender) {
87
+ setTimeout(() => {
88
+ setRenderContent(false);
89
+ }, 250);
90
+ }
91
+ document.body.style.overflow = next ? 'hidden' : '';
92
+ onChange && onChange(next);
94
93
  };
95
94
  // Sync internal state when the active prop changes from the parent component. This is a
96
95
  // layout effect so the content commit is scheduled before consumers' passive effects run —
@@ -106,19 +105,16 @@ exports.Slideout = (0, mobx_react_lite_1.observer)((properties) => {
106
105
  document.body.style.overflow = isVisible && isActive ? 'hidden' : '';
107
106
  const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
108
107
  (0, hooks_1.useEffect)(() => {
109
- if (buttonSelector) {
110
- let button;
111
- if (typeof buttonSelector == 'string') {
112
- button = document.querySelector(buttonSelector);
113
- }
114
- else {
115
- button = buttonSelector;
116
- }
117
- if (button) {
118
- button.addEventListener('click', () => toggleActive());
119
- }
120
- }
121
- }, []);
108
+ if (!buttonSelector)
109
+ return;
110
+ // string selectors bind to every matching element
111
+ const targets = typeof buttonSelector == 'string' ? Array.from(document.querySelectorAll(buttonSelector)) : [buttonSelector];
112
+ const handler = () => toggleActive();
113
+ targets.forEach((target) => target.addEventListener('click', handler));
114
+ return () => {
115
+ targets.forEach((target) => target.removeEventListener('click', handler));
116
+ };
117
+ }, [buttonSelector]);
122
118
  return isVisible || !rerender ? ((0, jsx_runtime_1.jsxs)(providers_1.CacheProvider, { children: [buttonContent &&
123
- (noButtonWrapper ? ((0, utilities_1.cloneWithProps)(buttonContent, { toggleActive, active: isActive, treePath })) : ((0, jsx_runtime_1.jsx)("div", { className: "ss__slideout__button", onClick: () => toggleActive(), children: (0, utilities_1.cloneWithProps)(buttonContent, { active: isActive, treePath }) }))), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__slideout', className, internalClassName, { 'ss__slideout--active': isActive }), style: { visibility: !rerender ? (isVisible ? 'visible' : 'hidden') : 'visible' }, ...styling, children: renderContent && (0, utilities_1.cloneWithProps)(children, { toggleActive, active: isActive, treePath }) }), (0, jsx_runtime_1.jsx)(Overlay_1.Overlay, { ...subProps.overlay, active: isActive, onClick: toggleActive })] })) : null;
119
+ (noButtonWrapper ? ((0, utilities_1.cloneWithProps)(buttonContent, { toggleActive, active: isActive, treePath })) : ((0, jsx_runtime_1.jsx)("div", { className: "ss__slideout__button", onClick: () => toggleActive(), children: (0, utilities_1.cloneWithProps)(buttonContent, { active: isActive, treePath }) }))), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__slideout', className, internalClassName, { 'ss__slideout--active': isActive }), style: { visibility: !rerender ? (isVisible ? 'visible' : 'hidden') : 'visible' }, ...styling, children: renderContent && (0, utilities_1.cloneWithProps)(children, { toggleActive, active: isActive, treePath }) }), (0, jsx_runtime_1.jsx)(Overlay_1.Overlay, { ...subProps.overlay, active: isActive, onClick: () => toggleActive(false) })] })) : null;
124
120
  });
@@ -30,6 +30,10 @@ const defaultStyles = ({ theme, slidesToShow = 1, slideWidth, gap = 16, overlayN
30
30
  display: 'flex',
31
31
  width: `100%`,
32
32
  transition: 'transform 0.3s ease-in-out',
33
+ // keep the track on its own compositor layer at all times; otherwise Chrome promotes it
34
+ // when a transform transition starts and demotes it when it ends, re-rasterizing the
35
+ // (scaled) slide content each time, which reads as every image flickering
36
+ willChange: 'transform',
33
37
  // Disable transition during dragging
34
38
  '&.ss__slideshow__track--dragging': {
35
39
  transition: 'none',
@@ -271,10 +275,18 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
271
275
  return () => observer.disconnect();
272
276
  }, []);
273
277
  // Touch/Drag state
278
+ // drag positions live in refs so the document-level mousemove/mouseup listeners
279
+ // (registered once per drag) always read current values instead of stale state
274
280
  const [isDragging, setIsDragging] = (0, hooks_1.useState)(false);
275
- // refs, not state - only read inside the drag handlers, never in render
276
- // the document mouseup listener below is bound once per drag, so its closure goes stale
277
- // refs stay current even from that stale closure, state would not
281
+ // mirrors `isDragging` state - the state drives renders (the dragging class, the transform,
282
+ // the autoplay effect), but the drag handlers below run through refs and can fire before
283
+ // the re-render that follows a setState (e.g. a tap's synthetic mouseup), so they read
284
+ // this ref instead. always update both via `setDragging`.
285
+ const isDraggingRef = (0, hooks_1.useRef)(false);
286
+ const setDragging = (value) => {
287
+ isDraggingRef.current = value;
288
+ setIsDragging(value);
289
+ };
278
290
  const startXRef = (0, hooks_1.useRef)(0);
279
291
  const currentXRef = (0, hooks_1.useRef)(0);
280
292
  const [dragOffset, setDragOffset] = (0, hooks_1.useState)(0);
@@ -394,7 +406,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
394
406
  }
395
407
  hasDraggedRef.current = false;
396
408
  setIsPlaying(false);
397
- setIsDragging(true);
409
+ setDragging(true);
398
410
  // a previous drag's mouseup may never have arrived (e.g. a native image drag hijacked it)
399
411
  // that would leave dragOffset stuck from that aborted drag
400
412
  // reset it so this drag always starts clean, not stacked on stale movement
@@ -407,7 +419,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
407
419
  }
408
420
  };
409
421
  const handleDragMove = (clientX) => {
410
- if (!isDragging || !touchDragging)
422
+ if (!isDraggingRef.current || !touchDragging)
411
423
  return;
412
424
  currentXRef.current = clientX;
413
425
  const diff = clientX - startXRef.current;
@@ -420,12 +432,21 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
420
432
  setDragOffset(diff);
421
433
  };
422
434
  const handleDragEnd = () => {
423
- if (!isDragging || !touchDragging)
435
+ if (!isDraggingRef.current || !touchDragging)
424
436
  return;
425
437
  const diff = currentXRef.current - startXRef.current;
426
438
  const threshold = getNavigationThreshold();
439
+ const slideWidthPx = (trackRef.current?.parentElement?.offsetWidth || 0) / visibleSlides;
427
440
  if (Math.abs(diff) > threshold) {
428
- if (diff > 0 && (loop || currentIndex > 0)) {
441
+ const slidesDragged = slideWidthPx > 0 ? Math.round(Math.abs(diff) / slideWidthPx) : 0;
442
+ if (slidesDragged > slidesToMove) {
443
+ // long drags land on the slide group they were dragged to instead of snapping back
444
+ setCurrentIndex((prevIndex) => {
445
+ const newIndex = diff > 0 ? prevIndex - slidesDragged : prevIndex + slidesDragged;
446
+ return Math.max(0, Math.min(maxIndex, newIndex));
447
+ });
448
+ }
449
+ else if (diff > 0 && (loop || currentIndex > 0)) {
429
450
  // Dragged right - go to previous
430
451
  goToPrevious();
431
452
  }
@@ -434,7 +455,7 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
434
455
  goToNext();
435
456
  }
436
457
  }
437
- setIsDragging(false);
458
+ setDragging(false);
438
459
  setDragOffset(0);
439
460
  dragBaseTranslatePxRef.current = null;
440
461
  // Resume autoplay if it was playing
@@ -456,20 +477,35 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
456
477
  }, autoPlayInterval);
457
478
  }
458
479
  };
459
- const handleMouseMove = (event) => {
460
- handleDragMove(event.clientX);
480
+ // document listeners are bound once per drag, so they call the latest handlers through refs
481
+ const dragMoveRef = (0, hooks_1.useRef)(handleDragMove);
482
+ const dragEndRef = (0, hooks_1.useRef)(handleDragEnd);
483
+ dragMoveRef.current = handleDragMove;
484
+ dragEndRef.current = handleDragEnd;
485
+ const removeMouseListenersRef = (0, hooks_1.useRef)(null);
486
+ const handleMouseDown = (event) => {
487
+ // only the primary (left) button starts a drag; right/middle clicks keep their default behaviour
488
+ if (event.button !== 0)
489
+ return;
490
+ event.preventDefault();
491
+ handleDragStart(event.clientX);
492
+ // bound here rather than in an effect - a tap's synthetic mouseup fires before effects run
493
+ const onMouseMove = (e) => dragMoveRef.current(e.clientX);
494
+ const onMouseUp = () => {
495
+ removeMouseListenersRef.current?.();
496
+ dragEndRef.current();
497
+ };
498
+ removeMouseListenersRef.current?.();
499
+ removeMouseListenersRef.current = () => {
500
+ document.removeEventListener('mousemove', onMouseMove);
501
+ document.removeEventListener('mouseup', onMouseUp);
502
+ removeMouseListenersRef.current = null;
503
+ };
504
+ document.addEventListener('mousemove', onMouseMove);
505
+ document.addEventListener('mouseup', onMouseUp);
461
506
  };
462
- // Add/remove mouse event listeners
463
- (0, hooks_1.useEffect)(() => {
464
- if (isDragging && touchDragging) {
465
- document.addEventListener('mousemove', handleMouseMove);
466
- document.addEventListener('mouseup', handleDragEnd);
467
- return () => {
468
- document.removeEventListener('mousemove', handleMouseMove);
469
- document.removeEventListener('mouseup', handleDragEnd);
470
- };
471
- }
472
- }, [isDragging, touchDragging]);
507
+ // clean up if unmounted mid-drag
508
+ (0, hooks_1.useEffect)(() => () => removeMouseListenersRef.current?.(), []);
473
509
  // Pause autoplay on hover or focus
474
510
  const handleMouseEnter = () => {
475
511
  if (isPlaying && intervalRef.current && !isDragging) {
@@ -495,6 +531,16 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
495
531
  }, autoPlayInterval);
496
532
  }
497
533
  };
534
+ // The browser fires a click after a drag's mouseup/touchend. Catch it in the capture phase on
535
+ // the container so it never reaches slide content that carries its own onClick (e.g. product
536
+ // cards that open a quickview) — those handlers can't know a drag just happened.
537
+ const handleContainerClickCapture = (event) => {
538
+ if (!hasDraggedRef.current)
539
+ return;
540
+ hasDraggedRef.current = false;
541
+ event.stopPropagation();
542
+ event.preventDefault();
543
+ };
498
544
  // Handle image click
499
545
  const handleSlideClick = (slide, index) => {
500
546
  if (slide.onClick && !isDragging && !hasDraggedRef.current) {
@@ -641,34 +687,29 @@ exports.Slideshow = (0, mobx_react_lite_1.observer)((properties) => {
641
687
  }, { activeBreakpoint: globalTheme?.activeBreakpoint });
642
688
  return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__slideshow', className), ref: slideshowRef, role: "region", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-roledescription": "slideshow", onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave,
643
689
  // @ts-ignore - ignore
644
- onKeyDown: handleKeyDown, tabIndex: 0, children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__slideshow__sr-only", ...mergedLang.srInstructions.all }), (0, jsx_runtime_1.jsx)("div", { className: "ss__slideshow__container", children: (0, jsx_runtime_1.jsx)("div", { ref: trackRef, className: (0, classnames_1.default)('ss__slideshow__track', {
690
+ onKeyDown: handleKeyDown, tabIndex: 0, children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__slideshow__sr-only", ...mergedLang.srInstructions.all }), (0, jsx_runtime_1.jsx)("div", { className: "ss__slideshow__container",
691
+ // @ts-ignore - capture-phase click
692
+ onClickCapture: touchDragging ? handleContainerClickCapture : undefined,
693
+ // Touch events
694
+ // @ts-ignore - touch events
695
+ onTouchStart: touchDragging ? (event) => handleDragStart(event.touches[0].clientX) : undefined,
696
+ // @ts-ignore - touch events
697
+ onTouchMove: touchDragging
698
+ ? (event) => {
699
+ if (isDraggingRef.current) {
700
+ event.preventDefault(); // Prevent scrolling while dragging
701
+ }
702
+ const touch = event.touches[0];
703
+ handleDragMove(touch.clientX);
704
+ }
705
+ : undefined, onTouchEnd: touchDragging ? handleDragEnd : undefined,
706
+ // mouse events for desktop dragging
707
+ // move/up are bound on document in handleMouseDown so the drag keeps tracking outside the container
708
+ // @ts-ignore - mouse events
709
+ onMouseDown: touchDragging ? handleMouseDown : undefined, children: (0, jsx_runtime_1.jsx)("div", { ref: trackRef, className: (0, classnames_1.default)('ss__slideshow__track', {
645
710
  'ss__slideshow__track--dragging': isDragging,
646
711
  'ss__slideshow__track--centered': centerInsufficientSlides && totalSlides <= computedSlidesToShow,
647
- }), style: { transform: `translateX(${translateX}${translateUnit})` }, role: "group", "aria-label": `Slide group ${currentIndex} of ${totalDots}`,
648
- // Touch events
649
- // @ts-ignore - touch events
650
- onTouchStart: touchDragging ? (event) => handleDragStart(event.touches[0].clientX) : undefined,
651
- // @ts-ignore - touch events
652
- onTouchMove: touchDragging
653
- ? (event) => {
654
- if (isDragging) {
655
- event.preventDefault(); // Prevent scrolling while dragging
656
- }
657
- const touch = event.touches[0];
658
- handleDragMove(touch.clientX);
659
- }
660
- : undefined, onTouchEnd: touchDragging ? handleDragEnd : undefined,
661
- // mouse events for desktop dragging
662
- // move/up are handled by the document listeners below, not here
663
- // that keeps the drag tracking even if the cursor leaves the track
664
- // and avoids firing handleDragEnd twice on a release over the track
665
- // @ts-ignore - mouse events
666
- onMouseDown: touchDragging
667
- ? (event) => {
668
- event.preventDefault();
669
- handleDragStart(event.clientX);
670
- }
671
- : undefined, children: normalizedSlides.map((slide, index) => {
712
+ }), style: { transform: `translateX(${translateX}${translateUnit})` }, role: "group", "aria-label": `Slide group ${currentIndex} of ${totalDots}`, children: normalizedSlides.map((slide, index) => {
672
713
  const isVisible = index >= currentIndex && index < currentIndex + computedSlidesToShow;
673
714
  const hasClickHandler = !!slide.onClick;
674
715
  const hasContent = !!slide.content;
@@ -73,7 +73,7 @@ exports.TabSelection = (0, mobx_react_lite_1.observer)((properties) => {
73
73
  },
74
74
  tabList: {
75
75
  attributes: {
76
- 'aria-label': 'Result tabs',
76
+ 'aria-label': 'Search result tabs',
77
77
  },
78
78
  },
79
79
  };
@@ -86,6 +86,8 @@ exports.TabSelection = (0, mobx_react_lite_1.observer)((properties) => {
86
86
  const disabled = !enableEmptyTabs && !active && resultCount === 0;
87
87
  const label = tab.label || tab.id;
88
88
  const displayedCount = showResultCount ? resultCount : undefined;
89
+ // whitespace is not permitted in an id and would split the aria-controls id reference list
90
+ const controllerId = tab.controller.id.replace(/\s+/g, '-');
89
91
  const defaultTabLang = {
90
92
  tabButton: {
91
93
  value: label,
@@ -99,8 +101,8 @@ exports.TabSelection = (0, mobx_react_lite_1.observer)((properties) => {
99
101
  return ((0, jsx_runtime_1.jsxs)(Button_1.Button, { ...subProps.button, internalClassName: (0, classnames_1.default)('ss__tab-selection__button', `ss__tab-selection__button--${tab.id}`, {
100
102
  'ss__tab-selection__button--active': active,
101
103
  }), disabled: disabled,
102
- // @ts-ignore - role and aria-selected are valid props for Button, but not defined in ButtonProps
103
- role: "tab", "aria-selected": active, ...tabLang.tabButton?.attributes, onClick: (e) => {
104
+ // @ts-ignore - valid props for Button, but not defined in ButtonProps
105
+ id: `ss__tab--${controllerId}`, role: "tab", "aria-selected": active, "aria-controls": `ss__tabpanel--${controllerId}`, ...tabLang.tabButton?.attributes, onClick: (e) => {
104
106
  onTabClick && onTabClick(e, tab);
105
107
  tabManager.setActive(tab.id);
106
108
  }, children: [(0, jsx_runtime_1.jsx)("span", { className: "ss__tab-selection__button__label", ...tabLang.tabButton?.value }), typeof displayedCount == 'number' ? (0, jsx_runtime_1.jsxs)("span", { className: "ss__tab-selection__button__count", children: ["(", displayedCount, ")"] }) : null] }, tab.id));
@@ -427,6 +427,7 @@ exports.AutocompleteLayout = (0, mobx_react_lite_1.observer)((properties) => {
427
427
  // results logic
428
428
  checkAndSetShowResults();
429
429
  const styling = (0, utilities_1.mergeStyles)(props, defaultStyles);
430
+ const tabControllerId = tabManager?.active?.controller.id;
430
431
  //initialize lang
431
432
  const defaultLang = {
432
433
  contentTitle: {
@@ -579,7 +580,13 @@ exports.AutocompleteLayout = (0, mobx_react_lite_1.observer)((properties) => {
579
580
  }
580
581
  const topRowCounter = { value: 0 };
581
582
  /***************************************/
582
- return visible && layout?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__autocomplete', { 'ss__autocomplete--terms': props.layout === 'terms' }, { 'ss__autocomplete--mobile': props.layout === 'mobile' }, { 'ss__autocomplete--desktop': props.layout === 'desktop' }, { 'ss__autocomplete--tablet': props.layout === 'tablet' }, className, internalClassName), onClick: (e) => e.stopPropagation(), ref: (e) => (0, hooks_2.useA11y)(e, 0, false, onReset), children: [(0, jsx_runtime_1.jsx)("span", { role: 'link', ref: (e) => (0, hooks_2.useA11y)(e), onClick: () => props.onReset && props.onReset(), className: "ss__autocomplete__close-button", style: { position: 'absolute', top: '-10000000px', left: '-1000000px' }, ...mergedLang.closeButton?.all }), layout?.map((module) => {
583
+ return visible && layout?.length ? ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)("div", { ...styling, className: (0, classnames_1.default)('ss__autocomplete', { 'ss__autocomplete--terms': props.layout === 'terms' }, { 'ss__autocomplete--mobile': props.layout === 'mobile' }, { 'ss__autocomplete--desktop': props.layout === 'desktop' }, { 'ss__autocomplete--tablet': props.layout === 'tablet' }, className, internalClassName), onClick: (e) => e.stopPropagation(), ref: (e) => (0, hooks_2.useA11y)(e, 0, false, onReset), ...(tabManager?.active
584
+ ? {
585
+ id: `ss__tabpanel--${tabControllerId}`,
586
+ role: 'tabpanel',
587
+ 'aria-labelledby': `ss__tab--${tabControllerId}`,
588
+ }
589
+ : {}), children: [(0, jsx_runtime_1.jsx)("span", { role: 'link', ref: (e) => (0, hooks_2.useA11y)(e), onClick: () => props.onReset && props.onReset(), className: "ss__autocomplete__close-button", style: { position: 'absolute', top: '-10000000px', left: '-1000000px' }, ...mergedLang.closeButton?.all }), layout?.map((module) => {
583
590
  return findModule(module, topRowCounter);
584
591
  })] }) })) : null;
585
592
  });