@selwise/widget 0.0.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/README.md +2 -1
  2. package/dist/npm/cjs/index.cjs +2 -0
  3. package/dist/npm/cjs/index.cjs.LICENSE.txt +1 -0
  4. package/dist/npm/cjs/index.d.ts +59 -0
  5. package/dist/npm/esm/index.d.ts +59 -4
  6. package/dist/npm/esm/index.mjs +2 -0
  7. package/dist/npm/esm/index.mjs.LICENSE.txt +1 -0
  8. package/package.json +14 -16
  9. package/dist/npm/cjs/constants.js +0 -167
  10. package/dist/npm/cjs/constants.js.map +0 -1
  11. package/dist/npm/cjs/core/conflict-resolver.js +0 -203
  12. package/dist/npm/cjs/core/conflict-resolver.js.map +0 -1
  13. package/dist/npm/cjs/core/event-batcher.js +0 -977
  14. package/dist/npm/cjs/core/event-batcher.js.map +0 -1
  15. package/dist/npm/cjs/core/experiment-overrides.js +0 -178
  16. package/dist/npm/cjs/core/experiment-overrides.js.map +0 -1
  17. package/dist/npm/cjs/core/experiments.js +0 -317
  18. package/dist/npm/cjs/core/experiments.js.map +0 -1
  19. package/dist/npm/cjs/core/frequency-caps.js +0 -297
  20. package/dist/npm/cjs/core/frequency-caps.js.map +0 -1
  21. package/dist/npm/cjs/core/index.js +0 -27
  22. package/dist/npm/cjs/core/index.js.map +0 -1
  23. package/dist/npm/cjs/core/indexeddb-queue.js +0 -333
  24. package/dist/npm/cjs/core/indexeddb-queue.js.map +0 -1
  25. package/dist/npm/cjs/core/journey-tracker.js +0 -243
  26. package/dist/npm/cjs/core/journey-tracker.js.map +0 -1
  27. package/dist/npm/cjs/core/page-targeting/index.js +0 -72
  28. package/dist/npm/cjs/core/page-targeting/index.js.map +0 -1
  29. package/dist/npm/cjs/core/script-executor.js +0 -80
  30. package/dist/npm/cjs/core/script-executor.js.map +0 -1
  31. package/dist/npm/cjs/core/segments.js +0 -172
  32. package/dist/npm/cjs/core/segments.js.map +0 -1
  33. package/dist/npm/cjs/core/tracker.js +0 -798
  34. package/dist/npm/cjs/core/tracker.js.map +0 -1
  35. package/dist/npm/cjs/datalayer/basket.js +0 -385
  36. package/dist/npm/cjs/datalayer/basket.js.map +0 -1
  37. package/dist/npm/cjs/datalayer/cart-association.js +0 -226
  38. package/dist/npm/cjs/datalayer/cart-association.js.map +0 -1
  39. package/dist/npm/cjs/datalayer/checkout.js +0 -382
  40. package/dist/npm/cjs/datalayer/checkout.js.map +0 -1
  41. package/dist/npm/cjs/datalayer/constants.js +0 -163
  42. package/dist/npm/cjs/datalayer/constants.js.map +0 -1
  43. package/dist/npm/cjs/datalayer/index.js +0 -1010
  44. package/dist/npm/cjs/datalayer/index.js.map +0 -1
  45. package/dist/npm/cjs/datalayer/listener.js +0 -416
  46. package/dist/npm/cjs/datalayer/listener.js.map +0 -1
  47. package/dist/npm/cjs/datalayer/page.js +0 -343
  48. package/dist/npm/cjs/datalayer/page.js.map +0 -1
  49. package/dist/npm/cjs/datalayer/product.js +0 -517
  50. package/dist/npm/cjs/datalayer/product.js.map +0 -1
  51. package/dist/npm/cjs/datalayer/reverse-mappings.js +0 -139
  52. package/dist/npm/cjs/datalayer/reverse-mappings.js.map +0 -1
  53. package/dist/npm/cjs/datalayer/search.js +0 -363
  54. package/dist/npm/cjs/datalayer/search.js.map +0 -1
  55. package/dist/npm/cjs/datalayer/types.js +0 -134
  56. package/dist/npm/cjs/datalayer/types.js.map +0 -1
  57. package/dist/npm/cjs/datalayer/user.js +0 -372
  58. package/dist/npm/cjs/datalayer/user.js.map +0 -1
  59. package/dist/npm/cjs/debug/index.js +0 -679
  60. package/dist/npm/cjs/debug/index.js.map +0 -1
  61. package/dist/npm/cjs/entries/cdn.js +0 -72
  62. package/dist/npm/cjs/entries/cdn.js.map +0 -1
  63. package/dist/npm/cjs/index.js +0 -10
  64. package/dist/npm/cjs/index.js.map +0 -1
  65. package/dist/npm/cjs/modules/contract/recommendation-contract.js +0 -119
  66. package/dist/npm/cjs/modules/contract/recommendation-contract.js.map +0 -1
  67. package/dist/npm/cjs/modules/contract/search-contract.js +0 -18
  68. package/dist/npm/cjs/modules/contract/search-contract.js.map +0 -1
  69. package/dist/npm/cjs/modules/contract/tracking-contract.js +0 -16
  70. package/dist/npm/cjs/modules/contract/tracking-contract.js.map +0 -1
  71. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js +0 -164
  72. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  73. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js +0 -21
  74. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  75. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js +0 -3
  76. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  77. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js +0 -107
  78. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  79. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js +0 -404
  80. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js.map +0 -1
  81. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js +0 -21
  82. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js.map +0 -1
  83. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js +0 -8
  84. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js.map +0 -1
  85. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js +0 -126
  86. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js.map +0 -1
  87. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js +0 -133
  88. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  89. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js +0 -21
  90. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  91. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js +0 -3
  92. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  93. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js +0 -154
  94. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  95. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js +0 -1481
  96. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  97. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js +0 -22
  98. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js.map +0 -1
  99. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js +0 -21
  100. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  101. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js +0 -8
  102. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js.map +0 -1
  103. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js +0 -139
  104. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  105. package/dist/npm/cjs/modules/contract/widget-contract.js +0 -10
  106. package/dist/npm/cjs/modules/contract/widget-contract.js.map +0 -1
  107. package/dist/npm/cjs/modules/products/tracking.js +0 -214
  108. package/dist/npm/cjs/modules/products/tracking.js.map +0 -1
  109. package/dist/npm/cjs/modules/recommendation/cart-handlers.js +0 -52
  110. package/dist/npm/cjs/modules/recommendation/cart-handlers.js.map +0 -1
  111. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js +0 -287
  112. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js.map +0 -1
  113. package/dist/npm/cjs/modules/recommendation/index.js +0 -678
  114. package/dist/npm/cjs/modules/recommendation/index.js.map +0 -1
  115. package/dist/npm/cjs/modules/recommendation/renderers/grid.js +0 -21
  116. package/dist/npm/cjs/modules/recommendation/renderers/grid.js.map +0 -1
  117. package/dist/npm/cjs/modules/recommendation/renderers/list.js +0 -22
  118. package/dist/npm/cjs/modules/recommendation/renderers/list.js.map +0 -1
  119. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js +0 -22
  120. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js.map +0 -1
  121. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js +0 -145
  122. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  123. package/dist/npm/cjs/modules/recommendation/slider-controls.js +0 -201
  124. package/dist/npm/cjs/modules/recommendation/slider-controls.js.map +0 -1
  125. package/dist/npm/cjs/modules/recommendation/tracking.js +0 -247
  126. package/dist/npm/cjs/modules/recommendation/tracking.js.map +0 -1
  127. package/dist/npm/cjs/modules/recommendation/utils/dom.js +0 -70
  128. package/dist/npm/cjs/modules/recommendation/utils/dom.js.map +0 -1
  129. package/dist/npm/cjs/modules/recommendation/utils/format.js +0 -13
  130. package/dist/npm/cjs/modules/recommendation/utils/format.js.map +0 -1
  131. package/dist/npm/cjs/modules/recommendation/utils/index.js +0 -22
  132. package/dist/npm/cjs/modules/recommendation/utils/index.js.map +0 -1
  133. package/dist/npm/cjs/modules/renderer/helpers.js +0 -16
  134. package/dist/npm/cjs/modules/renderer/helpers.js.map +0 -1
  135. package/dist/npm/cjs/modules/renderer/index.js +0 -52
  136. package/dist/npm/cjs/modules/renderer/index.js.map +0 -1
  137. package/dist/npm/cjs/modules/renderer/style-resolver.js +0 -11
  138. package/dist/npm/cjs/modules/renderer/style-resolver.js.map +0 -1
  139. package/dist/npm/cjs/modules/renderer/styles/index.js +0 -254
  140. package/dist/npm/cjs/modules/renderer/styles/index.js.map +0 -1
  141. package/dist/npm/cjs/modules/renderer/styles.js +0 -7
  142. package/dist/npm/cjs/modules/renderer/styles.js.map +0 -1
  143. package/dist/npm/cjs/modules/renderer/utils/helpers.js +0 -243
  144. package/dist/npm/cjs/modules/renderer/utils/helpers.js.map +0 -1
  145. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js +0 -65
  146. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js.map +0 -1
  147. package/dist/npm/cjs/modules/renderer/utils/placement.js +0 -34
  148. package/dist/npm/cjs/modules/renderer/utils/placement.js.map +0 -1
  149. package/dist/npm/cjs/modules/renderer/utils.js +0 -61
  150. package/dist/npm/cjs/modules/renderer/utils.js.map +0 -1
  151. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js +0 -84
  152. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js.map +0 -1
  153. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js +0 -211
  154. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js.map +0 -1
  155. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js +0 -459
  156. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js.map +0 -1
  157. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js +0 -132
  158. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js.map +0 -1
  159. package/dist/npm/cjs/modules/renderer/widgets/custom.js +0 -58
  160. package/dist/npm/cjs/modules/renderer/widgets/custom.js.map +0 -1
  161. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js +0 -97
  162. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js.map +0 -1
  163. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js +0 -151
  164. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  165. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js +0 -70
  166. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js.map +0 -1
  167. package/dist/npm/cjs/modules/renderer/widgets/helpers.js +0 -87
  168. package/dist/npm/cjs/modules/renderer/widgets/helpers.js.map +0 -1
  169. package/dist/npm/cjs/modules/renderer/widgets/index.js +0 -39
  170. package/dist/npm/cjs/modules/renderer/widgets/index.js.map +0 -1
  171. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js +0 -124
  172. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js.map +0 -1
  173. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js +0 -280
  174. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js.map +0 -1
  175. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js +0 -197
  176. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js.map +0 -1
  177. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js +0 -105
  178. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js.map +0 -1
  179. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js +0 -47
  180. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js.map +0 -1
  181. package/dist/npm/cjs/modules/search/cart/index.js +0 -42
  182. package/dist/npm/cjs/modules/search/cart/index.js.map +0 -1
  183. package/dist/npm/cjs/modules/search/components/index.js +0 -13
  184. package/dist/npm/cjs/modules/search/components/index.js.map +0 -1
  185. package/dist/npm/cjs/modules/search/components/search-box.js +0 -28
  186. package/dist/npm/cjs/modules/search/components/search-box.js.map +0 -1
  187. package/dist/npm/cjs/modules/search/components/search-item.js +0 -197
  188. package/dist/npm/cjs/modules/search/components/search-item.js.map +0 -1
  189. package/dist/npm/cjs/modules/search/components/suggestions.js +0 -132
  190. package/dist/npm/cjs/modules/search/components/suggestions.js.map +0 -1
  191. package/dist/npm/cjs/modules/search/index.js +0 -646
  192. package/dist/npm/cjs/modules/search/index.js.map +0 -1
  193. package/dist/npm/cjs/modules/search/renderers/position-renderers.js +0 -229
  194. package/dist/npm/cjs/modules/search/renderers/position-renderers.js.map +0 -1
  195. package/dist/npm/cjs/modules/search/renderers/results-renderer.js +0 -180
  196. package/dist/npm/cjs/modules/search/renderers/results-renderer.js.map +0 -1
  197. package/dist/npm/cjs/modules/search/services/api-service.js +0 -121
  198. package/dist/npm/cjs/modules/search/services/api-service.js.map +0 -1
  199. package/dist/npm/cjs/modules/search/services/tracking-service.js +0 -263
  200. package/dist/npm/cjs/modules/search/services/tracking-service.js.map +0 -1
  201. package/dist/npm/cjs/modules/search/styles.js +0 -864
  202. package/dist/npm/cjs/modules/search/styles.js.map +0 -1
  203. package/dist/npm/cjs/modules/search/utils/helpers.js +0 -100
  204. package/dist/npm/cjs/modules/search/utils/helpers.js.map +0 -1
  205. package/dist/npm/cjs/modules/search/utils/icons.js +0 -41
  206. package/dist/npm/cjs/modules/search/utils/icons.js.map +0 -1
  207. package/dist/npm/cjs/modules/search/utils/index.js +0 -22
  208. package/dist/npm/cjs/modules/search/utils/index.js.map +0 -1
  209. package/dist/npm/cjs/modules/search/utils/storage.js +0 -58
  210. package/dist/npm/cjs/modules/search/utils/storage.js.map +0 -1
  211. package/dist/npm/cjs/selwise.js +0 -1160
  212. package/dist/npm/cjs/selwise.js.map +0 -1
  213. package/dist/npm/cjs/sentry-test.js +0 -118
  214. package/dist/npm/cjs/sentry-test.js.map +0 -1
  215. package/dist/npm/cjs/sentry.js +0 -451
  216. package/dist/npm/cjs/sentry.js.map +0 -1
  217. package/dist/npm/cjs/shared/cart/handlers.js +0 -259
  218. package/dist/npm/cjs/shared/cart/handlers.js.map +0 -1
  219. package/dist/npm/cjs/shared/cart/index.js +0 -23
  220. package/dist/npm/cjs/shared/cart/index.js.map +0 -1
  221. package/dist/npm/cjs/shared/cart/types.js +0 -7
  222. package/dist/npm/cjs/shared/cart/types.js.map +0 -1
  223. package/dist/npm/cjs/shared/product-card/index.js +0 -24
  224. package/dist/npm/cjs/shared/product-card/index.js.map +0 -1
  225. package/dist/npm/cjs/shared/product-card/renderer.js +0 -341
  226. package/dist/npm/cjs/shared/product-card/renderer.js.map +0 -1
  227. package/dist/npm/cjs/shared/product-card/styles.js +0 -195
  228. package/dist/npm/cjs/shared/product-card/styles.js.map +0 -1
  229. package/dist/npm/cjs/shared/product-card/types.js +0 -67
  230. package/dist/npm/cjs/shared/product-card/types.js.map +0 -1
  231. package/dist/npm/cjs/types/config.js +0 -6
  232. package/dist/npm/cjs/types/config.js.map +0 -1
  233. package/dist/npm/cjs/types/experiments.js +0 -17
  234. package/dist/npm/cjs/types/experiments.js.map +0 -1
  235. package/dist/npm/cjs/types/global-api.js +0 -3
  236. package/dist/npm/cjs/types/global-api.js.map +0 -1
  237. package/dist/npm/cjs/types/index.js +0 -27
  238. package/dist/npm/cjs/types/index.js.map +0 -1
  239. package/dist/npm/cjs/types/recommendation.js +0 -6
  240. package/dist/npm/cjs/types/recommendation.js.map +0 -1
  241. package/dist/npm/cjs/types/renderer.js +0 -6
  242. package/dist/npm/cjs/types/renderer.js.map +0 -1
  243. package/dist/npm/cjs/types/search.js +0 -6
  244. package/dist/npm/cjs/types/search.js.map +0 -1
  245. package/dist/npm/cjs/utils/api-url.js +0 -35
  246. package/dist/npm/cjs/utils/api-url.js.map +0 -1
  247. package/dist/npm/cjs/utils/debounce.js +0 -74
  248. package/dist/npm/cjs/utils/debounce.js.map +0 -1
  249. package/dist/npm/cjs/utils/event-id.js +0 -23
  250. package/dist/npm/cjs/utils/event-id.js.map +0 -1
  251. package/dist/npm/cjs/utils/index.js +0 -28
  252. package/dist/npm/cjs/utils/index.js.map +0 -1
  253. package/dist/npm/cjs/utils/logger.js +0 -74
  254. package/dist/npm/cjs/utils/logger.js.map +0 -1
  255. package/dist/npm/cjs/utils/sanitize.js +0 -159
  256. package/dist/npm/cjs/utils/sanitize.js.map +0 -1
  257. package/dist/npm/cjs/utils/storage.js +0 -285
  258. package/dist/npm/cjs/utils/storage.js.map +0 -1
  259. package/dist/npm/cjs/utils/tracking-metadata.js +0 -18
  260. package/dist/npm/cjs/utils/tracking-metadata.js.map +0 -1
  261. package/dist/npm/cjs/utils/url-matcher.js +0 -11
  262. package/dist/npm/cjs/utils/url-matcher.js.map +0 -1
  263. package/dist/npm/esm/constants.d.ts +0 -130
  264. package/dist/npm/esm/constants.js +0 -164
  265. package/dist/npm/esm/constants.js.map +0 -1
  266. package/dist/npm/esm/core/conflict-resolver.d.ts +0 -96
  267. package/dist/npm/esm/core/conflict-resolver.js +0 -198
  268. package/dist/npm/esm/core/conflict-resolver.js.map +0 -1
  269. package/dist/npm/esm/core/event-batcher.d.ts +0 -253
  270. package/dist/npm/esm/core/event-batcher.js +0 -973
  271. package/dist/npm/esm/core/event-batcher.js.map +0 -1
  272. package/dist/npm/esm/core/experiment-overrides.d.ts +0 -7
  273. package/dist/npm/esm/core/experiment-overrides.js +0 -172
  274. package/dist/npm/esm/core/experiment-overrides.js.map +0 -1
  275. package/dist/npm/esm/core/experiments.d.ts +0 -90
  276. package/dist/npm/esm/core/experiments.js +0 -313
  277. package/dist/npm/esm/core/experiments.js.map +0 -1
  278. package/dist/npm/esm/core/frequency-caps.d.ts +0 -124
  279. package/dist/npm/esm/core/frequency-caps.js +0 -292
  280. package/dist/npm/esm/core/frequency-caps.js.map +0 -1
  281. package/dist/npm/esm/core/index.d.ts +0 -10
  282. package/dist/npm/esm/core/index.js +0 -11
  283. package/dist/npm/esm/core/index.js.map +0 -1
  284. package/dist/npm/esm/core/indexeddb-queue.d.ts +0 -83
  285. package/dist/npm/esm/core/indexeddb-queue.js +0 -328
  286. package/dist/npm/esm/core/indexeddb-queue.js.map +0 -1
  287. package/dist/npm/esm/core/journey-tracker.d.ts +0 -102
  288. package/dist/npm/esm/core/journey-tracker.js +0 -237
  289. package/dist/npm/esm/core/journey-tracker.js.map +0 -1
  290. package/dist/npm/esm/core/page-targeting/index.d.ts +0 -8
  291. package/dist/npm/esm/core/page-targeting/index.js +0 -67
  292. package/dist/npm/esm/core/page-targeting/index.js.map +0 -1
  293. package/dist/npm/esm/core/script-executor.d.ts +0 -31
  294. package/dist/npm/esm/core/script-executor.js +0 -76
  295. package/dist/npm/esm/core/script-executor.js.map +0 -1
  296. package/dist/npm/esm/core/segments.d.ts +0 -39
  297. package/dist/npm/esm/core/segments.js +0 -168
  298. package/dist/npm/esm/core/segments.js.map +0 -1
  299. package/dist/npm/esm/core/tracker.d.ts +0 -182
  300. package/dist/npm/esm/core/tracker.js +0 -794
  301. package/dist/npm/esm/core/tracker.js.map +0 -1
  302. package/dist/npm/esm/datalayer/basket.d.ts +0 -104
  303. package/dist/npm/esm/datalayer/basket.js +0 -381
  304. package/dist/npm/esm/datalayer/basket.js.map +0 -1
  305. package/dist/npm/esm/datalayer/cart-association.d.ts +0 -65
  306. package/dist/npm/esm/datalayer/cart-association.js +0 -222
  307. package/dist/npm/esm/datalayer/cart-association.js.map +0 -1
  308. package/dist/npm/esm/datalayer/checkout.d.ts +0 -96
  309. package/dist/npm/esm/datalayer/checkout.js +0 -378
  310. package/dist/npm/esm/datalayer/checkout.js.map +0 -1
  311. package/dist/npm/esm/datalayer/constants.d.ts +0 -77
  312. package/dist/npm/esm/datalayer/constants.js +0 -160
  313. package/dist/npm/esm/datalayer/constants.js.map +0 -1
  314. package/dist/npm/esm/datalayer/index.d.ts +0 -212
  315. package/dist/npm/esm/datalayer/index.js +0 -991
  316. package/dist/npm/esm/datalayer/index.js.map +0 -1
  317. package/dist/npm/esm/datalayer/listener.d.ts +0 -108
  318. package/dist/npm/esm/datalayer/listener.js +0 -411
  319. package/dist/npm/esm/datalayer/listener.js.map +0 -1
  320. package/dist/npm/esm/datalayer/page.d.ts +0 -94
  321. package/dist/npm/esm/datalayer/page.js +0 -339
  322. package/dist/npm/esm/datalayer/page.js.map +0 -1
  323. package/dist/npm/esm/datalayer/product.d.ts +0 -133
  324. package/dist/npm/esm/datalayer/product.js +0 -513
  325. package/dist/npm/esm/datalayer/product.js.map +0 -1
  326. package/dist/npm/esm/datalayer/reverse-mappings.d.ts +0 -62
  327. package/dist/npm/esm/datalayer/reverse-mappings.js +0 -135
  328. package/dist/npm/esm/datalayer/reverse-mappings.js.map +0 -1
  329. package/dist/npm/esm/datalayer/search.d.ts +0 -108
  330. package/dist/npm/esm/datalayer/search.js +0 -359
  331. package/dist/npm/esm/datalayer/search.js.map +0 -1
  332. package/dist/npm/esm/datalayer/types.d.ts +0 -292
  333. package/dist/npm/esm/datalayer/types.js +0 -131
  334. package/dist/npm/esm/datalayer/types.js.map +0 -1
  335. package/dist/npm/esm/datalayer/user.d.ts +0 -104
  336. package/dist/npm/esm/datalayer/user.js +0 -368
  337. package/dist/npm/esm/datalayer/user.js.map +0 -1
  338. package/dist/npm/esm/debug/index.d.ts +0 -173
  339. package/dist/npm/esm/debug/index.js +0 -673
  340. package/dist/npm/esm/debug/index.js.map +0 -1
  341. package/dist/npm/esm/entries/cdn.d.ts +0 -1
  342. package/dist/npm/esm/entries/cdn.js +0 -35
  343. package/dist/npm/esm/entries/cdn.js.map +0 -1
  344. package/dist/npm/esm/index.js +0 -4
  345. package/dist/npm/esm/index.js.map +0 -1
  346. package/dist/npm/esm/modules/contract/recommendation-contract.d.ts +0 -5
  347. package/dist/npm/esm/modules/contract/recommendation-contract.js +0 -107
  348. package/dist/npm/esm/modules/contract/recommendation-contract.js.map +0 -1
  349. package/dist/npm/esm/modules/contract/search-contract.d.ts +0 -1
  350. package/dist/npm/esm/modules/contract/search-contract.js +0 -2
  351. package/dist/npm/esm/modules/contract/search-contract.js.map +0 -1
  352. package/dist/npm/esm/modules/contract/tracking-contract.d.ts +0 -1
  353. package/dist/npm/esm/modules/contract/tracking-contract.js +0 -2
  354. package/dist/npm/esm/modules/contract/tracking-contract.js.map +0 -1
  355. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.d.ts +0 -8
  356. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js +0 -160
  357. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  358. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.d.ts +0 -3
  359. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js +0 -5
  360. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  361. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.d.ts +0 -56
  362. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js +0 -2
  363. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  364. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.d.ts +0 -3
  365. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js +0 -103
  366. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  367. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.d.ts +0 -35
  368. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js +0 -396
  369. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js.map +0 -1
  370. package/dist/npm/esm/modules/contract/vendor/search-contract/index.d.ts +0 -3
  371. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js +0 -5
  372. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js.map +0 -1
  373. package/dist/npm/esm/modules/contract/vendor/search-contract/types.d.ts +0 -119
  374. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js +0 -7
  375. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js.map +0 -1
  376. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.d.ts +0 -22
  377. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js +0 -118
  378. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js.map +0 -1
  379. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.d.ts +0 -7
  380. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js +0 -130
  381. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  382. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.d.ts +0 -3
  383. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js +0 -5
  384. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  385. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.d.ts +0 -37
  386. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js +0 -2
  387. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  388. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.d.ts +0 -6
  389. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js +0 -147
  390. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  391. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.d.ts +0 -22
  392. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js +0 -1472
  393. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  394. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.d.ts +0 -4
  395. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js +0 -6
  396. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js.map +0 -1
  397. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.d.ts +0 -14
  398. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js +0 -18
  399. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  400. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.d.ts +0 -128
  401. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js +0 -7
  402. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js.map +0 -1
  403. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.d.ts +0 -11
  404. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js +0 -132
  405. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  406. package/dist/npm/esm/modules/contract/widget-contract.d.ts +0 -1
  407. package/dist/npm/esm/modules/contract/widget-contract.js +0 -2
  408. package/dist/npm/esm/modules/contract/widget-contract.js.map +0 -1
  409. package/dist/npm/esm/modules/products/tracking.d.ts +0 -122
  410. package/dist/npm/esm/modules/products/tracking.js +0 -203
  411. package/dist/npm/esm/modules/products/tracking.js.map +0 -1
  412. package/dist/npm/esm/modules/recommendation/cart-handlers.d.ts +0 -10
  413. package/dist/npm/esm/modules/recommendation/cart-handlers.js +0 -49
  414. package/dist/npm/esm/modules/recommendation/cart-handlers.js.map +0 -1
  415. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.d.ts +0 -37
  416. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js +0 -281
  417. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js.map +0 -1
  418. package/dist/npm/esm/modules/recommendation/index.d.ts +0 -11
  419. package/dist/npm/esm/modules/recommendation/index.js +0 -674
  420. package/dist/npm/esm/modules/recommendation/index.js.map +0 -1
  421. package/dist/npm/esm/modules/recommendation/renderers/grid.d.ts +0 -5
  422. package/dist/npm/esm/modules/recommendation/renderers/grid.js +0 -18
  423. package/dist/npm/esm/modules/recommendation/renderers/grid.js.map +0 -1
  424. package/dist/npm/esm/modules/recommendation/renderers/list.d.ts +0 -5
  425. package/dist/npm/esm/modules/recommendation/renderers/list.js +0 -19
  426. package/dist/npm/esm/modules/recommendation/renderers/list.js.map +0 -1
  427. package/dist/npm/esm/modules/recommendation/renderers/masonry.d.ts +0 -5
  428. package/dist/npm/esm/modules/recommendation/renderers/masonry.js +0 -19
  429. package/dist/npm/esm/modules/recommendation/renderers/masonry.js.map +0 -1
  430. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.d.ts +0 -10
  431. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js +0 -140
  432. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  433. package/dist/npm/esm/modules/recommendation/slider-controls.d.ts +0 -17
  434. package/dist/npm/esm/modules/recommendation/slider-controls.js +0 -187
  435. package/dist/npm/esm/modules/recommendation/slider-controls.js.map +0 -1
  436. package/dist/npm/esm/modules/recommendation/tracking.d.ts +0 -28
  437. package/dist/npm/esm/modules/recommendation/tracking.js +0 -237
  438. package/dist/npm/esm/modules/recommendation/tracking.js.map +0 -1
  439. package/dist/npm/esm/modules/recommendation/utils/dom.d.ts +0 -10
  440. package/dist/npm/esm/modules/recommendation/utils/dom.js +0 -63
  441. package/dist/npm/esm/modules/recommendation/utils/dom.js.map +0 -1
  442. package/dist/npm/esm/modules/recommendation/utils/format.d.ts +0 -4
  443. package/dist/npm/esm/modules/recommendation/utils/format.js +0 -10
  444. package/dist/npm/esm/modules/recommendation/utils/format.js.map +0 -1
  445. package/dist/npm/esm/modules/recommendation/utils/index.d.ts +0 -5
  446. package/dist/npm/esm/modules/recommendation/utils/index.js +0 -6
  447. package/dist/npm/esm/modules/recommendation/utils/index.js.map +0 -1
  448. package/dist/npm/esm/modules/renderer/helpers.d.ts +0 -5
  449. package/dist/npm/esm/modules/renderer/helpers.js +0 -6
  450. package/dist/npm/esm/modules/renderer/helpers.js.map +0 -1
  451. package/dist/npm/esm/modules/renderer/index.d.ts +0 -8
  452. package/dist/npm/esm/modules/renderer/index.js +0 -48
  453. package/dist/npm/esm/modules/renderer/index.js.map +0 -1
  454. package/dist/npm/esm/modules/renderer/style-resolver.d.ts +0 -1
  455. package/dist/npm/esm/modules/renderer/style-resolver.js +0 -8
  456. package/dist/npm/esm/modules/renderer/style-resolver.js.map +0 -1
  457. package/dist/npm/esm/modules/renderer/styles/index.d.ts +0 -12
  458. package/dist/npm/esm/modules/renderer/styles/index.js +0 -250
  459. package/dist/npm/esm/modules/renderer/styles/index.js.map +0 -1
  460. package/dist/npm/esm/modules/renderer/styles.d.ts +0 -1
  461. package/dist/npm/esm/modules/renderer/styles.js +0 -2
  462. package/dist/npm/esm/modules/renderer/styles.js.map +0 -1
  463. package/dist/npm/esm/modules/renderer/utils/helpers.d.ts +0 -58
  464. package/dist/npm/esm/modules/renderer/utils/helpers.js +0 -225
  465. package/dist/npm/esm/modules/renderer/utils/helpers.js.map +0 -1
  466. package/dist/npm/esm/modules/renderer/utils/image-renderer.d.ts +0 -17
  467. package/dist/npm/esm/modules/renderer/utils/image-renderer.js +0 -60
  468. package/dist/npm/esm/modules/renderer/utils/image-renderer.js.map +0 -1
  469. package/dist/npm/esm/modules/renderer/utils/placement.d.ts +0 -6
  470. package/dist/npm/esm/modules/renderer/utils/placement.js +0 -31
  471. package/dist/npm/esm/modules/renderer/utils/placement.js.map +0 -1
  472. package/dist/npm/esm/modules/renderer/utils.d.ts +0 -11
  473. package/dist/npm/esm/modules/renderer/utils.js +0 -44
  474. package/dist/npm/esm/modules/renderer/utils.js.map +0 -1
  475. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.d.ts +0 -5
  476. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js +0 -81
  477. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js.map +0 -1
  478. package/dist/npm/esm/modules/renderer/widgets/cart-count.d.ts +0 -6
  479. package/dist/npm/esm/modules/renderer/widgets/cart-count.js +0 -208
  480. package/dist/npm/esm/modules/renderer/widgets/cart-count.js.map +0 -1
  481. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.d.ts +0 -18
  482. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js +0 -454
  483. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js.map +0 -1
  484. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.d.ts +0 -5
  485. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js +0 -129
  486. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js.map +0 -1
  487. package/dist/npm/esm/modules/renderer/widgets/custom.d.ts +0 -5
  488. package/dist/npm/esm/modules/renderer/widgets/custom.js +0 -55
  489. package/dist/npm/esm/modules/renderer/widgets/custom.js.map +0 -1
  490. package/dist/npm/esm/modules/renderer/widgets/embedded-card.d.ts +0 -5
  491. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js +0 -94
  492. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js.map +0 -1
  493. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.d.ts +0 -6
  494. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js +0 -147
  495. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  496. package/dist/npm/esm/modules/renderer/widgets/floating-button.d.ts +0 -5
  497. package/dist/npm/esm/modules/renderer/widgets/floating-button.js +0 -67
  498. package/dist/npm/esm/modules/renderer/widgets/floating-button.js.map +0 -1
  499. package/dist/npm/esm/modules/renderer/widgets/helpers.d.ts +0 -29
  500. package/dist/npm/esm/modules/renderer/widgets/helpers.js +0 -82
  501. package/dist/npm/esm/modules/renderer/widgets/helpers.js.map +0 -1
  502. package/dist/npm/esm/modules/renderer/widgets/index.d.ts +0 -17
  503. package/dist/npm/esm/modules/renderer/widgets/index.js +0 -19
  504. package/dist/npm/esm/modules/renderer/widgets/index.js.map +0 -1
  505. package/dist/npm/esm/modules/renderer/widgets/inline-banner.d.ts +0 -5
  506. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js +0 -121
  507. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js.map +0 -1
  508. package/dist/npm/esm/modules/renderer/widgets/newsletter.d.ts +0 -6
  509. package/dist/npm/esm/modules/renderer/widgets/newsletter.js +0 -277
  510. package/dist/npm/esm/modules/renderer/widgets/newsletter.js.map +0 -1
  511. package/dist/npm/esm/modules/renderer/widgets/product-view-count.d.ts +0 -6
  512. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js +0 -194
  513. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js.map +0 -1
  514. package/dist/npm/esm/modules/renderer/widgets/slide-in.d.ts +0 -5
  515. package/dist/npm/esm/modules/renderer/widgets/slide-in.js +0 -102
  516. package/dist/npm/esm/modules/renderer/widgets/slide-in.js.map +0 -1
  517. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.d.ts +0 -5
  518. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js +0 -44
  519. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js.map +0 -1
  520. package/dist/npm/esm/modules/search/cart/index.d.ts +0 -26
  521. package/dist/npm/esm/modules/search/cart/index.js +0 -39
  522. package/dist/npm/esm/modules/search/cart/index.js.map +0 -1
  523. package/dist/npm/esm/modules/search/components/index.d.ts +0 -6
  524. package/dist/npm/esm/modules/search/components/index.js +0 -7
  525. package/dist/npm/esm/modules/search/components/index.js.map +0 -1
  526. package/dist/npm/esm/modules/search/components/search-box.d.ts +0 -11
  527. package/dist/npm/esm/modules/search/components/search-box.js +0 -25
  528. package/dist/npm/esm/modules/search/components/search-box.js.map +0 -1
  529. package/dist/npm/esm/modules/search/components/search-item.d.ts +0 -20
  530. package/dist/npm/esm/modules/search/components/search-item.js +0 -193
  531. package/dist/npm/esm/modules/search/components/search-item.js.map +0 -1
  532. package/dist/npm/esm/modules/search/components/suggestions.d.ts +0 -10
  533. package/dist/npm/esm/modules/search/components/suggestions.js +0 -129
  534. package/dist/npm/esm/modules/search/components/suggestions.js.map +0 -1
  535. package/dist/npm/esm/modules/search/index.d.ts +0 -67
  536. package/dist/npm/esm/modules/search/index.js +0 -642
  537. package/dist/npm/esm/modules/search/index.js.map +0 -1
  538. package/dist/npm/esm/modules/search/renderers/position-renderers.d.ts +0 -23
  539. package/dist/npm/esm/modules/search/renderers/position-renderers.js +0 -221
  540. package/dist/npm/esm/modules/search/renderers/position-renderers.js.map +0 -1
  541. package/dist/npm/esm/modules/search/renderers/results-renderer.d.ts +0 -20
  542. package/dist/npm/esm/modules/search/renderers/results-renderer.js +0 -176
  543. package/dist/npm/esm/modules/search/renderers/results-renderer.js.map +0 -1
  544. package/dist/npm/esm/modules/search/services/api-service.d.ts +0 -18
  545. package/dist/npm/esm/modules/search/services/api-service.js +0 -115
  546. package/dist/npm/esm/modules/search/services/api-service.js.map +0 -1
  547. package/dist/npm/esm/modules/search/services/tracking-service.d.ts +0 -16
  548. package/dist/npm/esm/modules/search/services/tracking-service.js +0 -250
  549. package/dist/npm/esm/modules/search/services/tracking-service.js.map +0 -1
  550. package/dist/npm/esm/modules/search/styles.d.ts +0 -13
  551. package/dist/npm/esm/modules/search/styles.js +0 -860
  552. package/dist/npm/esm/modules/search/styles.js.map +0 -1
  553. package/dist/npm/esm/modules/search/utils/helpers.d.ts +0 -24
  554. package/dist/npm/esm/modules/search/utils/helpers.js +0 -93
  555. package/dist/npm/esm/modules/search/utils/helpers.js.map +0 -1
  556. package/dist/npm/esm/modules/search/utils/icons.d.ts +0 -16
  557. package/dist/npm/esm/modules/search/utils/icons.js +0 -36
  558. package/dist/npm/esm/modules/search/utils/icons.js.map +0 -1
  559. package/dist/npm/esm/modules/search/utils/index.d.ts +0 -6
  560. package/dist/npm/esm/modules/search/utils/index.js +0 -7
  561. package/dist/npm/esm/modules/search/utils/index.js.map +0 -1
  562. package/dist/npm/esm/modules/search/utils/storage.d.ts +0 -7
  563. package/dist/npm/esm/modules/search/utils/storage.js +0 -52
  564. package/dist/npm/esm/modules/search/utils/storage.js.map +0 -1
  565. package/dist/npm/esm/package.json +0 -1
  566. package/dist/npm/esm/selwise.d.ts +0 -209
  567. package/dist/npm/esm/selwise.js +0 -1123
  568. package/dist/npm/esm/selwise.js.map +0 -1
  569. package/dist/npm/esm/sentry-test.d.ts +0 -45
  570. package/dist/npm/esm/sentry-test.js +0 -109
  571. package/dist/npm/esm/sentry-test.js.map +0 -1
  572. package/dist/npm/esm/sentry.d.ts +0 -86
  573. package/dist/npm/esm/sentry.js +0 -441
  574. package/dist/npm/esm/sentry.js.map +0 -1
  575. package/dist/npm/esm/shared/cart/handlers.d.ts +0 -46
  576. package/dist/npm/esm/shared/cart/handlers.js +0 -249
  577. package/dist/npm/esm/shared/cart/handlers.js.map +0 -1
  578. package/dist/npm/esm/shared/cart/index.d.ts +0 -6
  579. package/dist/npm/esm/shared/cart/index.js +0 -7
  580. package/dist/npm/esm/shared/cart/index.js.map +0 -1
  581. package/dist/npm/esm/shared/cart/types.d.ts +0 -30
  582. package/dist/npm/esm/shared/cart/types.js +0 -6
  583. package/dist/npm/esm/shared/cart/types.js.map +0 -1
  584. package/dist/npm/esm/shared/product-card/index.d.ts +0 -7
  585. package/dist/npm/esm/shared/product-card/index.js +0 -8
  586. package/dist/npm/esm/shared/product-card/index.js.map +0 -1
  587. package/dist/npm/esm/shared/product-card/renderer.d.ts +0 -35
  588. package/dist/npm/esm/shared/product-card/renderer.js +0 -334
  589. package/dist/npm/esm/shared/product-card/renderer.js.map +0 -1
  590. package/dist/npm/esm/shared/product-card/styles.d.ts +0 -17
  591. package/dist/npm/esm/shared/product-card/styles.js +0 -190
  592. package/dist/npm/esm/shared/product-card/styles.js.map +0 -1
  593. package/dist/npm/esm/shared/product-card/types.d.ts +0 -84
  594. package/dist/npm/esm/shared/product-card/types.js +0 -63
  595. package/dist/npm/esm/shared/product-card/types.js.map +0 -1
  596. package/dist/npm/esm/types/config.d.ts +0 -26
  597. package/dist/npm/esm/types/config.js +0 -5
  598. package/dist/npm/esm/types/config.js.map +0 -1
  599. package/dist/npm/esm/types/experiments.d.ts +0 -47
  600. package/dist/npm/esm/types/experiments.js +0 -14
  601. package/dist/npm/esm/types/experiments.js.map +0 -1
  602. package/dist/npm/esm/types/global-api.d.ts +0 -40
  603. package/dist/npm/esm/types/global-api.js +0 -2
  604. package/dist/npm/esm/types/global-api.js.map +0 -1
  605. package/dist/npm/esm/types/index.d.ts +0 -9
  606. package/dist/npm/esm/types/index.js +0 -11
  607. package/dist/npm/esm/types/index.js.map +0 -1
  608. package/dist/npm/esm/types/recommendation.d.ts +0 -186
  609. package/dist/npm/esm/types/recommendation.js +0 -5
  610. package/dist/npm/esm/types/recommendation.js.map +0 -1
  611. package/dist/npm/esm/types/renderer.d.ts +0 -99
  612. package/dist/npm/esm/types/renderer.js +0 -5
  613. package/dist/npm/esm/types/renderer.js.map +0 -1
  614. package/dist/npm/esm/types/search.d.ts +0 -186
  615. package/dist/npm/esm/types/search.js +0 -5
  616. package/dist/npm/esm/types/search.js.map +0 -1
  617. package/dist/npm/esm/utils/api-url.d.ts +0 -1
  618. package/dist/npm/esm/utils/api-url.js +0 -32
  619. package/dist/npm/esm/utils/api-url.js.map +0 -1
  620. package/dist/npm/esm/utils/debounce.d.ts +0 -27
  621. package/dist/npm/esm/utils/debounce.js +0 -70
  622. package/dist/npm/esm/utils/debounce.js.map +0 -1
  623. package/dist/npm/esm/utils/event-id.d.ts +0 -5
  624. package/dist/npm/esm/utils/event-id.js +0 -20
  625. package/dist/npm/esm/utils/event-id.js.map +0 -1
  626. package/dist/npm/esm/utils/index.d.ts +0 -11
  627. package/dist/npm/esm/utils/index.js +0 -12
  628. package/dist/npm/esm/utils/index.js.map +0 -1
  629. package/dist/npm/esm/utils/logger.d.ts +0 -31
  630. package/dist/npm/esm/utils/logger.js +0 -66
  631. package/dist/npm/esm/utils/logger.js.map +0 -1
  632. package/dist/npm/esm/utils/sanitize.d.ts +0 -38
  633. package/dist/npm/esm/utils/sanitize.js +0 -148
  634. package/dist/npm/esm/utils/sanitize.js.map +0 -1
  635. package/dist/npm/esm/utils/storage.d.ts +0 -72
  636. package/dist/npm/esm/utils/storage.js +0 -271
  637. package/dist/npm/esm/utils/storage.js.map +0 -1
  638. package/dist/npm/esm/utils/tracking-metadata.d.ts +0 -1
  639. package/dist/npm/esm/utils/tracking-metadata.js +0 -15
  640. package/dist/npm/esm/utils/tracking-metadata.js.map +0 -1
  641. package/dist/npm/esm/utils/url-matcher.d.ts +0 -4
  642. package/dist/npm/esm/utils/url-matcher.js +0 -8
  643. package/dist/npm/esm/utils/url-matcher.js.map +0 -1
