@athoscommerce/snap-preact 1.7.0 → 1.7.1-beta.121

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 (367) hide show
  1. package/dist/cjs/components/src/components/Atoms/Button/Button.d.ts +1 -1
  2. package/dist/cjs/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  3. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +7 -0
  4. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +1 -0
  5. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +85 -0
  6. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +2 -0
  7. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +1 -0
  8. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +17 -0
  9. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.d.ts +4 -0
  10. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  11. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +51 -14
  12. package/dist/cjs/components/src/components/Atoms/Icon/paths.d.ts +21 -0
  13. package/dist/cjs/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
  14. package/dist/cjs/components/src/components/Atoms/Icon/paths.js +21 -0
  15. package/dist/cjs/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +3 -3
  16. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +20 -0
  17. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +1 -0
  18. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +187 -0
  19. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +2 -0
  20. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +1 -0
  21. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.js +17 -0
  22. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +18 -0
  23. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -0
  24. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +154 -0
  25. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +2 -0
  26. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +1 -0
  27. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +17 -0
  28. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +21 -0
  29. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +1 -0
  30. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +211 -0
  31. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.d.ts +2 -0
  32. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.d.ts.map +1 -0
  33. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.js +17 -0
  34. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +16 -0
  35. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +1 -0
  36. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +255 -0
  37. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.d.ts +2 -0
  38. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +1 -0
  39. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.js +17 -0
  40. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +17 -0
  41. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +1 -0
  42. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +143 -0
  43. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +2 -0
  44. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +1 -0
  45. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +17 -0
  46. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +25 -0
  47. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -0
  48. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +487 -0
  49. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +2 -0
  50. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +1 -0
  51. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.js +17 -0
  52. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.d.ts +11 -0
  53. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +1 -0
  54. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.js +200 -0
  55. package/dist/cjs/components/src/components/Molecules/ChatResult/index.d.ts +2 -0
  56. package/dist/cjs/components/src/components/Molecules/ChatResult/index.d.ts.map +1 -0
  57. package/dist/cjs/components/src/components/Molecules/ChatResult/index.js +17 -0
  58. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +12 -0
  59. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +1 -0
  60. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +123 -0
  61. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +2 -0
  62. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +1 -0
  63. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.js +17 -0
  64. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +15 -0
  65. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +1 -0
  66. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +99 -0
  67. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +2 -0
  68. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +1 -0
  69. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.js +17 -0
  70. package/dist/cjs/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +2 -2
  71. package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts +5 -3
  72. package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  73. package/dist/cjs/components/src/components/Molecules/Result/Result.js +15 -9
  74. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts +2 -0
  75. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  76. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +19 -2
  77. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  78. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +21 -26
  79. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  80. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +5 -1
  81. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts +30 -0
  82. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -0
  83. package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +1030 -0
  84. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.d.ts +16 -0
  85. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.d.ts.map +1 -0
  86. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.js +1186 -0
  87. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +32 -0
  88. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +1 -0
  89. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +104 -0
  90. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +40 -0
  91. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +1 -0
  92. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.js +98 -0
  93. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +44 -0
  94. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +1 -0
  95. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +116 -0
  96. package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts +2 -0
  97. package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts.map +1 -0
  98. package/dist/cjs/components/src/components/Organisms/Chat/index.js +17 -0
  99. package/dist/cjs/components/src/components/Organisms/Facet/Facet.js +2 -1
  100. package/dist/cjs/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +2 -1
  101. package/dist/cjs/components/src/components/Organisms/Results/Results.js +1 -1
  102. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts +1 -1
  103. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  104. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +3 -1
  105. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts +1 -1
  106. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  107. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +3 -1
  108. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts +1 -1
  109. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  110. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +3 -1
  111. package/dist/cjs/components/src/components/Templates/Chat/Chat.d.ts +12 -0
  112. package/dist/cjs/components/src/components/Templates/Chat/Chat.d.ts.map +1 -0
  113. package/dist/cjs/components/src/components/Templates/Chat/Chat.js +55 -0
  114. package/dist/cjs/components/src/components/Templates/Chat/index.d.ts +2 -0
  115. package/dist/cjs/components/src/components/Templates/Chat/index.d.ts.map +1 -0
  116. package/dist/cjs/components/src/components/Templates/Chat/index.js +17 -0
  117. package/dist/cjs/components/src/index.d.ts +11 -0
  118. package/dist/cjs/components/src/index.d.ts.map +1 -1
  119. package/dist/cjs/components/src/index.js +13 -1
  120. package/dist/cjs/components/src/providers/withTracking.d.ts +2 -2
  121. package/dist/cjs/components/src/providers/withTracking.d.ts.map +1 -1
  122. package/dist/cjs/components/src/setupTests.js +17 -0
  123. package/dist/cjs/components/src/themes/base/components/templates/chat.d.ts +4 -0
  124. package/dist/cjs/components/src/themes/base/components/templates/chat.d.ts.map +1 -0
  125. package/dist/cjs/components/src/themes/base/components/templates/chat.js +6 -0
  126. package/dist/cjs/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  127. package/dist/cjs/components/src/themes/base/components/templates/index.js +5 -4
  128. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.d.ts +4 -0
  129. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.d.ts.map +1 -0
  130. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +6 -0
  131. package/dist/cjs/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  132. package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +5 -4
  133. package/dist/cjs/components/src/themes/pike/components/templates/chat.d.ts +4 -0
  134. package/dist/cjs/components/src/themes/pike/components/templates/chat.d.ts.map +1 -0
  135. package/dist/cjs/components/src/themes/pike/components/templates/chat.js +6 -0
  136. package/dist/cjs/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  137. package/dist/cjs/components/src/themes/pike/components/templates/index.js +5 -4
  138. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.d.ts +4 -0
  139. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.d.ts.map +1 -0
  140. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +6 -0
  141. package/dist/cjs/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  142. package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +5 -4
  143. package/dist/cjs/components/src/themes/snappy/components/templates/chat.d.ts +4 -0
  144. package/dist/cjs/components/src/themes/snappy/components/templates/chat.d.ts.map +1 -0
  145. package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +6 -0
  146. package/dist/cjs/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  147. package/dist/cjs/components/src/themes/snappy/components/templates/index.js +5 -4
  148. package/dist/cjs/components/src/themes/themeComponents/chat.d.ts +4 -0
  149. package/dist/cjs/components/src/themes/themeComponents/chat.d.ts.map +1 -0
  150. package/dist/cjs/components/src/themes/themeComponents/chat.js +14 -0
  151. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts +11 -0
  152. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  153. package/dist/cjs/components/src/utilities/Colour/Colour.js +32 -0
  154. package/dist/cjs/components/src/utilities/snapify.d.ts +3 -2
  155. package/dist/cjs/components/src/utilities/snapify.d.ts.map +1 -1
  156. package/dist/cjs/components/src/utilities/snapify.js +48 -0
  157. package/dist/cjs/src/Snap.d.ts +2 -1
  158. package/dist/cjs/src/Snap.d.ts.map +1 -1
  159. package/dist/cjs/src/Snap.js +134 -24
  160. package/dist/cjs/src/Templates/SnapTemplates.d.ts +2 -1
  161. package/dist/cjs/src/Templates/SnapTemplates.d.ts.map +1 -1
  162. package/dist/cjs/src/Templates/SnapTemplates.js +67 -5
  163. package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts +2 -0
  164. package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  165. package/dist/cjs/src/Templates/Stores/LibraryStore.js +19 -0
  166. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts +19 -4
  167. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  168. package/dist/cjs/src/Templates/Stores/TemplateStore.js +2 -1
  169. package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts +2 -0
  170. package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
  171. package/dist/cjs/src/Templates/Stores/library/components/Chat.js +5 -0
  172. package/dist/cjs/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  173. package/dist/cjs/src/Templates/Stores/library/languages/es.js +5 -0
  174. package/dist/cjs/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  175. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +5 -0
  176. package/dist/cjs/src/create/createChatController.d.ts +5 -0
  177. package/dist/cjs/src/create/createChatController.d.ts.map +1 -0
  178. package/dist/cjs/src/create/createChatController.js +43 -0
  179. package/dist/cjs/src/setupEvents.d.ts +13 -0
  180. package/dist/cjs/src/setupEvents.d.ts.map +1 -1
  181. package/dist/cjs/src/setupEvents.js +87 -0
  182. package/dist/cjs/src/types.d.ts +15 -3
  183. package/dist/cjs/src/types.d.ts.map +1 -1
  184. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -1
  185. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  186. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +7 -0
  187. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +1 -0
  188. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +67 -0
  189. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +2 -0
  190. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +1 -0
  191. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.js +1 -0
  192. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts +4 -0
  193. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  194. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +53 -11
  195. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +21 -0
  196. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
  197. package/dist/esm/components/src/components/Atoms/Icon/paths.js +21 -0
  198. package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +1 -1
  199. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +20 -0
  200. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +1 -0
  201. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +169 -0
  202. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +2 -0
  203. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +1 -0
  204. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.js +1 -0
  205. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +18 -0
  206. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -0
  207. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +145 -0
  208. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +2 -0
  209. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +1 -0
  210. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.js +1 -0
  211. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +21 -0
  212. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +1 -0
  213. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +192 -0
  214. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts +2 -0
  215. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts.map +1 -0
  216. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.js +1 -0
  217. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +16 -0
  218. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +1 -0
  219. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +223 -0
  220. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts +2 -0
  221. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +1 -0
  222. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.js +1 -0
  223. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +17 -0
  224. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +1 -0
  225. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +121 -0
  226. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +2 -0
  227. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +1 -0
  228. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.js +1 -0
  229. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +25 -0
  230. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -0
  231. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +460 -0
  232. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +2 -0
  233. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +1 -0
  234. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.js +1 -0
  235. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts +11 -0
  236. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +1 -0
  237. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.js +184 -0
  238. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts +2 -0
  239. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts.map +1 -0
  240. package/dist/esm/components/src/components/Molecules/ChatResult/index.js +1 -0
  241. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +12 -0
  242. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +1 -0
  243. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +102 -0
  244. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +2 -0
  245. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +1 -0
  246. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.js +1 -0
  247. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +15 -0
  248. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +1 -0
  249. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +80 -0
  250. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +2 -0
  251. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +1 -0
  252. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.js +1 -0
  253. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
  254. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +5 -3
  255. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  256. package/dist/esm/components/src/components/Molecules/Result/Result.js +12 -7
  257. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +2 -0
  258. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  259. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +35 -2
  260. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  261. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +22 -27
  262. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  263. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +5 -1
  264. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +30 -0
  265. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -0
  266. package/dist/esm/components/src/components/Organisms/Chat/Chat.js +939 -0
  267. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.d.ts +16 -0
  268. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.d.ts.map +1 -0
  269. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.js +1227 -0
  270. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +32 -0
  271. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +1 -0
  272. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +54 -0
  273. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +40 -0
  274. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +1 -0
  275. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.js +92 -0
  276. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +44 -0
  277. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +1 -0
  278. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +110 -0
  279. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +2 -0
  280. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts.map +1 -0
  281. package/dist/esm/components/src/components/Organisms/Chat/index.js +1 -0
  282. package/dist/esm/components/src/components/Organisms/Facet/Facet.js +1 -1
  283. package/dist/esm/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +1 -1
  284. package/dist/esm/components/src/components/Organisms/Results/Results.js +1 -1
  285. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts +1 -1
  286. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  287. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +4 -1
  288. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts +1 -1
  289. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  290. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +4 -1
  291. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts +1 -1
  292. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  293. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +4 -1
  294. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +12 -0
  295. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +1 -0
  296. package/dist/esm/components/src/components/Templates/Chat/Chat.js +42 -0
  297. package/dist/esm/components/src/components/Templates/Chat/index.d.ts +2 -0
  298. package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +1 -0
  299. package/dist/esm/components/src/components/Templates/Chat/index.js +1 -0
  300. package/dist/esm/components/src/index.d.ts +11 -0
  301. package/dist/esm/components/src/index.d.ts.map +1 -1
  302. package/dist/esm/components/src/index.js +11 -0
  303. package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
  304. package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
  305. package/dist/esm/components/src/setupTests.js +14 -0
  306. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +4 -0
  307. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +1 -0
  308. package/dist/esm/components/src/themes/base/components/templates/chat.js +3 -0
  309. package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  310. package/dist/esm/components/src/themes/base/components/templates/index.js +5 -0
  311. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +4 -0
  312. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +1 -0
  313. package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +3 -0
  314. package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  315. package/dist/esm/components/src/themes/bocachica/components/templates/index.js +5 -0
  316. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +4 -0
  317. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +1 -0
  318. package/dist/esm/components/src/themes/pike/components/templates/chat.js +3 -0
  319. package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  320. package/dist/esm/components/src/themes/pike/components/templates/index.js +5 -0
  321. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +4 -0
  322. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +1 -0
  323. package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +3 -0
  324. package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  325. package/dist/esm/components/src/themes/snapnco/components/templates/index.js +5 -0
  326. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +4 -0
  327. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +1 -0
  328. package/dist/esm/components/src/themes/snappy/components/templates/chat.js +3 -0
  329. package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  330. package/dist/esm/components/src/themes/snappy/components/templates/index.js +5 -0
  331. package/dist/esm/components/src/themes/themeComponents/chat.d.ts +4 -0
  332. package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +1 -0
  333. package/dist/esm/components/src/themes/themeComponents/chat.js +11 -0
  334. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +11 -0
  335. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  336. package/dist/esm/components/src/utilities/Colour/Colour.js +30 -0
  337. package/dist/esm/components/src/utilities/snapify.d.ts +3 -2
  338. package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
  339. package/dist/esm/components/src/utilities/snapify.js +29 -2
  340. package/dist/esm/src/Snap.d.ts +2 -1
  341. package/dist/esm/src/Snap.d.ts.map +1 -1
  342. package/dist/esm/src/Snap.js +72 -0
  343. package/dist/esm/src/Templates/SnapTemplates.d.ts +2 -1
  344. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  345. package/dist/esm/src/Templates/SnapTemplates.js +55 -0
  346. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +2 -0
  347. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  348. package/dist/esm/src/Templates/Stores/LibraryStore.js +6 -0
  349. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +19 -4
  350. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  351. package/dist/esm/src/Templates/Stores/TemplateStore.js +2 -1
  352. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +2 -0
  353. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +1 -0
  354. package/dist/esm/src/Templates/Stores/library/components/Chat.js +1 -0
  355. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  356. package/dist/esm/src/Templates/Stores/library/languages/es.js +5 -0
  357. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  358. package/dist/esm/src/Templates/Stores/library/languages/fr.js +5 -0
  359. package/dist/esm/src/create/createChatController.d.ts +5 -0
  360. package/dist/esm/src/create/createChatController.d.ts.map +1 -0
  361. package/dist/esm/src/create/createChatController.js +29 -0
  362. package/dist/esm/src/setupEvents.d.ts +13 -0
  363. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  364. package/dist/esm/src/setupEvents.js +40 -0
  365. package/dist/esm/src/types.d.ts +15 -3
  366. package/dist/esm/src/types.d.ts.map +1 -1
  367. package/package.json +14 -12
