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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) 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/Dropdown/Dropdown.d.ts +0 -4
  4. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  5. package/dist/cjs/components/src/components/Atoms/Dropdown/Dropdown.js +14 -51
  6. package/dist/cjs/components/src/components/Atoms/FormattedNumber/FormattedNumber.d.ts +3 -1
  7. package/dist/cjs/components/src/components/Atoms/FormattedNumber/FormattedNumber.d.ts.map +1 -1
  8. package/dist/cjs/components/src/components/Atoms/FormattedNumber/FormattedNumber.js +4 -3
  9. package/dist/cjs/components/src/components/Atoms/Icon/Icon.d.ts +3 -1
  10. package/dist/cjs/components/src/components/Atoms/Icon/Icon.d.ts.map +1 -1
  11. package/dist/cjs/components/src/components/Atoms/Icon/Icon.js +4 -3
  12. package/dist/cjs/components/src/components/Atoms/Icon/paths.d.ts +0 -21
  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 +0 -21
  15. package/dist/cjs/components/src/components/Atoms/Image/Image.d.ts +3 -1
  16. package/dist/cjs/components/src/components/Atoms/Image/Image.d.ts.map +1 -1
  17. package/dist/cjs/components/src/components/Atoms/Image/Image.js +4 -4
  18. package/dist/cjs/components/src/components/Atoms/Overlay/Overlay.d.ts +3 -1
  19. package/dist/cjs/components/src/components/Atoms/Overlay/Overlay.d.ts.map +1 -1
  20. package/dist/cjs/components/src/components/Atoms/Overlay/Overlay.js +4 -3
  21. package/dist/cjs/components/src/components/Atoms/Price/Price.d.ts +4 -1
  22. package/dist/cjs/components/src/components/Atoms/Price/Price.d.ts.map +1 -1
  23. package/dist/cjs/components/src/components/Atoms/Price/Price.js +15 -12
  24. package/dist/cjs/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +3 -3
  25. package/dist/cjs/components/src/components/Molecules/Grid/Grid.d.ts +3 -1
  26. package/dist/cjs/components/src/components/Molecules/Grid/Grid.d.ts.map +1 -1
  27. package/dist/cjs/components/src/components/Molecules/Grid/Grid.js +4 -3
  28. package/dist/cjs/components/src/components/Molecules/List/List.d.ts +3 -1
  29. package/dist/cjs/components/src/components/Molecules/List/List.d.ts.map +1 -1
  30. package/dist/cjs/components/src/components/Molecules/List/List.js +4 -3
  31. package/dist/cjs/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +2 -2
  32. package/dist/cjs/components/src/components/Molecules/OverlayResult/OverlayResult.d.ts.map +1 -1
  33. package/dist/cjs/components/src/components/Molecules/OverlayResult/OverlayResult.js +6 -5
  34. package/dist/cjs/components/src/components/Molecules/RadioList/RadioList.d.ts +3 -1
  35. package/dist/cjs/components/src/components/Molecules/RadioList/RadioList.d.ts.map +1 -1
  36. package/dist/cjs/components/src/components/Molecules/RadioList/RadioList.js +4 -3
  37. package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts +3 -5
  38. package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  39. package/dist/cjs/components/src/components/Molecules/Result/Result.js +10 -15
  40. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts +0 -2
  41. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  42. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +2 -19
  43. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.d.ts +1 -0
  44. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  45. package/dist/cjs/components/src/components/Molecules/Slideout/Slideout.js +30 -25
  46. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.d.ts +3 -1
  47. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  48. package/dist/cjs/components/src/components/Molecules/Slideshow/Slideshow.js +5 -8
  49. package/dist/cjs/components/src/components/Molecules/Swatches/Swatches.d.ts +3 -1
  50. package/dist/cjs/components/src/components/Molecules/Swatches/Swatches.d.ts.map +1 -1
  51. package/dist/cjs/components/src/components/Molecules/Swatches/Swatches.js +4 -3
  52. package/dist/cjs/components/src/components/Organisms/Facet/Facet.js +1 -2
  53. package/dist/cjs/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.d.ts +7 -2
  54. package/dist/cjs/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.d.ts.map +1 -1
  55. package/dist/cjs/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +70 -45
  56. package/dist/cjs/components/src/components/Organisms/Layout/Layout.d.ts +1 -1
  57. package/dist/cjs/components/src/components/Organisms/Layout/Layout.d.ts.map +1 -1
  58. package/dist/cjs/components/src/components/Organisms/Layout/Layout.js +1 -14
  59. package/dist/cjs/components/src/components/Organisms/Results/Results.d.ts.map +1 -1
  60. package/dist/cjs/components/src/components/Organisms/Results/Results.js +12 -2
  61. package/dist/cjs/components/src/components/Organisms/Toolbar/Toolbar.d.ts +1 -1
  62. package/dist/cjs/components/src/components/Organisms/Toolbar/Toolbar.d.ts.map +1 -1
  63. package/dist/cjs/components/src/components/Organisms/Toolbar/Toolbar.js +3 -2
  64. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts +1 -1
  65. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  66. package/dist/cjs/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +1 -3
  67. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts +1 -1
  68. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  69. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +1 -3
  70. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts +1 -1
  71. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  72. package/dist/cjs/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +1 -3
  73. package/dist/cjs/components/src/components/Templates/Recommendation/Recommendation.d.ts.map +1 -1
  74. package/dist/cjs/components/src/components/Templates/Recommendation/Recommendation.js +10 -0
  75. package/dist/cjs/components/src/components/Templates/RecommendationBundle/BundleCTA.d.ts +1 -1
  76. package/dist/cjs/components/src/components/Templates/RecommendationBundle/BundleCTA.d.ts.map +1 -1
  77. package/dist/cjs/components/src/components/Templates/RecommendationBundle/BundleCTA.js +48 -5
  78. package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts +1 -1
  79. package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
  80. package/dist/cjs/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +82 -7
  81. package/dist/cjs/components/src/components/Templates/RecommendationEmail/RecommendationEmail.d.ts +0 -2
  82. package/dist/cjs/components/src/components/Templates/RecommendationEmail/RecommendationEmail.d.ts.map +1 -1
  83. package/dist/cjs/components/src/components/Templates/RecommendationEmail/RecommendationEmail.js +22 -3
  84. package/dist/cjs/components/src/components/Templates/RecommendationGrid/RecommendationGrid.d.ts.map +1 -1
  85. package/dist/cjs/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +10 -1
  86. package/dist/cjs/components/src/components/Templates/Search/Search.d.ts +2 -1
  87. package/dist/cjs/components/src/components/Templates/Search/Search.d.ts.map +1 -1
  88. package/dist/cjs/components/src/components/Templates/Search/Search.js +52 -16
  89. package/dist/cjs/components/src/hooks/useA11y.js +1 -1
  90. package/dist/cjs/components/src/index.d.ts +0 -12
  91. package/dist/cjs/components/src/index.d.ts.map +1 -1
  92. package/dist/cjs/components/src/index.js +1 -14
  93. package/dist/cjs/components/src/providers/langComponents.d.ts +4 -2
  94. package/dist/cjs/components/src/providers/langComponents.d.ts.map +1 -1
  95. package/dist/cjs/components/src/providers/themeComponents.d.ts +1 -11
  96. package/dist/cjs/components/src/providers/themeComponents.d.ts.map +1 -1
  97. package/dist/cjs/components/src/providers/themeComponents.js +0 -1
  98. package/dist/cjs/components/src/providers/withTracking.d.ts +2 -2
  99. package/dist/cjs/components/src/providers/withTracking.d.ts.map +1 -1
  100. package/dist/cjs/components/src/setupTests.js +0 -17
  101. package/dist/cjs/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  102. package/dist/cjs/components/src/themes/base/components/templates/index.js +4 -5
  103. package/dist/cjs/components/src/themes/base/components/templates/searchCollapsible.d.ts.map +1 -1
  104. package/dist/cjs/components/src/themes/base/components/templates/searchCollapsible.js +5 -7
  105. package/dist/cjs/components/src/themes/bocachica/components/organisms/index.d.ts.map +1 -1
  106. package/dist/cjs/components/src/themes/bocachica/components/organisms/index.js +4 -5
  107. package/dist/cjs/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  108. package/dist/cjs/components/src/themes/bocachica/components/templates/index.js +4 -5
  109. package/dist/cjs/components/src/themes/bocachica/components/templates/searchCollapsible.js +1 -1
  110. package/dist/cjs/components/src/themes/pike/components/organisms/facetsHorizontal.d.ts.map +1 -1
  111. package/dist/cjs/components/src/themes/pike/components/organisms/facetsHorizontal.js +5 -8
  112. package/dist/cjs/components/src/themes/pike/components/organisms/index.d.ts.map +1 -1
  113. package/dist/cjs/components/src/themes/pike/components/organisms/index.js +4 -5
  114. package/dist/cjs/components/src/themes/pike/components/organisms/toolbar.js +1 -1
  115. package/dist/cjs/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  116. package/dist/cjs/components/src/themes/pike/components/templates/index.js +4 -5
  117. package/dist/cjs/components/src/themes/pike/components/templates/search.d.ts.map +1 -1
  118. package/dist/cjs/components/src/themes/pike/components/templates/search.js +3 -4
  119. package/dist/cjs/components/src/themes/pike/components/templates/searchHorizontal.d.ts.map +1 -1
  120. package/dist/cjs/components/src/themes/pike/components/templates/searchHorizontal.js +3 -7
  121. package/dist/cjs/components/src/themes/snapnco/components/organisms/index.d.ts.map +1 -1
  122. package/dist/cjs/components/src/themes/snapnco/components/organisms/index.js +4 -5
  123. package/dist/cjs/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  124. package/dist/cjs/components/src/themes/snapnco/components/templates/index.js +4 -5
  125. package/dist/cjs/components/src/themes/snapnco/components/templates/searchCollapsible.js +1 -1
  126. package/dist/cjs/components/src/themes/snappy/components/organisms/facetsHorizontal.js +1 -1
  127. package/dist/cjs/components/src/themes/snappy/components/organisms/index.d.ts.map +1 -1
  128. package/dist/cjs/components/src/themes/snappy/components/organisms/index.js +4 -5
  129. package/dist/cjs/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  130. package/dist/cjs/components/src/themes/snappy/components/templates/index.js +4 -5
  131. package/dist/cjs/components/src/themes/snappy/components/templates/searchCollapsible.js +1 -1
  132. package/dist/cjs/components/src/themes/themeComponents/searchCollapsible.js +2 -2
  133. package/dist/cjs/components/src/themes/themeComponents/searchHorizontal.js +2 -2
  134. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts +0 -11
  135. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  136. package/dist/cjs/components/src/utilities/Colour/Colour.js +0 -32
  137. package/dist/cjs/components/src/utilities/snapify.d.ts +2 -3
  138. package/dist/cjs/components/src/utilities/snapify.d.ts.map +1 -1
  139. package/dist/cjs/components/src/utilities/snapify.js +0 -48
  140. package/dist/cjs/src/Snap.d.ts +1 -2
  141. package/dist/cjs/src/Snap.d.ts.map +1 -1
  142. package/dist/cjs/src/Snap.js +24 -134
  143. package/dist/cjs/src/Templates/SnapTemplates.d.ts +2 -2
  144. package/dist/cjs/src/Templates/SnapTemplates.d.ts.map +1 -1
  145. package/dist/cjs/src/Templates/SnapTemplates.js +77 -77
  146. package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts +2 -4
  147. package/dist/cjs/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  148. package/dist/cjs/src/Templates/Stores/LibraryStore.js +2 -21
  149. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts +7 -19
  150. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  151. package/dist/cjs/src/Templates/Stores/TemplateStore.js +1 -2
  152. package/dist/cjs/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  153. package/dist/cjs/src/Templates/Stores/library/languages/es.js +11 -19
  154. package/dist/cjs/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  155. package/dist/cjs/src/Templates/Stores/library/languages/fr.js +16 -24
  156. package/dist/cjs/src/Templates/Stores/library/plugins/shopify/pluginMarkets.d.ts +2 -0
  157. package/dist/cjs/src/Templates/Stores/library/plugins/shopify/pluginMarkets.d.ts.map +1 -0
  158. package/dist/cjs/src/Templates/Stores/library/plugins/shopify/pluginMarkets.js +5 -0
  159. package/dist/cjs/src/setupEvents.d.ts +0 -13
  160. package/dist/cjs/src/setupEvents.d.ts.map +1 -1
  161. package/dist/cjs/src/setupEvents.js +0 -87
  162. package/dist/cjs/src/types.d.ts +3 -15
  163. package/dist/cjs/src/types.d.ts.map +1 -1
  164. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts +1 -1
  165. package/dist/esm/components/src/components/Atoms/Button/Button.d.ts.map +1 -1
  166. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts +0 -4
  167. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.d.ts.map +1 -1
  168. package/dist/esm/components/src/components/Atoms/Dropdown/Dropdown.js +11 -53
  169. package/dist/esm/components/src/components/Atoms/FormattedNumber/FormattedNumber.d.ts +3 -1
  170. package/dist/esm/components/src/components/Atoms/FormattedNumber/FormattedNumber.d.ts.map +1 -1
  171. package/dist/esm/components/src/components/Atoms/FormattedNumber/FormattedNumber.js +3 -2
  172. package/dist/esm/components/src/components/Atoms/Icon/Icon.d.ts +3 -1
  173. package/dist/esm/components/src/components/Atoms/Icon/Icon.d.ts.map +1 -1
  174. package/dist/esm/components/src/components/Atoms/Icon/Icon.js +3 -2
  175. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts +0 -21
  176. package/dist/esm/components/src/components/Atoms/Icon/paths.d.ts.map +1 -1
  177. package/dist/esm/components/src/components/Atoms/Icon/paths.js +0 -21
  178. package/dist/esm/components/src/components/Atoms/Image/Image.d.ts +3 -1
  179. package/dist/esm/components/src/components/Atoms/Image/Image.d.ts.map +1 -1
  180. package/dist/esm/components/src/components/Atoms/Image/Image.js +3 -2
  181. package/dist/esm/components/src/components/Atoms/Overlay/Overlay.d.ts +3 -1
  182. package/dist/esm/components/src/components/Atoms/Overlay/Overlay.d.ts.map +1 -1
  183. package/dist/esm/components/src/components/Atoms/Overlay/Overlay.js +3 -2
  184. package/dist/esm/components/src/components/Atoms/Price/Price.d.ts +4 -1
  185. package/dist/esm/components/src/components/Atoms/Price/Price.d.ts.map +1 -1
  186. package/dist/esm/components/src/components/Atoms/Price/Price.js +14 -11
  187. package/dist/esm/components/src/components/Molecules/CalloutBadge/CalloutBadge.js +1 -1
  188. package/dist/esm/components/src/components/Molecules/Grid/Grid.d.ts +3 -1
  189. package/dist/esm/components/src/components/Molecules/Grid/Grid.d.ts.map +1 -1
  190. package/dist/esm/components/src/components/Molecules/Grid/Grid.js +3 -2
  191. package/dist/esm/components/src/components/Molecules/List/List.d.ts +3 -1
  192. package/dist/esm/components/src/components/Molecules/List/List.d.ts.map +1 -1
  193. package/dist/esm/components/src/components/Molecules/List/List.js +3 -2
  194. package/dist/esm/components/src/components/Molecules/OverlayBadge/OverlayBadge.js +1 -1
  195. package/dist/esm/components/src/components/Molecules/OverlayResult/OverlayResult.d.ts.map +1 -1
  196. package/dist/esm/components/src/components/Molecules/OverlayResult/OverlayResult.js +2 -1
  197. package/dist/esm/components/src/components/Molecules/RadioList/RadioList.d.ts +3 -1
  198. package/dist/esm/components/src/components/Molecules/RadioList/RadioList.d.ts.map +1 -1
  199. package/dist/esm/components/src/components/Molecules/RadioList/RadioList.js +3 -2
  200. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts +3 -5
  201. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  202. package/dist/esm/components/src/components/Molecules/Result/Result.js +8 -12
  203. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +0 -2
  204. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  205. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +2 -35
  206. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts +1 -0
  207. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.d.ts.map +1 -1
  208. package/dist/esm/components/src/components/Molecules/Slideout/Slideout.js +31 -26
  209. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts +3 -1
  210. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.d.ts.map +1 -1
  211. package/dist/esm/components/src/components/Molecules/Slideshow/Slideshow.js +4 -7
  212. package/dist/esm/components/src/components/Molecules/Swatches/Swatches.d.ts +3 -1
  213. package/dist/esm/components/src/components/Molecules/Swatches/Swatches.d.ts.map +1 -1
  214. package/dist/esm/components/src/components/Molecules/Swatches/Swatches.js +3 -2
  215. package/dist/esm/components/src/components/Organisms/Facet/Facet.js +1 -1
  216. package/dist/esm/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.d.ts +7 -2
  217. package/dist/esm/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.d.ts.map +1 -1
  218. package/dist/esm/components/src/components/Organisms/FacetsHorizontal/FacetsHorizontal.js +77 -43
  219. package/dist/esm/components/src/components/Organisms/Layout/Layout.d.ts +1 -1
  220. package/dist/esm/components/src/components/Organisms/Layout/Layout.d.ts.map +1 -1
  221. package/dist/esm/components/src/components/Organisms/Layout/Layout.js +1 -18
  222. package/dist/esm/components/src/components/Organisms/Results/Results.d.ts.map +1 -1
  223. package/dist/esm/components/src/components/Organisms/Results/Results.js +12 -2
  224. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.d.ts +1 -1
  225. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.d.ts.map +1 -1
  226. package/dist/esm/components/src/components/Organisms/Toolbar/Toolbar.js +2 -2
  227. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts +1 -1
  228. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.d.ts.map +1 -1
  229. package/dist/esm/components/src/components/Templates/AutocompleteFixed/AutocompleteFixed.js +1 -4
  230. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts +1 -1
  231. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  232. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +1 -4
  233. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts +1 -1
  234. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.d.ts.map +1 -1
  235. package/dist/esm/components/src/components/Templates/AutocompleteSlideout/AutocompleteSlideout.js +1 -4
  236. package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.d.ts.map +1 -1
  237. package/dist/esm/components/src/components/Templates/Recommendation/Recommendation.js +10 -0
  238. package/dist/esm/components/src/components/Templates/RecommendationBundle/BundleCTA.d.ts +1 -1
  239. package/dist/esm/components/src/components/Templates/RecommendationBundle/BundleCTA.d.ts.map +1 -1
  240. package/dist/esm/components/src/components/Templates/RecommendationBundle/BundleCTA.js +2 -2
  241. package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts +1 -1
  242. package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.d.ts.map +1 -1
  243. package/dist/esm/components/src/components/Templates/RecommendationBundle/RecommendationBundle.js +23 -4
  244. package/dist/esm/components/src/components/Templates/RecommendationEmail/RecommendationEmail.d.ts +0 -2
  245. package/dist/esm/components/src/components/Templates/RecommendationEmail/RecommendationEmail.d.ts.map +1 -1
  246. package/dist/esm/components/src/components/Templates/RecommendationEmail/RecommendationEmail.js +16 -3
  247. package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.d.ts.map +1 -1
  248. package/dist/esm/components/src/components/Templates/RecommendationGrid/RecommendationGrid.js +10 -1
  249. package/dist/esm/components/src/components/Templates/Search/Search.d.ts +2 -1
  250. package/dist/esm/components/src/components/Templates/Search/Search.d.ts.map +1 -1
  251. package/dist/esm/components/src/components/Templates/Search/Search.js +53 -11
  252. package/dist/esm/components/src/hooks/useA11y.js +1 -1
  253. package/dist/esm/components/src/index.d.ts +0 -12
  254. package/dist/esm/components/src/index.d.ts.map +1 -1
  255. package/dist/esm/components/src/index.js +0 -12
  256. package/dist/esm/components/src/providers/langComponents.d.ts +4 -2
  257. package/dist/esm/components/src/providers/langComponents.d.ts.map +1 -1
  258. package/dist/esm/components/src/providers/themeComponents.d.ts +1 -11
  259. package/dist/esm/components/src/providers/themeComponents.d.ts.map +1 -1
  260. package/dist/esm/components/src/providers/themeComponents.js +0 -1
  261. package/dist/esm/components/src/providers/withTracking.d.ts +2 -2
  262. package/dist/esm/components/src/providers/withTracking.d.ts.map +1 -1
  263. package/dist/esm/components/src/setupTests.js +0 -14
  264. package/dist/esm/components/src/themes/base/components/templates/index.d.ts.map +1 -1
  265. package/dist/esm/components/src/themes/base/components/templates/index.js +0 -5
  266. package/dist/esm/components/src/themes/base/components/templates/searchCollapsible.d.ts.map +1 -1
  267. package/dist/esm/components/src/themes/base/components/templates/searchCollapsible.js +5 -7
  268. package/dist/esm/components/src/themes/bocachica/components/organisms/index.d.ts.map +1 -1
  269. package/dist/esm/components/src/themes/bocachica/components/organisms/index.js +0 -5
  270. package/dist/esm/components/src/themes/bocachica/components/templates/index.d.ts.map +1 -1
  271. package/dist/esm/components/src/themes/bocachica/components/templates/index.js +0 -5
  272. package/dist/esm/components/src/themes/bocachica/components/templates/searchCollapsible.js +1 -1
  273. package/dist/esm/components/src/themes/pike/components/organisms/facetsHorizontal.d.ts.map +1 -1
  274. package/dist/esm/components/src/themes/pike/components/organisms/facetsHorizontal.js +5 -8
  275. package/dist/esm/components/src/themes/pike/components/organisms/index.d.ts.map +1 -1
  276. package/dist/esm/components/src/themes/pike/components/organisms/index.js +0 -5
  277. package/dist/esm/components/src/themes/pike/components/organisms/toolbar.js +1 -1
  278. package/dist/esm/components/src/themes/pike/components/templates/index.d.ts.map +1 -1
  279. package/dist/esm/components/src/themes/pike/components/templates/index.js +0 -5
  280. package/dist/esm/components/src/themes/pike/components/templates/search.d.ts.map +1 -1
  281. package/dist/esm/components/src/themes/pike/components/templates/search.js +3 -4
  282. package/dist/esm/components/src/themes/pike/components/templates/searchHorizontal.d.ts.map +1 -1
  283. package/dist/esm/components/src/themes/pike/components/templates/searchHorizontal.js +3 -7
  284. package/dist/esm/components/src/themes/snapnco/components/organisms/index.d.ts.map +1 -1
  285. package/dist/esm/components/src/themes/snapnco/components/organisms/index.js +0 -5
  286. package/dist/esm/components/src/themes/snapnco/components/templates/index.d.ts.map +1 -1
  287. package/dist/esm/components/src/themes/snapnco/components/templates/index.js +0 -5
  288. package/dist/esm/components/src/themes/snapnco/components/templates/searchCollapsible.js +1 -1
  289. package/dist/esm/components/src/themes/snappy/components/organisms/facetsHorizontal.js +1 -1
  290. package/dist/esm/components/src/themes/snappy/components/organisms/index.d.ts.map +1 -1
  291. package/dist/esm/components/src/themes/snappy/components/organisms/index.js +0 -5
  292. package/dist/esm/components/src/themes/snappy/components/templates/index.d.ts.map +1 -1
  293. package/dist/esm/components/src/themes/snappy/components/templates/index.js +0 -5
  294. package/dist/esm/components/src/themes/snappy/components/templates/searchCollapsible.js +1 -1
  295. package/dist/esm/components/src/themes/themeComponents/searchCollapsible.js +2 -2
  296. package/dist/esm/components/src/themes/themeComponents/searchHorizontal.js +2 -2
  297. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +0 -11
  298. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  299. package/dist/esm/components/src/utilities/Colour/Colour.js +0 -30
  300. package/dist/esm/components/src/utilities/snapify.d.ts +2 -3
  301. package/dist/esm/components/src/utilities/snapify.d.ts.map +1 -1
  302. package/dist/esm/components/src/utilities/snapify.js +2 -29
  303. package/dist/esm/src/Snap.d.ts +1 -2
  304. package/dist/esm/src/Snap.d.ts.map +1 -1
  305. package/dist/esm/src/Snap.js +0 -72
  306. package/dist/esm/src/Templates/SnapTemplates.d.ts +2 -2
  307. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  308. package/dist/esm/src/Templates/SnapTemplates.js +64 -60
  309. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts +2 -4
  310. package/dist/esm/src/Templates/Stores/LibraryStore.d.ts.map +1 -1
  311. package/dist/esm/src/Templates/Stores/LibraryStore.js +2 -8
  312. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +7 -19
  313. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  314. package/dist/esm/src/Templates/Stores/TemplateStore.js +1 -2
  315. package/dist/esm/src/Templates/Stores/library/languages/es.d.ts.map +1 -1
  316. package/dist/esm/src/Templates/Stores/library/languages/es.js +11 -19
  317. package/dist/esm/src/Templates/Stores/library/languages/fr.d.ts.map +1 -1
  318. package/dist/esm/src/Templates/Stores/library/languages/fr.js +16 -24
  319. package/dist/esm/src/Templates/Stores/library/plugins/shopify/pluginMarkets.d.ts +2 -0
  320. package/dist/esm/src/Templates/Stores/library/plugins/shopify/pluginMarkets.d.ts.map +1 -0
  321. package/dist/esm/src/Templates/Stores/library/plugins/shopify/pluginMarkets.js +1 -0
  322. package/dist/esm/src/setupEvents.d.ts +0 -13
  323. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  324. package/dist/esm/src/setupEvents.js +0 -40
  325. package/dist/esm/src/types.d.ts +3 -15
  326. package/dist/esm/src/types.d.ts.map +1 -1
  327. package/package.json +12 -14
  328. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +0 -7
  329. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +0 -1
  330. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +0 -85
  331. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +0 -2
  332. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +0 -1
  333. package/dist/cjs/components/src/components/Atoms/ChatLoadingIndicator/index.js +0 -17
  334. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +0 -20
  335. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +0 -1
  336. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +0 -187
  337. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +0 -2
  338. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +0 -1
  339. package/dist/cjs/components/src/components/Molecules/ChatAttachmentContext/index.js +0 -17
  340. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +0 -18
  341. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +0 -1
  342. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +0 -154
  343. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +0 -2
  344. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +0 -1
  345. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/index.js +0 -17
  346. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +0 -21
  347. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +0 -1
  348. package/dist/cjs/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +0 -211
  349. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.d.ts +0 -2
  350. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.d.ts.map +0 -1
  351. package/dist/cjs/components/src/components/Molecules/ChatMessageText/index.js +0 -17
  352. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +0 -16
  353. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +0 -1
  354. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +0 -255
  355. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.d.ts +0 -2
  356. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +0 -1
  357. package/dist/cjs/components/src/components/Molecules/ChatMessageUser/index.js +0 -17
  358. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +0 -17
  359. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +0 -1
  360. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +0 -143
  361. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +0 -2
  362. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +0 -1
  363. package/dist/cjs/components/src/components/Molecules/ChatProductComparisonMessage/index.js +0 -17
  364. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +0 -25
  365. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +0 -1
  366. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +0 -487
  367. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +0 -2
  368. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +0 -1
  369. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/index.js +0 -17
  370. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.d.ts +0 -11
  371. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +0 -1
  372. package/dist/cjs/components/src/components/Molecules/ChatResult/ChatResult.js +0 -200
  373. package/dist/cjs/components/src/components/Molecules/ChatResult/index.d.ts +0 -2
  374. package/dist/cjs/components/src/components/Molecules/ChatResult/index.d.ts.map +0 -1
  375. package/dist/cjs/components/src/components/Molecules/ChatResult/index.js +0 -17
  376. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +0 -12
  377. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +0 -1
  378. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +0 -123
  379. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +0 -2
  380. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +0 -1
  381. package/dist/cjs/components/src/components/Molecules/ChatResultsDisplay/index.js +0 -17
  382. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +0 -15
  383. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +0 -1
  384. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +0 -99
  385. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +0 -2
  386. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +0 -1
  387. package/dist/cjs/components/src/components/Molecules/ChatSuggestedQuestions/index.js +0 -17
  388. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts +0 -30
  389. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts.map +0 -1
  390. package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +0 -1030
  391. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.d.ts +0 -16
  392. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.d.ts.map +0 -1
  393. package/dist/cjs/components/src/components/Organisms/Chat/Chat.styles.js +0 -1186
  394. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +0 -32
  395. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +0 -1
  396. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +0 -104
  397. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +0 -40
  398. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +0 -1
  399. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatGestures.js +0 -98
  400. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +0 -44
  401. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +0 -1
  402. package/dist/cjs/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +0 -116
  403. package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts +0 -2
  404. package/dist/cjs/components/src/components/Organisms/Chat/index.d.ts.map +0 -1
  405. package/dist/cjs/components/src/components/Organisms/Chat/index.js +0 -17
  406. package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts +0 -47
  407. package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts.map +0 -1
  408. package/dist/cjs/components/src/components/Organisms/MobileSidebar/MobileSidebar.js +0 -171
  409. package/dist/cjs/components/src/components/Organisms/MobileSidebar/index.d.ts +0 -2
  410. package/dist/cjs/components/src/components/Organisms/MobileSidebar/index.d.ts.map +0 -1
  411. package/dist/cjs/components/src/components/Organisms/MobileSidebar/index.js +0 -17
  412. package/dist/cjs/components/src/components/Templates/Chat/Chat.d.ts +0 -12
  413. package/dist/cjs/components/src/components/Templates/Chat/Chat.d.ts.map +0 -1
  414. package/dist/cjs/components/src/components/Templates/Chat/Chat.js +0 -55
  415. package/dist/cjs/components/src/components/Templates/Chat/index.d.ts +0 -2
  416. package/dist/cjs/components/src/components/Templates/Chat/index.d.ts.map +0 -1
  417. package/dist/cjs/components/src/components/Templates/Chat/index.js +0 -17
  418. package/dist/cjs/components/src/themes/base/components/templates/chat.d.ts +0 -4
  419. package/dist/cjs/components/src/themes/base/components/templates/chat.d.ts.map +0 -1
  420. package/dist/cjs/components/src/themes/base/components/templates/chat.js +0 -6
  421. package/dist/cjs/components/src/themes/bocachica/components/organisms/mobileSidebar.d.ts +0 -4
  422. package/dist/cjs/components/src/themes/bocachica/components/organisms/mobileSidebar.d.ts.map +0 -1
  423. package/dist/cjs/components/src/themes/bocachica/components/organisms/mobileSidebar.js +0 -63
  424. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.d.ts +0 -4
  425. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.d.ts.map +0 -1
  426. package/dist/cjs/components/src/themes/bocachica/components/templates/chat.js +0 -6
  427. package/dist/cjs/components/src/themes/pike/components/organisms/mobileSidebar.d.ts +0 -4
  428. package/dist/cjs/components/src/themes/pike/components/organisms/mobileSidebar.d.ts.map +0 -1
  429. package/dist/cjs/components/src/themes/pike/components/organisms/mobileSidebar.js +0 -146
  430. package/dist/cjs/components/src/themes/pike/components/templates/chat.d.ts +0 -4
  431. package/dist/cjs/components/src/themes/pike/components/templates/chat.d.ts.map +0 -1
  432. package/dist/cjs/components/src/themes/pike/components/templates/chat.js +0 -6
  433. package/dist/cjs/components/src/themes/snapnco/components/organisms/mobileSidebar.d.ts +0 -4
  434. package/dist/cjs/components/src/themes/snapnco/components/organisms/mobileSidebar.d.ts.map +0 -1
  435. package/dist/cjs/components/src/themes/snapnco/components/organisms/mobileSidebar.js +0 -70
  436. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.d.ts +0 -4
  437. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.d.ts.map +0 -1
  438. package/dist/cjs/components/src/themes/snapnco/components/templates/chat.js +0 -6
  439. package/dist/cjs/components/src/themes/snappy/components/organisms/mobileSidebar.d.ts +0 -4
  440. package/dist/cjs/components/src/themes/snappy/components/organisms/mobileSidebar.d.ts.map +0 -1
  441. package/dist/cjs/components/src/themes/snappy/components/organisms/mobileSidebar.js +0 -74
  442. package/dist/cjs/components/src/themes/snappy/components/templates/chat.d.ts +0 -4
  443. package/dist/cjs/components/src/themes/snappy/components/templates/chat.d.ts.map +0 -1
  444. package/dist/cjs/components/src/themes/snappy/components/templates/chat.js +0 -6
  445. package/dist/cjs/components/src/themes/themeComponents/chat.d.ts +0 -4
  446. package/dist/cjs/components/src/themes/themeComponents/chat.d.ts.map +0 -1
  447. package/dist/cjs/components/src/themes/themeComponents/chat.js +0 -14
  448. package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts +0 -2
  449. package/dist/cjs/src/Templates/Stores/library/components/Chat.d.ts.map +0 -1
  450. package/dist/cjs/src/Templates/Stores/library/components/Chat.js +0 -5
  451. package/dist/cjs/src/create/createChatController.d.ts +0 -5
  452. package/dist/cjs/src/create/createChatController.d.ts.map +0 -1
  453. package/dist/cjs/src/create/createChatController.js +0 -43
  454. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts +0 -7
  455. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.d.ts.map +0 -1
  456. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/ChatLoadingIndicator.js +0 -67
  457. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts +0 -2
  458. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.d.ts.map +0 -1
  459. package/dist/esm/components/src/components/Atoms/ChatLoadingIndicator/index.js +0 -1
  460. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts +0 -20
  461. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.d.ts.map +0 -1
  462. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/ChatAttachmentContext.js +0 -169
  463. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts +0 -2
  464. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.d.ts.map +0 -1
  465. package/dist/esm/components/src/components/Molecules/ChatAttachmentContext/index.js +0 -1
  466. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +0 -18
  467. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +0 -1
  468. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +0 -145
  469. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts +0 -2
  470. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.d.ts.map +0 -1
  471. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/index.js +0 -1
  472. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts +0 -21
  473. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.d.ts.map +0 -1
  474. package/dist/esm/components/src/components/Molecules/ChatMessageText/ChatMessageText.js +0 -192
  475. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts +0 -2
  476. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.d.ts.map +0 -1
  477. package/dist/esm/components/src/components/Molecules/ChatMessageText/index.js +0 -1
  478. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts +0 -16
  479. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.d.ts.map +0 -1
  480. package/dist/esm/components/src/components/Molecules/ChatMessageUser/ChatMessageUser.js +0 -223
  481. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts +0 -2
  482. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.d.ts.map +0 -1
  483. package/dist/esm/components/src/components/Molecules/ChatMessageUser/index.js +0 -1
  484. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts +0 -17
  485. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.d.ts.map +0 -1
  486. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/ChatProductComparisonMessage.js +0 -121
  487. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts +0 -2
  488. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.d.ts.map +0 -1
  489. package/dist/esm/components/src/components/Molecules/ChatProductComparisonMessage/index.js +0 -1
  490. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +0 -25
  491. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +0 -1
  492. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +0 -460
  493. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts +0 -2
  494. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.d.ts.map +0 -1
  495. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/index.js +0 -1
  496. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts +0 -11
  497. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.d.ts.map +0 -1
  498. package/dist/esm/components/src/components/Molecules/ChatResult/ChatResult.js +0 -184
  499. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts +0 -2
  500. package/dist/esm/components/src/components/Molecules/ChatResult/index.d.ts.map +0 -1
  501. package/dist/esm/components/src/components/Molecules/ChatResult/index.js +0 -1
  502. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts +0 -12
  503. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.d.ts.map +0 -1
  504. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/ChatResultsDisplay.js +0 -102
  505. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts +0 -2
  506. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.d.ts.map +0 -1
  507. package/dist/esm/components/src/components/Molecules/ChatResultsDisplay/index.js +0 -1
  508. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts +0 -15
  509. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.d.ts.map +0 -1
  510. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/ChatSuggestedQuestions.js +0 -80
  511. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts +0 -2
  512. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.d.ts.map +0 -1
  513. package/dist/esm/components/src/components/Molecules/ChatSuggestedQuestions/index.js +0 -1
  514. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +0 -30
  515. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +0 -1
  516. package/dist/esm/components/src/components/Organisms/Chat/Chat.js +0 -939
  517. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.d.ts +0 -16
  518. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.d.ts.map +0 -1
  519. package/dist/esm/components/src/components/Organisms/Chat/Chat.styles.js +0 -1227
  520. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts +0 -32
  521. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.d.ts.map +0 -1
  522. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatFileUpload.js +0 -54
  523. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts +0 -40
  524. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.d.ts.map +0 -1
  525. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatGestures.js +0 -92
  526. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts +0 -44
  527. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.d.ts.map +0 -1
  528. package/dist/esm/components/src/components/Organisms/Chat/hooks/useChatOverflow.js +0 -110
  529. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts +0 -2
  530. package/dist/esm/components/src/components/Organisms/Chat/index.d.ts.map +0 -1
  531. package/dist/esm/components/src/components/Organisms/Chat/index.js +0 -1
  532. package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts +0 -47
  533. package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.d.ts.map +0 -1
  534. package/dist/esm/components/src/components/Organisms/MobileSidebar/MobileSidebar.js +0 -164
  535. package/dist/esm/components/src/components/Organisms/MobileSidebar/index.d.ts +0 -2
  536. package/dist/esm/components/src/components/Organisms/MobileSidebar/index.d.ts.map +0 -1
  537. package/dist/esm/components/src/components/Organisms/MobileSidebar/index.js +0 -1
  538. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts +0 -12
  539. package/dist/esm/components/src/components/Templates/Chat/Chat.d.ts.map +0 -1
  540. package/dist/esm/components/src/components/Templates/Chat/Chat.js +0 -42
  541. package/dist/esm/components/src/components/Templates/Chat/index.d.ts +0 -2
  542. package/dist/esm/components/src/components/Templates/Chat/index.d.ts.map +0 -1
  543. package/dist/esm/components/src/components/Templates/Chat/index.js +0 -1
  544. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts +0 -4
  545. package/dist/esm/components/src/themes/base/components/templates/chat.d.ts.map +0 -1
  546. package/dist/esm/components/src/themes/base/components/templates/chat.js +0 -3
  547. package/dist/esm/components/src/themes/bocachica/components/organisms/mobileSidebar.d.ts +0 -4
  548. package/dist/esm/components/src/themes/bocachica/components/organisms/mobileSidebar.d.ts.map +0 -1
  549. package/dist/esm/components/src/themes/bocachica/components/organisms/mobileSidebar.js +0 -56
  550. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts +0 -4
  551. package/dist/esm/components/src/themes/bocachica/components/templates/chat.d.ts.map +0 -1
  552. package/dist/esm/components/src/themes/bocachica/components/templates/chat.js +0 -3
  553. package/dist/esm/components/src/themes/pike/components/organisms/mobileSidebar.d.ts +0 -4
  554. package/dist/esm/components/src/themes/pike/components/organisms/mobileSidebar.d.ts.map +0 -1
  555. package/dist/esm/components/src/themes/pike/components/organisms/mobileSidebar.js +0 -143
  556. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts +0 -4
  557. package/dist/esm/components/src/themes/pike/components/templates/chat.d.ts.map +0 -1
  558. package/dist/esm/components/src/themes/pike/components/templates/chat.js +0 -3
  559. package/dist/esm/components/src/themes/snapnco/components/organisms/mobileSidebar.d.ts +0 -4
  560. package/dist/esm/components/src/themes/snapnco/components/organisms/mobileSidebar.d.ts.map +0 -1
  561. package/dist/esm/components/src/themes/snapnco/components/organisms/mobileSidebar.js +0 -64
  562. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts +0 -4
  563. package/dist/esm/components/src/themes/snapnco/components/templates/chat.d.ts.map +0 -1
  564. package/dist/esm/components/src/themes/snapnco/components/templates/chat.js +0 -3
  565. package/dist/esm/components/src/themes/snappy/components/organisms/mobileSidebar.d.ts +0 -4
  566. package/dist/esm/components/src/themes/snappy/components/organisms/mobileSidebar.d.ts.map +0 -1
  567. package/dist/esm/components/src/themes/snappy/components/organisms/mobileSidebar.js +0 -68
  568. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts +0 -4
  569. package/dist/esm/components/src/themes/snappy/components/templates/chat.d.ts.map +0 -1
  570. package/dist/esm/components/src/themes/snappy/components/templates/chat.js +0 -3
  571. package/dist/esm/components/src/themes/themeComponents/chat.d.ts +0 -4
  572. package/dist/esm/components/src/themes/themeComponents/chat.d.ts.map +0 -1
  573. package/dist/esm/components/src/themes/themeComponents/chat.js +0 -11
  574. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts +0 -2
  575. package/dist/esm/src/Templates/Stores/library/components/Chat.d.ts.map +0 -1
  576. package/dist/esm/src/Templates/Stores/library/components/Chat.js +0 -1
  577. package/dist/esm/src/create/createChatController.d.ts +0 -5
  578. package/dist/esm/src/create/createChatController.d.ts.map +0 -1
  579. package/dist/esm/src/create/createChatController.js +0 -29
@@ -1,1030 +0,0 @@
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
- });