@@ -1,1160 +0,0 @@
1
- "use strict";
2
- /**
3
- * Selwise - Lightweight Embed Script
4
- * Campaign-Centric Architecture
5
- * Target: < 15KB gzipped
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.Selwise = void 0;
42
- const renderer_1 = require("./modules/renderer");
43
- const core_1 = require("./core");
44
- const experiment_overrides_1 = require("./core/experiment-overrides");
45
- const segments_1 = require("./core/segments");
46
- const utils_1 = require("./utils");
47
- const logger_1 = require("./utils/logger");
48
- const sentry_1 = require("./sentry");
49
- const datalayer_1 = require("./datalayer");
50
- const helpers_1 = require("./modules/renderer/utils/helpers");
51
- class Selwise {
52
- constructor() {
53
- this.experiments = null;
54
- this.segments = null;
55
- this.dataLayerManager = null; // Data layer for GTM-style tracking
56
- this.searchModule = null; // Dynamically loaded module
57
- this.recommendationsCleanup = null; // Cleanup function for recommendations
58
- this.recommendationsInitialized = false;
59
- this.campaigns = [];
60
- this.widgets = [];
61
- this.recommendationWidgets = [];
62
- this.isDestroyed = false;
63
- this.renderedEntities = new Set(); // Track rendered entities to prevent duplicates
64
- this.frequencyCapManager = (0, core_1.getFrequencyCapManager)();
65
- this.conflictResolver = (0, core_1.getConflictResolver)();
66
- // Store original History API methods for cleanup
67
- this.originalPushState = null;
68
- this.originalReplaceState = null;
69
- this.popStateListener = null;
70
- // Track pending timeouts for cleanup
71
- this.pendingTimeouts = new Set();
72
- this.spaCleanupSetup = false;
73
- this.config = {
74
- siteKey: '',
75
- apiUrl: (0, utils_1.resolveApiUrl)(),
76
- };
77
- this.renderer = new renderer_1.WidgetRenderer();
78
- this.tracker = new core_1.Tracker(this.config.apiUrl, this.config.siteKey);
79
- }
80
- isBrowserEnvironment() {
81
- return typeof window !== 'undefined' && typeof document !== 'undefined';
82
- }
83
- bindGlobalInstance() {
84
- if (!this.isBrowserEnvironment())
85
- return;
86
- try {
87
- window.Selwise = this;
88
- }
89
- catch {
90
- // ignore
91
- }
92
- }
93
- clearGlobalInstanceBinding() {
94
- if (!this.isBrowserEnvironment())
95
- return;
96
- try {
97
- const globalWindow = window;
98
- if (globalWindow.Selwise !== this)
99
- return;
100
- delete globalWindow.Selwise;
101
- }
102
- catch {
103
- try {
104
- if (window.Selwise === this) {
105
- window.Selwise = undefined;
106
- }
107
- }
108
- catch {
109
- // ignore
110
- }
111
- }
112
- }
113
- // Public getters for external access
114
- get siteKey() {
115
- return this.config.siteKey || '';
116
- }
117
- /**
118
- * Detect missing browser features
119
- * Returns array of missing feature names for graceful degradation
120
- */
121
- detectMissingFeatures() {
122
- const missing = [];
123
- // Check for fetch API
124
- if (typeof fetch === 'undefined') {
125
- missing.push('fetch');
126
- }
127
- // Check for Promise support
128
- if (typeof Promise === 'undefined') {
129
- missing.push('Promise');
130
- }
131
- // Check for IntersectionObserver (used in view tracking)
132
- if (typeof IntersectionObserver === 'undefined') {
133
- missing.push('IntersectionObserver');
134
- }
135
- // Check for Map/Set (used for caching)
136
- if (typeof Map === 'undefined' || typeof Set === 'undefined') {
137
- missing.push('Map/Set');
138
- }
139
- // Check for MutationObserver (used for SPA navigation)
140
- if (typeof MutationObserver === 'undefined') {
141
- missing.push('MutationObserver');
142
- }
143
- // Check for URL/URLSearchParams (used in search)
144
- if (typeof URL === 'undefined' || typeof URLSearchParams === 'undefined') {
145
- missing.push('URL/URLSearchParams');
146
- }
147
- return missing;
148
- }
149
- get apiUrl() {
150
- return this.config.apiUrl || '';
151
- }
152
- get trackingConfig() {
153
- return this._trackingConfig || null;
154
- }
155
- cleanupRenderedEntityRoots() {
156
- this.renderedEntities.clear();
157
- (0, helpers_1.cleanupDeferredRenderers)();
158
- (0, helpers_1.removeEntityRootsFromDOM)();
159
- document.querySelectorAll('[data-widget-id]').forEach((element) => {
160
- const htmlElement = element;
161
- if (htmlElement.getAttribute('data-selwise-recommendation') === 'true')
162
- return;
163
- htmlElement.remove();
164
- });
165
- }
166
- cleanupRenderedEntityById(entityId, entityType) {
167
- (0, helpers_1.removeEntityRootsById)(entityId, entityType);
168
- document.querySelectorAll('[data-widget-id]').forEach((element) => {
169
- const htmlElement = element;
170
- if (htmlElement.dataset.widgetId !== entityId)
171
- return;
172
- if (htmlElement.getAttribute('data-selwise-recommendation') === 'true')
173
- return;
174
- htmlElement.remove();
175
- });
176
- }
177
- /**
178
- * Setup SPA navigation detection for cleanup
179
- * Listens for popstate and detects URL changes
180
- *
181
- * FIXED: Race condition by reading location.href directly instead of caching
182
- */
183
- setupSPACleanup() {
184
- // Store original History API methods for restoration on destroy
185
- this.originalPushState = history.pushState.bind(history);
186
- this.originalReplaceState = history.replaceState.bind(history);
187
- // Listen for back/forward navigation - store listener for cleanup
188
- this.popStateListener = () => {
189
- this.onNavigate();
190
- };
191
- window.addEventListener('popstate', this.popStateListener);
192
- // Intercept pushState and replaceState for modern SPAs
193
- // Capture URL before and after to detect actual changes
194
- history.pushState = (...args) => {
195
- const previousUrl = window.location.href;
196
- this.originalPushState(...args);
197
- const currentUrl = window.location.href;
198
- if (previousUrl !== currentUrl) {
199
- this.onNavigate();
200
- }
201
- };
202
- history.replaceState = (...args) => {
203
- const previousUrl = window.location.href;
204
- this.originalReplaceState(...args);
205
- const currentUrl = window.location.href;
206
- if (previousUrl !== currentUrl) {
207
- this.onNavigate();
208
- }
209
- };
210
- }
211
- /**
212
- * Called when SPA navigation is detected
213
- * Cleans up current page resources and re-initializes for new page
214
- */
215
- onNavigate() {
216
- const currentUrl = window.location.href;
217
- (0, logger_1.testModeDebug)('Selwise', 'SPA navigation detected:', currentUrl, '- cleaning up...');
218
- // Clear any pending timeouts from previous navigation
219
- this.pendingTimeouts.forEach((id) => clearTimeout(id));
220
- this.pendingTimeouts.clear();
221
- // Cleanup search module
222
- if (this.searchModule?.destroy) {
223
- this.searchModule.destroy();
224
- this.searchModule = null;
225
- }
226
- // Cleanup recommendations module
227
- if (this.recommendationsCleanup) {
228
- this.recommendationsCleanup();
229
- this.recommendationsCleanup = null;
230
- }
231
- this.recommendationsInitialized = false;
232
- // Cleanup rendered campaign/widget roots and pending deferred observers
233
- this.cleanupRenderedEntityRoots();
234
- // Cleanup tracker state (IntersectionObservers, caches)
235
- this.tracker.cleanup();
236
- // Cleanup and reinitialize data layer for new page
237
- if (this.dataLayerManager) {
238
- this.dataLayerManager.destroy();
239
- this.dataLayerManager = null;
240
- }
241
- const dataLayerTimeout = window.setTimeout(() => {
242
- this.pendingTimeouts.delete(dataLayerTimeout);
243
- this.initDataLayer();
244
- }, 50);
245
- this.pendingTimeouts.add(dataLayerTimeout);
246
- // Cleanup custom scripts
247
- document.querySelectorAll('script[data-selwise-script]').forEach((el) => el.remove());
248
- document.querySelectorAll('style[data-selwise-script-css]').forEach((el) => el.remove());
249
- // Cleanup custom widget JS/CSS
250
- document.querySelectorAll('script[data-selwise-custom-js]').forEach((el) => el.remove());
251
- document.querySelectorAll('style[data-selwise-custom-css]').forEach((el) => el.remove());
252
- // Cleanup product card JS
253
- document.querySelectorAll('script[data-selwise-card-js]').forEach((el) => el.remove());
254
- // Re-initialize for new page (after a small delay to let DOM settle)
255
- const initTimeout = window.setTimeout(() => {
256
- this.pendingTimeouts.delete(initTimeout);
257
- this.initSearch();
258
- this.initRecommendations();
259
- this.renderEntitiesWithPolicies().catch((error) => {
260
- (0, logger_1.testModeDebug)('Selwise', 'Failed to render entities after navigation:', error);
261
- });
262
- }, 100);
263
- this.pendingTimeouts.add(initTimeout);
264
- }
265
- /**
266
- * Destroy the entire Selwise instance
267
- * Call this when completely removing the widget from the page
268
- */
269
- destroy() {
270
- if (this.isDestroyed)
271
- return;
272
- this.isDestroyed = true;
273
- // Clear all pending timeouts
274
- this.pendingTimeouts.forEach((id) => clearTimeout(id));
275
- this.pendingTimeouts.clear();
276
- // Restore original History API methods to prevent memory leaks
277
- if (this.originalPushState) {
278
- history.pushState = this.originalPushState;
279
- this.originalPushState = null;
280
- }
281
- if (this.originalReplaceState) {
282
- history.replaceState = this.originalReplaceState;
283
- this.originalReplaceState = null;
284
- }
285
- if (this.popStateListener) {
286
- window.removeEventListener('popstate', this.popStateListener);
287
- this.popStateListener = null;
288
- }
289
- this.spaCleanupSetup = false;
290
- // Cleanup search module
291
- if (this.searchModule?.destroy) {
292
- this.searchModule.destroy();
293
- }
294
- // Cleanup recommendations module
295
- if (this.recommendationsCleanup) {
296
- this.recommendationsCleanup();
297
- }
298
- // Cleanup data layer manager
299
- if (this.dataLayerManager) {
300
- this.dataLayerManager.destroy();
301
- }
302
- // Cleanup tracker
303
- this.tracker.flush();
304
- this.tracker.cleanup();
305
- if (this.isBrowserEnvironment()) {
306
- this.cleanupRenderedEntityRoots();
307
- }
308
- this.clearGlobalInstanceBinding();
309
- (0, logger_1.testModeDebug)('Selwise', 'Instance destroyed');
310
- }
311
- async init(config) {
312
- if (!this.isBrowserEnvironment()) {
313
- (0, logger_1.testModeWarn)('Selwise', 'init() must be called in a browser environment');
314
- return;
315
- }
316
- this.isDestroyed = false;
317
- // Feature detection - check for required browser APIs
318
- const missingFeatures = this.detectMissingFeatures();
319
- if (missingFeatures.length > 0) {
320
- (0, logger_1.testModeWarn)('Selwise', 'Browser missing required features:', missingFeatures.join(', '), '- Widget may not function correctly');
321
- // Don't completely fail - allow partial functionality
322
- }
323
- this.config = { ...this.config, ...config };
324
- this.tracker = new core_1.Tracker(this.config.apiUrl, this.config.siteKey);
325
- this.bindGlobalInstance();
326
- this.tracker.setupConsentCallback();
327
- if (!this.spaCleanupSetup) {
328
- this.setupSPACleanup();
329
- this.spaCleanupSetup = true;
330
- }
331
- if (!this.config.siteKey) {
332
- (0, logger_1.testModeWarn)('Selwise', 'No site key provided');
333
- return;
334
- }
335
- // Initialize Sentry early - only if explicitly configured
336
- // This loads asynchronously from CDN to avoid bundle size impact
337
- (0, sentry_1.initSentryFromConfig)().catch(() => {
338
- // Silently fail - Sentry issues shouldn't block widget initialization
339
- });
340
- try {
341
- // Initialize experiments first to get variants
342
- this.experiments = new core_1.ExperimentManager(this.config.siteKey, this.tracker.getVisitorId(), this.config.apiUrl);
343
- await this.experiments.init();
344
- // Initialize segment manager
345
- this.segments = new segments_1.SegmentManager(this.config.apiUrl, this.config.siteKey, this.tracker.getVisitorId(), this.tracker.getSessionId(), this.tracker.getSiteUserId(), this.tracker.getSiteUserProfileId());
346
- // PERFORMANCE: Use batch config endpoint for campaigns, widgets, recommendations, and tracking config
347
- // This replaces 4 separate requests with 1
348
- const [configResult, scriptsResult, integrationsResult] = await Promise.allSettled([
349
- this.loadSiteConfig().catch((e) => {
350
- (0, logger_1.testModeError)('Selwise', 'Failed to load site config:', e);
351
- return null;
352
- }),
353
- this.loadScripts().catch((e) => {
354
- (0, logger_1.testModeError)('Selwise', 'Failed to load scripts:', e);
355
- return null;
356
- }),
357
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/integrations`).catch(() => null),
358
- ]);
359
- // Process integration configs for reverse event mapping
360
- if (integrationsResult.status === 'fulfilled' &&
361
- integrationsResult.value &&
362
- integrationsResult.value.ok) {
363
- const integrations = await integrationsResult.value.json();
364
- const reverseMapping = {};
365
- // Collect all reverse mappings from enabled integrations
366
- for (const integration of integrations.integrations || []) {
367
- const reverseEventMapping = integration.reverseEventMapping || {};
368
- if (integration.enabled && reverseEventMapping) {
369
- Object.assign(reverseMapping, reverseEventMapping);
370
- }
371
- }
372
- if (Object.keys(reverseMapping).length > 0) {
373
- this.config.reverseEventMapping = reverseMapping;
374
- (0, logger_1.testModeLog)('Selwise', 'Reverse event mapping loaded:', reverseMapping);
375
- }
376
- }
377
- // Process batch config result
378
- if (configResult.status === 'fulfilled' && configResult.value) {
379
- const { campaigns, widgets, recommendations, tracking } = configResult.value;
380
- this.campaigns = campaigns || [];
381
- this.widgets = widgets || [];
382
- this.recommendationWidgets = recommendations || [];
383
- // Apply tracking config from batch endpoint
384
- if (tracking) {
385
- this._trackingConfig = tracking;
386
- // Check for subscription requirement
387
- if (tracking.subscriptionRequired) {
388
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', tracking.subscriptionMessage);
389
- this.handleSubscriptionInactive(tracking.subscriptionMessage);
390
- return;
391
- }
392
- // Convert flush interval from seconds to milliseconds
393
- const flushIntervalMs = tracking.flushInterval
394
- ? tracking.flushInterval * 1000
395
- : undefined;
396
- // Apply configuration to tracker's batcher
397
- this.tracker.setBatcherConfig({
398
- enabled: tracking.batchingEnabled,
399
- batchSize: tracking.batchSize,
400
- flushInterval: flushIntervalMs,
401
- enablePersistence: tracking.offlinePersistence,
402
- enableSendBeacon: tracking.sendBeaconOnUnload,
403
- maxRetries: tracking.maxRetries,
404
- maxQueueSize: tracking.maxQueueSize,
405
- maxStorageEvents: tracking.maxStorageEvents,
406
- debugMode: tracking.debugMode,
407
- });
408
- // Set global debug mode for logger
409
- (0, logger_1.setDebugMode)(tracking.debugMode || false);
410
- // Initialize the batcher (loads overflow events and flushes them)
411
- await this.tracker.initialize();
412
- // Store data layer config for initialization
413
- this.config.dataLayerConfig = tracking.dataLayerConfig;
414
- if (tracking.debugMode) {
415
- (0, logger_1.testModeLog)('Selwise', 'Tracking config loaded from batch endpoint:', tracking);
416
- }
417
- }
418
- (0, logger_1.testModeLog)('Selwise', 'Loaded site config from batch endpoint:', {
419
- campaigns: this.campaigns.length,
420
- widgets: this.widgets.length,
421
- recommendations: this.recommendationWidgets.length,
422
- });
423
- // Initialize data layer (after tracking config is loaded)
424
- this.initDataLayer();
425
- }
426
- else {
427
- // Fallback to individual endpoints if batch fails
428
- (0, logger_1.testModeWarn)('Selwise', 'Batch endpoint failed, falling back to individual endpoints');
429
- this.recommendationWidgets = [];
430
- // Fall back to loading tracking config separately
431
- await this.loadTrackingConfig();
432
- // Initialize data layer (after tracking config is loaded)
433
- this.initDataLayer();
434
- // Load campaigns and widgets
435
- await this.loadCampaignsAndWidgets();
436
- }
437
- // Render campaigns and widgets immediately using requestIdleCallback for non-blocking execution
438
- if ('requestIdleCallback' in window) {
439
- requestIdleCallback(() => {
440
- this.renderEntitiesWithPolicies();
441
- }, { timeout: 100 }); // Force rendering after 100ms even if idle doesn't fire
442
- }
443
- else {
444
- // Fallback for browsers without requestIdleCallback
445
- setTimeout(() => {
446
- this.renderEntitiesWithPolicies();
447
- }, 0);
448
- }
449
- // Initialize search module (lazy loaded) - run in background
450
- if ('requestIdleCallback' in window) {
451
- requestIdleCallback(() => this.initSearch(), { timeout: 200 });
452
- }
453
- else {
454
- setTimeout(() => this.initSearch(), 50);
455
- }
456
- // Initialize recommendations module (lazy loaded) - run in background after critical path
457
- if ('requestIdleCallback' in window) {
458
- requestIdleCallback(() => this.initRecommendations(), { timeout: 300 });
459
- }
460
- else {
461
- setTimeout(() => this.initRecommendations(), 100);
462
- }
463
- }
464
- catch (error) {
465
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load data', error);
466
- // Send to Sentry if initialized
467
- if (error instanceof Error) {
468
- (0, sentry_1.captureException)(error, { context: 'init' });
469
- }
470
- }
471
- }
472
- /**
473
- * Fetch and apply tracking configuration from server
474
- * This allows dashboard settings to control client-side batching behavior
475
- * and data layer configuration
476
- */
477
- async loadTrackingConfig() {
478
- if (!this.config.siteKey || !this.config.apiUrl)
479
- return;
480
- try {
481
- const [trackingResponse, integrationsResponse] = await Promise.allSettled([
482
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/tracking-config`),
483
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/integrations`),
484
- ]);
485
- // Process tracking config
486
- if (trackingResponse.status === 'fulfilled' && trackingResponse.value.ok) {
487
- const config = await trackingResponse.value.json();
488
- // Store full config for external access (e.g., cookie consent widget)
489
- this._trackingConfig = config;
490
- // Check for subscription requirement
491
- if (config.subscriptionRequired) {
492
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', config.subscriptionMessage);
493
- this.handleSubscriptionInactive(config.subscriptionMessage);
494
- return; // Stop initialization
495
- }
496
- // Convert flush interval from seconds to milliseconds
497
- const flushIntervalMs = config.flushInterval ? config.flushInterval * 1000 : undefined;
498
- // Apply configuration to tracker's batcher
499
- this.tracker.setBatcherConfig({
500
- enabled: config.batchingEnabled,
501
- batchSize: config.batchSize,
502
- flushInterval: flushIntervalMs,
503
- enablePersistence: config.offlinePersistence,
504
- enableSendBeacon: config.sendBeaconOnUnload,
505
- maxRetries: config.maxRetries,
506
- maxQueueSize: config.maxQueueSize,
507
- maxStorageEvents: config.maxStorageEvents,
508
- debugMode: config.debugMode,
509
- });
510
- // Set global debug mode for logger
511
- (0, logger_1.setDebugMode)(config.debugMode || false);
512
- // Initialize the batcher (loads overflow events and flushes them)
513
- await this.tracker.initialize();
514
- if (config.debugMode) {
515
- (0, logger_1.testModeLog)('Selwise', 'Tracking config loaded:', config);
516
- }
517
- // Store data layer config for initialization
518
- this.config.dataLayerConfig = config.dataLayerConfig;
519
- }
520
- else if (trackingResponse.status === 'fulfilled' && trackingResponse.value.status === 403) {
521
- // Subscription check failed at HTTP level
522
- const error = await trackingResponse.value.json().catch(() => ({}));
523
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required (HTTP 403):', error.message || 'Subscription inactive');
524
- this.handleSubscriptionInactive(error.message || 'Subscription required');
525
- return;
526
- }
527
- // Process integration configs for reverse event mapping
528
- if (integrationsResponse.status === 'fulfilled' && integrationsResponse.value.ok) {
529
- const integrations = await integrationsResponse.value.json();
530
- const reverseMapping = {};
531
- // Collect all reverse mappings from enabled integrations
532
- for (const integration of integrations.integrations || []) {
533
- const reverseEventMapping = integration.reverseEventMapping || {};
534
- if (integration.enabled && reverseEventMapping) {
535
- Object.assign(reverseMapping, reverseEventMapping);
536
- }
537
- }
538
- if (Object.keys(reverseMapping).length > 0) {
539
- this.config.reverseEventMapping = reverseMapping;
540
- (0, logger_1.testModeLog)('Selwise', 'Reverse event mapping loaded:', reverseMapping);
541
- }
542
- }
543
- }
544
- catch (error) {
545
- // Silently fail, use defaults
546
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load tracking config, using defaults');
547
- }
548
- }
549
- /**
550
- * Load campaigns, widgets, and recommendations using the batch config endpoint
551
- * PERFORMANCE: Single request instead of 3 separate requests
552
- * Falls back to individual endpoints if batch endpoint fails
553
- */
554
- async loadSiteConfig() {
555
- if (!this.config.siteKey || !this.config.apiUrl)
556
- return null;
557
- try {
558
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/config`, {
559
- method: 'GET',
560
- });
561
- if (!response.ok) {
562
- if (response.status === 403) {
563
- const error = await response.json().catch(() => ({}));
564
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', error.message || 'Subscription inactive');
565
- this.handleSubscriptionInactive(error.message || 'Subscription required');
566
- }
567
- return null;
568
- }
569
- const data = await response.json();
570
- return data;
571
- }
572
- catch (error) {
573
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load batch config, falling back to individual endpoints');
574
- return null;
575
- }
576
- }
577
- /**
578
- * Fallback path: load campaigns and widgets individually
579
- * Used only if batch endpoint fails
580
- */
581
- async loadCampaignsAndWidgets() {
582
- const campaignsPromise = this.loadCampaigns().catch((e) => {
583
- (0, logger_1.testModeError)('Selwise', 'Failed to load campaigns:', e);
584
- return null;
585
- });
586
- const widgetsPromise = this.loadWidgets().catch((e) => {
587
- (0, logger_1.testModeError)('Selwise', 'Failed to load widgets:', e);
588
- return null;
589
- });
590
- await Promise.allSettled([campaignsPromise, widgetsPromise]);
591
- }
592
- /**
593
- * Initialize the data layer manager
594
- * Called after tracking config is loaded to respect server-side settings
595
- */
596
- initDataLayer() {
597
- if (!this.config.siteKey)
598
- return;
599
- const dlConfig = this.config.dataLayerConfig || {};
600
- const reverseMapping = this.config.reverseEventMapping || {};
601
- this.dataLayerManager = new datalayer_1.DataLayerManager(this.tracker, this.config.siteKey, (0, utils_1.resolveApiUrl)(this.config.apiUrl), {
602
- enabled: dlConfig.enabled ?? true, // Enabled by default for comprehensive event tracking
603
- variableName: dlConfig.variableName ?? 'selwiseLayer',
604
- pageDetection: dlConfig.pageDetection ?? 'auto',
605
- autoPageTracking: dlConfig.autoPageTracking ?? true,
606
- cartAbandonmentTimeout: dlConfig.cartAbandonmentTimeout ?? 30,
607
- pageTypePatterns: dlConfig.pageTypePatterns ?? undefined,
608
- debugMode: dlConfig.debugMode ?? false,
609
- cookieConsent: dlConfig.cookieConsent,
610
- trackingModules: dlConfig.trackingModules,
611
- bufferSize: dlConfig.bufferSize,
612
- flushInterval: dlConfig.flushInterval,
613
- reverseEventMapping: Object.keys(reverseMapping).length > 0 ? reverseMapping : undefined,
614
- externalDataLayerName: 'dataLayer',
615
- });
616
- // Initialize if enabled (enabled by default)
617
- if (dlConfig.enabled ?? true) {
618
- this.dataLayerManager.init();
619
- (0, logger_1.testModeLog)('Selwise', 'Data layer manager initialized and started');
620
- }
621
- else {
622
- (0, logger_1.testModeLog)('Selwise', 'Data layer manager created but NOT enabled (disabled in dashboard settings)');
623
- }
624
- if (dlConfig.debugMode) {
625
- (0, logger_1.testModeLog)('Selwise', 'Data layer initialized with config:', dlConfig);
626
- }
627
- }
628
- /**
629
- * Public helper for experiment variant access
630
- * Returns the full variant assignment for an experiment
631
- */
632
- getVariant(experimentId) {
633
- return this.experiments?.getVariant(experimentId);
634
- }
635
- /**
636
- * Public helper for getting the assigned variant ID
637
- * Returns just the variant ID (e.g., 'variant_a', 'control')
638
- */
639
- getExperimentVariant(experimentId) {
640
- if (!this.experiments)
641
- return null;
642
- return this.experiments.getAssignedVariant(experimentId);
643
- }
644
- /**
645
- * Public helper for getting all active experiment assignments
646
- * Returns an array of all experiment assignments for the current visitor
647
- */
648
- getActiveExperiments() {
649
- if (!this.experiments)
650
- return [];
651
- return this.experiments.getAllAssignments();
652
- }
653
- /**
654
- * Public helper for purchase/order tracking.
655
- * Merchants can call: window.Selwise.trackOrder({...})
656
- */
657
- async trackOrder(order) {
658
- return this.tracker.trackOrder(order);
659
- }
660
- /**
661
- * Identify a user.
662
- * Call this when a user logs in or is identified.
663
- * @param userId Unique user ID from your system
664
- * @param metadata Optional metadata about the user
665
- * @returns Promise with success status and merge indicator
666
- */
667
- async identify(userId, metadata) {
668
- if (!userId)
669
- return { success: false, merged: false };
670
- const result = await this.tracker.identify(userId, metadata);
671
- // Update segment manager with new user identifiers for accurate evaluation
672
- if (this.segments) {
673
- this.segments.updateUserIdentifiers(this.tracker.getSiteUserId(), this.tracker.getSiteUserProfileId());
674
- }
675
- return result;
676
- }
677
- /**
678
- * Set user traits without changing identity.
679
- * Call this to update user attributes like name, email, plan, etc.
680
- * @param traits Key-value pairs of user attributes
681
- * @returns Promise with success status
682
- */
683
- async setTraits(traits) {
684
- return this.tracker.setTraits(traits);
685
- }
686
- /**
687
- * Track a custom event.
688
- * Call this to track custom events like 'button_clicked', 'form_submitted', etc.
689
- * @param name Event name (e.g., 'product_viewed', 'button_clicked')
690
- * @param args Optional event data including entityType, entityId, and metadata
691
- *
692
- * @example
693
- * window.Selwise.track('product_viewed', {
694
- * entityType: 'product',
695
- * entityId: 'prod_123',
696
- * metadata: { price: 99.99, category: 'electronics' }
697
- * })
698
- */
699
- track(name, args) {
700
- return this.tracker.track(name, args);
701
- }
702
- /**
703
- * Get current site user ID (if user has been identified)
704
- * @returns The site user ID or undefined
705
- */
706
- getSiteUserId() {
707
- return this.tracker.getSiteUserId();
708
- }
709
- /**
710
- * Get current visitor ID
711
- * @returns The visitor ID
712
- */
713
- getVisitorId() {
714
- return this.tracker.getVisitorId();
715
- }
716
- /**
717
- * Get current session ID
718
- * @returns The session ID
719
- */
720
- getSessionId() {
721
- return this.tracker.getSessionId();
722
- }
723
- /**
724
- * Get current journey ID
725
- * @returns The journey ID or null if no active journey
726
- */
727
- getJourneyId() {
728
- return this.tracker.getJourneyId();
729
- }
730
- /**
731
- * Get current journey state for debugging
732
- * @returns Journey state including ID, age, and validity
733
- */
734
- getJourneyState() {
735
- return this.tracker.getJourneyState();
736
- }
737
- /**
738
- * End the current journey
739
- * Clears the journey ID and starts a new one on the next event
740
- */
741
- endJourney() {
742
- this.tracker.endJourney();
743
- }
744
- /**
745
- * Search module - dynamically imported for code splitting
746
- */
747
- async initSearch() {
748
- try {
749
- // Dynamic import - creates separate chunk (selwise-search.js)
750
- const { SearchModule } = await Promise.resolve().then(() => __importStar(require(
751
- /* webpackChunkName: "selwise-search" */
752
- './modules/search')));
753
- this.searchModule = new SearchModule(this.config.apiUrl, this.config.siteKey, this.experiments ?? undefined, this.segments ?? undefined);
754
- await this.searchModule.init();
755
- }
756
- catch (error) {
757
- (0, logger_1.testModeDebug)('Selwise', 'Search module initialization failed', error);
758
- }
759
- }
760
- /**
761
- * Recommendations module - dynamically imported for code splitting
762
- */
763
- async initRecommendations() {
764
- if (this.recommendationsInitialized)
765
- return;
766
- try {
767
- // Dynamic import - creates separate chunk (selwise-reco.js)
768
- const { initRecommendations, cleanup } = await Promise.resolve().then(() => __importStar(require(
769
- /* webpackChunkName: "selwise-reco" */
770
- './modules/recommendation')));
771
- await initRecommendations({
772
- siteKey: this.config.siteKey,
773
- apiEndpoint: this.config.apiUrl,
774
- experimentManager: this.experiments ?? undefined,
775
- segmentManager: this.segments ?? undefined,
776
- widgets: this.recommendationWidgets,
777
- });
778
- this.recommendationsInitialized = true;
779
- this.recommendationsCleanup = cleanup; // Store cleanup function
780
- (0, logger_1.testModeLog)('Selwise', 'Recommendations module initialized');
781
- }
782
- catch (error) {
783
- (0, logger_1.testModeDebug)('Selwise', 'Recommendations module initialization failed', error);
784
- }
785
- }
786
- async loadCampaigns() {
787
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/campaigns`, {
788
- method: 'GET',
789
- });
790
- if (!response.ok) {
791
- if (response.status === 403) {
792
- const error = await response.json().catch(() => ({}));
793
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required for campaigns:', error.message || 'Subscription inactive');
794
- this.handleSubscriptionInactive(error.message || 'Subscription required');
795
- }
796
- throw new Error('Failed to fetch campaigns');
797
- }
798
- const data = await response.json();
799
- this.campaigns = data.campaigns || [];
800
- }
801
- async loadWidgets() {
802
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/widgets`, {
803
- method: 'GET',
804
- });
805
- if (!response.ok) {
806
- if (response.status === 403) {
807
- const error = await response.json().catch(() => ({}));
808
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required for widgets:', error.message || 'Subscription inactive');
809
- this.handleSubscriptionInactive(error.message || 'Subscription required');
810
- }
811
- // Silently fail when endpoint is unavailable
812
- return;
813
- }
814
- const data = await response.json();
815
- this.widgets = data.widgets || [];
816
- }
817
- async loadScripts() {
818
- const currentPath = window.location.pathname;
819
- try {
820
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/scripts?path=${encodeURIComponent(currentPath)}`, {
821
- method: 'GET',
822
- });
823
- if (!response.ok) {
824
- (0, logger_1.testModeDebug)('Selwise', 'Failed to fetch scripts');
825
- return;
826
- }
827
- const data = await response.json();
828
- const scripts = data.scripts || [];
829
- (0, logger_1.testModeLog)('Selwise', 'Loading custom scripts:', scripts.length);
830
- scripts.forEach((script) => {
831
- try {
832
- // Inject CSS first if provided
833
- if (script.css) {
834
- const styleElement = document.createElement('style');
835
- styleElement.setAttribute('data-selwise-script-css', script.id);
836
- styleElement.textContent = script.css;
837
- document.head.appendChild(styleElement);
838
- (0, logger_1.testModeLog)('Selwise', `Injected script CSS: ${script.name}`);
839
- }
840
- // Create and execute the script
841
- const scriptElement = document.createElement('script');
842
- scriptElement.setAttribute('data-selwise-script', script.id);
843
- scriptElement.textContent = script.code;
844
- document.body.appendChild(scriptElement);
845
- (0, logger_1.testModeLog)('Selwise', `Injected script: ${script.name}`);
846
- this.tracker.track('script_injected', {
847
- entityType: 'script',
848
- entityId: script.id,
849
- metadata: { name: script.name },
850
- });
851
- }
852
- catch (error) {
853
- (0, logger_1.testModeError)('Selwise', `Failed to execute script: ${script.name}`);
854
- (0, logger_1.testModeDebug)('Selwise', 'Script execution error details:', error);
855
- if (error instanceof SyntaxError) {
856
- (0, logger_1.testModeWarn)('Selwise', 'Script syntax error. Please check for invalid characters or escapes.');
857
- }
858
- try {
859
- this.tracker.track('script_error', {
860
- entityType: 'script',
861
- entityId: script.id,
862
- metadata: {
863
- name: script.name,
864
- message: error?.message,
865
- },
866
- });
867
- }
868
- catch {
869
- // ignore
870
- }
871
- }
872
- });
873
- }
874
- catch (error) {
875
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load scripts', error);
876
- }
877
- }
878
- shouldRenderForCurrentPage(entity, type) {
879
- const shouldRender = (0, core_1.evaluatePageTargeting)(entity.pageTargetingJson, window.location.href);
880
- if (!shouldRender) {
881
- (0, logger_1.testModeLog)('Selwise', `Skipping ${type} due to page targeting: ${entity.id}`);
882
- }
883
- return shouldRender;
884
- }
885
- buildDisplayCandidates() {
886
- const allEntities = [
887
- ...this.campaigns.map((campaign) => ({ entity: campaign, type: 'campaign' })),
888
- ...this.widgets.map((widget) => ({ entity: widget, type: 'widget' })),
889
- ];
890
- return allEntities
891
- .filter(({ entity, type }) => this.shouldRenderForCurrentPage(entity, type))
892
- .map(({ entity, type }) => {
893
- const placementConfig = (entity.placementConfigJson || {});
894
- const selector = placementConfig.selector;
895
- const placementPosition = placementConfig.position || placementConfig.insertPosition;
896
- const conflictResolution = placementConfig.conflictResolution || {};
897
- const candidate = this.conflictResolver.applyConfig({
898
- id: `${type}:${entity.id}`,
899
- type,
900
- selector,
901
- placementPosition,
902
- priority: entity.priority ?? conflictResolution.priority,
903
- conflictBehavior: conflictResolution.behavior,
904
- placementConfigJson: placementConfig,
905
- });
906
- return {
907
- id: candidate.id,
908
- type,
909
- priority: candidate.priority,
910
- conflictBehavior: candidate.conflictBehavior,
911
- selector: candidate.selector,
912
- placementPosition: candidate.placementPosition,
913
- placementConfigJson: placementConfig,
914
- sourceId: entity.id,
915
- sourceEntity: entity,
916
- frequencyCapConfig: placementConfig.frequencyCap,
917
- };
918
- });
919
- }
920
- async renderEntitiesWithPolicies() {
921
- const candidates = this.buildDisplayCandidates();
922
- (0, logger_1.testModeLog)('Selwise', 'Rendering entities with policies:', candidates.length);
923
- this.renderedEntities.clear();
924
- this.frequencyCapManager.cleanup();
925
- if (candidates.length === 0)
926
- return;
927
- const resolutionResults = this.conflictResolver.resolveAll(candidates);
928
- const selectedIds = new Set(resolutionResults.flatMap((result) => result.selected.map((candidate) => candidate.id)));
929
- for (const candidate of candidates) {
930
- if (!selectedIds.has(candidate.id)) {
931
- continue;
932
- }
933
- const frequencyKey = `display:${candidate.id}`;
934
- if (candidate.frequencyCapConfig) {
935
- const check = this.frequencyCapManager.canShow(frequencyKey, candidate.frequencyCapConfig);
936
- if (!check.allowed) {
937
- (0, logger_1.testModeLog)('Selwise', `Skipping ${candidate.type} due to frequency cap (${check.reason || 'limit'}):`, candidate.sourceId);
938
- continue;
939
- }
940
- }
941
- const rendered = await this.renderEntity(candidate.sourceEntity, candidate.type);
942
- if (rendered && candidate.frequencyCapConfig) {
943
- this.frequencyCapManager.recordShown(frequencyKey);
944
- }
945
- }
946
- }
947
- /**
948
- * Unified entity rendering for campaigns and widgets
949
- * @param skipVariantCheck - Skip variant module lookup (used when rendering variant modules to prevent infinite loops)
950
- */
951
- async renderEntity(entity, type, skipVariantCheck = false) {
952
- const testModeEnabled = (0, utils_1.isTestModeEnabled)();
953
- const entityName = type === 'campaign' ? 'campaign' : 'widget';
954
- // Skip if already rendered (prevents duplicate rendering when both control and variant are in the list)
955
- if (this.renderedEntities.has(entity.id)) {
956
- (0, logger_1.testModeLog)('Selwise', `Skipping already rendered ${entityName}: ${entity.id}`);
957
- return false;
958
- }
959
- // Skip test mode entities if test mode is not enabled
960
- if (entity.isTestMode && !testModeEnabled) {
961
- (0, logger_1.testModeWarn)('Selwise', `Skipping test mode ${entityName}: ${entity.id}${type === 'campaign' ? " (Run localStorage.setItem('selwise_test_mode', 'true') to view)" : ''}`);
962
- return false;
963
- }
964
- // Re-check page targeting at render time to avoid stale route races.
965
- if (!this.shouldRenderForCurrentPage(entity, type)) {
966
- return false;
967
- }
968
- // Check for different_module mode experiment FIRST (before shouldRenderTarget check)
969
- // If this entity has a variant module, render it instead and skip the original
970
- // Skip this check if we're already rendering a variant module (to prevent infinite loops)
971
- const variantAssignment = skipVariantCheck
972
- ? null
973
- : this.experiments?.getVariantModuleForTarget(entity.id);
974
- if (variantAssignment && variantAssignment.moduleData) {
975
- (0, logger_1.testModeLog)('Selwise', `Rendering variant module for ${entityName}: ${entity.id} -> variant: ${variantAssignment.moduleData.id}`);
976
- // This entity has a variant module that should be rendered instead
977
- await this.renderVariantModule(variantAssignment.moduleData, variantAssignment.experimentId, variantAssignment.variantId, variantAssignment.targetType || type // Use assignment's targetType or current entity type
978
- );
979
- // Don't render the original entity
980
- return false;
981
- }
982
- // Check if this entity should be rendered (e.g. not replaced by an experiment)
983
- if (this.experiments && !this.experiments.shouldRenderTarget(entity.id)) {
984
- (0, logger_1.testModeLog)('Selwise', `Skipping ${entityName} (excluded by experiment): ${entity.id}`);
985
- return false;
986
- }
987
- // Check segment targeting
988
- if (this.segments && entity.segmentTargetingMode && entity.segmentIds) {
989
- const shouldShow = await this.segments.shouldShow(entity.segmentTargetingMode, entity.segmentIds);
990
- if (!shouldShow) {
991
- (0, logger_1.testModeLog)('Selwise', `Skipping ${entityName} due to segment targeting: ${entity.id}`);
992
- return false;
993
- }
994
- }
995
- // Skip if no content
996
- if (!entity.contentJson || Object.keys(entity.contentJson).length === 0) {
997
- (0, logger_1.testModeWarn)('Selwise', `Skipping empty ${entityName}: ${entity.id}`);
998
- return false;
999
- }
1000
- // Check for experiment variant override (config_override mode)
1001
- let variantContent = (0, experiment_overrides_1.normalizeContentFields)(entity.contentJson || {});
1002
- let variantStyles = entity.stylesJson || {};
1003
- let variantPlacement = entity.placementConfigJson || {};
1004
- const assignment = this.experiments?.getVariant(entity.id) ||
1005
- this.experiments?.getAssignmentByTargetId(entity.id);
1006
- if (assignment) {
1007
- const config = (0, experiment_overrides_1.getEffectiveConfig)(assignment);
1008
- if (config?.content && typeof config.content === 'object') {
1009
- variantContent = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantContent, (0, experiment_overrides_1.normalizeContentFields)(config.content));
1010
- }
1011
- if (config?.styles && typeof config.styles === 'object') {
1012
- variantStyles = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantStyles, config.styles);
1013
- }
1014
- if (config?.placement && typeof config.placement === 'object') {
1015
- variantPlacement = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantPlacement, config.placement);
1016
- }
1017
- }
1018
- // Create renderer objects
1019
- const widgetForRenderer = {
1020
- id: entity.id,
1021
- type: entity.type,
1022
- placementConfigJson: variantPlacement,
1023
- __entityType: type,
1024
- };
1025
- const campaignForRenderer = {
1026
- id: entity.id,
1027
- contentJson: variantContent,
1028
- stylesJson: variantStyles,
1029
- };
1030
- // Idempotency guard for SPA re-renders.
1031
- this.cleanupRenderedEntityById(entity.id, type);
1032
- const element = this.renderer.render(widgetForRenderer, campaignForRenderer);
1033
- if (element) {
1034
- // Mark as rendered to prevent duplicates
1035
- this.renderedEntities.add(entity.id);
1036
- // Track impression
1037
- this.tracker.track('impression', {
1038
- entityType: type === 'campaign' ? 'campaign' : 'widget',
1039
- entityId: entity.id,
1040
- });
1041
- // Track experiment impression if applicable
1042
- if (assignment) {
1043
- this.experiments?.trackImpression(assignment.experimentId);
1044
- }
1045
- // Setup click tracking
1046
- element.addEventListener('click', (e) => {
1047
- const target = e.target;
1048
- if (target.tagName === 'A' || target.tagName === 'BUTTON') {
1049
- const buttonText = target.textContent?.toLowerCase() || '';
1050
- const isAddToCart = /add to cart|buy now|purchase|add to bag|sepete ekle|satın al|buy now/i.test(buttonText);
1051
- this.tracker.track('click', {
1052
- entityType: type === 'campaign' ? 'campaign' : 'widget',
1053
- entityId: entity.id,
1054
- });
1055
- if (type === 'campaign') {
1056
- // Track add_to_cart for campaign buttons that are clearly purchase-related
1057
- if (isAddToCart) {
1058
- this.tracker.track('add_to_cart', {
1059
- entityType: 'campaign',
1060
- entityId: entity.id,
1061
- metadata: {
1062
- buttonText: target.textContent,
1063
- },
1064
- });
1065
- }
1066
- }
1067
- // Track experiment conversion
1068
- if (assignment) {
1069
- this.experiments?.trackConversion(assignment.experimentId);
1070
- }
1071
- }
1072
- });
1073
- return true;
1074
- }
1075
- return false;
1076
- }
1077
- /**
1078
- * Render a variant module from different_module mode experiment
1079
- * @param moduleData The module data containing target type and full entity data
1080
- * @param experimentId The experiment ID
1081
- * @param variantId The variant ID
1082
- * @param targetType The target type (widget, campaign, recommendation, etc.)
1083
- */
1084
- async renderVariantModule(moduleData, experimentId, variantId, targetType) {
1085
- // Handle both wrapped and direct moduleData formats
1086
- // Wrapped: { targetType, data }
1087
- // Direct: moduleData IS the entity, targetType comes from parameter
1088
- let data;
1089
- let effectiveTargetType;
1090
- if (moduleData.data) {
1091
- // Wrapped format
1092
- data = moduleData.data;
1093
- effectiveTargetType = moduleData.targetType || targetType || 'widget';
1094
- }
1095
- else {
1096
- // Direct format - moduleData IS the entity
1097
- data = moduleData;
1098
- effectiveTargetType = targetType || 'widget';
1099
- }
1100
- // Track experiment impression
1101
- if (this.experiments) {
1102
- this.experiments.trackImpression(experimentId);
1103
- }
1104
- // Track impression for the variant
1105
- this.tracker.track('impression', {
1106
- entityType: effectiveTargetType,
1107
- entityId: data.id,
1108
- metadata: {
1109
- experimentId,
1110
- variantId,
1111
- isVariantModule: true,
1112
- },
1113
- });
1114
- // Render based on target type
1115
- // Pass skipVariantCheck=true to prevent infinite loops when rendering variant modules
1116
- switch (effectiveTargetType) {
1117
- case 'widget':
1118
- await this.renderEntity(data, 'widget', true);
1119
- break;
1120
- case 'campaign':
1121
- await this.renderEntity(data, 'campaign', true);
1122
- break;
1123
- case 'recommendation':
1124
- // Recommendations are handled by the recommendations module
1125
- // The module will pick up the variant from the experiment manager
1126
- (0, logger_1.testModeLog)('Selwise', 'Variant recommendation module will be rendered by recommendations module');
1127
- break;
1128
- case 'search_config':
1129
- // Search is handled by the search module
1130
- (0, logger_1.testModeLog)('Selwise', 'Variant search config will be applied by search module');
1131
- break;
1132
- default:
1133
- (0, logger_1.testModeWarn)('Selwise', `Unknown target type for variant module: ${effectiveTargetType}`);
1134
- }
1135
- }
1136
- /**
1137
- * Handle inactive subscription
1138
- * Disables widget and emits event for parent application to handle
1139
- *
1140
- * @param message Error message from server
1141
- */
1142
- handleSubscriptionInactive(message) {
1143
- // Mark widget as disabled
1144
- this.enabled = false;
1145
- this.subscriptionInactive = true;
1146
- this.subscriptionMessage = message;
1147
- // Emit event for parent to handle
1148
- if (typeof window !== 'undefined') {
1149
- const event = new CustomEvent('selwise:subscription-inactive', {
1150
- detail: { message },
1151
- });
1152
- window.dispatchEvent(event);
1153
- }
1154
- // Optionally show a subtle console warning for developers
1155
- (0, logger_1.testModeWarn)('Selwise', 'Subscription inactive. Widget will not display. ' + 'Message: ' + message);
1156
- }
1157
- }
1158
- exports.Selwise = Selwise;
1159
- exports.default = Selwise;
1160
- //# sourceMappingURL=selwise.js.map