@selwise/widget 0.0.3 → 1.0.1

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 (638) hide show
  1. package/README.md +2 -1
  2. package/package.json +18 -16
  3. package/dist/npm/cjs/constants.js +0 -167
  4. package/dist/npm/cjs/constants.js.map +0 -1
  5. package/dist/npm/cjs/core/conflict-resolver.js +0 -203
  6. package/dist/npm/cjs/core/conflict-resolver.js.map +0 -1
  7. package/dist/npm/cjs/core/event-batcher.js +0 -977
  8. package/dist/npm/cjs/core/event-batcher.js.map +0 -1
  9. package/dist/npm/cjs/core/experiment-overrides.js +0 -178
  10. package/dist/npm/cjs/core/experiment-overrides.js.map +0 -1
  11. package/dist/npm/cjs/core/experiments.js +0 -317
  12. package/dist/npm/cjs/core/experiments.js.map +0 -1
  13. package/dist/npm/cjs/core/frequency-caps.js +0 -297
  14. package/dist/npm/cjs/core/frequency-caps.js.map +0 -1
  15. package/dist/npm/cjs/core/index.js +0 -27
  16. package/dist/npm/cjs/core/index.js.map +0 -1
  17. package/dist/npm/cjs/core/indexeddb-queue.js +0 -333
  18. package/dist/npm/cjs/core/indexeddb-queue.js.map +0 -1
  19. package/dist/npm/cjs/core/journey-tracker.js +0 -243
  20. package/dist/npm/cjs/core/journey-tracker.js.map +0 -1
  21. package/dist/npm/cjs/core/page-targeting/index.js +0 -72
  22. package/dist/npm/cjs/core/page-targeting/index.js.map +0 -1
  23. package/dist/npm/cjs/core/script-executor.js +0 -80
  24. package/dist/npm/cjs/core/script-executor.js.map +0 -1
  25. package/dist/npm/cjs/core/segments.js +0 -172
  26. package/dist/npm/cjs/core/segments.js.map +0 -1
  27. package/dist/npm/cjs/core/tracker.js +0 -798
  28. package/dist/npm/cjs/core/tracker.js.map +0 -1
  29. package/dist/npm/cjs/datalayer/basket.js +0 -385
  30. package/dist/npm/cjs/datalayer/basket.js.map +0 -1
  31. package/dist/npm/cjs/datalayer/cart-association.js +0 -226
  32. package/dist/npm/cjs/datalayer/cart-association.js.map +0 -1
  33. package/dist/npm/cjs/datalayer/checkout.js +0 -382
  34. package/dist/npm/cjs/datalayer/checkout.js.map +0 -1
  35. package/dist/npm/cjs/datalayer/constants.js +0 -163
  36. package/dist/npm/cjs/datalayer/constants.js.map +0 -1
  37. package/dist/npm/cjs/datalayer/index.js +0 -1010
  38. package/dist/npm/cjs/datalayer/index.js.map +0 -1
  39. package/dist/npm/cjs/datalayer/listener.js +0 -416
  40. package/dist/npm/cjs/datalayer/listener.js.map +0 -1
  41. package/dist/npm/cjs/datalayer/page.js +0 -343
  42. package/dist/npm/cjs/datalayer/page.js.map +0 -1
  43. package/dist/npm/cjs/datalayer/product.js +0 -517
  44. package/dist/npm/cjs/datalayer/product.js.map +0 -1
  45. package/dist/npm/cjs/datalayer/reverse-mappings.js +0 -139
  46. package/dist/npm/cjs/datalayer/reverse-mappings.js.map +0 -1
  47. package/dist/npm/cjs/datalayer/search.js +0 -363
  48. package/dist/npm/cjs/datalayer/search.js.map +0 -1
  49. package/dist/npm/cjs/datalayer/types.js +0 -134
  50. package/dist/npm/cjs/datalayer/types.js.map +0 -1
  51. package/dist/npm/cjs/datalayer/user.js +0 -372
  52. package/dist/npm/cjs/datalayer/user.js.map +0 -1
  53. package/dist/npm/cjs/debug/index.js +0 -679
  54. package/dist/npm/cjs/debug/index.js.map +0 -1
  55. package/dist/npm/cjs/entries/cdn.js +0 -72
  56. package/dist/npm/cjs/entries/cdn.js.map +0 -1
  57. package/dist/npm/cjs/index.js +0 -55
  58. package/dist/npm/cjs/index.js.map +0 -1
  59. package/dist/npm/cjs/modules/contract/recommendation-contract.js +0 -119
  60. package/dist/npm/cjs/modules/contract/recommendation-contract.js.map +0 -1
  61. package/dist/npm/cjs/modules/contract/search-contract.js +0 -18
  62. package/dist/npm/cjs/modules/contract/search-contract.js.map +0 -1
  63. package/dist/npm/cjs/modules/contract/tracking-contract.js +0 -16
  64. package/dist/npm/cjs/modules/contract/tracking-contract.js.map +0 -1
  65. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js +0 -164
  66. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  67. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js +0 -21
  68. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  69. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js +0 -3
  70. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  71. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js +0 -107
  72. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  73. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js +0 -404
  74. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js.map +0 -1
  75. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js +0 -21
  76. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js.map +0 -1
  77. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js +0 -8
  78. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js.map +0 -1
  79. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js +0 -126
  80. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js.map +0 -1
  81. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js +0 -133
  82. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  83. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js +0 -21
  84. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  85. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js +0 -3
  86. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  87. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js +0 -154
  88. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  89. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js +0 -1481
  90. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  91. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js +0 -22
  92. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js.map +0 -1
  93. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js +0 -21
  94. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  95. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js +0 -8
  96. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js.map +0 -1
  97. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js +0 -139
  98. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  99. package/dist/npm/cjs/modules/contract/widget-contract.js +0 -10
  100. package/dist/npm/cjs/modules/contract/widget-contract.js.map +0 -1
  101. package/dist/npm/cjs/modules/products/tracking.js +0 -214
  102. package/dist/npm/cjs/modules/products/tracking.js.map +0 -1
  103. package/dist/npm/cjs/modules/recommendation/cart-handlers.js +0 -52
  104. package/dist/npm/cjs/modules/recommendation/cart-handlers.js.map +0 -1
  105. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js +0 -287
  106. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js.map +0 -1
  107. package/dist/npm/cjs/modules/recommendation/index.js +0 -678
  108. package/dist/npm/cjs/modules/recommendation/index.js.map +0 -1
  109. package/dist/npm/cjs/modules/recommendation/renderers/grid.js +0 -21
  110. package/dist/npm/cjs/modules/recommendation/renderers/grid.js.map +0 -1
  111. package/dist/npm/cjs/modules/recommendation/renderers/list.js +0 -22
  112. package/dist/npm/cjs/modules/recommendation/renderers/list.js.map +0 -1
  113. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js +0 -22
  114. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js.map +0 -1
  115. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js +0 -145
  116. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  117. package/dist/npm/cjs/modules/recommendation/slider-controls.js +0 -201
  118. package/dist/npm/cjs/modules/recommendation/slider-controls.js.map +0 -1
  119. package/dist/npm/cjs/modules/recommendation/tracking.js +0 -247
  120. package/dist/npm/cjs/modules/recommendation/tracking.js.map +0 -1
  121. package/dist/npm/cjs/modules/recommendation/utils/dom.js +0 -70
  122. package/dist/npm/cjs/modules/recommendation/utils/dom.js.map +0 -1
  123. package/dist/npm/cjs/modules/recommendation/utils/format.js +0 -13
  124. package/dist/npm/cjs/modules/recommendation/utils/format.js.map +0 -1
  125. package/dist/npm/cjs/modules/recommendation/utils/index.js +0 -22
  126. package/dist/npm/cjs/modules/recommendation/utils/index.js.map +0 -1
  127. package/dist/npm/cjs/modules/renderer/helpers.js +0 -16
  128. package/dist/npm/cjs/modules/renderer/helpers.js.map +0 -1
  129. package/dist/npm/cjs/modules/renderer/index.js +0 -52
  130. package/dist/npm/cjs/modules/renderer/index.js.map +0 -1
  131. package/dist/npm/cjs/modules/renderer/style-resolver.js +0 -11
  132. package/dist/npm/cjs/modules/renderer/style-resolver.js.map +0 -1
  133. package/dist/npm/cjs/modules/renderer/styles/index.js +0 -254
  134. package/dist/npm/cjs/modules/renderer/styles/index.js.map +0 -1
  135. package/dist/npm/cjs/modules/renderer/styles.js +0 -7
  136. package/dist/npm/cjs/modules/renderer/styles.js.map +0 -1
  137. package/dist/npm/cjs/modules/renderer/utils/helpers.js +0 -243
  138. package/dist/npm/cjs/modules/renderer/utils/helpers.js.map +0 -1
  139. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js +0 -65
  140. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js.map +0 -1
  141. package/dist/npm/cjs/modules/renderer/utils/placement.js +0 -34
  142. package/dist/npm/cjs/modules/renderer/utils/placement.js.map +0 -1
  143. package/dist/npm/cjs/modules/renderer/utils.js +0 -61
  144. package/dist/npm/cjs/modules/renderer/utils.js.map +0 -1
  145. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js +0 -84
  146. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js.map +0 -1
  147. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js +0 -211
  148. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js.map +0 -1
  149. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js +0 -459
  150. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js.map +0 -1
  151. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js +0 -132
  152. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js.map +0 -1
  153. package/dist/npm/cjs/modules/renderer/widgets/custom.js +0 -58
  154. package/dist/npm/cjs/modules/renderer/widgets/custom.js.map +0 -1
  155. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js +0 -97
  156. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js.map +0 -1
  157. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js +0 -151
  158. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  159. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js +0 -70
  160. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js.map +0 -1
  161. package/dist/npm/cjs/modules/renderer/widgets/helpers.js +0 -87
  162. package/dist/npm/cjs/modules/renderer/widgets/helpers.js.map +0 -1
  163. package/dist/npm/cjs/modules/renderer/widgets/index.js +0 -39
  164. package/dist/npm/cjs/modules/renderer/widgets/index.js.map +0 -1
  165. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js +0 -124
  166. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js.map +0 -1
  167. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js +0 -280
  168. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js.map +0 -1
  169. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js +0 -197
  170. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js.map +0 -1
  171. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js +0 -105
  172. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js.map +0 -1
  173. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js +0 -47
  174. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js.map +0 -1
  175. package/dist/npm/cjs/modules/search/cart/index.js +0 -42
  176. package/dist/npm/cjs/modules/search/cart/index.js.map +0 -1
  177. package/dist/npm/cjs/modules/search/components/index.js +0 -13
  178. package/dist/npm/cjs/modules/search/components/index.js.map +0 -1
  179. package/dist/npm/cjs/modules/search/components/search-box.js +0 -28
  180. package/dist/npm/cjs/modules/search/components/search-box.js.map +0 -1
  181. package/dist/npm/cjs/modules/search/components/search-item.js +0 -197
  182. package/dist/npm/cjs/modules/search/components/search-item.js.map +0 -1
  183. package/dist/npm/cjs/modules/search/components/suggestions.js +0 -132
  184. package/dist/npm/cjs/modules/search/components/suggestions.js.map +0 -1
  185. package/dist/npm/cjs/modules/search/index.js +0 -646
  186. package/dist/npm/cjs/modules/search/index.js.map +0 -1
  187. package/dist/npm/cjs/modules/search/renderers/position-renderers.js +0 -229
  188. package/dist/npm/cjs/modules/search/renderers/position-renderers.js.map +0 -1
  189. package/dist/npm/cjs/modules/search/renderers/results-renderer.js +0 -180
  190. package/dist/npm/cjs/modules/search/renderers/results-renderer.js.map +0 -1
  191. package/dist/npm/cjs/modules/search/services/api-service.js +0 -121
  192. package/dist/npm/cjs/modules/search/services/api-service.js.map +0 -1
  193. package/dist/npm/cjs/modules/search/services/tracking-service.js +0 -263
  194. package/dist/npm/cjs/modules/search/services/tracking-service.js.map +0 -1
  195. package/dist/npm/cjs/modules/search/styles.js +0 -864
  196. package/dist/npm/cjs/modules/search/styles.js.map +0 -1
  197. package/dist/npm/cjs/modules/search/utils/helpers.js +0 -100
  198. package/dist/npm/cjs/modules/search/utils/helpers.js.map +0 -1
  199. package/dist/npm/cjs/modules/search/utils/icons.js +0 -41
  200. package/dist/npm/cjs/modules/search/utils/icons.js.map +0 -1
  201. package/dist/npm/cjs/modules/search/utils/index.js +0 -22
  202. package/dist/npm/cjs/modules/search/utils/index.js.map +0 -1
  203. package/dist/npm/cjs/modules/search/utils/storage.js +0 -58
  204. package/dist/npm/cjs/modules/search/utils/storage.js.map +0 -1
  205. package/dist/npm/cjs/selwise.js +0 -1166
  206. package/dist/npm/cjs/selwise.js.map +0 -1
  207. package/dist/npm/cjs/sentry-test.js +0 -118
  208. package/dist/npm/cjs/sentry-test.js.map +0 -1
  209. package/dist/npm/cjs/sentry.js +0 -451
  210. package/dist/npm/cjs/sentry.js.map +0 -1
  211. package/dist/npm/cjs/shared/cart/handlers.js +0 -259
  212. package/dist/npm/cjs/shared/cart/handlers.js.map +0 -1
  213. package/dist/npm/cjs/shared/cart/index.js +0 -23
  214. package/dist/npm/cjs/shared/cart/index.js.map +0 -1
  215. package/dist/npm/cjs/shared/cart/types.js +0 -7
  216. package/dist/npm/cjs/shared/cart/types.js.map +0 -1
  217. package/dist/npm/cjs/shared/product-card/index.js +0 -24
  218. package/dist/npm/cjs/shared/product-card/index.js.map +0 -1
  219. package/dist/npm/cjs/shared/product-card/renderer.js +0 -341
  220. package/dist/npm/cjs/shared/product-card/renderer.js.map +0 -1
  221. package/dist/npm/cjs/shared/product-card/styles.js +0 -195
  222. package/dist/npm/cjs/shared/product-card/styles.js.map +0 -1
  223. package/dist/npm/cjs/shared/product-card/types.js +0 -67
  224. package/dist/npm/cjs/shared/product-card/types.js.map +0 -1
  225. package/dist/npm/cjs/types/config.js +0 -6
  226. package/dist/npm/cjs/types/config.js.map +0 -1
  227. package/dist/npm/cjs/types/experiments.js +0 -17
  228. package/dist/npm/cjs/types/experiments.js.map +0 -1
  229. package/dist/npm/cjs/types/global-api.js +0 -3
  230. package/dist/npm/cjs/types/global-api.js.map +0 -1
  231. package/dist/npm/cjs/types/index.js +0 -27
  232. package/dist/npm/cjs/types/index.js.map +0 -1
  233. package/dist/npm/cjs/types/recommendation.js +0 -6
  234. package/dist/npm/cjs/types/recommendation.js.map +0 -1
  235. package/dist/npm/cjs/types/renderer.js +0 -6
  236. package/dist/npm/cjs/types/renderer.js.map +0 -1
  237. package/dist/npm/cjs/types/search.js +0 -6
  238. package/dist/npm/cjs/types/search.js.map +0 -1
  239. package/dist/npm/cjs/utils/api-url.js +0 -35
  240. package/dist/npm/cjs/utils/api-url.js.map +0 -1
  241. package/dist/npm/cjs/utils/debounce.js +0 -74
  242. package/dist/npm/cjs/utils/debounce.js.map +0 -1
  243. package/dist/npm/cjs/utils/event-id.js +0 -23
  244. package/dist/npm/cjs/utils/event-id.js.map +0 -1
  245. package/dist/npm/cjs/utils/index.js +0 -28
  246. package/dist/npm/cjs/utils/index.js.map +0 -1
  247. package/dist/npm/cjs/utils/logger.js +0 -74
  248. package/dist/npm/cjs/utils/logger.js.map +0 -1
  249. package/dist/npm/cjs/utils/sanitize.js +0 -159
  250. package/dist/npm/cjs/utils/sanitize.js.map +0 -1
  251. package/dist/npm/cjs/utils/storage.js +0 -285
  252. package/dist/npm/cjs/utils/storage.js.map +0 -1
  253. package/dist/npm/cjs/utils/tracking-metadata.js +0 -18
  254. package/dist/npm/cjs/utils/tracking-metadata.js.map +0 -1
  255. package/dist/npm/cjs/utils/url-matcher.js +0 -11
  256. package/dist/npm/cjs/utils/url-matcher.js.map +0 -1
  257. package/dist/npm/esm/constants.d.ts +0 -130
  258. package/dist/npm/esm/constants.js +0 -164
  259. package/dist/npm/esm/constants.js.map +0 -1
  260. package/dist/npm/esm/core/conflict-resolver.d.ts +0 -96
  261. package/dist/npm/esm/core/conflict-resolver.js +0 -198
  262. package/dist/npm/esm/core/conflict-resolver.js.map +0 -1
  263. package/dist/npm/esm/core/event-batcher.d.ts +0 -253
  264. package/dist/npm/esm/core/event-batcher.js +0 -973
  265. package/dist/npm/esm/core/event-batcher.js.map +0 -1
  266. package/dist/npm/esm/core/experiment-overrides.d.ts +0 -7
  267. package/dist/npm/esm/core/experiment-overrides.js +0 -172
  268. package/dist/npm/esm/core/experiment-overrides.js.map +0 -1
  269. package/dist/npm/esm/core/experiments.d.ts +0 -90
  270. package/dist/npm/esm/core/experiments.js +0 -313
  271. package/dist/npm/esm/core/experiments.js.map +0 -1
  272. package/dist/npm/esm/core/frequency-caps.d.ts +0 -124
  273. package/dist/npm/esm/core/frequency-caps.js +0 -292
  274. package/dist/npm/esm/core/frequency-caps.js.map +0 -1
  275. package/dist/npm/esm/core/index.d.ts +0 -10
  276. package/dist/npm/esm/core/index.js +0 -11
  277. package/dist/npm/esm/core/index.js.map +0 -1
  278. package/dist/npm/esm/core/indexeddb-queue.d.ts +0 -83
  279. package/dist/npm/esm/core/indexeddb-queue.js +0 -328
  280. package/dist/npm/esm/core/indexeddb-queue.js.map +0 -1
  281. package/dist/npm/esm/core/journey-tracker.d.ts +0 -102
  282. package/dist/npm/esm/core/journey-tracker.js +0 -237
  283. package/dist/npm/esm/core/journey-tracker.js.map +0 -1
  284. package/dist/npm/esm/core/page-targeting/index.d.ts +0 -8
  285. package/dist/npm/esm/core/page-targeting/index.js +0 -67
  286. package/dist/npm/esm/core/page-targeting/index.js.map +0 -1
  287. package/dist/npm/esm/core/script-executor.d.ts +0 -31
  288. package/dist/npm/esm/core/script-executor.js +0 -76
  289. package/dist/npm/esm/core/script-executor.js.map +0 -1
  290. package/dist/npm/esm/core/segments.d.ts +0 -39
  291. package/dist/npm/esm/core/segments.js +0 -168
  292. package/dist/npm/esm/core/segments.js.map +0 -1
  293. package/dist/npm/esm/core/tracker.d.ts +0 -182
  294. package/dist/npm/esm/core/tracker.js +0 -794
  295. package/dist/npm/esm/core/tracker.js.map +0 -1
  296. package/dist/npm/esm/datalayer/basket.d.ts +0 -104
  297. package/dist/npm/esm/datalayer/basket.js +0 -381
  298. package/dist/npm/esm/datalayer/basket.js.map +0 -1
  299. package/dist/npm/esm/datalayer/cart-association.d.ts +0 -65
  300. package/dist/npm/esm/datalayer/cart-association.js +0 -222
  301. package/dist/npm/esm/datalayer/cart-association.js.map +0 -1
  302. package/dist/npm/esm/datalayer/checkout.d.ts +0 -96
  303. package/dist/npm/esm/datalayer/checkout.js +0 -378
  304. package/dist/npm/esm/datalayer/checkout.js.map +0 -1
  305. package/dist/npm/esm/datalayer/constants.d.ts +0 -77
  306. package/dist/npm/esm/datalayer/constants.js +0 -160
  307. package/dist/npm/esm/datalayer/constants.js.map +0 -1
  308. package/dist/npm/esm/datalayer/index.d.ts +0 -212
  309. package/dist/npm/esm/datalayer/index.js +0 -991
  310. package/dist/npm/esm/datalayer/index.js.map +0 -1
  311. package/dist/npm/esm/datalayer/listener.d.ts +0 -108
  312. package/dist/npm/esm/datalayer/listener.js +0 -411
  313. package/dist/npm/esm/datalayer/listener.js.map +0 -1
  314. package/dist/npm/esm/datalayer/page.d.ts +0 -94
  315. package/dist/npm/esm/datalayer/page.js +0 -339
  316. package/dist/npm/esm/datalayer/page.js.map +0 -1
  317. package/dist/npm/esm/datalayer/product.d.ts +0 -133
  318. package/dist/npm/esm/datalayer/product.js +0 -513
  319. package/dist/npm/esm/datalayer/product.js.map +0 -1
  320. package/dist/npm/esm/datalayer/reverse-mappings.d.ts +0 -62
  321. package/dist/npm/esm/datalayer/reverse-mappings.js +0 -135
  322. package/dist/npm/esm/datalayer/reverse-mappings.js.map +0 -1
  323. package/dist/npm/esm/datalayer/search.d.ts +0 -108
  324. package/dist/npm/esm/datalayer/search.js +0 -359
  325. package/dist/npm/esm/datalayer/search.js.map +0 -1
  326. package/dist/npm/esm/datalayer/types.d.ts +0 -292
  327. package/dist/npm/esm/datalayer/types.js +0 -131
  328. package/dist/npm/esm/datalayer/types.js.map +0 -1
  329. package/dist/npm/esm/datalayer/user.d.ts +0 -104
  330. package/dist/npm/esm/datalayer/user.js +0 -368
  331. package/dist/npm/esm/datalayer/user.js.map +0 -1
  332. package/dist/npm/esm/debug/index.d.ts +0 -173
  333. package/dist/npm/esm/debug/index.js +0 -673
  334. package/dist/npm/esm/debug/index.js.map +0 -1
  335. package/dist/npm/esm/entries/cdn.d.ts +0 -1
  336. package/dist/npm/esm/entries/cdn.js +0 -35
  337. package/dist/npm/esm/entries/cdn.js.map +0 -1
  338. package/dist/npm/esm/index.d.ts +0 -7
  339. package/dist/npm/esm/index.js +0 -17
  340. package/dist/npm/esm/index.js.map +0 -1
  341. package/dist/npm/esm/modules/contract/recommendation-contract.d.ts +0 -5
  342. package/dist/npm/esm/modules/contract/recommendation-contract.js +0 -107
  343. package/dist/npm/esm/modules/contract/recommendation-contract.js.map +0 -1
  344. package/dist/npm/esm/modules/contract/search-contract.d.ts +0 -1
  345. package/dist/npm/esm/modules/contract/search-contract.js +0 -2
  346. package/dist/npm/esm/modules/contract/search-contract.js.map +0 -1
  347. package/dist/npm/esm/modules/contract/tracking-contract.d.ts +0 -1
  348. package/dist/npm/esm/modules/contract/tracking-contract.js +0 -2
  349. package/dist/npm/esm/modules/contract/tracking-contract.js.map +0 -1
  350. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.d.ts +0 -8
  351. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js +0 -160
  352. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  353. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.d.ts +0 -3
  354. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js +0 -5
  355. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  356. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.d.ts +0 -56
  357. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js +0 -2
  358. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  359. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.d.ts +0 -3
  360. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js +0 -103
  361. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  362. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.d.ts +0 -35
  363. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js +0 -396
  364. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js.map +0 -1
  365. package/dist/npm/esm/modules/contract/vendor/search-contract/index.d.ts +0 -3
  366. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js +0 -5
  367. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js.map +0 -1
  368. package/dist/npm/esm/modules/contract/vendor/search-contract/types.d.ts +0 -119
  369. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js +0 -7
  370. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js.map +0 -1
  371. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.d.ts +0 -22
  372. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js +0 -118
  373. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js.map +0 -1
  374. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.d.ts +0 -7
  375. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js +0 -130
  376. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  377. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.d.ts +0 -3
  378. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js +0 -5
  379. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  380. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.d.ts +0 -37
  381. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js +0 -2
  382. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  383. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.d.ts +0 -6
  384. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js +0 -147
  385. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  386. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.d.ts +0 -22
  387. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js +0 -1472
  388. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  389. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.d.ts +0 -4
  390. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js +0 -6
  391. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js.map +0 -1
  392. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.d.ts +0 -14
  393. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js +0 -18
  394. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  395. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.d.ts +0 -128
  396. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js +0 -7
  397. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js.map +0 -1
  398. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.d.ts +0 -11
  399. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js +0 -132
  400. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  401. package/dist/npm/esm/modules/contract/widget-contract.d.ts +0 -1
  402. package/dist/npm/esm/modules/contract/widget-contract.js +0 -2
  403. package/dist/npm/esm/modules/contract/widget-contract.js.map +0 -1
  404. package/dist/npm/esm/modules/products/tracking.d.ts +0 -122
  405. package/dist/npm/esm/modules/products/tracking.js +0 -203
  406. package/dist/npm/esm/modules/products/tracking.js.map +0 -1
  407. package/dist/npm/esm/modules/recommendation/cart-handlers.d.ts +0 -10
  408. package/dist/npm/esm/modules/recommendation/cart-handlers.js +0 -49
  409. package/dist/npm/esm/modules/recommendation/cart-handlers.js.map +0 -1
  410. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.d.ts +0 -37
  411. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js +0 -281
  412. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js.map +0 -1
  413. package/dist/npm/esm/modules/recommendation/index.d.ts +0 -11
  414. package/dist/npm/esm/modules/recommendation/index.js +0 -674
  415. package/dist/npm/esm/modules/recommendation/index.js.map +0 -1
  416. package/dist/npm/esm/modules/recommendation/renderers/grid.d.ts +0 -5
  417. package/dist/npm/esm/modules/recommendation/renderers/grid.js +0 -18
  418. package/dist/npm/esm/modules/recommendation/renderers/grid.js.map +0 -1
  419. package/dist/npm/esm/modules/recommendation/renderers/list.d.ts +0 -5
  420. package/dist/npm/esm/modules/recommendation/renderers/list.js +0 -19
  421. package/dist/npm/esm/modules/recommendation/renderers/list.js.map +0 -1
  422. package/dist/npm/esm/modules/recommendation/renderers/masonry.d.ts +0 -5
  423. package/dist/npm/esm/modules/recommendation/renderers/masonry.js +0 -19
  424. package/dist/npm/esm/modules/recommendation/renderers/masonry.js.map +0 -1
  425. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.d.ts +0 -10
  426. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js +0 -140
  427. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  428. package/dist/npm/esm/modules/recommendation/slider-controls.d.ts +0 -17
  429. package/dist/npm/esm/modules/recommendation/slider-controls.js +0 -187
  430. package/dist/npm/esm/modules/recommendation/slider-controls.js.map +0 -1
  431. package/dist/npm/esm/modules/recommendation/tracking.d.ts +0 -28
  432. package/dist/npm/esm/modules/recommendation/tracking.js +0 -237
  433. package/dist/npm/esm/modules/recommendation/tracking.js.map +0 -1
  434. package/dist/npm/esm/modules/recommendation/utils/dom.d.ts +0 -10
  435. package/dist/npm/esm/modules/recommendation/utils/dom.js +0 -63
  436. package/dist/npm/esm/modules/recommendation/utils/dom.js.map +0 -1
  437. package/dist/npm/esm/modules/recommendation/utils/format.d.ts +0 -4
  438. package/dist/npm/esm/modules/recommendation/utils/format.js +0 -10
  439. package/dist/npm/esm/modules/recommendation/utils/format.js.map +0 -1
  440. package/dist/npm/esm/modules/recommendation/utils/index.d.ts +0 -5
  441. package/dist/npm/esm/modules/recommendation/utils/index.js +0 -6
  442. package/dist/npm/esm/modules/recommendation/utils/index.js.map +0 -1
  443. package/dist/npm/esm/modules/renderer/helpers.d.ts +0 -5
  444. package/dist/npm/esm/modules/renderer/helpers.js +0 -6
  445. package/dist/npm/esm/modules/renderer/helpers.js.map +0 -1
  446. package/dist/npm/esm/modules/renderer/index.d.ts +0 -8
  447. package/dist/npm/esm/modules/renderer/index.js +0 -48
  448. package/dist/npm/esm/modules/renderer/index.js.map +0 -1
  449. package/dist/npm/esm/modules/renderer/style-resolver.d.ts +0 -1
  450. package/dist/npm/esm/modules/renderer/style-resolver.js +0 -8
  451. package/dist/npm/esm/modules/renderer/style-resolver.js.map +0 -1
  452. package/dist/npm/esm/modules/renderer/styles/index.d.ts +0 -12
  453. package/dist/npm/esm/modules/renderer/styles/index.js +0 -250
  454. package/dist/npm/esm/modules/renderer/styles/index.js.map +0 -1
  455. package/dist/npm/esm/modules/renderer/styles.d.ts +0 -1
  456. package/dist/npm/esm/modules/renderer/styles.js +0 -2
  457. package/dist/npm/esm/modules/renderer/styles.js.map +0 -1
  458. package/dist/npm/esm/modules/renderer/utils/helpers.d.ts +0 -58
  459. package/dist/npm/esm/modules/renderer/utils/helpers.js +0 -225
  460. package/dist/npm/esm/modules/renderer/utils/helpers.js.map +0 -1
  461. package/dist/npm/esm/modules/renderer/utils/image-renderer.d.ts +0 -17
  462. package/dist/npm/esm/modules/renderer/utils/image-renderer.js +0 -60
  463. package/dist/npm/esm/modules/renderer/utils/image-renderer.js.map +0 -1
  464. package/dist/npm/esm/modules/renderer/utils/placement.d.ts +0 -6
  465. package/dist/npm/esm/modules/renderer/utils/placement.js +0 -31
  466. package/dist/npm/esm/modules/renderer/utils/placement.js.map +0 -1
  467. package/dist/npm/esm/modules/renderer/utils.d.ts +0 -11
  468. package/dist/npm/esm/modules/renderer/utils.js +0 -44
  469. package/dist/npm/esm/modules/renderer/utils.js.map +0 -1
  470. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.d.ts +0 -5
  471. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js +0 -81
  472. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js.map +0 -1
  473. package/dist/npm/esm/modules/renderer/widgets/cart-count.d.ts +0 -6
  474. package/dist/npm/esm/modules/renderer/widgets/cart-count.js +0 -208
  475. package/dist/npm/esm/modules/renderer/widgets/cart-count.js.map +0 -1
  476. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.d.ts +0 -18
  477. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js +0 -454
  478. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js.map +0 -1
  479. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.d.ts +0 -5
  480. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js +0 -129
  481. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js.map +0 -1
  482. package/dist/npm/esm/modules/renderer/widgets/custom.d.ts +0 -5
  483. package/dist/npm/esm/modules/renderer/widgets/custom.js +0 -55
  484. package/dist/npm/esm/modules/renderer/widgets/custom.js.map +0 -1
  485. package/dist/npm/esm/modules/renderer/widgets/embedded-card.d.ts +0 -5
  486. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js +0 -94
  487. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js.map +0 -1
  488. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.d.ts +0 -6
  489. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js +0 -147
  490. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  491. package/dist/npm/esm/modules/renderer/widgets/floating-button.d.ts +0 -5
  492. package/dist/npm/esm/modules/renderer/widgets/floating-button.js +0 -67
  493. package/dist/npm/esm/modules/renderer/widgets/floating-button.js.map +0 -1
  494. package/dist/npm/esm/modules/renderer/widgets/helpers.d.ts +0 -29
  495. package/dist/npm/esm/modules/renderer/widgets/helpers.js +0 -82
  496. package/dist/npm/esm/modules/renderer/widgets/helpers.js.map +0 -1
  497. package/dist/npm/esm/modules/renderer/widgets/index.d.ts +0 -17
  498. package/dist/npm/esm/modules/renderer/widgets/index.js +0 -19
  499. package/dist/npm/esm/modules/renderer/widgets/index.js.map +0 -1
  500. package/dist/npm/esm/modules/renderer/widgets/inline-banner.d.ts +0 -5
  501. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js +0 -121
  502. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js.map +0 -1
  503. package/dist/npm/esm/modules/renderer/widgets/newsletter.d.ts +0 -6
  504. package/dist/npm/esm/modules/renderer/widgets/newsletter.js +0 -277
  505. package/dist/npm/esm/modules/renderer/widgets/newsletter.js.map +0 -1
  506. package/dist/npm/esm/modules/renderer/widgets/product-view-count.d.ts +0 -6
  507. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js +0 -194
  508. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js.map +0 -1
  509. package/dist/npm/esm/modules/renderer/widgets/slide-in.d.ts +0 -5
  510. package/dist/npm/esm/modules/renderer/widgets/slide-in.js +0 -102
  511. package/dist/npm/esm/modules/renderer/widgets/slide-in.js.map +0 -1
  512. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.d.ts +0 -5
  513. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js +0 -44
  514. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js.map +0 -1
  515. package/dist/npm/esm/modules/search/cart/index.d.ts +0 -26
  516. package/dist/npm/esm/modules/search/cart/index.js +0 -39
  517. package/dist/npm/esm/modules/search/cart/index.js.map +0 -1
  518. package/dist/npm/esm/modules/search/components/index.d.ts +0 -6
  519. package/dist/npm/esm/modules/search/components/index.js +0 -7
  520. package/dist/npm/esm/modules/search/components/index.js.map +0 -1
  521. package/dist/npm/esm/modules/search/components/search-box.d.ts +0 -11
  522. package/dist/npm/esm/modules/search/components/search-box.js +0 -25
  523. package/dist/npm/esm/modules/search/components/search-box.js.map +0 -1
  524. package/dist/npm/esm/modules/search/components/search-item.d.ts +0 -20
  525. package/dist/npm/esm/modules/search/components/search-item.js +0 -193
  526. package/dist/npm/esm/modules/search/components/search-item.js.map +0 -1
  527. package/dist/npm/esm/modules/search/components/suggestions.d.ts +0 -10
  528. package/dist/npm/esm/modules/search/components/suggestions.js +0 -129
  529. package/dist/npm/esm/modules/search/components/suggestions.js.map +0 -1
  530. package/dist/npm/esm/modules/search/index.d.ts +0 -67
  531. package/dist/npm/esm/modules/search/index.js +0 -642
  532. package/dist/npm/esm/modules/search/index.js.map +0 -1
  533. package/dist/npm/esm/modules/search/renderers/position-renderers.d.ts +0 -23
  534. package/dist/npm/esm/modules/search/renderers/position-renderers.js +0 -221
  535. package/dist/npm/esm/modules/search/renderers/position-renderers.js.map +0 -1
  536. package/dist/npm/esm/modules/search/renderers/results-renderer.d.ts +0 -20
  537. package/dist/npm/esm/modules/search/renderers/results-renderer.js +0 -176
  538. package/dist/npm/esm/modules/search/renderers/results-renderer.js.map +0 -1
  539. package/dist/npm/esm/modules/search/services/api-service.d.ts +0 -18
  540. package/dist/npm/esm/modules/search/services/api-service.js +0 -115
  541. package/dist/npm/esm/modules/search/services/api-service.js.map +0 -1
  542. package/dist/npm/esm/modules/search/services/tracking-service.d.ts +0 -16
  543. package/dist/npm/esm/modules/search/services/tracking-service.js +0 -250
  544. package/dist/npm/esm/modules/search/services/tracking-service.js.map +0 -1
  545. package/dist/npm/esm/modules/search/styles.d.ts +0 -13
  546. package/dist/npm/esm/modules/search/styles.js +0 -860
  547. package/dist/npm/esm/modules/search/styles.js.map +0 -1
  548. package/dist/npm/esm/modules/search/utils/helpers.d.ts +0 -24
  549. package/dist/npm/esm/modules/search/utils/helpers.js +0 -93
  550. package/dist/npm/esm/modules/search/utils/helpers.js.map +0 -1
  551. package/dist/npm/esm/modules/search/utils/icons.d.ts +0 -16
  552. package/dist/npm/esm/modules/search/utils/icons.js +0 -36
  553. package/dist/npm/esm/modules/search/utils/icons.js.map +0 -1
  554. package/dist/npm/esm/modules/search/utils/index.d.ts +0 -6
  555. package/dist/npm/esm/modules/search/utils/index.js +0 -7
  556. package/dist/npm/esm/modules/search/utils/index.js.map +0 -1
  557. package/dist/npm/esm/modules/search/utils/storage.d.ts +0 -7
  558. package/dist/npm/esm/modules/search/utils/storage.js +0 -52
  559. package/dist/npm/esm/modules/search/utils/storage.js.map +0 -1
  560. package/dist/npm/esm/package.json +0 -1
  561. package/dist/npm/esm/selwise.d.ts +0 -235
  562. package/dist/npm/esm/selwise.js +0 -1129
  563. package/dist/npm/esm/selwise.js.map +0 -1
  564. package/dist/npm/esm/sentry-test.d.ts +0 -45
  565. package/dist/npm/esm/sentry-test.js +0 -109
  566. package/dist/npm/esm/sentry-test.js.map +0 -1
  567. package/dist/npm/esm/sentry.d.ts +0 -86
  568. package/dist/npm/esm/sentry.js +0 -441
  569. package/dist/npm/esm/sentry.js.map +0 -1
  570. package/dist/npm/esm/shared/cart/handlers.d.ts +0 -46
  571. package/dist/npm/esm/shared/cart/handlers.js +0 -249
  572. package/dist/npm/esm/shared/cart/handlers.js.map +0 -1
  573. package/dist/npm/esm/shared/cart/index.d.ts +0 -6
  574. package/dist/npm/esm/shared/cart/index.js +0 -7
  575. package/dist/npm/esm/shared/cart/index.js.map +0 -1
  576. package/dist/npm/esm/shared/cart/types.d.ts +0 -30
  577. package/dist/npm/esm/shared/cart/types.js +0 -6
  578. package/dist/npm/esm/shared/cart/types.js.map +0 -1
  579. package/dist/npm/esm/shared/product-card/index.d.ts +0 -7
  580. package/dist/npm/esm/shared/product-card/index.js +0 -8
  581. package/dist/npm/esm/shared/product-card/index.js.map +0 -1
  582. package/dist/npm/esm/shared/product-card/renderer.d.ts +0 -35
  583. package/dist/npm/esm/shared/product-card/renderer.js +0 -334
  584. package/dist/npm/esm/shared/product-card/renderer.js.map +0 -1
  585. package/dist/npm/esm/shared/product-card/styles.d.ts +0 -17
  586. package/dist/npm/esm/shared/product-card/styles.js +0 -190
  587. package/dist/npm/esm/shared/product-card/styles.js.map +0 -1
  588. package/dist/npm/esm/shared/product-card/types.d.ts +0 -84
  589. package/dist/npm/esm/shared/product-card/types.js +0 -63
  590. package/dist/npm/esm/shared/product-card/types.js.map +0 -1
  591. package/dist/npm/esm/types/config.d.ts +0 -26
  592. package/dist/npm/esm/types/config.js +0 -5
  593. package/dist/npm/esm/types/config.js.map +0 -1
  594. package/dist/npm/esm/types/experiments.d.ts +0 -47
  595. package/dist/npm/esm/types/experiments.js +0 -14
  596. package/dist/npm/esm/types/experiments.js.map +0 -1
  597. package/dist/npm/esm/types/global-api.d.ts +0 -40
  598. package/dist/npm/esm/types/global-api.js +0 -2
  599. package/dist/npm/esm/types/global-api.js.map +0 -1
  600. package/dist/npm/esm/types/index.d.ts +0 -9
  601. package/dist/npm/esm/types/index.js +0 -11
  602. package/dist/npm/esm/types/index.js.map +0 -1
  603. package/dist/npm/esm/types/recommendation.d.ts +0 -186
  604. package/dist/npm/esm/types/recommendation.js +0 -5
  605. package/dist/npm/esm/types/recommendation.js.map +0 -1
  606. package/dist/npm/esm/types/renderer.d.ts +0 -99
  607. package/dist/npm/esm/types/renderer.js +0 -5
  608. package/dist/npm/esm/types/renderer.js.map +0 -1
  609. package/dist/npm/esm/types/search.d.ts +0 -186
  610. package/dist/npm/esm/types/search.js +0 -5
  611. package/dist/npm/esm/types/search.js.map +0 -1
  612. package/dist/npm/esm/utils/api-url.d.ts +0 -1
  613. package/dist/npm/esm/utils/api-url.js +0 -32
  614. package/dist/npm/esm/utils/api-url.js.map +0 -1
  615. package/dist/npm/esm/utils/debounce.d.ts +0 -27
  616. package/dist/npm/esm/utils/debounce.js +0 -70
  617. package/dist/npm/esm/utils/debounce.js.map +0 -1
  618. package/dist/npm/esm/utils/event-id.d.ts +0 -5
  619. package/dist/npm/esm/utils/event-id.js +0 -20
  620. package/dist/npm/esm/utils/event-id.js.map +0 -1
  621. package/dist/npm/esm/utils/index.d.ts +0 -11
  622. package/dist/npm/esm/utils/index.js +0 -12
  623. package/dist/npm/esm/utils/index.js.map +0 -1
  624. package/dist/npm/esm/utils/logger.d.ts +0 -31
  625. package/dist/npm/esm/utils/logger.js +0 -66
  626. package/dist/npm/esm/utils/logger.js.map +0 -1
  627. package/dist/npm/esm/utils/sanitize.d.ts +0 -38
  628. package/dist/npm/esm/utils/sanitize.js +0 -148
  629. package/dist/npm/esm/utils/sanitize.js.map +0 -1
  630. package/dist/npm/esm/utils/storage.d.ts +0 -72
  631. package/dist/npm/esm/utils/storage.js +0 -271
  632. package/dist/npm/esm/utils/storage.js.map +0 -1
  633. package/dist/npm/esm/utils/tracking-metadata.d.ts +0 -1
  634. package/dist/npm/esm/utils/tracking-metadata.js +0 -15
  635. package/dist/npm/esm/utils/tracking-metadata.js.map +0 -1
  636. package/dist/npm/esm/utils/url-matcher.d.ts +0 -4
  637. package/dist/npm/esm/utils/url-matcher.js +0 -8
  638. package/dist/npm/esm/utils/url-matcher.js.map +0 -1
