@athoscommerce/snap-preact 1.2.3-beta.4 → 1.2.3-beta.6

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 (214) hide show
  1. package/README.md +16 -0
  2. package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts +3 -3
  3. package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts.map +1 -1
  4. package/dist/cjs/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +7 -8
  5. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +1 -1
  6. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -1
  7. package/dist/cjs/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +3 -3
  8. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +2 -0
  9. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -1
  10. package/dist/cjs/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +24 -25
  11. package/dist/cjs/components/src/components/Molecules/Filter/Filter.d.ts +1 -1
  12. package/dist/cjs/components/src/components/Molecules/Filter/Filter.d.ts.map +1 -1
  13. package/dist/cjs/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  14. package/dist/cjs/components/src/components/Molecules/Result/Result.js +11 -6
  15. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts +4 -1
  16. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  17. package/dist/cjs/components/src/components/Molecules/SearchInput/SearchInput.js +3 -3
  18. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/Components/AbstractedControls.js +5 -5
  19. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/Components/Control.d.ts.map +1 -1
  20. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/Components/Control.js +31 -31
  21. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.d.ts.map +1 -1
  22. package/dist/cjs/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.js +22 -36
  23. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts +7 -0
  24. package/dist/cjs/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -1
  25. package/dist/cjs/components/src/components/Organisms/Chat/Chat.js +638 -431
  26. package/dist/cjs/components/src/components/Organisms/Chat/ChatResult.d.ts.map +1 -1
  27. package/dist/cjs/components/src/components/Organisms/Chat/ChatResult.js +4 -3
  28. package/dist/cjs/components/src/components/Organisms/Chat/MessageText.d.ts +3 -1
  29. package/dist/cjs/components/src/components/Organisms/Chat/MessageText.d.ts.map +1 -1
  30. package/dist/cjs/components/src/components/Organisms/Chat/MessageText.js +22 -19
  31. package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.d.ts +3 -1
  32. package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.d.ts.map +1 -1
  33. package/dist/cjs/components/src/components/Organisms/Chat/MessageUser.js +39 -21
  34. package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.d.ts +1 -1
  35. package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.d.ts.map +1 -1
  36. package/dist/cjs/components/src/components/Organisms/Chat/ResultsDisplay.js +7 -11
  37. package/dist/cjs/components/src/components/Organisms/FilterSummary/FilterSummary.d.ts +2 -2
  38. package/dist/cjs/components/src/components/Organisms/FilterSummary/FilterSummary.d.ts.map +1 -1
  39. package/dist/cjs/components/src/components/Organisms/ProductQuickView/ProductQuickView.d.ts +11 -0
  40. package/dist/cjs/components/src/components/Organisms/ProductQuickView/ProductQuickView.d.ts.map +1 -0
  41. package/dist/cjs/components/src/components/Organisms/ProductQuickView/ProductQuickView.js +461 -0
  42. package/dist/cjs/components/src/components/Organisms/ProductQuickView/index.d.ts +2 -0
  43. package/dist/cjs/components/src/components/Organisms/ProductQuickView/index.d.ts.map +1 -0
  44. package/dist/cjs/components/src/components/Organisms/ProductQuickView/index.js +17 -0
  45. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  46. package/dist/cjs/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +0 -2
  47. package/dist/cjs/components/src/hooks/useAcRenderedInput.d.ts.map +1 -1
  48. package/dist/cjs/components/src/hooks/useAcRenderedInput.js +65 -15
  49. package/dist/cjs/components/src/hooks/useMediaQuery.d.ts.map +1 -1
  50. package/dist/cjs/components/src/hooks/useMediaQuery.js +3 -1
  51. package/dist/cjs/components/src/index.d.ts +1 -0
  52. package/dist/cjs/components/src/index.d.ts.map +1 -1
  53. package/dist/cjs/components/src/index.js +1 -0
  54. package/dist/cjs/components/src/providers/theme.d.ts +1 -1
  55. package/dist/cjs/components/src/providers/theme.d.ts.map +1 -1
  56. package/dist/cjs/components/src/themes/base/base.js +3 -3
  57. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts +11 -0
  58. package/dist/cjs/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  59. package/dist/cjs/components/src/utilities/Colour/Colour.js +32 -0
  60. package/dist/cjs/src/Instantiators/RecommendationInstantiator.d.ts +3 -1
  61. package/dist/cjs/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  62. package/dist/cjs/src/Instantiators/RecommendationInstantiator.js +162 -123
  63. package/dist/cjs/src/Snap.d.ts +1 -1
  64. package/dist/cjs/src/Snap.d.ts.map +1 -1
  65. package/dist/cjs/src/Snap.js +18 -6
  66. package/dist/cjs/src/SnapHybrid.d.ts.map +1 -1
  67. package/dist/cjs/src/Templates/SnapTemplates.d.ts +13 -72
  68. package/dist/cjs/src/Templates/SnapTemplates.d.ts.map +1 -1
  69. package/dist/cjs/src/Templates/SnapTemplates.js +123 -72
  70. package/dist/cjs/src/Templates/Stores/TargetStore.d.ts +7 -6
  71. package/dist/cjs/src/Templates/Stores/TargetStore.d.ts.map +1 -1
  72. package/dist/cjs/src/Templates/Stores/TargetStore.js +14 -8
  73. package/dist/cjs/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts +58 -8
  74. package/dist/cjs/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts.map +1 -1
  75. package/dist/cjs/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +467 -96
  76. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.d.ts +1 -0
  77. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.d.ts.map +1 -1
  78. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.js +123 -70
  79. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.d.ts.map +1 -1
  80. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +9 -3
  81. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.d.ts +1 -0
  82. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.d.ts.map +1 -1
  83. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.js +86 -1
  84. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/themeUI.d.ts.map +1 -1
  85. package/dist/cjs/src/Templates/Stores/TemplateEditor/uiAbstractions/themeUI.js +33 -14
  86. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts +93 -30
  87. package/dist/cjs/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  88. package/dist/cjs/src/Templates/Stores/TemplateStore.js +33 -41
  89. package/dist/cjs/src/Templates/Stores/ThemeStore.d.ts +2 -8
  90. package/dist/cjs/src/Templates/Stores/ThemeStore.d.ts.map +1 -1
  91. package/dist/cjs/src/Templates/Stores/ThemeStore.js +3 -28
  92. package/dist/cjs/src/Templates/index.d.ts +1 -1
  93. package/dist/cjs/src/Templates/index.d.ts.map +1 -1
  94. package/dist/cjs/src/create/createChatController.js +1 -1
  95. package/dist/cjs/src/index.d.ts +1 -0
  96. package/dist/cjs/src/index.d.ts.map +1 -1
  97. package/dist/cjs/src/setupEvents.d.ts +13 -0
  98. package/dist/cjs/src/setupEvents.d.ts.map +1 -1
  99. package/dist/cjs/src/setupEvents.js +56 -8
  100. package/dist/cjs/src/types.d.ts +3 -1
  101. package/dist/cjs/src/types.d.ts.map +1 -1
  102. package/dist/cjs/src/utils/combineMerge.d.ts +2 -0
  103. package/dist/cjs/src/utils/combineMerge.d.ts.map +1 -0
  104. package/dist/cjs/src/utils/combineMerge.js +22 -0
  105. package/dist/cjs/src/utils/index.d.ts +1 -0
  106. package/dist/cjs/src/utils/index.d.ts.map +1 -1
  107. package/dist/cjs/src/utils/index.js +3 -1
  108. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts +3 -3
  109. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.d.ts.map +1 -1
  110. package/dist/esm/components/src/components/Atoms/TemplateSelect/TemplateSelect.js +7 -8
  111. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts +1 -1
  112. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.d.ts.map +1 -1
  113. package/dist/esm/components/src/components/Molecules/ChatInspirationResultMessage/ChatInspirationResultMessage.js +3 -3
  114. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts +2 -0
  115. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.d.ts.map +1 -1
  116. package/dist/esm/components/src/components/Molecules/ChatProductQueryMessage/ChatProductQueryMessage.js +24 -26
  117. package/dist/esm/components/src/components/Molecules/Filter/Filter.d.ts +1 -1
  118. package/dist/esm/components/src/components/Molecules/Filter/Filter.d.ts.map +1 -1
  119. package/dist/esm/components/src/components/Molecules/Result/Result.d.ts.map +1 -1
  120. package/dist/esm/components/src/components/Molecules/Result/Result.js +9 -4
  121. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts +4 -1
  122. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.d.ts.map +1 -1
  123. package/dist/esm/components/src/components/Molecules/SearchInput/SearchInput.js +3 -3
  124. package/dist/esm/components/src/components/Molecules/TemplatesEditor/Components/AbstractedControls.js +5 -5
  125. package/dist/esm/components/src/components/Molecules/TemplatesEditor/Components/Control.d.ts.map +1 -1
  126. package/dist/esm/components/src/components/Molecules/TemplatesEditor/Components/Control.js +29 -29
  127. package/dist/esm/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.d.ts.map +1 -1
  128. package/dist/esm/components/src/components/Molecules/TemplatesEditor/TemplatesEditor.js +22 -35
  129. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts +7 -0
  130. package/dist/esm/components/src/components/Organisms/Chat/Chat.d.ts.map +1 -1
  131. package/dist/esm/components/src/components/Organisms/Chat/Chat.js +557 -359
  132. package/dist/esm/components/src/components/Organisms/Chat/ChatResult.d.ts.map +1 -1
  133. package/dist/esm/components/src/components/Organisms/Chat/ChatResult.js +4 -3
  134. package/dist/esm/components/src/components/Organisms/Chat/MessageText.d.ts +3 -1
  135. package/dist/esm/components/src/components/Organisms/Chat/MessageText.d.ts.map +1 -1
  136. package/dist/esm/components/src/components/Organisms/Chat/MessageText.js +21 -19
  137. package/dist/esm/components/src/components/Organisms/Chat/MessageUser.d.ts +3 -1
  138. package/dist/esm/components/src/components/Organisms/Chat/MessageUser.d.ts.map +1 -1
  139. package/dist/esm/components/src/components/Organisms/Chat/MessageUser.js +36 -21
  140. package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.d.ts +1 -1
  141. package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.d.ts.map +1 -1
  142. package/dist/esm/components/src/components/Organisms/Chat/ResultsDisplay.js +7 -11
  143. package/dist/esm/components/src/components/Organisms/FilterSummary/FilterSummary.d.ts +2 -2
  144. package/dist/esm/components/src/components/Organisms/FilterSummary/FilterSummary.d.ts.map +1 -1
  145. package/dist/esm/components/src/components/Organisms/ProductQuickView/ProductQuickView.d.ts +11 -0
  146. package/dist/esm/components/src/components/Organisms/ProductQuickView/ProductQuickView.d.ts.map +1 -0
  147. package/dist/esm/components/src/components/Organisms/ProductQuickView/ProductQuickView.js +436 -0
  148. package/dist/esm/components/src/components/Organisms/ProductQuickView/index.d.ts +2 -0
  149. package/dist/esm/components/src/components/Organisms/ProductQuickView/index.d.ts.map +1 -0
  150. package/dist/esm/components/src/components/Organisms/ProductQuickView/index.js +1 -0
  151. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.d.ts.map +1 -1
  152. package/dist/esm/components/src/components/Templates/AutocompleteModal/AutocompleteModal.js +0 -2
  153. package/dist/esm/components/src/hooks/useAcRenderedInput.d.ts.map +1 -1
  154. package/dist/esm/components/src/hooks/useAcRenderedInput.js +61 -11
  155. package/dist/esm/components/src/hooks/useMediaQuery.d.ts.map +1 -1
  156. package/dist/esm/components/src/hooks/useMediaQuery.js +3 -1
  157. package/dist/esm/components/src/index.d.ts +1 -0
  158. package/dist/esm/components/src/index.d.ts.map +1 -1
  159. package/dist/esm/components/src/index.js +1 -0
  160. package/dist/esm/components/src/providers/theme.d.ts +1 -1
  161. package/dist/esm/components/src/providers/theme.d.ts.map +1 -1
  162. package/dist/esm/components/src/themes/base/base.js +3 -3
  163. package/dist/esm/components/src/utilities/Colour/Colour.d.ts +11 -0
  164. package/dist/esm/components/src/utilities/Colour/Colour.d.ts.map +1 -1
  165. package/dist/esm/components/src/utilities/Colour/Colour.js +30 -0
  166. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts +3 -1
  167. package/dist/esm/src/Instantiators/RecommendationInstantiator.d.ts.map +1 -1
  168. package/dist/esm/src/Instantiators/RecommendationInstantiator.js +131 -84
  169. package/dist/esm/src/Snap.d.ts +1 -1
  170. package/dist/esm/src/Snap.d.ts.map +1 -1
  171. package/dist/esm/src/Snap.js +21 -6
  172. package/dist/esm/src/SnapHybrid.d.ts.map +1 -1
  173. package/dist/esm/src/Templates/SnapTemplates.d.ts +13 -72
  174. package/dist/esm/src/Templates/SnapTemplates.d.ts.map +1 -1
  175. package/dist/esm/src/Templates/SnapTemplates.js +137 -78
  176. package/dist/esm/src/Templates/Stores/TargetStore.d.ts +7 -6
  177. package/dist/esm/src/Templates/Stores/TargetStore.d.ts.map +1 -1
  178. package/dist/esm/src/Templates/Stores/TargetStore.js +14 -8
  179. package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts +58 -8
  180. package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.d.ts.map +1 -1
  181. package/dist/esm/src/Templates/Stores/TemplateEditor/TemplateEditorStore.js +447 -89
  182. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.d.ts +1 -0
  183. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.d.ts.map +1 -1
  184. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/autocompleteControllerUI.js +118 -66
  185. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.d.ts.map +1 -1
  186. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/configUI.js +9 -3
  187. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.d.ts +1 -0
  188. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.d.ts.map +1 -1
  189. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/searchControllerUI.js +82 -1
  190. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/themeUI.d.ts.map +1 -1
  191. package/dist/esm/src/Templates/Stores/TemplateEditor/uiAbstractions/themeUI.js +27 -8
  192. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts +93 -30
  193. package/dist/esm/src/Templates/Stores/TemplateStore.d.ts.map +1 -1
  194. package/dist/esm/src/Templates/Stores/TemplateStore.js +29 -38
  195. package/dist/esm/src/Templates/Stores/ThemeStore.d.ts +2 -8
  196. package/dist/esm/src/Templates/Stores/ThemeStore.d.ts.map +1 -1
  197. package/dist/esm/src/Templates/Stores/ThemeStore.js +3 -26
  198. package/dist/esm/src/Templates/index.d.ts +1 -1
  199. package/dist/esm/src/Templates/index.d.ts.map +1 -1
  200. package/dist/esm/src/create/createChatController.js +1 -1
  201. package/dist/esm/src/index.d.ts +1 -0
  202. package/dist/esm/src/index.d.ts.map +1 -1
  203. package/dist/esm/src/setupEvents.d.ts +13 -0
  204. package/dist/esm/src/setupEvents.d.ts.map +1 -1
  205. package/dist/esm/src/setupEvents.js +25 -8
  206. package/dist/esm/src/types.d.ts +3 -1
  207. package/dist/esm/src/types.d.ts.map +1 -1
  208. package/dist/esm/src/utils/combineMerge.d.ts +2 -0
  209. package/dist/esm/src/utils/combineMerge.d.ts.map +1 -0
  210. package/dist/esm/src/utils/combineMerge.js +16 -0
  211. package/dist/esm/src/utils/index.d.ts +1 -0
  212. package/dist/esm/src/utils/index.d.ts.map +1 -1
  213. package/dist/esm/src/utils/index.js +1 -0
  214. package/package.json +20 -14
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../../components/src/providers/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzE,eAAO,MAAM,YAAY,EAAE,KAc1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,KAAK,mBAAmB,GAAG;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,wBAAwB,CAAC;IACtC,MAAM,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACnB,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC;AAE7F,MAAM,MAAM,KAAK,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gBAAgB,CAAC,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,MAAM,EAAE,KAAK,SAAS,UAAU,EAAE,UAAU,IAAI;IAC3F,OAAO,CAAC,EAAE,+BAA+B,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACvE,MAAM,CAAC,EAAE,+BAA+B,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,+BAA+B,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,+BAA+B,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB,GAAG,YAAY,CAAC,CAAC,GAAG;IAAE,UAAU,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAE/I,MAAM,MAAM,eAAe,GAAG;IAC7B,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG;IAAE,OAAO,CAAC,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAGhG,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAC5B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE;CACnD,CAAC;AACF,MAAM,MAAM,4CAA4C,GAAG,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;AAG1G,MAAM,MAAM,uBAAuB,GAAG;IACrC,MAAM,CAAC,EAAE,4CAA4C,CAAC;IACtD,MAAM,CAAC,EAAE,4CAA4C,CAAC;IACtD,OAAO,CAAC,EAAE,4CAA4C,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,GAAG;IAAE,OAAO,CAAC,EAAE,4CAA4C,CAAA;CAAE,CAAC;AAEnI,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC,GAAG;IAC7E,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,CAAC,EAAE,yBAAyB,CAAC;IAAC,UAAU,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAEtG,MAAM,MAAM,YAAY,GAAG;IAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../../components/src/providers/theme.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ const baseVariables = {
8
8
  },