@@ -0,0 +1,1030 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ var __importDefault = (this && this.__importDefault) || function (mod) {
59
+ return (mod && mod.__esModule) ? mod : { "default": mod };
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.ChatOrganism = void 0;
63
+ var jsx_runtime_1 = require("@emotion/react/jsx-runtime");
64
+ var classnames_1 = __importDefault(require("classnames"));
65
+ var deepmerge_1 = __importDefault(require("deepmerge"));
66
+ var mobx_react_lite_1 = require("mobx-react-lite");
67
+ var providers_1 = require("../../../providers");
68
+ var utilities_1 = require("../../../utilities");
69
+ var Chat_styles_1 = require("./Chat.styles");
70
+ var useChatGestures_1 = require("./hooks/useChatGestures");
71
+ var useChatOverflow_1 = require("./hooks/useChatOverflow");
72
+ var useChatFileUpload_1 = require("./hooks/useChatFileUpload");
73
+ var Button_1 = require("../../Atoms/Button");
74
+ var hooks_1 = require("preact/hooks");
75
+ var ChatMessageUser_1 = require("../../Molecules/ChatMessageUser");
76
+ var ChatMessageText_1 = require("../../Molecules/ChatMessageText");
77
+ var ChatSuggestedQuestions_1 = require("../../Molecules/ChatSuggestedQuestions");
78
+ var ChatAttachmentContext_1 = require("../../Molecules/ChatAttachmentContext");
79
+ var Image_1 = require("../../Atoms/Image");
80
+ var ChatLoadingIndicator_1 = require("../../Atoms/ChatLoadingIndicator");
81
+ var __1 = require("../../..");
82
+ var ChatInspirationResultMessage_1 = require("../../Molecules/ChatInspirationResultMessage");
83
+ var ChatProductComparisonMessage_1 = require("../../Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage");
84
+ var ChatProductQueryMessage_1 = require("../../Molecules/ChatProductQueryMessage/ChatProductQueryMessage");
85
+ exports.ChatOrganism = (0, mobx_react_lite_1.observer)(function (properties) {
86
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
87
+ var globalTheme = (0, providers_1.useTheme)();
88
+ var globalTreePath = (0, providers_1.useTreePath)();
89
+ var isMobile = (0, __1.useMediaQuery)('(max-width: 767px)');
90
+ var defaultProps = {
91
+ treePath: globalTreePath,
92
+ logo: 'https://cdn.athoscommerce.net/snap/images/Athos%20Commerce_Icon_white.svg',
93
+ title: 'Athos Conversational Assistant',
94
+ subtitle: 'Your Guided Discovery Expert',
95
+ multiselectFacets: false,
96
+ disableBubbleSuggestedQuestions: isMobile ? true : false,
97
+ primaryColorBg: '#253B80',
98
+ primaryColorFg: '#fff',
99
+ primaryAccentColorBg: '#feeeae',
100
+ primaryAccentColorFg: '#000000',
101
+ secondaryAccentColorBg: '#000000',
102
+ secondaryAccentColorFg: '#ffffff',
103
+ position: 'right',
104
+ hideMessageTypeIndicatorText: false,
105
+ buttonBelowMessage: false,
106
+ };
107
+ var props = (0, utilities_1.mergeProps)('chat', globalTheme, defaultProps, properties);
108
+ var className = props.className, internalClassName = props.internalClassName, controller = props.controller, logo = props.logo, title = props.title, subtitle = props.subtitle, avatar = props.avatar, offset = props.offset, multiselectFacets = props.multiselectFacets, disableBubbleSuggestedQuestions = props.disableBubbleSuggestedQuestions, primaryColorBg = props.primaryColorBg, primaryColorFg = props.primaryColorFg, primaryAccentColorBg = props.primaryAccentColorBg, primaryAccentColorFg = props.primaryAccentColorFg, secondaryAccentColorBg = props.secondaryAccentColorBg, secondaryAccentColorFg = props.secondaryAccentColorFg, position = props.position, hideMessageTypeIndicatorText = props.hideMessageTypeIndicatorText, buttonBelowMessage = props.buttonBelowMessage, disableStyles = props.disableStyles, treePath = props.treePath;
109
+ var colorPrimary = primaryColorBg;
110
+ var colorPrimaryText = primaryColorFg;
111
+ var colorPrimaryAccent = primaryAccentColorBg;
112
+ var colorPrimaryAccentText = primaryAccentColorFg;
113
+ var colorSecondaryAccent = secondaryAccentColorBg;
114
+ var colorSecondaryAccentText = secondaryAccentColorFg;
115
+ var chatPosition = position === 'right' ? 'right' : 'left';
116
+ var isValidImageUrl = function (value) {
117
+ try {
118
+ var protocol = new URL(value).protocol;
119
+ return protocol === 'http:' || protocol === 'https:' || protocol === 'data:';
120
+ }
121
+ catch (_a) {
122
+ return false;
123
+ }
124
+ };
125
+ // A single-character avatar renders as a capitalized letter; a longer value renders
126
+ // as an image when it's a valid image URL. Anything else renders no avatar.
127
+ var avatarCharacter = avatar && avatar.length === 1 ? avatar.toUpperCase() : undefined;
128
+ var avatarImage = avatar && avatar.length > 1 && isValidImageUrl(avatar) ? avatar : undefined;
129
+ var store = controller.store;
130
+ var themeDefaults = {
131
+ components: {},
132
+ };
133
+ // merge deeply the themeDefaults with the theme props and the displaySettings theme props (do not merge arrays, but replace them)
134
+ var theme = (0, deepmerge_1.default)(themeDefaults, (props === null || props === void 0 ? void 0 : props.theme) || {}, { arrayMerge: function (destinationArray, sourceArray) { return sourceArray; } });
135
+ props = __assign(__assign({}, props), { theme: theme });
136
+ var subProps = {
137
+ messageUser: {
138
+ disableStyles: disableStyles,
139
+ theme: props.theme,
140
+ treePath: treePath,
141
+ primaryColor: colorPrimary,
142
+ primaryColorText: colorPrimaryText,
143
+ hideMessageTypeIndicatorText: hideMessageTypeIndicatorText,
144
+ },
145
+ messageText: {
146
+ disableStyles: disableStyles,
147
+ theme: props.theme,
148
+ treePath: treePath,
149
+ primaryColor: colorPrimary,
150
+ primaryColorText: colorPrimaryText,
151
+ primaryAccentColor: colorPrimaryAccent,
152
+ primaryAccentColorText: colorPrimaryAccentText,
153
+ buttonBelowMessage: buttonBelowMessage,
154
+ },
155
+ suggestedQuestions: {
156
+ disableStyles: disableStyles,
157
+ theme: props.theme,
158
+ treePath: treePath,
159
+ primaryColor: colorPrimary,
160
+ },
161
+ attachmentContext: {
162
+ disableStyles: disableStyles,
163
+ theme: props.theme,
164
+ treePath: treePath,
165
+ },
166
+ loadingIndicator: {
167
+ disableStyles: disableStyles,
168
+ theme: props.theme,
169
+ treePath: treePath,
170
+ },
171
+ inspirationResultMessage: {
172
+ disableStyles: disableStyles,
173
+ theme: props.theme,
174
+ treePath: treePath,
175
+ },
176
+ productComparisonMessage: {
177
+ disableStyles: disableStyles,
178
+ theme: props.theme,
179
+ treePath: treePath,
180
+ },
181
+ productQueryMessage: {
182
+ disableStyles: disableStyles,
183
+ theme: props.theme,
184
+ treePath: treePath,
185
+ primaryColor: colorPrimary,
186
+ primaryColorText: colorPrimaryText,
187
+ },
188
+ };
189
+ var messagesEndRef = (0, hooks_1.useRef)(null);
190
+ var messagesContainerRef = (0, hooks_1.useRef)(null);
191
+ var headerRef = (0, hooks_1.useRef)(null);
192
+ var footerRef = (0, hooks_1.useRef)(null);
193
+ var chatRef = (0, hooks_1.useRef)(null);
194
+ // Ref for the mobile secondary panel — needed for swipe-to-dismiss measurements
195
+ var secondaryRef = (0, hooks_1.useRef)(null);
196
+ var _0 = (0, hooks_1.useState)(false), mobileProductInfoOpen = _0[0], setMobileProductInfoOpen = _0[1];
197
+ var _1 = (0, hooks_1.useState)(0), footerHeight = _1[0], setFooterHeight = _1[1];
198
+ var dropEnabled = store.features.imageSearch.enabled && !store.loading && !store.blocked && !((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.sessionLimitReached);
199
+ var _2 = (0, useChatFileUpload_1.useChatFileUpload)({
200
+ enabled: !!dropEnabled,
201
+ onUpload: function (files) { return controller.upload(files); },
202
+ }), fileInputRef = _2.fileInputRef, isDraggingFile = _2.isDraggingFile, dragHandlers = _2.dragHandlers;
203
+ // productQuery messages are filtered out of the main chat render (they only drive the side-chat panel),
204
+ // so don't auto-scroll when one is added — otherwise clicking a product in the side chat scrolls the main thread.
205
+ var visibleChat = (((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.chat) || []).filter(function (m) { return m.messageType !== 'productQuery'; });
206
+ var visibleChatLength = visibleChat.length;
207
+ var lastVisibleMessage = visibleChat[visibleChat.length - 1];
208
+ var _3 = (0, useChatOverflow_1.useChatOverflow)({
209
+ messagesContainerRef: messagesContainerRef,
210
+ headerRef: headerRef,
211
+ open: store.open,
212
+ loading: store.loading,
213
+ visibleChatLength: visibleChatLength,
214
+ lastVisibleMessage: lastVisibleMessage,
215
+ }), showNewMessages = _3.showNewMessages, setShowNewMessages = _3.setShowNewMessages, messagesOverflow = _3.messagesOverflow, scrollToBottom = _3.scrollToBottom, scrollToBottomIfNear = _3.scrollToBottomIfNear;
216
+ // Re-focus the chat input on desktop after a search completes.
217
+ // The input is disabled while loading, which causes the browser to drop focus.
218
+ // On mobile we intentionally skip this so the virtual keyboard dismisses.
219
+ // Only fire on the loading true → false transition — running on mount steals
220
+ // focus away from the Storybook controls whenever the story re-renders.
221
+ var prevLoadingRef = (0, hooks_1.useRef)(store.loading);
222
+ (0, hooks_1.useEffect)(function () {
223
+ if (prevLoadingRef.current && !store.loading && !isMobile && store.open) {
224
+ controller.focusInput();
225
+ }
226
+ prevLoadingRef.current = store.loading;
227
+ }, [store.loading]);
228
+ // const subProps: ChatSubProps = {};
229
+ var activeMessage = (_c = store.currentChat) === null || _c === void 0 ? void 0 : _c.activeMessage;
230
+ // On mobile, only auto-open the secondary panel for the first productComparison
231
+ // message in the chat session. Subsequent comparison results show a "Show Details"
232
+ // button instead (handled in MessageText via sideChatLabel toggle).
233
+ var isFirstMobileComparison = (function () {
234
+ var _a, _b;
235
+ if (!isMobile || (activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) !== 'productComparison')
236
+ return true;
237
+ // If the user explicitly activated a comparison (via "Show Details" or the
238
+ // view-side-chat button), always allow it regardless of position in the chat
239
+ if ((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.activeMessageId)
240
+ return true;
241
+ var comparisonMessages = (((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.chat) || []).filter(function (m) { return m.messageType === 'productComparison'; });
242
+ return comparisonMessages.length <= 1;
243
+ })();
244
+ var sideChatTypes = isMobile
245
+ ? __spreadArray(__spreadArray(['inspirationResult'], (isFirstMobileComparison ? ['productComparison'] : []), true), (mobileProductInfoOpen ? ['productQuery'] : []), true) : ['inspirationResult', 'productComparison', 'productQuery'];
246
+ var shouldShowSideChat = activeMessage && sideChatTypes.includes(activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) && ((_d = store.currentChat) === null || _d === void 0 ? void 0 : _d.dismissedSideChatMessageId) !== activeMessage.id;
247
+ var hasSideChat = !!shouldShowSideChat;
248
+ var styling = (0, hooks_1.useMemo)(function () {
249
+ return (0, utilities_1.mergeStyles)({
250
+ mobile: isMobile,
251
+ offset: offset,
252
+ hasSideChat: hasSideChat,
253
+ footerHeight: footerHeight,
254
+ primaryColorBg: colorPrimary,
255
+ primaryColorFg: colorPrimaryText,
256
+ primaryAccentColorBg: colorPrimaryAccent,
257
+ primaryAccentColorFg: colorPrimaryAccentText,
258
+ secondaryAccentColorBg: colorSecondaryAccent,
259
+ secondaryAccentColorFg: colorSecondaryAccentText,
260
+ position: chatPosition,
261
+ }, Chat_styles_1.chatDefaultStyles);
262
+ }, [
263
+ isMobile,
264
+ offset,
265
+ hasSideChat,
266
+ footerHeight,
267
+ colorPrimary,
268
+ colorPrimaryText,
269
+ colorPrimaryAccent,
270
+ colorPrimaryAccentText,
271
+ colorSecondaryAccent,
272
+ colorSecondaryAccentText,
273
+ chatPosition,
274
+ ]);
275
+ // Lock body scroll while chat is open so touch/wheel scrolls don't leak to the page behind
276
+ (0, hooks_1.useEffect)(function () {
277
+ if (!store.open)
278
+ return;
279
+ var body = document.body;
280
+ var previousOverflow = body.style.overflow;
281
+ var previousOverscroll = body.style.overscrollBehavior;
282
+ body.style.overflow = 'hidden';
283
+ body.style.overscrollBehavior = 'contain';
284
+ return function () {
285
+ body.style.overflow = previousOverflow;
286
+ body.style.overscrollBehavior = previousOverscroll;
287
+ };
288
+ }, [store.open]);
289
+ // Close chat on Escape key (or dismiss side chat first when it's open)
290
+ (0, hooks_1.useEffect)(function () {
291
+ if (!store.open)
292
+ return;
293
+ var onKeyDown = function (e) {
294
+ var _a, _b;
295
+ if (e.key !== 'Escape')
296
+ return;
297
+ if (((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.activeMessage) && shouldShowSideChat) {
298
+ (_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.dismissSideChat();
299
+ }
300
+ else {
301
+ controller.handlers.button.click();
302
+ }
303
+ };
304
+ document.addEventListener('keydown', onKeyDown);
305
+ return function () { return document.removeEventListener('keydown', onKeyDown); };
306
+ }, [store.open, shouldShowSideChat]);
307
+ // Track the primary footer height so the mobile secondary panel can sit above it
308
+ (0, hooks_1.useEffect)(function () {
309
+ var el = footerRef.current;
310
+ if (!el)
311
+ return;
312
+ var observer = new ResizeObserver(function (entries) {
313
+ var _a, _b, _c;
314
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
315
+ var entry = entries_1[_i];
316
+ setFooterHeight((_c = (_b = (_a = entry.borderBoxSize) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.blockSize) !== null && _c !== void 0 ? _c : entry.target.getBoundingClientRect().height);
317
+ }
318
+ });
319
+ observer.observe(el);
320
+ return function () { return observer.disconnect(); };
321
+ }, [store.open, (_e = store.currentChat) === null || _e === void 0 ? void 0 : _e.isExpired]);
322
+ // Prevent the background page from scrolling while the chat is open on touch
323
+ // devices. iOS Safari (real iPad/iPhone) rubber-band-scrolls the body when a
324
+ // touchmove inside `.ss__chat__messages` reaches the top/bottom — and
325
+ // `overscroll-behavior: contain` is ignored there.
326
+ //
327
+ // We don't touch body styles (locking via `position: fixed` on `<body>` leaves
328
+ // iPad Safari in a stuck viewport state where the page can't scroll after the
329
+ // lock is released). Instead we install a `touchmove` handler that:
330
+ // - allows the touchmove if it's inside a scrollable region of the chat
331
+ // and that region isn't at its scroll edge in the swipe direction;
332
+ // - calls `preventDefault()` otherwise — which is what blocks both
333
+ // background scrolling and iOS rubber-band overscroll.
334
+ // Cleanup just removes the listeners, so nothing can leak into the page.
335
+ (0, hooks_1.useEffect)(function () {
336
+ if (!store.open)
337
+ return;
338
+ if (typeof document === 'undefined')
339
+ return;
340
+ var startX = 0;
341
+ var startY = 0;
342
+ var scrollEl = null;
343
+ // Walk up from the touch target to find the first ancestor inside the chat
344
+ // that is actually scrollable in either axis. Stop at the chat root so we
345
+ // never consider elements outside the chat.
346
+ var findScrollableInChat = function (start) {
347
+ var chatRoot = chatRef.current;
348
+ if (!chatRoot)
349
+ return null;
350
+ var el = start;
351
+ while (el && chatRoot.contains(el)) {
352
+ var style = getComputedStyle(el);
353
+ var scrollableY = (style.overflowY === 'auto' || style.overflowY === 'scroll') && el.scrollHeight > el.clientHeight;
354
+ var scrollableX = (style.overflowX === 'auto' || style.overflowX === 'scroll') && el.scrollWidth > el.clientWidth;
355
+ if (scrollableY || scrollableX) {
356
+ return el;
357
+ }
358
+ if (el === chatRoot)
359
+ break;
360
+ el = el.parentElement;
361
+ }
362
+ return null;
363
+ };
364
+ var onTouchStart = function (e) {
365
+ if (!e.touches[0])
366
+ return;
367
+ startX = e.touches[0].clientX;
368
+ startY = e.touches[0].clientY;
369
+ scrollEl = findScrollableInChat(e.target);
370
+ };
371
+ var onTouchMove = function (e) {
372
+ var _a, _b, _c, _d;
373
+ var target = e.target;
374
+ var chatRoot = chatRef.current;
375
+ var inChat = !!(chatRoot && target && chatRoot.contains(target));
376
+ // Touches outside the chat shouldn't scroll the background.
377
+ if (!inChat) {
378
+ if (e.cancelable)
379
+ e.preventDefault();
380
+ return;
381
+ }
382
+ // Inside the chat but no scrollable container — block to prevent body scroll.
383
+ if (!scrollEl) {
384
+ if (e.cancelable)
385
+ e.preventDefault();
386
+ return;
387
+ }
388
+ // Inside a scrollable container — only block when at the edge in the
389
+ // swipe direction, so internal scrolling continues to work. Detect the
390
+ // dominant axis so horizontally-scrollable rows (e.g. the facets row)
391
+ // also get to handle their own touch gestures.
392
+ var currentX = (_b = (_a = e.touches[0]) === null || _a === void 0 ? void 0 : _a.clientX) !== null && _b !== void 0 ? _b : startX;
393
+ var currentY = (_d = (_c = e.touches[0]) === null || _c === void 0 ? void 0 : _c.clientY) !== null && _d !== void 0 ? _d : startY;
394
+ var deltaX = currentX - startX;
395
+ var deltaY = currentY - startY;
396
+ var horizontal = Math.abs(deltaX) > Math.abs(deltaY);
397
+ if (horizontal) {
398
+ var scrollsX = scrollEl.scrollWidth > scrollEl.clientWidth;
399
+ if (!scrollsX) {
400
+ if (e.cancelable)
401
+ e.preventDefault();
402
+ return;
403
+ }
404
+ var atLeft = scrollEl.scrollLeft <= 0;
405
+ var atRight = scrollEl.scrollLeft + scrollEl.clientWidth >= scrollEl.scrollWidth - 1;
406
+ if ((atLeft && deltaX > 0) || (atRight && deltaX < 0)) {
407
+ if (e.cancelable)
408
+ e.preventDefault();
409
+ }
410
+ }
411
+ else {
412
+ var scrollsY = scrollEl.scrollHeight > scrollEl.clientHeight;
413
+ if (!scrollsY) {
414
+ if (e.cancelable)
415
+ e.preventDefault();
416
+ return;
417
+ }
418
+ var atTop = scrollEl.scrollTop <= 0;
419
+ var atBottom = scrollEl.scrollTop + scrollEl.clientHeight >= scrollEl.scrollHeight - 1;
420
+ if ((atTop && deltaY > 0) || (atBottom && deltaY < 0)) {
421
+ if (e.cancelable)
422
+ e.preventDefault();
423
+ }
424
+ }
425
+ };
426
+ document.addEventListener('touchstart', onTouchStart, { passive: true });
427
+ document.addEventListener('touchmove', onTouchMove, { passive: false });
428
+ return function () {
429
+ document.removeEventListener('touchstart', onTouchStart);
430
+ document.removeEventListener('touchmove', onTouchMove);
431
+ };
432
+ }, [store.open]);
433
+ var HistoryButton = function (props) { return ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: "ss__chat__header__button--history", disabled: props.disabled, icon: {
434
+ icon: 'history',
435
+ title: 'Chat History',
436
+ } })); };
437
+ var HistoryPopup = function (props) { return ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__history", children: [(0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__history__header", children: [(0, jsx_runtime_1.jsx)("h4", { children: "History" }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__history__header__buttons", children: (0, jsx_runtime_1.jsx)(Button_1.Button, { content: "clear", disabled: store.loading || store.blocked, onClick: function () {
438
+ controller.store.clearHistory();
439
+ props.toggleOpen && props.toggleOpen();
440
+ } }) })] }), store.chats.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__history__chats", children: store.chats
441
+ .slice()
442
+ .reverse()
443
+ .map(function (chat) { return ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__history__chats__chat", children: (0, jsx_runtime_1.jsxs)(Button_1.Button, { className: "ss__chat__history__chat__button", onClick: function () {
444
+ controller.store.switchChat(chat.id);
445
+ }, disabled: chat.id === store.currentChatId || store.loading || store.blocked, children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__history__chat__button__text", children: (function () {
446
+ var lastUserMessage = __spreadArray([], chat.chat, true).reverse().find(function (message) { return message.messageType === 'user'; });
447
+ if (!lastUserMessage)
448
+ return 'New Chat';
449
+ var text = lastUserMessage.text;
450
+ return text.length > 50 ? "".concat(text.slice(0, 50), "...") : text;
451
+ })() }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__history__chat__button__date", children: chat.createdAt.toLocaleString() })] }) }, chat.id)); }) })) : null] })); };
452
+ var FacetButton = function (props) { return (0, jsx_runtime_1.jsx)(Button_1.Button, { icon: props.open ? 'angle-down' : 'angle-up', children: props.label }); };
453
+ var getFacetButtonLabel = function (facet) {
454
+ var _a, _b;
455
+ var base = facet.label || facet.field;
456
+ // Slider facets show the active low-high range in the button when narrowed.
457
+ if (facet.type === 'range') {
458
+ var rangeFacet = facet;
459
+ var active = rangeFacet.active;
460
+ var range = rangeFacet.range;
461
+ if (active && range && (active.low !== range.low || active.high !== range.high)) {
462
+ return "".concat(base, " (").concat((_a = active.low) !== null && _a !== void 0 ? _a : '*', "-").concat((_b = active.high) !== null && _b !== void 0 ? _b : '*', ")");
463
+ }
464
+ return base;
465
+ }
466
+ // Count current selections from the urlManager (source of truth for live state).
467
+ // `value.filtered` reflects the server's snapshot at response time and goes stale
468
+ // once the user deselects locally.
469
+ var applied = (facet.values || []).filter(function (value) {
470
+ var _a, _b;
471
+ if (!value)
472
+ return false;
473
+ var optionValue = 'low' in value && 'high' in value
474
+ ? "".concat((_a = value.low) !== null && _a !== void 0 ? _a : '*', ":").concat((_b = value.high) !== null && _b !== void 0 ? _b : '*')
475
+ : value.value || value.label;
476
+ return controller.store.isFacetSelected(facet.field, optionValue);
477
+ }).length;
478
+ return applied > 0 ? "".concat(base, " (").concat(applied, ")") : base;
479
+ };
480
+ // Slider dropdown grows to fill the remaining chat width from its anchor,
481
+ // so the price range slider isn't cramped inside a 150px-wide dropdown.
482
+ var SliderFacetDropdown = function (props) {
483
+ var anchorRef = (0, hooks_1.useRef)(null);
484
+ var _a = (0, hooks_1.useState)(null), width = _a[0], setWidth = _a[1];
485
+ (0, hooks_1.useEffect)(function () {
486
+ var compute = function () {
487
+ if (!anchorRef.current || !chatRef.current)
488
+ return;
489
+ var anchor = anchorRef.current.getBoundingClientRect();
490
+ var chat = chatRef.current.getBoundingClientRect();
491
+ var remaining = chat.right - anchor.left - 16;
492
+ setWidth(Math.max(220, remaining));
493
+ };
494
+ compute();
495
+ var ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(compute) : null;
496
+ if (ro && chatRef.current)
497
+ ro.observe(chatRef.current);
498
+ window.addEventListener('resize', compute);
499
+ return function () {
500
+ if (ro)
501
+ ro.disconnect();
502
+ window.removeEventListener('resize', compute);
503
+ };
504
+ }, []);
505
+ return ((0, jsx_runtime_1.jsx)("div", { ref: anchorRef, className: "ss__chat__actions__facet ss__chat__actions__facet--range", children: (0, jsx_runtime_1.jsx)(__1.Dropdown, { usePortal: true, dropUp: true, button: (0, jsx_runtime_1.jsx)(FacetButton, { label: props.label }), style: {
506
+ '.ss__dropdown__content': {
507
+ width: width ? "".concat(width, "px") : 'auto',
508
+ background: 'white',
509
+ boxShadow: '0px 3px 6px 0px rgba(0, 0, 0, 0.2)',
510
+ borderRadius: '6px',
511
+ },
512
+ }, children: (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions__facet__options", children: (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions__facet__slider", style: { padding: '12px 16px' }, children: (0, jsx_runtime_1.jsx)(__1.FacetSlider, { facet: props.facet, onChange: function () {
513
+ if (!multiselectFacets) {
514
+ // FacetSlider fires onChange before its urlManager update; defer
515
+ // so controller.search() reads the updated filter state. Force
516
+ // productSearch with the current filters so a slider tweak doesn't
517
+ // fall through to `general` when hasPendingFacetChanges happens to
518
+ // be false (e.g. the slider returned to the seeded range).
519
+ queueMicrotask(function () {
520
+ return controller.search({
521
+ data: { requestType: 'productSearch', searchFilters: controller.store.searchFilters },
522
+ });
523
+ });
524
+ }
525
+ } }) }) }) }) }));
526
+ };
527
+ // TODO: if starting a new chat and it's expired, this button would then disappear
528
+ if (!controller.store.chatEnabled) {
529
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
530
+ }
531
+ // Dismiss the secondary panel and clear any product attachments tied to the side-chat
532
+ // (discuss product flow), while preserving productSimilar/productComparison attachments.
533
+ var dismissSideChat = function () {
534
+ var _a, _b;
535
+ var productAttachmentsToRemove = (((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.attached) || []).filter(function (item) { return item.type === 'product' && item.requestType !== 'productSimilar' && item.requestType !== 'productComparison'; });
536
+ productAttachmentsToRemove.forEach(function (item) { var _a; return (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.remove(item.id); });
537
+ setMobileProductInfoOpen(false);
538
+ (_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.dismissSideChat();
539
+ };
540
+ var _4 = (0, useChatGestures_1.useChatGestures)({
541
+ panelRef: secondaryRef,
542
+ shouldShowSideChat: !!shouldShowSideChat,
543
+ activeMessageId: activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.id,
544
+ onDismiss: dismissSideChat,
545
+ }), swipeOffset = _4.swipeOffset, swipeAnimating = _4.swipeAnimating, swipeHandlers = _4.swipeHandlers;
546
+ var requestType = (_f = store.currentChat) === null || _f === void 0 ? void 0 : _f.requestType;
547
+ var loadingVerbs = (0, hooks_1.useMemo)(function () {
548
+ switch (requestType) {
549
+ case 'productQuery':
550
+ return ['Thinking', 'Searching', 'Analyzing', 'Gathering details'];
551
+ case 'productSearch':
552
+ return ['Searching', 'Browsing catalog', 'Finding products', 'Curating results'];
553
+ case 'productComparison':
554
+ return ['Comparing', 'Analyzing', 'Evaluating', 'Weighing options'];
555
+ case 'imageSearch':
556
+ return ['Analyzing image', 'Identifying', 'Searching', 'Matching'];
557
+ case 'productSimilar':
558
+ return ['Finding similar items', 'Searching', 'Matching', 'Curating'];
559
+ case 'inspirationRequest':
560
+ return ['Brainstorming', 'Imagining', 'Curating', 'Inspiring'];
561
+ case 'general':
562
+ default:
563
+ return undefined;
564
+ }
565
+ }, [requestType]);
566
+ var isWelcomeState = (!((_g = store.currentChat) === null || _g === void 0 ? void 0 : _g.chat) || store.currentChat.chat.length === 0) && !!store.welcomeMessage && !((_h = store.currentChat) === null || _h === void 0 ? void 0 : _h.isExpired);
567
+ return ((0, jsx_runtime_1.jsx)(providers_1.CacheProvider, { children: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", __assign({ ref: chatRef, className: (0, classnames_1.default)('ss__chat', {
568
+ 'ss__chat--open': store.open,
569
+ 'ss__chat--minimized': !store.open,
570
+ 'ss__chat--mobile': isMobile,
571
+ 'ss__chat--welcome': isWelcomeState,
572
+ }, className, internalClassName) }, styling, { children: [!disableBubbleSuggestedQuestions && !store.open && !store.currentChat && ((_j = store.suggestedQuestions) === null || _j === void 0 ? void 0 : _j.length) > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__suggested-questions", children: store.suggestedQuestions.map(function (question) { return ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__suggested-questions__item", onClick: function () {
573
+ controller.openChat(question);
574
+ }, children: question }, question)); }) })), (0, jsx_runtime_1.jsx)("button", { type: "button", className: 'ss__chat__bubble', "aria-label": store.open ? 'Close chat' : 'Open chat', "aria-expanded": store.open, onClick: function () { return controller.handlers.button.click(); }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "chat", title: "Open Chat" }) }), store.open && shouldShowSideChat && activeMessage ? ((0, jsx_runtime_1.jsxs)("div", { ref: secondaryRef, className: (0, classnames_1.default)('ss__chat__secondary'), role: "region", "aria-label": "Conversation details", style: isMobile
575
+ ? {
576
+ // Touch swipe animations need to be inline to prevent visual jumps
577
+ transform: swipeOffset > 0 ? "translateY(".concat(swipeOffset, "px)") : undefined,
578
+ transition: swipeAnimating ? 'transform 0.3s ease-out' : 'none',
579
+ }
580
+ : undefined, children: [isMobile && ((0, jsx_runtime_1.jsx)("div", __assign({ className: "ss__chat__secondary__drag-handle" }, swipeHandlers, { children: (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__secondary__drag-handle__indicator" }) }))), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__header', onTouchStart: isMobile ? swipeHandlers.onTouchStart : undefined, onTouchMove: isMobile ? swipeHandlers.onTouchMove : undefined, onTouchEnd: isMobile ? swipeHandlers.onTouchEnd : undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__header__title", children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__header__title__primary", children: {
581
+ inspirationResult: 'Inspiration Scenarios',
582
+ productComparison: 'Product Comparison',
583
+ productQuery: '',
584
+ }[activeMessage.messageType] || null }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__header__title__secondary", children: {
585
+ inspirationResult: 'Choose a style direction to explore',
586
+ productComparison: "Comparing ".concat(((_k = activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.searchResults) === null || _k === void 0 ? void 0 : _k.length) || '', " products"),
587
+ productQuery: '',
588
+ }[activeMessage.messageType] || null })] }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__header__buttons", children: (0, jsx_runtime_1.jsx)(Button_1.Button, { className: "ss__chat__header__button--close", "aria-label": "Close chat", icon: { icon: 'close2', title: 'Close Chat' }, onClick: function () { return dismissSideChat(); } }) })] }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__content", children: (0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__messages', children: {
589
+ inspirationResult: ((0, jsx_runtime_1.jsx)(ChatInspirationResultMessage_1.ChatInspirationResultMessage, __assign({}, subProps.inspirationResultMessage, { chatItem: activeMessage, controller: controller, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined }))),
590
+ productComparison: ((0, jsx_runtime_1.jsx)(ChatProductComparisonMessage_1.ChatProductComparisonMessage, __assign({}, subProps.productComparisonMessage, { chatItem: activeMessage, controller: controller }))),
591
+ productQuery: ((0, jsx_runtime_1.jsx)(ChatProductQueryMessage_1.ChatProductQueryMessage, __assign({}, subProps.productQueryMessage, { chatItem: activeMessage, controller: controller, displayFields: (_m = (_l = controller.config.settings) === null || _l === void 0 ? void 0 : _l.quickview) === null || _m === void 0 ? void 0 : _m.displayFields, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
592
+ }[activeMessage.messageType] || null }) })] })) : null, store.open ? ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__primary',
593
+ // On mobile, interacting with the primary chat (header or anywhere within)
594
+ // dismisses the secondary panel. Capture phase so it fires even when an
595
+ // inner control stops propagation.
596
+ onClickCapture: isMobile && shouldShowSideChat ? function () { return dismissSideChat(); } : undefined, children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__header', children: [(0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__header__title", children: [logo ? (0, jsx_runtime_1.jsx)(Image_1.Image, { className: "ss__chat__header__title__logo", src: logo, alt: title || 'Chat logo' }) : null, (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__header__title__text", children: [title ? (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__header__title__text__primary", children: title }) : null, subtitle ? (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__header__title__text__secondary", children: subtitle }) : null] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__header__buttons", children: [(0, jsx_runtime_1.jsx)(Button_1.Button
597
+ // disabled={store.currentChat?.chat && store.currentChat.chat.length <= 1}
598
+ , {
599
+ // disabled={store.currentChat?.chat && store.currentChat.chat.length <= 1}
600
+ className: "ss__chat__header__button--new", "aria-label": "New chat", icon: { icon: controller.store.initChatLoading ? 'spinner' : 'plus2', title: 'New Chat' }, onClick: function () { return controller.store.createChat(); } }), store.chats.length > 1 && ((0, jsx_runtime_1.jsx)(__1.Dropdown, { disabled: store.loading || store.blocked, className: "ss__chat__header__dropdown-history", button: (0, jsx_runtime_1.jsx)(HistoryButton, {}), children: (0, jsx_runtime_1.jsx)(HistoryPopup, {}) })), (0, jsx_runtime_1.jsx)(Button_1.Button, { className: "ss__chat__header__button--close", "aria-label": "Close chat", icon: { icon: 'close2', title: 'Close Chat' }, onClick: function () { return controller.handlers.button.click(); } })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__content", children: [(function () {
601
+ var _a, _b, _c, _d, _e;
602
+ var feedbackAfterMessages = (_a = controller.config.settings) === null || _a === void 0 ? void 0 : _a.feedbackAfterMessages;
603
+ var systemMessages = (((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.chat) || []).filter(function (msg) { return msg.messageType !== 'user' && msg.messageType !== 'productQuery'; });
604
+ var currentRating = (_c = store.currentChat) === null || _c === void 0 ? void 0 : _c.feedback.rating;
605
+ var hasRated = !!currentRating;
606
+ var shouldShowFeedback = feedbackAfterMessages &&
607
+ systemMessages.length >= feedbackAfterMessages &&
608
+ !((_d = store.currentChat) === null || _d === void 0 ? void 0 : _d.feedback.dismissed) &&
609
+ (!hasRated || ((_e = store.currentChat) === null || _e === void 0 ? void 0 : _e.feedback.justGiven));
610
+ return shouldShowFeedback ? ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__session-feedback", children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__session-feedback__icon", children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "chat", size: "16px" }) }), (0, jsx_runtime_1.jsx)("span", { className: "ss__chat__session-feedback__label", children: hasRated ? 'Thank you for your feedback' : "How's your experience so far?" }), (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__session-feedback__actions".concat(hasRated ? ' ss__chat__session-feedback__actions--rated' : ''), children: [(!hasRated || currentRating === 'UP') && ((0, jsx_runtime_1.jsx)("span", { onClick: function () { return !hasRated && controller.handleFeedback('UP'); }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: 'thumbs-up', size: "16px", title: 'Thumbs Up' }) })), (!hasRated || currentRating === 'DOWN') && ((0, jsx_runtime_1.jsx)("span", { onClick: function () { return !hasRated && controller.handleFeedback('DOWN'); }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: 'thumbs-down', size: "16px", title: 'Thumbs Down' }) }))] }), !hasRated && ((0, jsx_runtime_1.jsx)("span", { className: "ss__chat__session-feedback__close", onClick: function () {
611
+ if (store.currentChat) {
612
+ store.currentChat.feedback.dismissed = true;
613
+ store.currentChat.save();
614
+ }
615
+ }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "close-thin", size: "14px" }) }))] })) : null;
616
+ })(), (0, jsx_runtime_1.jsx)("div", { ref: headerRef, className: (0, classnames_1.default)('ss__chat__content__header', {
617
+ 'ss__chat__content__header--overlay': messagesOverflow,
618
+ }), children: ((_o = store.currentChat) === null || _o === void 0 ? void 0 : _o.comparisons.compared) && store.currentChat.comparisons.compared.length > 0 && ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__content__header__comparisons', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__content__header__comparisons__header', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__content__header__comparisons__header__title', children: [(0, jsx_runtime_1.jsx)(__1.Icon, { className: 'ss__chat__content__header__comparisons__header__title__icon', icon: 'clipboard' }), (0, jsx_runtime_1.jsxs)("span", { className: 'ss__chat__content__header__comparisons__header__title__text', children: ["Compare Products (", (_p = store.currentChat) === null || _p === void 0 ? void 0 : _p.comparisons.compared.length, "/", (_q = store.currentChat) === null || _q === void 0 ? void 0 : _q.comparisons.maxItems, ")"] })] }), (0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__content__header__comparisons__header__actions', children: (0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: function () { var _a; return (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.reset(); }, children: "clear" }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__content__header__comparisons__content', children: [(0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__content__header__comparisons__content__items', children: Array.from({ length: (_r = store.currentChat) === null || _r === void 0 ? void 0 : _r.comparisons.maxItems }).map(function (_, index) {
619
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
620
+ var comparisonItem = (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.compared[index];
621
+ return ((0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat__content__header__comparisons__content__comparison', {
622
+ 'ss__chat__content__header__comparisons__content__comparison--placeholder': !comparisonItem,
623
+ }), children: comparisonItem ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Image_1.Image
624
+ // onClick={() => {
625
+ // controller?.productQuickView(product as any);
626
+ // }}
627
+ , {
628
+ // onClick={() => {
629
+ // controller?.productQuickView(product as any);
630
+ // }}
631
+ alt: ((_e = (_d = (_c = (((_b = comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result) === null || _b === void 0 ? void 0 : _b.display) || (comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result))) === null || _c === void 0 ? void 0 : _c.mappings) === null || _d === void 0 ? void 0 : _d.core) === null || _e === void 0 ? void 0 : _e.name) || '', src: ((_j = (_h = (_g = (((_f = comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result) === null || _f === void 0 ? void 0 : _f.display) || (comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result))) === null || _g === void 0 ? void 0 : _g.mappings) === null || _h === void 0 ? void 0 : _h.core) === null || _j === void 0 ? void 0 : _j.imageUrl) ||
632
+ ((_o = (_m = (_l = (((_k = comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result) === null || _k === void 0 ? void 0 : _k.display) || (comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result))) === null || _l === void 0 ? void 0 : _l.mappings) === null || _m === void 0 ? void 0 : _m.core) === null || _o === void 0 ? void 0 : _o.parentImageUrl) ||
633
+ '' }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__content__header__comparisons__content__comparison__remove", onClick: function () {
634
+ var _a;
635
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.remove(comparisonItem.result.id);
636
+ }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: 'close-thin', size: '12px' }) })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: 'plus-thin' }), (0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__content__header__comparisons__content__comparison--placeholder__text', children: "Add" })] })) }, index));
637
+ }) }), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat__content__header__comparisons__action', {
638
+ 'ss__chat__content__header__comparisons__action--hidden': (((_s = store.currentChat) === null || _s === void 0 ? void 0 : _s.comparisons.compared.length) || 0) < 2,
639
+ }), children: (0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: function () { return controller.search(); }, icon: { icon: 'compare', title: 'Compare' }, children: "Compare" }) })] })] })) }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__messages', ref: messagesContainerRef, role: "log", "aria-live": "polite", "aria-relevant": "additions", "aria-label": "Chat messages", style: visibleChatLength ? { scrollbarGutter: 'stable' } : undefined, children: [(!((_t = store.currentChat) === null || _t === void 0 ? void 0 : _t.chat) || store.currentChat.chat.length === 0) && store.welcomeMessage && !((_u = store.currentChat) === null || _u === void 0 ? void 0 : _u.isExpired) && ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__welcome", children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__welcome__message", children: store.welcomeMessage }), (0, jsx_runtime_1.jsx)(ChatSuggestedQuestions_1.ChatSuggestedQuestions, __assign({}, subProps.suggestedQuestions, { questions: store.suggestedQuestions, controller: controller }))] })), (_v = store.currentChat) === null || _v === void 0 ? void 0 : _v.chat.filter(function (chatItem) { return chatItem.messageType !== 'productQuery'; }).map(function (chatItem) {
640
+ var showAvatar = !!(avatarCharacter || avatarImage) && chatItem.messageType !== 'user';
641
+ var messageContent = {
642
+ user: ((0, jsx_runtime_1.jsx)(ChatMessageUser_1.ChatMessageUser, __assign({}, subProps.messageUser, { chatItem: chatItem, controller: controller, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
643
+ text: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
644
+ content: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
645
+ productSearchResult: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
646
+ inspirationResult: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
647
+ productAnswer: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
648
+ productComparison: (function () {
649
+ var _a;
650
+ // On mobile, only the first productComparison in the session
651
+ // auto-opens the secondary panel. Subsequent ones get a
652
+ // prominent "Show Details" button instead.
653
+ var comparisonMessages = (((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.chat) || []).filter(function (m) { return m.messageType === 'productComparison'; });
654
+ var isFirst = comparisonMessages.length > 0 && comparisonMessages[0].id === chatItem.id;
655
+ return ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, showDetailsButton: isMobile && !isFirst, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText })));
656
+ })(),
657
+ productRecommendation: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, onProductQuickView: isMobile ? function () { return setMobileProductInfoOpen(true); } : undefined, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
658
+ actions: ((0, jsx_runtime_1.jsx)(ChatSuggestedQuestions_1.ChatSuggestedQuestions, { actions: chatItem.actions, controller: controller })),
659
+ errorResponse: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
660
+ topicDrift: ((0, jsx_runtime_1.jsx)(ChatMessageText_1.ChatMessageText, __assign({}, subProps.messageText, { chatItem: chatItem, controller: controller, scrollToBottom: scrollToBottomIfNear, sideChatOpen: !!shouldShowSideChat, primaryColor: colorPrimary, primaryColorText: colorPrimaryText }))),
661
+ productQuery: null,
662
+ }[chatItem.messageType] || null;
663
+ return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)("ss__chat__message", "ss__chat__message--".concat(chatItem.messageType), {
664
+ 'ss__chat__message--with-avatar': showAvatar,
665
+ }), children: [showAvatar && ((0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat__message__avatar', {
666
+ 'ss__chat__message__avatar--image': !!avatarImage,
667
+ }), "aria-hidden": "true", children: avatarImage ? (0, jsx_runtime_1.jsx)(Image_1.Image, { src: avatarImage, alt: "" }) : avatarCharacter })), showAvatar ? (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__message__content", children: messageContent }) : messageContent] }, chatItem.id));
668
+ }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__messages__end", ref: messagesEndRef }), showNewMessages && messagesOverflow && ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__new-messages", onClick: function () {
669
+ scrollToBottom();
670
+ setShowNewMessages(false);
671
+ }, children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "angle-down", size: "12px" }), (0, jsx_runtime_1.jsx)("span", { children: "New messages" })] }))] }), (0, jsx_runtime_1.jsx)(ChatLoadingIndicator_1.ChatLoadingIndicator, __assign({}, subProps.loadingIndicator, { loading: store.loading, verbs: loadingVerbs })), !((_w = store.currentChat) === null || _w === void 0 ? void 0 : _w.isExpired) ? ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "ss__chat__content__footer", ref: footerRef }, dragHandlers, { children: [store.error && (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__error", children: store.error.message }), ((_x = store.currentChat) === null || _x === void 0 ? void 0 : _x.sessionLimitReached) && ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift', children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift__text', children: [(0, jsx_runtime_1.jsx)("span", { children: "Session limit reached" }), (0, jsx_runtime_1.jsx)("span", { children: "This chat has reached its maximum number of interactions. Start a new session to continue." })] }), (0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__topic-drift__button', onClick: function () {
672
+ controller.store.createChat();
673
+ }, children: "New Session" })] })), store.facets && store.facets.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__actions', children: (0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__wrap", children: [(0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__facets-header", children: [(0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions--title", children: "Filter by:" }), multiselectFacets && store.hasPendingFacetChanges && ((0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__actions__facets-apply ss__chat__actions__facets-apply--active', children: (0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: function () {
674
+ controller.search();
675
+ }, children: store.pendingFacetCount > 0 ? "Apply (".concat(store.pendingFacetCount, ")") : 'Clear facets' }) }))] }), (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions--facets", children: store.facets.slice(0, 10).map(function (facet, idx) {
676
+ var _a;
677
+ // range/slider facets render via FacetSlider; everything else needs at least one value to be useful
678
+ if (facet.type !== 'range' && !((_a = facet.values) === null || _a === void 0 ? void 0 : _a.length))
679
+ return null;
680
+ if (facet.type === 'range') {
681
+ return (0, jsx_runtime_1.jsx)(SliderFacetDropdown, { facet: facet, label: getFacetButtonLabel(facet) }, idx);
682
+ }
683
+ return ((0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions__facet ss__chat__actions__facet--".concat(facet.type), children: (0, jsx_runtime_1.jsx)(__1.Dropdown, { usePortal: true, dropUp: true, boundaryRef: chatRef, button: (0, jsx_runtime_1.jsx)(FacetButton, { label: getFacetButtonLabel(facet) }), style: {
684
+ '.ss__dropdown__content': __assign({ width: '150px', maxHeight: '200px', overflowY: 'auto', background: 'white', boxShadow: '0px 3px 6px 0px rgba(0, 0, 0, 0.2)', borderRadius: '6px' }, (multiselectFacets
685
+ ? {
686
+ '.ss__chat__actions__facet__option--checkbox': {
687
+ display: 'flex',
688
+ alignItems: 'center',
689
+ gap: '8px',
690
+ padding: '6px 10px',
691
+ cursor: 'pointer',
692
+ width: '100%',
693
+ boxSizing: 'border-box',
694
+ background: '#fff',
695
+ border: 'none',
696
+ borderBottom: '1px solid #f0f0f0',
697
+ '&:hover': {
698
+ background: new utilities_1.Colour(colorPrimary).lightenHex(0.95),
699
+ },
700
+ '&:last-child': {
701
+ borderBottom: 'none',
702
+ },
703
+ '.ss__chat__actions__facet__option__checkbox': {
704
+ width: '16px',
705
+ height: '16px',
706
+ borderRadius: '3px',
707
+ border: '2px solid #ccc',
708
+ display: 'flex',
709
+ alignItems: 'center',
710
+ justifyContent: 'center',
711
+ flexShrink: 0,
712
+ '&.ss__chat__actions__facet__option__checkbox--checked': {
713
+ background: colorPrimary,
714
+ borderColor: colorPrimary,
715
+ color: colorPrimaryText,
716
+ svg: {
717
+ fill: colorPrimaryText,
718
+ stroke: colorPrimaryText,
719
+ },
720
+ },
721
+ },
722
+ '.ss__chat__actions__facet__option__label': {
723
+ fontSize: '14px',
724
+ color: '#333',
725
+ flex: '1 1 auto',
726
+ textAlign: 'left',
727
+ },
728
+ },
729
+ }
730
+ : {
731
+ '.ss__button': {
732
+ width: '100%',
733
+ border: 'none',
734
+ borderRadius: 0,
735
+ boxSizing: 'border-box',
736
+ background: '#fff',
737
+ '&:hover': {
738
+ background: new utilities_1.Colour(colorPrimary).lightenHex(0.95),
739
+ },
740
+ '&.ss__chat__actions__facet__option--selected': {
741
+ fontWeight: 'bold',
742
+ },
743
+ },
744
+ })),
745
+ }, children: (0, jsx_runtime_1.jsx)("div", { className: "ss__chat__actions__facet__options", children: facet.type === 'range-buckets'
746
+ ? facet.values.map(function (option) {
747
+ var _a, _b;
748
+ var rangeOption = option;
749
+ var optionValue = "".concat((_a = rangeOption.low) !== null && _a !== void 0 ? _a : '*', ":").concat((_b = rangeOption.high) !== null && _b !== void 0 ? _b : '*');
750
+ if (multiselectFacets) {
751
+ var isSelected_1 = controller.store.isFacetSelected(facet.field, optionValue);
752
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__facet__option--checkbox", onClick: function () {
753
+ if (isSelected_1) {
754
+ controller.store.removeFacet(facet.field, optionValue);
755
+ }
756
+ else {
757
+ controller.store.addFacet({
758
+ key: facet.field,
759
+ value: optionValue,
760
+ });
761
+ }
762
+ }, children: [(0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat__actions__facet__option__checkbox', {
763
+ 'ss__chat__actions__facet__option__checkbox--checked': isSelected_1,
764
+ }), children: isSelected_1 && (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "check-thin", size: "10px" }) }), (0, jsx_runtime_1.jsx)("span", { className: "ss__chat__actions__facet__option__label", children: rangeOption.label })] }, optionValue));
765
+ }
766
+ return ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: (0, classnames_1.default)({
767
+ 'ss__chat__actions__facet__option--selected': controller.store.isFacetSelected(facet.field, optionValue),
768
+ }), onClick: function () {
769
+ // Non-multiselect: clicking an already-selected value toggles it off.
770
+ // `addFacet` is idempotent against an existing urlManager value, so without
771
+ // the toggle the state wouldn't change, `hasPendingFacetChanges` would stay
772
+ // false, and the params getter would fall through to `general`.
773
+ if (controller.store.isFacetSelected(facet.field, optionValue)) {
774
+ controller.store.removeFacet(facet.field, optionValue);
775
+ }
776
+ else {
777
+ controller.store.addFacet({
778
+ key: facet.field,
779
+ value: optionValue,
780
+ });
781
+ }
782
+ // Force productSearch with the current filter state rather than relying
783
+ // on the params getter's hasPendingFacetChanges promotion — a facet click
784
+ // in the chat is unambiguously a search intent.
785
+ controller.search({
786
+ data: { requestType: 'productSearch', searchFilters: controller.store.searchFilters },
787
+ });
788
+ }, children: rangeOption.label }, optionValue));
789
+ })
790
+ : facet.values.map(function (option) {
791
+ var valueOption = option;
792
+ var optionValue = valueOption.value || valueOption.label;
793
+ if (multiselectFacets) {
794
+ var isSelected_2 = controller.store.isFacetSelected(facet.field, optionValue);
795
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__actions__facet__option--checkbox", onClick: function () {
796
+ if (isSelected_2) {
797
+ controller.store.removeFacet(facet.field, optionValue);
798
+ }
799
+ else {
800
+ controller.store.addFacet({
801
+ key: facet.field,
802
+ value: optionValue,
803
+ });
804
+ }
805
+ }, children: [(0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ss__chat__actions__facet__option__checkbox', {
806
+ 'ss__chat__actions__facet__option__checkbox--checked': isSelected_2,
807
+ }), children: isSelected_2 && (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "check-thin", size: "10px" }) }), (0, jsx_runtime_1.jsx)("span", { className: "ss__chat__actions__facet__option__label", children: valueOption.label })] }, optionValue));
808
+ }
809
+ return ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: (0, classnames_1.default)({
810
+ 'ss__chat__actions__facet__option--selected': controller.store.isFacetSelected(facet.field, optionValue),
811
+ }), onClick: function () {
812
+ // Non-multiselect: clicking an already-selected value toggles it off.
813
+ // `addFacet` is idempotent against an existing urlManager value, so without
814
+ // the toggle the state wouldn't change, `hasPendingFacetChanges` would stay
815
+ // false, and the params getter would fall through to `general`.
816
+ if (controller.store.isFacetSelected(facet.field, optionValue)) {
817
+ controller.store.removeFacet(facet.field, optionValue);
818
+ }
819
+ else {
820
+ controller.store.addFacet({
821
+ key: facet.field,
822
+ value: optionValue,
823
+ });
824
+ }
825
+ // Force productSearch with the current filter state rather than relying
826
+ // on the params getter's hasPendingFacetChanges promotion — a facet click
827
+ // in the chat is unambiguously a search intent.
828
+ controller.search({
829
+ data: { requestType: 'productSearch', searchFilters: controller.store.searchFilters },
830
+ });
831
+ }, children: valueOption.label }, optionValue));
832
+ }) }) }, facet.field) }, idx));
833
+ }) })] }) })), (function () {
834
+ var _a, _b, _c;
835
+ var activeComparisonSearchResults = shouldShowSideChat && (activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) === 'productComparison'
836
+ ? activeMessage.searchResults || []
837
+ : null;
838
+ var showCommittedComparisons = !activeComparisonSearchResults &&
839
+ ((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.committed) &&
840
+ store.currentChat.comparisons.committed.length > 0 &&
841
+ ((activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) === 'user' ||
842
+ (activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) === 'productComparison' ||
843
+ (activeMessage === null || activeMessage === void 0 ? void 0 : activeMessage.messageType) === 'productQuery');
844
+ var visibleAttachments = ((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.attachments.attached.filter(function (item) { return item.state === 'attached' || item.state === 'active' || item.state === 'loading' || item.state === 'error'; })) || [];
845
+ var productAttachments = visibleAttachments.filter(function (item) {
846
+ return item.type === 'product' &&
847
+ item.requestType !== 'productSimilar' &&
848
+ item.requestType !== 'productComparison';
849
+ });
850
+ var imageAttachments = visibleAttachments.filter(function (item) { return item.type === 'image'; });
851
+ var comparisonItems = activeComparisonSearchResults
852
+ ? activeComparisonSearchResults.map(function (result) {
853
+ var _a, _b, _c, _d, _e, _f, _g, _h;
854
+ var d = (result === null || result === void 0 ? void 0 : result.display) || result;
855
+ return {
856
+ id: result === null || result === void 0 ? void 0 : result.id,
857
+ name: ((_b = (_a = d === null || d === void 0 ? void 0 : d.mappings) === null || _a === void 0 ? void 0 : _a.core) === null || _b === void 0 ? void 0 : _b.name) || '',
858
+ imageUrl: ((_d = (_c = d === null || d === void 0 ? void 0 : d.mappings) === null || _c === void 0 ? void 0 : _c.core) === null || _d === void 0 ? void 0 : _d.thumbnailImageUrl) || ((_f = (_e = d === null || d === void 0 ? void 0 : d.mappings) === null || _e === void 0 ? void 0 : _e.core) === null || _f === void 0 ? void 0 : _f.imageUrl) || ((_h = (_g = d === null || d === void 0 ? void 0 : d.mappings) === null || _g === void 0 ? void 0 : _g.core) === null || _h === void 0 ? void 0 : _h.parentImageUrl) || '',
859
+ onClick: function () {
860
+ controller.productQuickView(result);
861
+ if (isMobile)
862
+ setMobileProductInfoOpen(true);
863
+ },
864
+ };
865
+ })
866
+ : showCommittedComparisons
867
+ ? (((_c = store.currentChat) === null || _c === void 0 ? void 0 : _c.comparisons.committed) || []).map(function (comparisonItem) {
868
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
869
+ var d = ((_a = comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result) === null || _a === void 0 ? void 0 : _a.display) || (comparisonItem === null || comparisonItem === void 0 ? void 0 : comparisonItem.result);
870
+ return {
871
+ id: (_b = comparisonItem.result) === null || _b === void 0 ? void 0 : _b.id,
872
+ name: ((_d = (_c = d === null || d === void 0 ? void 0 : d.mappings) === null || _c === void 0 ? void 0 : _c.core) === null || _d === void 0 ? void 0 : _d.name) || '',
873
+ imageUrl: ((_f = (_e = d === null || d === void 0 ? void 0 : d.mappings) === null || _e === void 0 ? void 0 : _e.core) === null || _f === void 0 ? void 0 : _f.thumbnailImageUrl) || ((_h = (_g = d === null || d === void 0 ? void 0 : d.mappings) === null || _g === void 0 ? void 0 : _g.core) === null || _h === void 0 ? void 0 : _h.imageUrl) || ((_k = (_j = d === null || d === void 0 ? void 0 : d.mappings) === null || _j === void 0 ? void 0 : _j.core) === null || _k === void 0 ? void 0 : _k.parentImageUrl) || '',
874
+ onClick: function () {
875
+ controller.productQuickView(comparisonItem.result);
876
+ if (isMobile)
877
+ setMobileProductInfoOpen(true);
878
+ },
879
+ };
880
+ })
881
+ : [];
882
+ var productItems = productAttachments.map(function (item) {
883
+ var remove = function () {
884
+ var _a, _b;
885
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.remove(item.id);
886
+ setMobileProductInfoOpen(false);
887
+ (_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.dismissSideChat();
888
+ };
889
+ return {
890
+ id: item.id,
891
+ name: item.name || '',
892
+ imageUrl: item.thumbnailUrl || '',
893
+ onClick: remove,
894
+ onRemove: remove,
895
+ };
896
+ });
897
+ var imageItems = imageAttachments.map(function (item) {
898
+ var _a;
899
+ return ({
900
+ id: item.id,
901
+ name: item.fileName || 'Image',
902
+ imageUrl: item.base64 || item.thumbnailUrl || '',
903
+ isLoading: item.state === 'loading',
904
+ hasError: !!item.error,
905
+ errorMessage: (_a = item.error) === null || _a === void 0 ? void 0 : _a.message,
906
+ onRemove: function () { var _a; return (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.remove(item.id); },
907
+ });
908
+ });
909
+ var productTitle = productItems.length > 1 ? 'Compare these products' : 'Ask about this product';
910
+ var hasImageError = imageItems.some(function (item) { return item.hasError; });
911
+ var imageTitle = imageItems.length > 0 && !hasImageError ? 'Find products similar to this image:' : '';
912
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [comparisonItems.length > 0 && ((0, jsx_runtime_1.jsx)(ChatAttachmentContext_1.ChatAttachmentContext, __assign({}, subProps.attachmentContext, { title: 'Compare these products', items: comparisonItems, onClose: function () {
913
+ var _a, _b;
914
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.resetCommitted();
915
+ (_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.dismissSideChat();
916
+ } }))), productItems.length > 0 && ((0, jsx_runtime_1.jsx)(ChatAttachmentContext_1.ChatAttachmentContext, __assign({}, subProps.attachmentContext, { title: productTitle, items: productItems, onClose: function () {
917
+ var _a;
918
+ productAttachments.forEach(function (item) { var _a; return (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.remove(item.id); });
919
+ setMobileProductInfoOpen(false);
920
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.dismissSideChat();
921
+ } }))), imageItems.length > 0 && (0, jsx_runtime_1.jsx)(ChatAttachmentContext_1.ChatAttachmentContext, __assign({}, subProps.attachmentContext, { title: imageTitle, items: imageItems }))] }));
922
+ })(), (function () {
923
+ var _a;
924
+ var drift = (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.topicDrift;
925
+ if (!drift)
926
+ return null;
927
+ // recommendedAction is the prescription; driftType is the diagnosis.
928
+ // Hide the banner when the backend says to keep flowing, or when no drift was detected.
929
+ if (drift.recommendedAction === 'CONTINUE' || drift.driftType === 'NO_DRIFT')
930
+ return null;
931
+ var isScopeRedirect = drift.recommendedAction === 'SCOPE_REDIRECT';
932
+ var primaryText = isScopeRedirect ? "I'm here to help with shopping" : 'Looking for something new?';
933
+ var secondaryText = isScopeRedirect
934
+ ? 'Try asking about products, comparisons, or recommendations'
935
+ : 'Start a fresh session for better assistance, or keep going in this one?';
936
+ var buttonText = isScopeRedirect ? '' : 'New Session';
937
+ return ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift', children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "info", size: "18px", className: 'ss__chat__topic-drift__icon--info' }), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__topic-drift__text', children: [(0, jsx_runtime_1.jsx)("span", { children: primaryText }), (0, jsx_runtime_1.jsx)("span", { children: secondaryText })] }), buttonText && ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__topic-drift__button', onClick: function () {
938
+ var _a, _b, _c;
939
+ if (isScopeRedirect) {
940
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.dismissTopicDrift();
941
+ return;
942
+ }
943
+ // Capture image attachments from the current chat before handleTopicDrift /
944
+ // createChat tear down the conversation — an imageSearch that drifted needs
945
+ // the same image attached to the carried-over message in the new session,
946
+ // otherwise params would fall back to a `general` request without the image.
947
+ var previousImageAttachments = (((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.attachments.attached) || [])
948
+ .filter(function (item) { return item.type === 'image' && item.state !== 'error'; })
949
+ .map(function (item) {
950
+ var img = item;
951
+ return {
952
+ type: 'image',
953
+ base64: img.base64,
954
+ fileName: img.fileName,
955
+ imageId: img.imageId,
956
+ imageUrl: img.imageUrl,
957
+ thumbnailUrl: img.thumbnailUrl,
958
+ // Already uploaded — skip the 'loading' default state.
959
+ state: 'attached',
960
+ };
961
+ });
962
+ var messageText = (_c = store.currentChat) === null || _c === void 0 ? void 0 : _c.handleTopicDrift();
963
+ if (messageText) {
964
+ controller.store.createChat();
965
+ previousImageAttachments.forEach(function (cfg) {
966
+ var _a;
967
+ (_a = controller.store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.add(cfg);
968
+ });
969
+ controller.search({ data: { message: messageText } });
970
+ }
971
+ }, children: buttonText })), (0, jsx_runtime_1.jsx)("span", { onClick: function () {
972
+ var _a;
973
+ (_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.dismissTopicDrift();
974
+ }, children: (0, jsx_runtime_1.jsx)(__1.Icon, { icon: "close-thin", size: "14px", className: 'ss__chat__topic-drift__icon--close' }) })] }));
975
+ })(), (0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__input__input', children: [(0, jsx_runtime_1.jsx)("input", { type: "text", name: "ss-chat-input", disabled: store.loading || store.blocked || ((_y = store.currentChat) === null || _y === void 0 ? void 0 : _y.sessionLimitReached), placeholder: (function () {
976
+ var _a, _b, _c;
977
+ var comparedCount = ((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.comparisons.compared.length) || 0;
978
+ var committedCount = ((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.comparisons.committed.length) || 0;
979
+ var attached = ((_c = store.currentChat) === null || _c === void 0 ? void 0 : _c.attachments.attached.filter(function (item) { return item.state === 'attached' || item.state === 'active'; })) || [];
980
+ var attachedProducts = attached.filter(function (item) { return item.type === 'product'; });
981
+ var attachedImages = attached.filter(function (item) { return item.type === 'image' && !item.error; });
982
+ if (attachedProducts.length === 1) {
983
+ return 'Ask about this product...';
984
+ }
985
+ if (comparedCount > 1 || attachedProducts.length > 1) {
986
+ return 'What would you like to compare?';
987
+ }
988
+ if (committedCount > 0) {
989
+ return 'Ask about the compared products...';
990
+ }
991
+ if (attachedImages.length > 0) {
992
+ return 'Ask about this image...';
993
+ }
994
+ if (comparedCount === 1) {
995
+ return 'Add another product to compare...';
996
+ }
997
+ return 'Type your message...';
998
+ })(), onInput: function (e) { return controller.handlers.input.input(e); }, onKeyDown: function (e) {
999
+ controller.handlers.input.enterKey(e);
1000
+ if (e.keyCode === 13 && isMobile && mobileProductInfoOpen) {
1001
+ setMobileProductInfoOpen(false);
1002
+ }
1003
+ }, value: controller.store.inputValue }), store.features.imageSearch.enabled && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__upload-button', disabled: store.loading || store.blocked || ((_z = store.currentChat) === null || _z === void 0 ? void 0 : _z.sessionLimitReached), onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, icon: { icon: 'image', title: 'Upload Image' } }), (0, jsx_runtime_1.jsx)("input", { ref: fileInputRef, onChange: function (e) { return __awaiter(void 0, void 0, void 0, function () {
1004
+ return __generator(this, function (_a) {
1005
+ switch (_a.label) {
1006
+ case 0: return [4 /*yield*/, controller.upload(e.target.files)];
1007
+ case 1:
1008
+ _a.sent();
1009
+ // reset value
1010
+ e.target.value = '';
1011
+ return [2 /*return*/];
1012
+ }
1013
+ });
1014
+ }); }, type: "file", accept: "image/*", className: "ss__chat__input__input__file" })] }))] }), (0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__input__actions', children: (function () {
1015
+ var _a, _b;
1016
+ var hasImageAttachment = (((_a = store.currentChat) === null || _a === void 0 ? void 0 : _a.attachments.attached) || []).some(function (item) { return item.type === 'image' && !item.error; });
1017
+ var messageEmpty = !controller.store.inputValue.trim();
1018
+ var sendDisabled = store.blocked || ((_b = store.currentChat) === null || _b === void 0 ? void 0 : _b.sessionLimitReached) || (hasImageAttachment && messageEmpty) || messageEmpty;
1019
+ return ((0, jsx_runtime_1.jsx)(Button_1.Button, { className: "ss__chat__send-button", icon: { icon: 'send', title: 'Send Message' }, disabled: sendDisabled, onClick: function () {
1020
+ if (sendDisabled)
1021
+ return;
1022
+ controller.search();
1023
+ if (isMobile && mobileProductInfoOpen) {
1024
+ setMobileProductInfoOpen(false);
1025
+ }
1026
+ } }));
1027
+ })() })] }), (0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__disclaimer', children: (0, jsx_runtime_1.jsxs)("i", { children: ["Powered by Athos Commerce. AI-powered assistant. It sometimes make mistakes. Avoid sharing personal data.", ' ', (0, jsx_runtime_1.jsx)("a", { href: "https://athoscommerce.com/legal/privacy-policy/", target: "_blank", rel: "noopener noreferrer", children: "Privacy Policy" })] }) }), isDraggingFile && ((0, jsx_runtime_1.jsxs)("div", { className: "ss__chat__content__footer__drop-overlay", children: [(0, jsx_runtime_1.jsx)(__1.Icon, { icon: "image", size: "24px" }), (0, jsx_runtime_1.jsx)("span", { children: "Drop image to upload" })] }))] }))) : ((0, jsx_runtime_1.jsxs)("div", { className: 'ss__chat__expired', children: [(0, jsx_runtime_1.jsx)("div", { className: 'ss__chat__expired__message', children: "This chat is expired. Please start a new chat." }), (0, jsx_runtime_1.jsx)(Button_1.Button, { className: 'ss__chat__expired__button', onClick: function () {
1028
+ controller.store.createChat();
1029
+ }, children: "New Session" })] }))] })] })) : null] })), (0, jsx_runtime_1.jsx)(__1.Overlay, { style: { zIndex: 1001 }, color: "transparent", active: store.open, onClick: function () { return controller.handlers.button.click(); } })] }) }));
1030
+ });