@@ -1,674 +0,0 @@
1
- /**
2
- * Recommendation Widget Module - Refactored
3
- * Handles fetching and rendering of product recommendations
4
- */
5
- import { evaluatePageTargeting, getConflictResolver, getFrequencyCapManager, } from '../../core/index.js';
6
- import { deepMergeExperimentConfig, getEffectiveConfig } from '../../core/experiment-overrides.js';
7
- import { debounce } from '../../utils/index.js';
8
- import { sanitizeCSS } from '../../utils/sanitize.js';
9
- import { TIMING } from '../../constants.js';
10
- import { testModeLog, testModeDebug, testModeError, testModeWarn } from '../../utils/logger.js';
11
- import { resolveRecommendationConfig } from '../contract/recommendation-contract.js';
12
- // Import utilities
13
- import { isWidgetInDOM, insertWidget, markRecommendationRoot, removeRecommendationRootsFromDOM, } from './utils/dom.js';
14
- // Import renderers
15
- import { createSlider } from './renderers/slider-renderer.js';
16
- import { createGrid } from './renderers/grid.js';
17
- import { createList } from './renderers/list.js';
18
- import { createMasonry } from './renderers/masonry.js';
19
- // Import product card
20
- import { createProductCard, executeCardScriptsForRecommendations } from './components/product-card-renderer.js';
21
- // Import slider controls
22
- import { initSliderControls } from './slider-controls.js';
23
- // Import cart handlers
24
- import { handleAddToCart } from './cart-handlers.js';
25
- // Import tracking
26
- import { trackEvent, trackBehavior, getSessionId, trackSliderNavigation, trackSliderSwipe, setupProductImpressionTracking, cleanupTracking, trackWidgetImpression } from './tracking.js';
27
- // Track rendered widgets to prevent duplicates
28
- const renderedWidgets = new Set();
29
- // Track active observers for cleanup
30
- const activeObservers = new Map();
31
- // SPA cleanup setup flag
32
- let spaCleanupSetup = false;
33
- const frequencyCapManager = getFrequencyCapManager();
34
- const conflictResolver = getConflictResolver();
35
- /**
36
- * Setup SPA navigation cleanup for recommendation module
37
- * Automatically cleans up observers when page navigation is detected
38
- */
39
- function setupSPACleanup() {
40
- if (spaCleanupSetup)
41
- return;
42
- spaCleanupSetup = true;
43
- // Listen for navigation events common in SPAs
44
- const originalPushState = history.pushState;
45
- const originalReplaceState = history.replaceState;
46
- history.pushState = (...args) => {
47
- originalPushState.apply(history, args);
48
- scheduleCleanup();
49
- };
50
- history.replaceState = (...args) => {
51
- originalReplaceState.apply(history, args);
52
- scheduleCleanup();
53
- };
54
- window.addEventListener('popstate', () => scheduleCleanup());
55
- window.addEventListener('hashchange', () => scheduleCleanup());
56
- }
57
- /**
58
- * Schedule deferred cleanup with a small delay
59
- */
60
- function scheduleCleanup() {
61
- setTimeout(() => {
62
- // Cleanup all observers on navigation
63
- activeObservers.forEach((observer, widgetId) => {
64
- observer.disconnect();
65
- });
66
- activeObservers.clear();
67
- testModeDebug('Recommendation', 'Cleaned up observers on navigation');
68
- }, 500);
69
- }
70
- /**
71
- * Detect current product ID from various sources
72
- * Priority:
73
- * 1. Config.currentProductId (explicitly set)
74
- * 2. Config.detectCurrentProduct callback
75
- * 3. Common meta tags and data attributes
76
- * 4. URL patterns (e.g., /product/SKU123)
77
- */
78
- function detectCurrentProductId(config) {
79
- // 1. Use explicitly set product ID
80
- if (config.currentProductId) {
81
- return config.currentProductId;
82
- }
83
- // 2. Use custom detection function
84
- if (config.detectCurrentProduct) {
85
- const id = config.detectCurrentProduct();
86
- if (id)
87
- return id;
88
- }
89
- // 3. Try common meta tags
90
- const metaSelectors = [
91
- 'meta[property="og:product:id"]',
92
- 'meta[property="product:id"]',
93
- 'meta[name="product-id"]',
94
- 'meta[name="product_id"]',
95
- 'meta[name="sku"]',
96
- ];
97
- for (const selector of metaSelectors) {
98
- const meta = document.querySelector(selector);
99
- if (meta?.content)
100
- return meta.content;
101
- }
102
- // 4. Try common data attributes on product containers
103
- const dataSelectors = [
104
- '[data-product-id]',
105
- '[data-product-sku]',
106
- '[data-item-code]',
107
- '[data-sku]',
108
- ];
109
- for (const selector of dataSelectors) {
110
- const el = document.querySelector(selector);
111
- if (el) {
112
- const attr = el.getAttribute('data-product-id')
113
- || el.getAttribute('data-product-sku')
114
- || el.getAttribute('data-item-code')
115
- || el.getAttribute('data-sku');
116
- if (attr)
117
- return attr;
118
- }
119
- }
120
- // 5. Try JSON-LD structured data
121
- const jsonLdScript = document.querySelector('script[type="application/ld+json"]');
122
- if (jsonLdScript) {
123
- try {
124
- const data = JSON.parse(jsonLdScript.textContent || '{}');
125
- if (data['@type'] === 'Product' && data.sku)
126
- return data.sku;
127
- if (data['@type'] === 'Product' && data.productID)
128
- return data.productID;
129
- }
130
- catch {
131
- // Ignore parse errors
132
- }
133
- }
134
- // 6. No product detected
135
- return null;
136
- }
137
- function getRecommendationFrequencyCapConfig(widget) {
138
- const triggerConfig = widget?.triggerConfig;
139
- const frequencyCap = triggerConfig?.frequencyCap;
140
- if (!frequencyCap || typeof frequencyCap !== 'object')
141
- return undefined;
142
- return frequencyCap;
143
- }
144
- function selectRecommendationCandidates(widgets) {
145
- if (widgets.length <= 1) {
146
- return widgets.map((widget) => ({
147
- candidateId: `recommendation:${widget.id}`,
148
- widget,
149
- frequencyKey: `display:recommendation:${widget.id}`,
150
- frequencyCapConfig: getRecommendationFrequencyCapConfig(widget),
151
- }));
152
- }
153
- const conflictCandidates = widgets.map((widget) => {
154
- const triggerConfig = widget?.triggerConfig || {};
155
- const conflictResolution = triggerConfig.conflictResolution || {};
156
- const candidate = conflictResolver.applyConfig({
157
- id: `recommendation:${widget.id}`,
158
- type: 'recommendation',
159
- selector: widget.containerSelector,
160
- placementPosition: widget.insertPosition,
161
- priority: widget.priority ?? conflictResolution.priority,
162
- conflictBehavior: conflictResolution.behavior,
163
- placementConfig: { conflictResolution },
164
- });
165
- return {
166
- ...candidate,
167
- widget,
168
- frequencyKey: `display:recommendation:${widget.id}`,
169
- frequencyCapConfig: getRecommendationFrequencyCapConfig(widget),
170
- };
171
- });
172
- const resolutionResults = conflictResolver.resolveAll(conflictCandidates);
173
- const selectedIds = new Set(resolutionResults.flatMap((result) => result.selected.map((item) => item.id)));
174
- return conflictCandidates
175
- .filter((candidate) => selectedIds.has(candidate.id))
176
- .map((candidate) => ({
177
- candidateId: candidate.id,
178
- widget: candidate.widget,
179
- frequencyKey: candidate.frequencyKey,
180
- frequencyCapConfig: candidate.frequencyCapConfig,
181
- }));
182
- }
183
- export async function initRecommendations(config) {
184
- try {
185
- // Setup SPA cleanup (only once)
186
- setupSPACleanup();
187
- const preloadedWidgets = Array.isArray(config.widgets) ? config.widgets : [];
188
- let widgets = preloadedWidgets
189
- .map((widget) => resolveRecommendationConfig(widget))
190
- .filter((widget) => Boolean(widget));
191
- // Fall back to API if preloaded widgets are not available
192
- if (widgets.length === 0) {
193
- const response = await fetch(`${config.apiEndpoint}/public/sites/${config.siteKey}/recommendations?pageUrl=${encodeURIComponent(window.location.href)}`);
194
- if (!response.ok)
195
- return;
196
- const data = await response.json();
197
- widgets = Array.isArray(data.widgets)
198
- ? data.widgets
199
- .map((widget) => resolveRecommendationConfig(widget))
200
- .filter((widget) => Boolean(widget))
201
- : [];
202
- }
203
- const pageEligibleWidgets = widgets.filter((widget) => {
204
- const matchesPage = evaluatePageTargeting(widget.pageTargetingJson, window.location.href);
205
- if (!matchesPage) {
206
- testModeLog('Recommendation', 'Skipping widget due to page targeting:', widget.id);
207
- }
208
- return matchesPage;
209
- });
210
- const candidates = selectRecommendationCandidates(pageEligibleWidgets);
211
- // Render each candidate that survives conflict resolution
212
- for (const candidate of candidates) {
213
- await tryRenderWidget(candidate.widget, config, candidate.frequencyKey, candidate.frequencyCapConfig);
214
- }
215
- }
216
- catch (error) {
217
- testModeError('Recommendation', 'Error initializing:', error);
218
- }
219
- }
220
- // Try to render widget, setup observer if container not ready
221
- async function tryRenderWidget(widget, config, frequencyKey, frequencyCapConfig) {
222
- // Keep in-memory render tracking synchronized with real DOM state.
223
- const widgetAlreadyInDom = isWidgetInDOM(widget.id);
224
- if (widgetAlreadyInDom && !renderedWidgets.has(widget.id)) {
225
- renderedWidgets.add(widget.id);
226
- return false;
227
- }
228
- // If marked as rendered but not in DOM, clear stale state (SPA navigation case).
229
- if (!widgetAlreadyInDom && renderedWidgets.has(widget.id)) {
230
- renderedWidgets.delete(widget.id);
231
- }
232
- // Already rendered and in DOM?
233
- if (renderedWidgets.has(widget.id))
234
- return false;
235
- const canShowByFrequencyCap = () => {
236
- if (!frequencyCapConfig)
237
- return true;
238
- const check = frequencyCapManager.canShow(frequencyKey, frequencyCapConfig);
239
- if (!check.allowed) {
240
- testModeLog('Recommendation', `Skipping widget due to frequency cap (${check.reason || 'limit'})`, widget.id);
241
- return false;
242
- }
243
- return true;
244
- };
245
- // No container selector? Render to body (fallback)
246
- if (!widget.containerSelector) {
247
- if (await shouldShowWidget(widget, config)) {
248
- if (!canShowByFrequencyCap())
249
- return false;
250
- // Check for experiment suppression
251
- if (config.experimentManager && !config.experimentManager.shouldRenderTarget(widget.id)) {
252
- return false;
253
- }
254
- const widgetToRender = applyExperimentOverrides(widget, config);
255
- if (!widgetToRender)
256
- return false; // Widget should not be rendered
257
- renderedWidgets.add(widgetToRender.id);
258
- const rendered = await renderWidget(widgetToRender, config);
259
- if (rendered && frequencyCapConfig) {
260
- frequencyCapManager.recordShown(frequencyKey);
261
- }
262
- return rendered;
263
- }
264
- return false;
265
- }
266
- // Container exists? Render now
267
- const container = document.querySelector(widget.containerSelector);
268
- if (container) {
269
- if (await shouldShowWidget(widget, config)) {
270
- if (!canShowByFrequencyCap())
271
- return false;
272
- // Check for experiment suppression
273
- if (config.experimentManager && !config.experimentManager.shouldRenderTarget(widget.id)) {
274
- return false;
275
- }
276
- const widgetToRender = applyExperimentOverrides(widget, config);
277
- if (!widgetToRender)
278
- return false; // Widget should not be rendered
279
- renderedWidgets.add(widgetToRender.id);
280
- const rendered = await renderWidget(widgetToRender, config);
281
- if (rendered && frequencyCapConfig) {
282
- frequencyCapManager.recordShown(frequencyKey);
283
- }
284
- return rendered;
285
- }
286
- return false;
287
- }
288
- // Container doesn't exist yet - watch for it
289
- testModeLog('Recommendation', 'Container not found, setting up observer for:', widget.containerSelector);
290
- observeForContainer(widget, config, frequencyKey, frequencyCapConfig);
291
- return false;
292
- }
293
- // Use MutationObserver to efficiently watch for container appearance
294
- // Performance optimized: debounced callback, scoped observation, proper cleanup
295
- function observeForContainer(widget, config, frequencyKey, frequencyCapConfig) {
296
- // If already observing this widget, skip
297
- if (activeObservers.has(widget.id)) {
298
- return;
299
- }
300
- // Debounced check function to avoid excessive DOM queries
301
- const checkForContainer = debounce(async () => {
302
- // Re-check: if widget now in DOM, stop
303
- if (isWidgetInDOM(widget.id)) {
304
- cleanupObserver(widget.id);
305
- return;
306
- }
307
- const container = document.querySelector(widget.containerSelector);
308
- if (container && await shouldShowWidget(widget, config)) {
309
- if (frequencyCapConfig) {
310
- const check = frequencyCapManager.canShow(frequencyKey, frequencyCapConfig);
311
- if (!check.allowed) {
312
- cleanupObserver(widget.id);
313
- return;
314
- }
315
- }
316
- // Check for experiment suppression
317
- if (config.experimentManager && !config.experimentManager.shouldRenderTarget(widget.id)) {
318
- cleanupObserver(widget.id);
319
- return;
320
- }
321
- const widgetToRender = applyExperimentOverrides(widget, config);
322
- if (!widgetToRender) {
323
- cleanupObserver(widget.id);
324
- return; // Widget should not be rendered
325
- }
326
- renderedWidgets.add(widgetToRender.id);
327
- const rendered = await renderWidget(widgetToRender, config);
328
- if (rendered && frequencyCapConfig) {
329
- frequencyCapManager.recordShown(frequencyKey);
330
- }
331
- cleanupObserver(widget.id);
332
- testModeLog('Recommendation', 'Widget rendered via observer:', widgetToRender.id);
333
- }
334
- }, TIMING.RESIZE_DEBOUNCE); // 150ms debounce
335
- const observer = new MutationObserver((_mutations, _obs) => {
336
- checkForContainer();
337
- });
338
- // Try to scope observation to a parent element if possible
339
- // This reduces the number of mutations we need to process
340
- const observeTarget = findBestObserveTarget(widget.containerSelector);
341
- observer.observe(observeTarget, {
342
- childList: true,
343
- subtree: true,
344
- });
345
- // Store observer for cleanup
346
- activeObservers.set(widget.id, observer);
347
- // Timeout after 10 seconds to prevent memory leaks
348
- setTimeout(() => {
349
- cleanupObserver(widget.id);
350
- checkForContainer.cancel();
351
- }, 10000);
352
- }
353
- /**
354
- * Find the best DOM element to observe for a given selector
355
- * Tries to find a parent element that's already in the DOM to reduce observation scope
356
- */
357
- function findBestObserveTarget(selector) {
358
- // Try to find a parent element from the selector
359
- // e.g., for "#product-page .recommendations" we could observe #product-page
360
- const parts = selector.split(/\s+/);
361
- for (let i = 0; i < parts.length - 1; i++) {
362
- const parentSelector = parts.slice(0, i + 1).join(' ');
363
- const parent = document.querySelector(parentSelector);
364
- if (parent) {
365
- return parent;
366
- }
367
- }
368
- // Fallback to body
369
- return document.body;
370
- }
371
- /**
372
- * Cleanup a specific observer
373
- */
374
- function cleanupObserver(widgetId) {
375
- const observer = activeObservers.get(widgetId);
376
- if (observer) {
377
- observer.disconnect();
378
- activeObservers.delete(widgetId);
379
- }
380
- }
381
- /**
382
- * Cleanup all observers and rendered widgets
383
- * Call this when navigating away in SPA
384
- */
385
- export function cleanup() {
386
- // Disconnect all observers
387
- activeObservers.forEach((observer, widgetId) => {
388
- observer.disconnect();
389
- testModeDebug('Recommendation', 'Cleaned up observer for:', widgetId);
390
- });
391
- activeObservers.clear();
392
- // Remove recommendation DOM roots to prevent duplicate render on SPA re-init.
393
- removeRecommendationRootsFromDOM();
394
- // Fallback cleanup by known ids in case an old node does not have marker attr.
395
- renderedWidgets.forEach((widgetId) => {
396
- const existingNode = document.getElementById(`rec-widget-${widgetId}`);
397
- if (existingNode) {
398
- existingNode.remove();
399
- }
400
- });
401
- // Clear rendered widgets tracking
402
- renderedWidgets.clear();
403
- // Clear tracking state (e.g. product impression cache)
404
- cleanupTracking();
405
- testModeDebug('Recommendation', 'Module cleanup complete');
406
- }
407
- function applyExperimentOverrides(widget, config) {
408
- if (!config.experimentManager)
409
- return widget;
410
- // Check for different_module mode - variant module replaces this widget
411
- const assignment = config.experimentManager.getVariantModuleForTarget(widget.id);
412
- if (assignment && assignment.moduleData) {
413
- // Unwrap moduleData - could be { targetType, data } or directly the widget
414
- const moduleData = assignment.moduleData;
415
- const variantWidget = moduleData.data || moduleData;
416
- if (variantWidget && variantWidget.id) {
417
- testModeLog('Recommendation', 'Rendering variant module instead of original:', variantWidget.id);
418
- // Return the variant widget to be rendered instead
419
- variantWidget._experimentAssignment = assignment;
420
- return variantWidget;
421
- }
422
- }
423
- // Check for config_override mode
424
- const configAssignment = config.experimentManager.getVariant(widget.id) ||
425
- config.experimentManager.getAssignmentByTargetId(widget.id);
426
- if (configAssignment) {
427
- const variantConfig = getEffectiveConfig(configAssignment);
428
- if (variantConfig) {
429
- testModeLog('Recommendation', 'Applying config override:', configAssignment.variantName);
430
- const mergedWidget = deepMergeExperimentConfig(widget, variantConfig);
431
- Object.assign(widget, mergedWidget);
432
- if (variantConfig.content && typeof variantConfig.content === 'object') {
433
- const content = variantConfig.content;
434
- if (content.title !== undefined) {
435
- widget.title = content.title;
436
- if (widget.titleStyles)
437
- widget.titleStyles.enabled = true;
438
- }
439
- if (content.subtitle !== undefined) {
440
- widget.subtitle = content.subtitle;
441
- if (widget.subtitleStyles)
442
- widget.subtitleStyles.enabled = true;
443
- }
444
- else if (content.text !== undefined) {
445
- widget.subtitle = content.text;
446
- if (widget.subtitleStyles)
447
- widget.subtitleStyles.enabled = true;
448
- }
449
- else if (content.description !== undefined) {
450
- widget.subtitle = content.description;
451
- if (widget.subtitleStyles)
452
- widget.subtitleStyles.enabled = true;
453
- }
454
- }
455
- if (variantConfig.styles && typeof variantConfig.styles === 'object') {
456
- widget.containerStyles = deepMergeExperimentConfig((widget.containerStyles || {}), variantConfig.styles);
457
- }
458
- if (variantConfig.displayType) {
459
- widget.displayType = variantConfig.displayType;
460
- }
461
- }
462
- // Mark widget as part of experiment for tracking
463
- widget._experimentAssignment = configAssignment;
464
- }
465
- return widget;
466
- }
467
- async function shouldShowWidget(widget, config) {
468
- // Check for experiment suppression FIRST (before other checks)
469
- // This ensures excluded widgets (different_module mode) are skipped early
470
- if (config.experimentManager && !config.experimentManager.shouldRenderTarget(widget.id)) {
471
- testModeLog('Recommendation', 'Skipping widget (excluded by experiment):', widget.id);
472
- return false;
473
- }
474
- // If containerSelector is specified, check if element exists
475
- if (widget.containerSelector) {
476
- const container = document.querySelector(widget.containerSelector);
477
- testModeLog('Recommendation', 'Container check:', widget.containerSelector, '-> Found:', !!container);
478
- if (!container)
479
- return false;
480
- }
481
- // Page Targeting Logic
482
- const targeting = widget.pageTargetingJson;
483
- if (!evaluatePageTargeting(targeting, window.location.href)) {
484
- return false;
485
- }
486
- // Segment Targeting Logic
487
- if (config.segmentManager && widget.segmentTargetingMode && widget.segmentIds) {
488
- const shouldShow = await config.segmentManager.shouldShow(widget.segmentTargetingMode, widget.segmentIds);
489
- if (!shouldShow) {
490
- testModeLog('Recommendation', 'Skipping widget due to segment targeting:', widget.id);
491
- return false;
492
- }
493
- }
494
- return true;
495
- }
496
- async function renderWidget(widget, config) {
497
- try {
498
- // Detect current product ID for product-based strategies (viewed_together, similar_products, etc.)
499
- const currentProductId = detectCurrentProductId(config);
500
- let sessionId = '';
501
- try {
502
- sessionId = getSessionId();
503
- }
504
- catch {
505
- sessionId = `sid_fallback_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
506
- }
507
- // Fetch products for this widget
508
- const response = await fetch(`${config.apiEndpoint}/public/sites/${config.siteKey}/recommendations/${widget.id}/products`, {
509
- method: 'POST',
510
- headers: {
511
- 'Content-Type': 'application/json',
512
- },
513
- body: JSON.stringify({
514
- currentProductId,
515
- pageUrl: window.location.href,
516
- sessionId,
517
- visitorId: window.selwise_vid,
518
- userId: window.selwise_suid,
519
- }),
520
- });
521
- if (!response.ok)
522
- return false;
523
- const data = await response.json();
524
- const products = data.products || [];
525
- // Update widget product card definition if provided by API
526
- if (data.productCard) {
527
- widget.productCard = data.productCard;
528
- }
529
- if (products.length === 0)
530
- return false;
531
- // Create widget container
532
- const widgetElement = createWidgetElement(widget, products, config);
533
- // Insert into page
534
- insertWidget(widgetElement, widget);
535
- // Track widget impression
536
- trackWidgetImpression(widget.id, config).catch(() => {
537
- // Non-blocking - don't prevent widget rendering if tracking fails
538
- });
539
- // Track impression
540
- if (widget._experimentAssignment && config.experimentManager) {
541
- config.experimentManager.trackImpression(widget._experimentAssignment.experimentId);
542
- }
543
- // Initialize slider if needed
544
- if (widget.displayType === 'slider' || widget.displayType === 'carousel') {
545
- initSliderControls(widget, widgetElement, config, trackSliderNavigation, trackSliderSwipe);
546
- }
547
- // Setup product impression tracking
548
- setupProductImpressionTracking(widgetElement, widget.id, config);
549
- // Setup click tracking for experiment conversion
550
- if (widget._experimentAssignment && config.experimentManager) {
551
- widgetElement.addEventListener('click', (e) => {
552
- const target = e.target;
553
- if (target.closest('.recommendation-card') || target.closest('[data-selwise-action="add-to-cart"]') || target.closest('a') || target.closest('button')) {
554
- const assignment = widget._experimentAssignment;
555
- config.experimentManager?.trackConversion(assignment.experimentId);
556
- }
557
- });
558
- }
559
- // Execute custom JS - this runs arbitrary code from widget configuration
560
- if (widget.customJS) {
561
- try {
562
- // Log warning for security auditing
563
- testModeWarn('Recommendation', 'Executing custom JS for widget:', widget.id);
564
- const customFn = new Function('widgetElement', 'products', 'widgetConfig', widget.customJS);
565
- customFn(widgetElement, products, widget);
566
- }
567
- catch (error) {
568
- testModeError('Recommendation', 'Custom JS error:', error);
569
- }
570
- }
571
- return true;
572
- }
573
- catch (error) {
574
- testModeError('Recommendation', 'Error rendering widget:', error);
575
- return false;
576
- }
577
- }
578
- function createWidgetElement(widget, products, config) {
579
- const container = document.createElement('div');
580
- container.className = 'recommendation-widget';
581
- container.id = `rec-widget-${widget.id}`;
582
- container.setAttribute('data-widget-id', widget.id);
583
- markRecommendationRoot(container);
584
- // Apply container styles
585
- const cs = widget.containerStyles;
586
- container.style.cssText = `
587
- background-color: ${cs?.backgroundColor};
588
- padding: ${cs?.padding};
589
- border-radius: ${cs?.borderRadius}px;
590
- max-width: ${cs?.maxWidth};
591
- margin: ${cs?.margin};
592
- box-sizing: border-box;
593
- `;
594
- // Create title
595
- if (widget.titleStyles?.enabled && widget.title) {
596
- const titleEl = document.createElement('h2');
597
- titleEl.className = 'recommendation-title';
598
- titleEl.textContent = widget.title;
599
- const ts = widget.titleStyles;
600
- titleEl.style.cssText = `
601
- font-size: ${ts.fontSize || 24}px;
602
- font-weight: ${ts.fontWeight || 'bold'};
603
- color: ${ts.color || '#111111'};
604
- text-align: ${ts.textAlign || 'left'};
605
- margin-bottom: ${ts.marginBottom || 16}px;
606
- margin-top: 0;
607
- `;
608
- container.appendChild(titleEl);
609
- }
610
- // Create subtitle
611
- if (widget.subtitleStyles?.enabled && widget.subtitle) {
612
- const subtitleEl = document.createElement('p');
613
- subtitleEl.className = 'recommendation-subtitle';
614
- subtitleEl.textContent = widget.subtitle;
615
- const ss = widget.subtitleStyles;
616
- subtitleEl.style.cssText = `
617
- font-size: ${ss.fontSize || 14}px;
618
- font-weight: ${ss.fontWeight || 'normal'};
619
- color: ${ss.color || '#666666'};
620
- text-align: ${ss.textAlign || 'left'};
621
- margin-bottom: ${ss.marginBottom || 24}px;
622
- margin-top: 0;
623
- `;
624
- container.appendChild(subtitleEl);
625
- }
626
- // Create product container based on display type
627
- const productContainer = createProductContainer(widget, products, config);
628
- container.appendChild(productContainer);
629
- // Add custom CSS (sanitized to prevent CSS injection)
630
- if (widget.customCSS) {
631
- const style = document.createElement('style');
632
- style.textContent = sanitizeCSS(widget.customCSS);
633
- container.appendChild(style);
634
- }
635
- // Add custom CSS from Product Card (if custom template)
636
- if (widget.productCard && widget.productCard.customCSS) {
637
- const cardStyle = document.createElement('style');
638
- cardStyle.textContent = sanitizeCSS(widget.productCard.customCSS);
639
- container.appendChild(cardStyle);
640
- }
641
- return container;
642
- }
643
- function createProductContainer(widget, products, config) {
644
- // Generate unique container ID for card JS execution
645
- const containerId = widget.productCard?.customJs
646
- ? `recommendation-${widget.id}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
647
- : '';
648
- // Create product card factory function with bound handlers
649
- const productCardFactory = (product) => createProductCard(product, widget, config, handleAddToCart, trackEvent, trackBehavior, containerId);
650
- let container;
651
- switch (widget.displayType) {
652
- case 'slider':
653
- case 'carousel':
654
- container = createSlider(widget, products, config, productCardFactory);
655
- break;
656
- case 'grid':
657
- container = createGrid(widget, products, config, productCardFactory);
658
- break;
659
- case 'list':
660
- container = createList(widget, products, config, productCardFactory);
661
- break;
662
- case 'masonry':
663
- container = createMasonry(widget, products, config, productCardFactory);
664
- break;
665
- default:
666
- container = createGrid(widget, products, config, productCardFactory);
667
- }
668
- // Execute custom JavaScript for product cards after DOM insertion
669
- if (containerId && widget.productCard?.customJs) {
670
- executeCardScriptsForRecommendations(containerId, container);
671
- }
672
- return container;
673
- }
674
- //# sourceMappingURL=index.js.map