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