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