@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,43 @@
1
+ import type { RefObject } from 'preact';
2
+ export type UseChatOverflowOptions = {
3
+ messagesContainerRef: RefObject<HTMLDivElement>;
4
+ headerRef: RefObject<HTMLDivElement>;
5
+ /**
6
+ * Whether the chat panel is open. State resets on toggle.
7
+ */
8
+ open: boolean;
9
+ /**
10
+ * Whether the controller is currently loading. Triggers a scroll-to-bottom when it flips on.
11
+ */
12
+ loading: boolean;
13
+ /**
14
+ * Length of the visible chat. Drives the new-message popup + auto-scroll behavior.
15
+ */
16
+ visibleChatLength: number;
17
+ /**
18
+ * The last visible message — needed to differentiate auto-scroll for user vs assistant messages.
19
+ */
20
+ lastVisibleMessage: {
21
+ messageType?: string;
22
+ } | undefined;
23
+ };
24
+ export type UseChatOverflowResult = {
25
+ /** True when there are messages off-screen below the current scroll position. */
26
+ showNewMessages: boolean;
27
+ /** Imperative dismiss for the "New messages" popup. */
28
+ setShowNewMessages: (value: boolean) => void;
29
+ /** True when the messages container is overflowing (used to switch comparison tray between in-flow and overlay). */
30
+ messagesOverflow: boolean;
31
+ /** Live ref tracking whether the user is currently near the bottom. */
32
+ /** Imperatively scroll the messages container to the bottom (smooth). */
33
+ scrollToBottom: () => void;
34
+ /** Conditional scroll: only scrolls if the user is already near the bottom. */
35
+ scrollToBottomIfNear: () => void;
36
+ };
37
+ /**
38
+ * Manages the auto-scroll, "new message" indicator, and overflow detection for the
39
+ * chat message list. Owns all scroll listeners and ResizeObservers so the host
40
+ * component just consumes the derived state.
41
+ */
42
+ export declare const useChatOverflow: ({ messagesContainerRef, headerRef, open, loading, visibleChatLength, lastVisibleMessage, }: UseChatOverflowOptions) => UseChatOverflowResult;
43
+ //# sourceMappingURL=useChatOverflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatOverflow.d.ts","sourceRoot":"","sources":["../../../../../../../../components/src/components/Organisms/Chat/hooks/useChatOverflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,sBAAsB,GAAG;IACpC,oBAAoB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAChD,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACrC;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,kBAAkB,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,iFAAiF;IACjF,eAAe,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,oHAAoH;IACpH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,yEAAyE;IACzE,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,+EAA+E;IAC/E,oBAAoB,EAAE,MAAM,IAAI,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,+FAOzB,sBAAsB,KAAG,qBAwG3B,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { useEffect, useRef, useState } from 'preact/hooks';
2
+ /**
3
+ * Manages the auto-scroll, "new message" indicator, and overflow detection for the
4
+ * chat message list. Owns all scroll listeners and ResizeObservers so the host
5
+ * component just consumes the derived state.
6
+ */
7
+ export const useChatOverflow = ({ messagesContainerRef, headerRef, open, loading, visibleChatLength, lastVisibleMessage, }) => {
8
+ const [showNewMessages, setShowNewMessages] = useState(false);
9
+ const [messagesOverflow, setMessagesOverflow] = useState(false);
10
+ const isNearBottomRef = useRef(true);
11
+ const scrollToBottom = () => {
12
+ // Scroll the messages container directly (instead of scrollIntoView on the
13
+ // bottom anchor) so the browser never walks up the ancestor chain. On small
14
+ // viewports a smooth scrollIntoView could otherwise animate the document /
15
+ // visual viewport and visually push the fixed-position chat off-screen.
16
+ const container = messagesContainerRef.current;
17
+ if (container) {
18
+ container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });
19
+ }
20
+ };
21
+ // Conditional scroll: only scrolls if the user is already near the bottom.
22
+ const scrollToBottomIfNear = () => {
23
+ if (isNearBottomRef.current) {
24
+ scrollToBottom();
25
+ }
26
+ };
27
+ // Scroll to bottom when chat opens
28
+ useEffect(() => {
29
+ if (open) {
30
+ scrollToBottom();
31
+ setShowNewMessages(false);
32
+ isNearBottomRef.current = true;
33
+ }
34
+ }, [open]);
35
+ // Handle new messages — auto-scroll for user messages, show popup for response messages when scrolled up
36
+ useEffect(() => {
37
+ if (!open || !lastVisibleMessage)
38
+ return;
39
+ if (lastVisibleMessage.messageType === 'user') {
40
+ scrollToBottom();
41
+ setShowNewMessages(false);
42
+ }
43
+ else if (isNearBottomRef.current) {
44
+ scrollToBottom();
45
+ setShowNewMessages(false);
46
+ }
47
+ else {
48
+ setShowNewMessages(true);
49
+ }
50
+ }, [visibleChatLength]);
51
+ // Scroll to show loading indicator when user sends a message
52
+ useEffect(() => {
53
+ if (open && loading) {
54
+ scrollToBottom();
55
+ }
56
+ }, [loading]);
57
+ // Track scroll position to dismiss the "New messages" popup when user scrolls to bottom
58
+ useEffect(() => {
59
+ const container = messagesContainerRef.current;
60
+ if (!container)
61
+ return;
62
+ const handleScroll = () => {
63
+ const threshold = 100;
64
+ const isNearBottom = container.scrollHeight - container.scrollTop - container.clientHeight < threshold;
65
+ isNearBottomRef.current = isNearBottom;
66
+ if (isNearBottom) {
67
+ setShowNewMessages(false);
68
+ }
69
+ };
70
+ container.addEventListener('scroll', handleScroll);
71
+ return () => container.removeEventListener('scroll', handleScroll);
72
+ }, [open]);
73
+ // Track whether the messages container is overflowing so the comparisons header
74
+ // can switch between in-flow (short conversations — top content stays reachable)
75
+ // and overlay (overflowing — avoid layout shift when toggling the tray).
76
+ // Hysteresis: when already in overlay, only return to in-flow if the content
77
+ // would still fit *with* the header re-inserted — otherwise the two states
78
+ // fight each other and the layout flickers.
79
+ useEffect(() => {
80
+ const container = messagesContainerRef.current;
81
+ if (!container || typeof ResizeObserver === 'undefined')
82
+ return;
83
+ const update = () => {
84
+ setMessagesOverflow((prev) => {
85
+ const headerHeight = headerRef.current?.offsetHeight || 0;
86
+ if (prev) {
87
+ // Currently overlay: header isn't taking flow space. Only switch
88
+ // back to in-flow if the content would fit with the header added.
89
+ return container.scrollHeight > container.clientHeight - headerHeight + 1;
90
+ }
91
+ // Currently in-flow: header already takes space — straightforward check.
92
+ return container.scrollHeight > container.clientHeight + 1;
93
+ });
94
+ };
95
+ update();
96
+ const observer = new ResizeObserver(update);
97
+ observer.observe(container);
98
+ if (headerRef.current)
99
+ observer.observe(headerRef.current);
100
+ return () => observer.disconnect();
101
+ }, [open, visibleChatLength]);
102
+ return {
103
+ showNewMessages,
104
+ setShowNewMessages,
105
+ messagesOverflow,
106
+ scrollToBottom,
107
+ scrollToBottomIfNear,
108
+ };
109
+ };
@@ -0,0 +1,26 @@
1
+ import type { RefObject } from 'preact';
2
+ export type UseChatScrollLockOptions = {
3
+ /** Whether the chat panel is open — the lock is only active while open. */
4
+ open: boolean;
5
+ /** Ref to the chat root element — touches outside it are always blocked. */
6
+ chatRef: RefObject<HTMLDivElement>;
7
+ };
8
+ /**
9
+ * Prevents the background page from scrolling while the chat is open.
10
+ *
11
+ * Locks body overflow for wheel/keyboard scrolling, and installs a `touchmove`
12
+ * handler for touch devices. iOS Safari (real iPad/iPhone) rubber-band-scrolls
13
+ * the body when a touchmove inside `.ss__chat__messages` reaches the top/bottom —
14
+ * and `overscroll-behavior: contain` is ignored there.
15
+ *
16
+ * We don't reposition the body (locking via `position: fixed` on `<body>` leaves
17
+ * iPad Safari in a stuck viewport state where the page can't scroll after the
18
+ * lock is released). Instead the `touchmove` handler:
19
+ * - allows the touchmove if it's inside a scrollable region of the chat
20
+ * and that region isn't at its scroll edge in the swipe direction;
21
+ * - calls `preventDefault()` otherwise — which is what blocks both
22
+ * background scrolling and iOS rubber-band overscroll.
23
+ * Cleanup just removes the listeners, so nothing can leak into the page.
24
+ */
25
+ export declare const useChatScrollLock: ({ open, chatRef }: UseChatScrollLockOptions) => void;
26
+ //# sourceMappingURL=useChatScrollLock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatScrollLock.d.ts","sourceRoot":"","sources":["../../../../../../../../components/src/components/Organisms/Chat/hooks/useChatScrollLock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,wBAAwB,GAAG;IACtC,2EAA2E;IAC3E,IAAI,EAAE,OAAO,CAAC;IACd,4EAA4E;IAC5E,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,sBAAuB,wBAAwB,KAAG,IAyG/E,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { useEffect } from 'preact/hooks';
2
+ /**
3
+ * Prevents the background page from scrolling while the chat is open.
4
+ *
5
+ * Locks body overflow for wheel/keyboard scrolling, and installs a `touchmove`
6
+ * handler for touch devices. iOS Safari (real iPad/iPhone) rubber-band-scrolls
7
+ * the body when a touchmove inside `.ss__chat__messages` reaches the top/bottom —
8
+ * and `overscroll-behavior: contain` is ignored there.
9
+ *
10
+ * We don't reposition the body (locking via `position: fixed` on `<body>` leaves
11
+ * iPad Safari in a stuck viewport state where the page can't scroll after the
12
+ * lock is released). Instead the `touchmove` handler:
13
+ * - allows the touchmove if it's inside a scrollable region of the chat
14
+ * and that region isn't at its scroll edge in the swipe direction;
15
+ * - calls `preventDefault()` otherwise — which is what blocks both
16
+ * background scrolling and iOS rubber-band overscroll.
17
+ * Cleanup just removes the listeners, so nothing can leak into the page.
18
+ */
19
+ export const useChatScrollLock = ({ open, chatRef }) => {
20
+ // Lock body scroll while chat is open so touch/wheel scrolls don't leak to the page behind
21
+ useEffect(() => {
22
+ if (!open)
23
+ return;
24
+ const body = document.body;
25
+ const previousOverflow = body.style.overflow;
26
+ const previousOverscroll = body.style.overscrollBehavior;
27
+ body.style.overflow = 'hidden';
28
+ body.style.overscrollBehavior = 'contain';
29
+ return () => {
30
+ body.style.overflow = previousOverflow;
31
+ body.style.overscrollBehavior = previousOverscroll;
32
+ };
33
+ }, [open]);
34
+ useEffect(() => {
35
+ if (!open)
36
+ return;
37
+ if (typeof document === 'undefined')
38
+ return;
39
+ let startX = 0;
40
+ let startY = 0;
41
+ let scrollEl = null;
42
+ // Walk up from the touch target to find the first ancestor inside the chat
43
+ // that is actually scrollable in either axis. Stop at the chat root so we
44
+ // never consider elements outside the chat.
45
+ const findScrollableInChat = (start) => {
46
+ const chatRoot = chatRef.current;
47
+ if (!chatRoot)
48
+ return null;
49
+ let el = start;
50
+ while (el && chatRoot.contains(el)) {
51
+ const style = getComputedStyle(el);
52
+ const scrollableY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && el.scrollHeight > el.clientHeight;
53
+ const scrollableX = (style.overflowX === 'auto' || style.overflowX === 'scroll') && el.scrollWidth > el.clientWidth;
54
+ if (scrollableY || scrollableX) {
55
+ return el;
56
+ }
57
+ if (el === chatRoot)
58
+ break;
59
+ el = el.parentElement;
60
+ }
61
+ return null;
62
+ };
63
+ const onTouchStart = (e) => {
64
+ if (!e.touches[0])
65
+ return;
66
+ startX = e.touches[0].clientX;
67
+ startY = e.touches[0].clientY;
68
+ scrollEl = findScrollableInChat(e.target);
69
+ };
70
+ const onTouchMove = (e) => {
71
+ const target = e.target;
72
+ const chatRoot = chatRef.current;
73
+ const inChat = !!(chatRoot && target && chatRoot.contains(target));
74
+ // Touches outside the chat shouldn't scroll the background.
75
+ if (!inChat) {
76
+ if (e.cancelable)
77
+ e.preventDefault();
78
+ return;
79
+ }
80
+ // Inside the chat but no scrollable container — block to prevent body scroll.
81
+ if (!scrollEl) {
82
+ if (e.cancelable)
83
+ e.preventDefault();
84
+ return;
85
+ }
86
+ // Inside a scrollable container — only block when at the edge in the
87
+ // swipe direction, so internal scrolling continues to work. Detect the
88
+ // dominant axis so horizontally-scrollable rows (e.g. the facets row)
89
+ // also get to handle their own touch gestures.
90
+ const currentX = e.touches[0]?.clientX ?? startX;
91
+ const currentY = e.touches[0]?.clientY ?? startY;
92
+ const deltaX = currentX - startX;
93
+ const deltaY = currentY - startY;
94
+ const horizontal = Math.abs(deltaX) > Math.abs(deltaY);
95
+ if (horizontal) {
96
+ const scrollsX = scrollEl.scrollWidth > scrollEl.clientWidth;
97
+ if (!scrollsX) {
98
+ if (e.cancelable)
99
+ e.preventDefault();
100
+ return;
101
+ }
102
+ const atLeft = scrollEl.scrollLeft <= 0;
103
+ const atRight = scrollEl.scrollLeft + scrollEl.clientWidth >= scrollEl.scrollWidth - 1;
104
+ if ((atLeft && deltaX > 0) || (atRight && deltaX < 0)) {
105
+ if (e.cancelable)
106
+ e.preventDefault();
107
+ }
108
+ }
109
+ else {
110
+ const scrollsY = scrollEl.scrollHeight > scrollEl.clientHeight;
111
+ if (!scrollsY) {
112
+ if (e.cancelable)
113
+ e.preventDefault();
114
+ return;
115
+ }
116
+ const atTop = scrollEl.scrollTop <= 0;
117
+ const atBottom = scrollEl.scrollTop + scrollEl.clientHeight >= scrollEl.scrollHeight - 1;
118
+ if ((atTop && deltaY > 0) || (atBottom && deltaY < 0)) {
119
+ if (e.cancelable)
120
+ e.preventDefault();
121
+ }
122
+ }
123
+ };
124
+ document.addEventListener('touchstart', onTouchStart, { passive: true });
125
+ document.addEventListener('touchmove', onTouchMove, { passive: false });
126
+ return () => {
127
+ document.removeEventListener('touchstart', onTouchStart);
128
+ document.removeEventListener('touchmove', onTouchMove);
129
+ };
130
+ }, [open]);
131
+ };
@@ -0,0 +1,3 @@
1
+ export * from './Chat';
2
+ export * from './Chat.lang';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/Chat/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Chat';
2
+ export * from './Chat.lang';
@@ -0,0 +1,18 @@
1
+ import { h, ComponentChildren } from 'preact';
2
+ import type { ChatController } from '@athoscommerce/snap-controller';
3
+ import { ComponentProps } from '../../../types';
4
+ import { IconProps, IconType } from '../../Atoms/Icon';
5
+ import { ChatButtonLang } from './ChatButton.lang';
6
+ export declare const ChatButtonOrganism: ((properties: ChatButtonOrganismProps) => import("@emotion/react/jsx-runtime").JSX.Element | h.JSX.Element | null) & {
7
+ displayName: string;
8
+ };
9
+ export type ChatButtonOrganismProps = {
10
+ controller: ChatController;
11
+ lang?: Partial<ChatButtonLang>;
12
+ content?: string | JSX.Element;
13
+ } & ChatButtonTemplatesLegalProps & ComponentProps<ChatButtonOrganismProps>;
14
+ export type ChatButtonTemplatesLegalProps = {
15
+ icon?: IconType | Partial<IconProps> | boolean;
16
+ children?: ComponentChildren;
17
+ };
18
+ //# sourceMappingURL=ChatButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatButton.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/ChatButton/ChatButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAQ9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAG7D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAC;AAyC1E,eAAO,MAAM,kBAAkB,gBAAyB,uBAAuB;;CA0E7E,CAAC;AAMH,MAAM,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;CAC/B,GAAG,6BAA6B,GAChC,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAEzC,MAAM,MAAM,6BAA6B,GAAG;IAC3C,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ import { useRef, useEffect } from 'preact/hooks';
3
+ import { css } from '@emotion/react';
4
+ import classnames from 'classnames';
5
+ import deepmerge from 'deepmerge';
6
+ import { observer } from 'mobx-react-lite';
7
+ import { useTheme, CacheProvider, useTreePath } from '../../../providers';
8
+ import { cloneWithProps, defined, mergeProps, mergeStyles } from '../../../utilities';
9
+ import { useCustomComponentOverride } from '../../../hooks';
10
+ import { Button } from '../../Atoms/Button';
11
+ import { langAttrOf } from '../Chat/Chat.lang';
12
+ import { chatButtonDefaultLang } from './ChatButton.lang';
13
+ const defaultStyles = ({ theme }) => {
14
+ // primary may be 'currentColor' (base theme) — background stays fixed so the
15
+ // pill remains legible wherever it inherits its color from
16
+ const color = theme?.variables?.colors?.primary || '#333';
17
+ return css({
18
+ display: 'inline-flex',
19
+ alignItems: 'center',
20
+ justifyContent: 'center',
21
+ gap: '8px',
22
+ padding: '8px 16px',
23
+ background: '#fff',
24
+ color: color,
25
+ border: `1px solid ${color}`,
26
+ borderRadius: '24px',
27
+ fontSize: '14px',
28
+ fontWeight: 600,
29
+ lineHeight: 1.2,
30
+ cursor: 'pointer',
31
+ transition: 'box-shadow 0.15s ease',
32
+ '&:hover': {
33
+ boxShadow: '0 2px 6px rgba(0, 0, 0, 0.15)',
34
+ },
35
+ '&:focus-visible': {
36
+ outline: '2px solid currentColor',
37
+ outlineOffset: '2px',
38
+ },
39
+ // native Button always renders its content span — collapse it when empty
40
+ // so the flex gap doesn't offset icon-only buttons
41
+ '.ss__button__content:empty': {
42
+ display: 'none',
43
+ },
44
+ '.ss__icon': {
45
+ fill: 'currentColor',
46
+ stroke: 'currentColor',
47
+ },
48
+ });
49
+ };
50
+ export const ChatButtonOrganism = observer((properties) => {
51
+ const globalTheme = useTheme();
52
+ const globalTreePath = useTreePath();
53
+ const defaultProps = {
54
+ icon: 'chat',
55
+ treePath: globalTreePath,
56
+ };
57
+ const props = mergeProps('chatButton', globalTheme, defaultProps, properties);
58
+ const { overrideElement, shouldRenderDefault } = useCustomComponentOverride('chatButton', props);
59
+ const { className, internalClassName, controller, content, children, icon, disableStyles, treePath } = props;
60
+ const { store } = controller;
61
+ // Register with the store so the Chat organism hides its built-in bubble while
62
+ // an external launcher is mounted. Runs before any early return (hooks-order safe).
63
+ useEffect(() => store.registerLauncher(), [store]);
64
+ // Same visibility rule as the Chat organism: hidden when disabled at bootstrap,
65
+ // but kept mounted when chat becomes disabled mid-session.
66
+ const wasVisibleRef = useRef(false);
67
+ if (!store.chatEnabled && !wasVisibleRef.current) {
68
+ return _jsx(_Fragment, {});
69
+ }
70
+ wasVisibleRef.current = true;
71
+ if (!shouldRenderDefault) {
72
+ return overrideElement;
73
+ }
74
+ const subProps = {
75
+ button: {
76
+ // inherited props
77
+ ...defined({
78
+ disableStyles,
79
+ }),
80
+ // component theme overrides
81
+ theme: props?.theme,
82
+ treePath,
83
+ },
84
+ };
85
+ const styling = mergeStyles(props, defaultStyles);
86
+ const lang = deepmerge(chatButtonDefaultLang, props.lang || {});
87
+ return (_jsx(CacheProvider, { children: _jsx(Button, { ...styling, ...subProps.button, native: true, type: "button", className: classnames('ss__chat-button', { 'ss__chat-button--open': store.open }, className, internalClassName), "aria-label": store.open ? langAttrOf(lang.closeChatButton, 'aria-label') : langAttrOf(lang.openChatButton, 'aria-label'), title: store.open ? langAttrOf(lang.closeChatButton, 'title') : langAttrOf(lang.openChatButton, 'title'), "aria-expanded": store.open, onClick: () => controller.handlers.button.click(), content: content || children ? (_jsxs("span", { className: "ss__chat-button__content", children: [cloneWithProps(content, { treePath }), cloneWithProps(children, { treePath })] })) : undefined, icon: icon && { internalClassName: 'ss__chat-button__icon', ...(typeof icon == 'string' ? { icon: icon } : typeof icon == 'object' ? icon : {}) } }) }));
88
+ });
@@ -0,0 +1,7 @@
1
+ import { Lang } from '../../../hooks';
2
+ export interface ChatButtonLang {
3
+ openChatButton: Lang<never>;
4
+ closeChatButton: Lang<never>;
5
+ }
6
+ export declare const chatButtonDefaultLang: Partial<ChatButtonLang>;
7
+ //# sourceMappingURL=ChatButton.lang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatButton.lang.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/ChatButton/ChatButton.lang.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,MAAM,WAAW,cAAc;IAC9B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;CAC7B;AAED,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAOzD,CAAC"}
@@ -0,0 +1,8 @@
1
+ export const chatButtonDefaultLang = {
2
+ openChatButton: {
3
+ attributes: { 'aria-label': 'Open chat', title: 'Open Chat' },
4
+ },
5
+ closeChatButton: {
6
+ attributes: { 'aria-label': 'Close chat', title: 'Close Chat' },
7
+ },
8
+ };
@@ -0,0 +1,3 @@
1
+ export * from './ChatButton';
2
+ export * from './ChatButton.lang';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Organisms/ChatButton/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './ChatButton';
2
+ export * from './ChatButton.lang';
@@ -19,7 +19,7 @@ const defaultStyles = ({ gapSize, columns }) => {
19
19
  flexFlow: 'row wrap',
20
20
  gap: gapSize,
21
21
  gridTemplateRows: 'auto',
22
- gridTemplateColumns: `repeat(${columns}, 1fr)`,
22
+ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
23
23
  '& .ss__result, & .ss__result-layout': {
24
24
  boxSizing: 'border-box',
25
25
  flex: '0 1 auto',
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteFixed.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAOxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAyC3F,eAAO,MAAM,iBAAiB,gBAAyB,sBAAsB;;CA2N3E,CAAC;AAEH,UAAU,WAAW;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAQD,MAAM,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,GAChE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,oCAAoC,GAAG;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC9C,GAAG,qCAAqC,CAAC"}
1
+ {"version":3,"file":"AutocompleteFixed.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAOxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAyC3F,eAAO,MAAM,iBAAiB,gBAAyB,sBAAsB;;CAgO3E,CAAC;AAEH,UAAU,WAAW;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAQD,MAAM,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,GAChE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,oCAAoC,GAAG;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC9C,GAAG,qCAAqC,CAAC"}
@@ -145,6 +145,11 @@ export const AutocompleteFixed = observer((properties) => {
145
145
  closeSearchButton: {
146
146
  onClick: () => reset(),
147
147
  },
148
+ // wiring only — no default `icon`, so the button stays hidden until a site
149
+ // opts in by supplying one via theme or props (see SearchInput.hideChatButton)
150
+ chatButton: {
151
+ onClick: () => controller.openChat(),
152
+ },
148
153
  inputName: inputName,
149
154
  // inherited props
150
155
  ...defined({
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteModal.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteModal/AutocompleteModal.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAMxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAuD3F,eAAO,MAAM,iBAAiB,gBAAyB,sBAAsB;;CAsK3E,CAAC;AAQH,MAAM,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,GAChE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,oCAAoC,GAAG;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,qCAAqC,CAAC"}
1
+ {"version":3,"file":"AutocompleteModal.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteModal/AutocompleteModal.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AAMxI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAuD3F,eAAO,MAAM,iBAAiB,gBAAyB,sBAAsB;;CA2K3E,CAAC;AAQH,MAAM,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,oCAAoC,EAAE,iBAAiB,CAAC,GAChE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,oCAAoC,GAAG;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,qCAAqC,CAAC"}
@@ -156,6 +156,11 @@ export const AutocompleteModal = observer((properties) => {
156
156
  onClick: () => reset(),
157
157
  icon: 'angle-left',
158
158
  },
159
+ // wiring only — no default `icon`, so the button stays hidden until a site
160
+ // opts in by supplying one via theme or props (see SearchInput.hideChatButton)
161
+ chatButton: {
162
+ onClick: () => controller.openChat(),
163
+ },
159
164
  inputName: inputName,
160
165
  // inherited props
161
166
  ...defined({
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteSlideout.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AACxI,OAAO,EAAE,kBAAkB,EAA2B,MAAM,0BAA0B,CAAC;AAKvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAkB3F,eAAO,MAAM,oBAAoB,gBAAyB,yBAAyB;;CA8JjF,CAAC;AAOH,MAAM,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,uCAAuC,EAAE,iBAAiB,CAAC,GACnE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,uCAAuC,GAAG;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,qCAAqC,CAAC"}
1
+ {"version":3,"file":"AutocompleteSlideout.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAsB,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAC;AACxI,OAAO,EAAE,kBAAkB,EAA2B,MAAM,0BAA0B,CAAC;AAKvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAkB3F,eAAO,MAAM,oBAAoB,gBAAyB,yBAAyB;;CAmKjF,CAAC;AAOH,MAAM,MAAM,yBAAyB,GAAG;IACvC,UAAU,EAAE,sBAAsB,CAAC;IACnC,eAAe,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,CAAC;CAC7B,GAAG,IAAI,CAAC,uCAAuC,EAAE,iBAAiB,CAAC,GACnE,uBAAuB,GACvB,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAEzC,MAAM,MAAM,uCAAuC,GAAG;IACrD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,qCAAqC,CAAC"}
@@ -107,6 +107,11 @@ export const AutocompleteSlideout = observer((properties) => {
107
107
  onClick: () => reset(),
108
108
  icon: 'angle-left',
109
109
  },
110
+ // wiring only — no default `icon`, so the button stays hidden until a site
111
+ // opts in by supplying one via theme or props (see SearchInput.hideChatButton)
112
+ chatButton: {
113
+ onClick: () => controller.openChat(),
114
+ },
110
115
  // inherited props
111
116
  ...defined({
112
117
  disableStyles,
@@ -0,0 +1,12 @@
1
+ import { ComponentProps } from '../../../types';
2
+ import { ChatTemplatesLegalProps, ChatLang } from '../../Organisms/Chat';
3
+ import type { ChatController } from '@athoscommerce/snap-controller';
4
+ export declare const Chat: ((properties: ChatProps) => JSX.Element) & {
5
+ displayName: string;
6
+ };
7
+ export type ChatProps = {
8
+ controller: ChatController;
9
+ lang?: Partial<ChatLang>;
10
+ } & ChatTemplatesLegalProps & ComponentProps<ChatProps>;
11
+ export type { ChatTemplatesLegalProps, ChatLang };
12
+ //# sourceMappingURL=Chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/Chat/Chat.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAmC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAUrE,eAAO,MAAM,IAAI,gBAAyB,SAAS,KAAG,GAAG,CAAC,OAAO;;CAuC/D,CAAC;AAMH,MAAM,MAAM,SAAS,GAAG;IACvB,UAAU,EAAE,cAAc,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzB,GAAG,uBAAuB,GAC1B,cAAc,CAAC,SAAS,CAAC,CAAC;AAE3B,YAAY,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
2
+ import { css } from '@emotion/react';
3
+ import classnames from 'classnames';
4
+ import { observer } from 'mobx-react-lite';
5
+ import { useTheme, CacheProvider, useTreePath } from '../../../providers';
6
+ import { defined, mergeProps, mergeStyles } from '../../../utilities';
7
+ import { ChatOrganism } from '../../Organisms/Chat';
8
+ const defaultStyles = () => {
9
+ // The template itself is layout-free — the underlying Chat organism handles
10
+ // fixed positioning and sizing. The wrapper exists purely so theme overrides
11
+ // flow through mergeProps('chat', ...) and so the Chat surface can be themed
12
+ // per-template like Search and Recommendation.
13
+ return css({});
14
+ };
15
+ export const Chat = observer((properties) => {
16
+ const globalTheme = useTheme();
17
+ const globalTreePath = useTreePath();
18
+ const defaultProps = {
19
+ treePath: globalTreePath,
20
+ };
21
+ const props = mergeProps('chat', globalTheme, defaultProps, properties);
22
+ const { className, internalClassName, controller, disableStyles, treePath } = props;
23
+ const subProps = {
24
+ Chat: {
25
+ // inherited props
26
+ ...defined({
27
+ disableStyles,
28
+ }),
29
+ // component theme overrides
30
+ theme: props.theme,
31
+ treePath,
32
+ },
33
+ };
34
+ const styling = mergeStyles(props, defaultStyles);
35
+ // className/internalClassName stay on the template wrapper only — spreading them
36
+ // into the organism would duplicate user classes on two DOM levels
37
+ // treePath is omitted too — the organism calls mergeProps('chat') itself, and passing
38
+ // this one down would append a second 'chat' segment (ss-path="chat chat")
39
+ const organismProps = { ...props, className: undefined, internalClassName: undefined, treePath: undefined };
40
+ return (_jsx(CacheProvider, { children: _jsx("div", { ...styling, className: classnames('ss__chat-template', className, internalClassName), children: _jsx(ChatOrganism, { ...subProps.Chat, ...organismProps, controller: controller }) }) }));
41
+ });
@@ -0,0 +1,2 @@
1
+ export * from './Chat';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../components/src/components/Templates/Chat/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './Chat';