9
9
  colors: {
10
10
  text: '#333333',
11
- primary: '#3A23AD',
12
- secondary: '#4c3ce2',
13
- accent: '#00cee1',
11
+ primary: '#333333',
12
+ secondary: '#000000',
13
+ accent: '#cccccc',
14
14
  },
15
15
  };
16
16
  export const base = {
@@ -12,11 +12,22 @@ export declare class Colour {
12
12
  opacity(offset: number): Colour;
13
13
  transparency(offset: number): Colour;
14
14
  opaque(offset: number): Colour;
15
+ /** Returns a hex string mixed linearly toward black. `amount` (0-1) is the proportion
16
+ * of black in the result — 0.9 yields a near-black with a slight tint of the original.
17
+ * Uses linear RGB mixing so light inputs reliably produce darker outputs. */
18
+ darkenHex(amount?: number): string;
19
+ /** Returns a hex string mixed linearly toward white. `amount` (0-1) is the proportion
20
+ * of white in the result — 0.9 yields a near-white with a slight tint of the original.
21
+ * Uses linear RGB mixing so dark inputs reliably produce paler outputs. */
22
+ lightenHex(amount?: number): string;
15
23
  static isRgb(color: string): boolean;
16
24
  static isHex(color: string): boolean;
17
25
  static hexToRgb(hex: string): string;
18
26
  static rgbToHex(rgb: string): string;
19
27
  static opacity(color: string | undefined, offset: number): string | undefined;
28
+ /** Linear RGB mix between two hex colors. `amount` (0-1) is the proportion of `towardHex`
29
+ * in the result. Returns the source `hex` unchanged when either input is invalid. */
30
+ static mixToward(hex: string | undefined, towardHex: string, amount: number): string;
20
31
  static brightness(color: string | undefined, offset: number): string | undefined;
21
32
  }
22
33
  //# sourceMappingURL=Colour.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Colour.d.ts","sourceRoot":"","sources":["../../../../../../components/src/utilities/Colour/Colour.ts"],"names":[],"mappings":"AAqBA,qBAAa,MAAM;IAClB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;IAErC,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAOnC;IAED,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAOnC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAoBxC;gBAEW,KAAK,EAAE,MAAM,GAAG,SAAS;IAuBrC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOpC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAgBpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAoBpC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA+B7E,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAoChF"}
1
+ {"version":3,"file":"Colour.d.ts","sourceRoot":"","sources":["../../../../../../components/src/utilities/Colour/Colour.ts"],"names":[],"mappings":"AAqBA,qBAAa,MAAM;IAClB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAqB;IAErC,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAOnC;IAED,IAAW,GAAG,IAAI,MAAM,GAAG,SAAS,CAOnC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAoBxC;gBAEW,KAAK,EAAE,MAAM,GAAG,SAAS;IAuBrC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAKpC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B;;iFAE6E;IAC7E,SAAS,CAAC,MAAM,GAAE,MAAY,GAAG,MAAM;IAIvC;;+EAE2E;IAC3E,UAAU,CAAC,MAAM,GAAE,MAAY,GAAG,MAAM;IAIxC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOpC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAgBpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAoBpC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA+B7E;yFACqF;IACrF,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAqBpF,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAoChF"}
@@ -99,6 +99,18 @@ export class Colour {
99
99
  return this;
100
100
  return new Colour(Colour.opacity(this.hex, -offset));
101
101
  }
102
+ /** Returns a hex string mixed linearly toward black. `amount` (0-1) is the proportion
103
+ * of black in the result — 0.9 yields a near-black with a slight tint of the original.
104
+ * Uses linear RGB mixing so light inputs reliably produce darker outputs. */
105
+ darkenHex(amount = 0.3) {
106
+ return Colour.mixToward(this.hex, '#000000', amount);
107
+ }
108
+ /** Returns a hex string mixed linearly toward white. `amount` (0-1) is the proportion
109
+ * of white in the result — 0.9 yields a near-white with a slight tint of the original.
110
+ * Uses linear RGB mixing so dark inputs reliably produce paler outputs. */
111
+ lightenHex(amount = 0.3) {
112
+ return Colour.mixToward(this.hex, '#ffffff', amount);
113
+ }
102
114
  static isRgb(color) {
103
115
  return Boolean(color.match(/^rgba?\([0-9]{1,3}[\s,\,]+[0-9]{1,3}[\s,\,]+[0-9]{1,3}[\s,\,]*\)$/i) ||
104
116
  color.match(/^rgba?\([0-9]{1,3}[\s,\,]+[0-9]{1,3}[\s,\,]+[0-9]{1,3}[\s,\,]+0?\.?[0-9]+%?[\s,\,]*\)$/i));
@@ -167,6 +179,24 @@ export class Colour {
167
179
  }
168
180
  return hexValue;
169
181
  }
182
+ /** Linear RGB mix between two hex colors. `amount` (0-1) is the proportion of `towardHex`
183
+ * in the result. Returns the source `hex` unchanged when either input is invalid. */
184
+ static mixToward(hex, towardHex, amount) {
185
+ if (!hex || !Colour.isHex(hex) || !Colour.isHex(towardHex))
186
+ return hex || '';
187
+ const clamped = Math.max(0, Math.min(1, amount));
188
+ const sourceR = parseInt(hex.slice(1, 3), 16);
189
+ const sourceG = parseInt(hex.slice(3, 5), 16);
190
+ const sourceB = parseInt(hex.slice(5, 7), 16);
191
+ const targetR = parseInt(towardHex.slice(1, 3), 16);
192
+ const targetG = parseInt(towardHex.slice(3, 5), 16);
193
+ const targetB = parseInt(towardHex.slice(5, 7), 16);
194
+ const mix = (s, t) => Math.round(s * (1 - clamped) + t * clamped);
195
+ const r = mix(sourceR, targetR).toString(16).padStart(2, '0');
196
+ const g = mix(sourceG, targetG).toString(16).padStart(2, '0');
197
+ const b = mix(sourceB, targetB).toString(16).padStart(2, '0');
198
+ return `#${r}${g}${b}`;
199
+ }
170
200
  static brightness(color, offset) {
171
201
  let isRgb = false;
172
202
  if (color && Colour.isRgb(color)) {
@@ -5,7 +5,7 @@ import { Tracker } from '@athoscommerce/snap-tracker';
5
5
  import type { ClientConfig, ClientGlobals } from '@athoscommerce/snap-client';
6
6
  import type { UrlTranslatorConfig } from '@athoscommerce/snap-url-manager';
7
7
  import type { AbstractController, RecommendationController, Attachments, ContextVariables } from '@athoscommerce/snap-controller';
8
- import type { BeaconSettings, VariantConfig } from '@athoscommerce/snap-store-mobx';
8
+ import type { BeaconSettings, QuickviewConfig, VariantConfig } from '@athoscommerce/snap-store-mobx';
9
9
  import type { Middleware } from '@athoscommerce/snap-event-manager';
10
10
  import type { Target } from '@athoscommerce/snap-toolbox';
11
11
  import type { Snap } from '../Snap';
@@ -23,6 +23,7 @@ export type RecommendationInstantiatorConfigSettings = {
23
23
  batched?: boolean;
24
24
  limit?: number;
25
25
  variants?: VariantConfig;
26
+ quickview?: QuickviewConfig;
26
27
  beacon?: BeaconSettings;
27
28
  };
28
29
  export type RecommendationInstantiatorConfig = {
@@ -69,6 +70,7 @@ export declare class RecommendationInstantiator {
69
70
  plugin(func: (cntrlr: AbstractController, ...args: any) => void | Promise<void>, ...args: unknown[]): void;
70
71
  on<T>(event: string, ...func: Middleware<T>[]): void;
71
72
  use(attachments: Attachments): void;
73
+ cleanupStaleControllers(): void;
72
74
  }
73
75
  type DefinedProps = {
74
76
  [key: string]: any;
@@ -1 +1 @@
1
- {"version":3,"file":"RecommendationInstantiator.d.ts","sourceRoot":"","sources":["../../../../src/Instantiators/RecommendationInstantiator.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecommendationInstantiator.d.ts","sourceRoot":"","sources":["../../../../src/Instantiators/RecommendationInstantiator.tsx"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { AppMode, DomTargeter, getContext } from '@athoscommerce/snap-toolbox';
5
5
  import { Client } from '@athoscommerce/snap-client';
6
6
  import { Logger } from '@athoscommerce/snap-logger';
7
7
  import { Tracker } from '@athoscommerce/snap-tracker';
8
+ import { createRecommendationController } from '../create';
8
9
  const DEFAULT_BRANCH = 'production';
9
10
  export class RecommendationInstantiator {
10
11
  constructor(config, services, context) {
@@ -40,29 +41,26 @@ export class RecommendationInstantiator {
40
41
  this.tracker = services?.tracker || new Tracker(this.config.client.globals);
41
42
  this.logger = services?.logger || new Logger({ prefix: 'RecommendationInstantiator ', mode: this.mode });
42
43
  const profileCount = {};
44
+ // script block targeter for "grouped" and "legacy" blocks
43
45
  this.targeter = new DomTargeter([
44
46
  {
45
47
  selector: `${this.config.selector ||
46
48
  'script[type="searchspring/recommend"], script[type="searchspring/personalized-recommendations"], script[type="athos/recommend"], script[type="athos/personalized-recommendations"]'}, script[type="searchspring/recommend"][profile="email"], script[type="athos/recommend"][profile="email"]`,
47
49
  autoRetarget: true,
48
50
  clickRetarget: true,
49
- inject: {
50
- action: 'before',
51
- element: (target, origElement) => {
52
- const profile = origElement.getAttribute('profile') || '';
53
- const recsContainer = document.createElement('div');
54
- recsContainer.setAttribute('searchspring-recommend', profile);
55
- return recsContainer;
56
- },
57
- },
51
+ navigationRetarget: true,
52
+ emptyTarget: false,
58
53
  },
59
54
  {
60
55
  selector: 'script[type="searchspring/recommendations"], script[type="athos/recommendations"]',
61
56
  autoRetarget: true,
62
57
  clickRetarget: true,
58
+ navigationRetarget: true,
63
59
  emptyTarget: false,
64
60
  },
65
- ], async (target, elem, originalElem) => {
61
+ ], async (target, elem) => {
62
+ this.cleanupStaleControllers();
63
+ const scriptElement = elem;
66
64
  const elemContext = getContext([
67
65
  'shopperId',
68
66
  'shopper',
@@ -77,7 +75,7 @@ export class RecommendationInstantiator {
77
75
  'custom',
78
76
  'profiles',
79
77
  'globals',
80
- ], (originalElem || elem));
78
+ ], scriptElement);
81
79
  if (elemContext.profiles && elemContext.profiles.length) {
82
80
  // using the "grouped block" integration structure
83
81
  // type the new profile specific integration context variables
@@ -91,34 +89,52 @@ export class RecommendationInstantiator {
91
89
  cart: scriptContextGlobals?.cart && getArrayFunc(scriptContextGlobals.cart),
92
90
  products: scriptContextGlobals?.products,
93
91
  shopper: scriptContextGlobals?.shopper?.id,
94
- batchId: Math.random(),
92
+ batchId: Math.floor(Math.random() * Number.MAX_SAFE_INTEGER),
95
93
  }),
96
94
  };
97
- const targetsArr = [];
98
- // build out the targets array for each profile
99
- scriptContextProfiles.forEach((profile) => {
95
+ // create a per-profile DomTargeter for each profile so each controller
96
+ // gets its own targeter tracking its specific element
97
+ scriptContextProfiles.forEach((profile, index) => {
100
98
  if (profile.selector) {
101
- const targetObj = {
99
+ const profileTarget = {
102
100
  selector: profile.selector,
103
101
  autoRetarget: true,
104
- clickRetarget: true,
105
102
  profile,
103
+ order: index,
106
104
  };
107
- targetsArr.push(targetObj);
108
- }
109
- });
110
- new DomTargeter(targetsArr, async (target, elem, originalElem) => {
111
- if (target.profile?.profile || target.profile?.tag) {
112
- const profileRequestGlobals = {
113
- ...requestGlobals,
114
- profile: target.profile?.options,
115
- tag: target.profile.tag || target.profile.profile, // have to support both tag and profile due to having profile at release, but will favor tag
116
- };
117
- const profileContext = deepmerge(this.context, defined({ globals: scriptContextGlobals, profile: target.profile }));
118
- if (elemContext.custom) {
119
- profileContext.custom = deepmerge(profileContext.custom, elemContext.custom);
120
- }
121
- readyTheController(this, services || {}, elem, profileContext, profileCount, originalElem, profileRequestGlobals, target);
105
+ // track the controller for this profile so multiple matched elements share it
106
+ let profileControllerPromise;
107
+ new DomTargeter([profileTarget], async (target, targetElem, _originalElem, targeter) => {
108
+ // skip retarget if the source script element was removed and release the current target
109
+ if (scriptElement.isConnected === false) {
110
+ if (targetElem) {
111
+ targeter?.releaseTargets([targetElem]);
112
+ }
113
+ return;
114
+ }
115
+ if (target.profile?.profile || target.profile?.tag) {
116
+ const profileRequestGlobals = {
117
+ ...requestGlobals,
118
+ profile: { ...target.profile?.options, order: target.order },
119
+ tag: target.profile.tag || target.profile.profile, // have to support both tag and profile due to having profile at release, but will favor tag
120
+ };
121
+ const profileContext = deepmerge(this.context, defined({ globals: scriptContextGlobals, profile: target.profile }));
122
+ if (elemContext.custom) {
123
+ profileContext.custom = deepmerge(profileContext.custom, elemContext.custom);
124
+ }
125
+ if (!profileControllerPromise) {
126
+ // first element match — create the controller
127
+ profileControllerPromise = readyTheController(this, services || {}, targetElem, profileContext, profileCount, scriptElement, profileRequestGlobals, target, targeter);
128
+ }
129
+ else {
130
+ // subsequent element matches — reuse the existing controller and just render
131
+ const controller = await profileControllerPromise;
132
+ if (controller && targetElem) {
133
+ renderController(this, services || {}, controller, targetElem, scriptElement, target);
134
+ }
135
+ }
136
+ }
137
+ });
122
138
  }
123
139
  });
124
140
  }
@@ -138,7 +154,23 @@ export class RecommendationInstantiator {
138
154
  profile: options,
139
155
  }),
140
156
  };
141
- readyTheController(this, services || {}, elem, deepmerge(this.context, elemContext), profileCount, originalElem, profileRequestGlobals, target);
157
+ // inject a render container before the script element
158
+ const profileAttr = scriptElement.getAttribute('profile') || '';
159
+ const recsContainer = scriptElement.ownerDocument.createElement('div');
160
+ recsContainer.setAttribute('searchspring-recommend', profileAttr);
161
+ scriptElement.before(recsContainer);
162
+ const legacyContext = deepmerge(this.context, elemContext);
163
+ // create a per-element DomTargeter for the injected div (mirrors grouped block pattern)
164
+ new DomTargeter([{ selector: `[searchspring-recommend="${profileAttr}"]`, name: `legacy_${profile}_${profileCount[profile || ''] || 0}` }], async (_target, targetElem, _originalElem, targeter) => {
165
+ // skip retarget if the source script element was removed and release the current target
166
+ if (scriptElement.isConnected === false) {
167
+ if (targetElem) {
168
+ targeter?.releaseTargets([targetElem]);
169
+ }
170
+ return;
171
+ }
172
+ readyTheController(this, services || {}, targetElem, legacyContext, profileCount, scriptElement, profileRequestGlobals, target, targeter);
173
+ });
142
174
  }
143
175
  });
144
176
  }
@@ -151,26 +183,43 @@ export class RecommendationInstantiator {
151
183
  use(attachments) {
152
184
  this.uses.push(attachments);
153
185
  }
186
+ // cleanup to ensure we release controllers no longer rendering in the DOM (memory leak prevention for SPA's)
187
+ cleanupStaleControllers() {
188
+ Object.keys(this.controller).forEach((id) => {
189
+ const controller = this.controller[id];
190
+ const targeters = Object.values(controller.targeters);
191
+ const hasConnectedTarget = targeters.some((targeter) => targeter.getTargetedElems().some((elem) => {
192
+ const attr = elem.isConnected !== false && elem.getAttribute('ss-controller-id');
193
+ return attr === id;
194
+ }));
195
+ if (!hasConnectedTarget) {
196
+ Object.keys(controller.targeters).forEach((targeterId) => controller.targeters[targeterId].destroy());
197
+ controller.targeters = {};
198
+ delete this.controller[id];
199
+ if (window.athos?.controller) {
200
+ delete window.athos.controller[id];
201
+ }
202
+ }
203
+ });
204
+ }
154
205
  }
155
- async function readyTheController(instance, services, injectedElem, context, profileCount, elem, controllerGlobals, target) {
206
+ async function readyTheController(instance, services, targetElem, context, profileCount, scriptElem, controllerGlobals, target, targeter) {
156
207
  const { profile, batchId, cart, tag } = controllerGlobals;
157
208
  const batched = profile?.batched ?? controllerGlobals.batched ?? true;
158
209
  if (!tag) {
159
210
  // FEEDBACK: change message depending on script integration type (profile vs. legacy)
160
- instance.logger.warn(`'tag' is missing from <script> tag, skipping this profile`, elem);
211
+ instance.logger.warn(`'tag' is missing from <script> tag, skipping this profile`, scriptElem);
161
212
  return;
162
213
  }
163
214
  if (Array.isArray(cart)) {
164
215
  instance.tracker.cookies.cart.set(cart);
165
216
  }
166
- profileCount[tag] = profileCount[tag] + 1 || 1;
167
217
  const globals = deepmerge.all([
168
218
  instance.config.client?.globals || {},
169
219
  instance.config.config?.globals || {},
170
220
  controllerGlobals,
171
221
  ]);
172
- const controllerConfig = {
173
- id: `recommend_${tag}_${profileCount[tag] - 1}`,
222
+ const controllerConfigBase = {
174
223
  tag,
175
224
  batched: batched ?? instance.config.config?.batched ?? true,
176
225
  realtime: Boolean(context.options?.realtime ?? context.profile?.options?.realtime ?? instance.config.config?.realtime),
@@ -179,78 +228,78 @@ async function readyTheController(instance, services, injectedElem, context, pro
179
228
  plugins: instance.config.config.plugins,
180
229
  branch: instance.config.config?.branch || 'production',
181
230
  limit: instance.config.config?.limit,
231
+ beacon: instance.config.config?.beacon || { enabled: true },
182
232
  settings: {
183
233
  variants: instance.config.config?.variants,
234
+ quickview: instance.config.config?.quickview,
184
235
  },
185
236
  globals,
186
237
  };
187
238
  if (profile?.branch) {
188
- controllerConfig.branch = profile?.branch;
239
+ controllerConfigBase.branch = profile?.branch;
189
240
  }
190
- // try to find an existing controller by similar configuration
191
- let controller = Object.keys(instance.controller)
192
- .map((id) => instance.controller[id])
193
- .filter((controller) => {
194
- return (JSON.stringify({
195
- batched: controller.config.batched,
196
- branch: controller.config.branch,
197
- globals: controller.config.globals,
198
- tag: controller.config.tag,
199
- realtime: controller.config.realtime,
200
- }) ==
201
- JSON.stringify({
202
- batched: controllerConfig.batched,
203
- branch: controllerConfig.branch,
204
- globals: controllerConfig.globals,
205
- tag: controllerConfig.tag,
206
- realtime: controllerConfig.realtime,
207
- }));
208
- })[0];
209
- if (!controller) {
210
- // no existing controller found of same configuration - creating a new controller
211
- const createRecommendationController = (await import('../create/createRecommendationController')).default;
212
- controller = createRecommendationController({
213
- url: instance.config.url,
214
- controller: controllerConfig,
215
- context,
216
- mode: instance.config.mode,
217
- }, { client: instance.client, tracker: instance.tracker });
218
- instance.uses.forEach((attachements) => controller.use(attachements));
219
- instance.plugins.forEach((plugin) => controller.plugin(plugin.func, ...plugin.args));
220
- instance.middleware.forEach((middleware) => controller.on(middleware.event, ...middleware.func));
241
+ profileCount[tag] = profileCount[tag] + 1 || 1;
242
+ const controllerConfig = {
243
+ id: `recommend_${tag}_${profileCount[tag] - 1}`,
244
+ ...controllerConfigBase,
245
+ };
246
+ const controller = createRecommendationController({
247
+ url: instance.config.url,
248
+ controller: controllerConfig,
249
+ context,
250
+ mode: instance.config.mode,
251
+ }, { client: instance.client, tracker: instance.tracker });
252
+ // mark element with controller id so cleanupStaleControllers knows it's active
253
+ if (targetElem) {
254
+ targetElem.setAttribute('ss-controller-id', controller.id);
221
255
  }
256
+ instance.uses.forEach((attachements) => controller.use(attachements));
257
+ instance.plugins.forEach((plugin) => controller.plugin(plugin.func, ...plugin.args));
258
+ instance.middleware.forEach((middleware) => controller.on(middleware.event, ...middleware.func));
259
+ // add controller to instantiator and global namespace
260
+ instance.controller[controller.config.id] = controller;
261
+ window.athos.controller = window.athos.controller || {};
262
+ window.athos.controller[controller.config.id] = controller;
263
+ // register targeter on the controller for element tracking
264
+ controller.addTargeter(targeter);
222
265
  // run a search on the controller if it is not currently
223
266
  if (!controller.store.loading) {
224
267
  await controller.search();
225
268
  }
226
- controller.addTargeter(instance.targeter);
227
- instance.controller[controller.config.id] = controller;
228
- window.athos.controller = window.athos.controller || {};
229
- window.athos.controller[controller.config.id] = controller;
230
269
  const profileVars = controller.store.profile.display?.templateParameters;
231
- const component = controller.store.profile.display?.template?.component;
232
270
  if (controller.store.error) {
233
271
  //something went wrong
234
272
  //err was already logged - nothing to do.
235
273
  return;
236
274
  }
237
275
  if (!controller.store.profile.display.template) {
238
- instance.logger.error(`profile '${tag}' found on the following element is missing a template!\n${elem?.outerHTML}`);
276
+ instance.logger.error(`profile '${tag}' found on the following element is missing a template!\n${scriptElem?.outerHTML}`);
239
277
  return;
240
278
  }
241
279
  if (!profileVars) {
242
- instance.logger.error(`profile '${tag}' found on the following element is missing templateParameters!\n${elem?.outerHTML}`);
280
+ instance.logger.error(`profile '${tag}' found on the following element is missing templateParameters!\n${scriptElem?.outerHTML}`);
243
281
  return;
244
282
  }
283
+ if (targetElem) {
284
+ await renderController(instance, services, controller, targetElem, scriptElem, target);
285
+ }
286
+ return controller;
287
+ }
288
+ async function renderController(instance, services, controller, targetElem, scriptElem, target) {
289
+ // update the element with the controller id
290
+ if (targetElem) {
291
+ targetElem.setAttribute('ss-controller-id', controller.id);
292
+ }
293
+ const tag = controller.config.tag;
294
+ const component = controller.store.profile.display?.template?.component;
245
295
  if (!component) {
246
- instance.logger.error(`profile '${tag}' found on the following element is missing a component!\n${elem?.outerHTML}`);
296
+ instance.logger.error(`profile '${tag}' found on the following element is missing a component!\n${scriptElem?.outerHTML}`);
247
297
  return;
248
298
  }
249
299
  let props = {};
250
300
  let RecommendationsComponent = undefined;
251
301
  props.className = `ss__recommendation-${component.toLowerCase()}`;
252
- injectedElem?.setAttribute('id', `${controllerConfig.id}`);
253
- instance.config.components[component]?.onTarget?.(target, elem, injectedElem, controller);
302
+ instance.config.components[component]?.onTarget?.(target, scriptElem, targetElem, controller);
254
303
  if (instance.config.components[component] && typeof instance.config.components[component] == 'function') {
255
304
  RecommendationsComponent = await instance.config.components[component]();
256
305
  }
@@ -263,13 +312,11 @@ async function readyTheController(instance, services, injectedElem, context, pro
263
312
  RecommendationsComponent = importResolutions[0];
264
313
  }
265
314
  if (!RecommendationsComponent) {
266
- instance.logger.error(`profile '${tag}' found on the following element is expecting component mapping for '${component}' - verify instantiator config.\n${elem?.outerHTML}`);
315
+ instance.logger.error(`profile '${tag}' found on the following element is expecting component mapping for '${component}' - verify instantiator config.\n${scriptElem?.outerHTML}`);
267
316
  return;
268
317
  }
269
318
  setTimeout(() => {
270
- if (injectedElem && RecommendationsComponent) {
271
- render(_jsx(RecommendationsComponent, { controller: controller, snap: services?.snap, ...props }), injectedElem);
272
- }
319
+ render(_jsx(RecommendationsComponent, { controller: controller, snap: services?.snap, ...props }), targetElem);
273
320
  });
274
321
  }
275
322
  function getArrayFunc(arrayOrFunc) {
@@ -9,7 +9,7 @@ import type { Controllers, AbstractController, SearchControllerConfig, ChatContr
9
9
  import type { TrackerConfig, TrackerGlobals } from '@athoscommerce/snap-tracker';
10
10
  import type { Target, OnTarget } from '@athoscommerce/snap-toolbox';
11
11
  import type { UrlTranslatorConfig } from '@athoscommerce/snap-url-manager';
12
- import { RecommendationInstantiator, RecommendationInstantiatorConfig } from './Instantiators/RecommendationInstantiator';
12
+ import type { RecommendationInstantiator, RecommendationInstantiatorConfig } from './Instantiators/RecommendationInstantiator';
13
13
  import type { SnapControllerServices, InitialUrlConfig, SnapFeatures } from './types';
14
14
  import type { TemplatesStore } from './Templates/Stores/TemplateStore';
15
15
  export declare const BRANCH_COOKIE = "athosBranch";
@@ -1 +1 @@
1
- {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["../../../src/Snap.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Snap.d.ts","sourceRoot":"","sources":["../../../src/Snap.tsx"],"names":[],"mappings":"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"}
@@ -144,12 +144,14 @@ export class Snap {
144
144
  let elem = null;
145
145
  elem = event && event.target;
146
146
  while (Object.keys(attributes).length == 0 && elem !== null && levels <= MAX_PARENT_LEVELS) {
147
- Object.values(elem.attributes).forEach((attr) => {
148
- const attrName = attr.nodeName;
149
- if (attributeList.indexOf(attrName) != -1) {
150
- attributes[attrName] = elem && elem.getAttribute(attrName);
151
- }
152
- });
147
+ if (elem.attributes) {
148
+ Object.values(elem.attributes).forEach((attr) => {
149
+ const attrName = attr.nodeName;
150
+ if (attributeList.indexOf(attrName) != -1) {
151
+ attributes[attrName] = elem && elem.getAttribute(attrName);
152
+ }
153
+ });
154
+ }
153
155
  elem = elem.parentElement;
154
156
  levels++;
155
157
  }
@@ -578,6 +580,19 @@ export class Snap {
578
580
  if (!target.component) {
579
581
  throw new Error(`Targets at index ${target_index} missing component value (Component).`);
580
582
  }
583
+ // Chat mounts at the document level — if the consumer aimed at <body>
584
+ // directly, give DomTargeter a child to render into instead of stomping on body.
585
+ if (target.selector === 'body' && !target.inject) {
586
+ target = {
587
+ ...target,
588
+ inject: {
589
+ action: 'append',
590
+ element: () => {
591
+ return document.createElement('div');
592
+ },
593
+ },
594
+ };
595
+ }
581
596
  const targeter = new DomTargeter([{ ...target }], async (target, elem, originalElem) => {
582
597
  const cntrlr = await this._createController(ControllerTypes.chat, controller.config, controller.services, controller.url, controller.context, (cntrlr) => {
583
598
  if (cntrlr)
@@ -1 +1 @@
1
- {"version":3,"file":"SnapHybrid.d.ts","sourceRoot":"","sources":["../../../src/SnapHybrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAoB,MAAM,2BAA2B,CAAC;AAKrH,KAAK,uBAAuB,GAAG;IAC9B,eAAe,EAAE,yBAAyB,GAAG,2BAA2B,CAAC;IACzE,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,qBAAa,UAAW,SAAQ,IAAI;gBACvB,MAAM,EAAE,uBAAuB;CAqB3C"}
1
+ {"version":3,"file":"SnapHybrid.d.ts","sourceRoot":"","sources":["../../../src/SnapHybrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAoB,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAKrH,KAAK,uBAAuB,GAAG;IAC9B,eAAe,EAAE,yBAAyB,GAAG,2BAA2B,CAAC;IACzE,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,qBAAa,UAAW,SAAQ,IAAI;gBACvB,MAAM,EAAE,uBAAuB;CAqB3C"}