@liquidcommercedev/rmn-sdk 1.4.6-beta.4 → 1.4.6-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -56,6 +56,8 @@ exports.RMN_FILTER_PROPERTIES = void 0;
56
56
  })(exports.RMN_FILTER_PROPERTIES || (exports.RMN_FILTER_PROPERTIES = {}));
57
57
  exports.RMN_SPOT_EVENT = void 0;
58
58
  (function (RMN_SPOT_EVENT) {
59
+ RMN_SPOT_EVENT["MOUNTED"] = "MOUNTED";
60
+ RMN_SPOT_EVENT["UNMOUNTED"] = "UNMOUNTED";
59
61
  RMN_SPOT_EVENT["IMPRESSION"] = "IMPRESSION";
60
62
  RMN_SPOT_EVENT["CLICK"] = "CLICK";
61
63
  RMN_SPOT_EVENT["PURCHASE"] = "PURCHASE";
@@ -15164,6 +15166,46 @@ const GFONT_CORMORANT = `
15164
15166
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant:ital,wght@0,300..700;1,300..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap">
15165
15167
  `;
15166
15168
 
15169
+ class IntersectionObserverService {
15170
+ constructor(defaultOptions = {}) {
15171
+ this.observers = new Map();
15172
+ this.defaultOptions = {
15173
+ root: null,
15174
+ rootMargin: '0px',
15175
+ threshold: 0.5,
15176
+ ...defaultOptions,
15177
+ };
15178
+ }
15179
+ observe(element, callback, options = {}) {
15180
+ const mergedOptions = { ...this.defaultOptions, ...options };
15181
+ const ioCallback = (entries) => {
15182
+ entries.forEach((entry) => {
15183
+ if (entry.isIntersecting) {
15184
+ callback(entry);
15185
+ }
15186
+ });
15187
+ };
15188
+ const observer = new IntersectionObserver(ioCallback, mergedOptions);
15189
+ this.observers.set(element, observer);
15190
+ observer.observe(element);
15191
+ }
15192
+ unobserve(element) {
15193
+ const observer = this.observers.get(element);
15194
+ if (observer) {
15195
+ observer.unobserve(element);
15196
+ observer.disconnect();
15197
+ this.observers.delete(element);
15198
+ }
15199
+ }
15200
+ unobserveAll() {
15201
+ this.observers.forEach((observer, element) => {
15202
+ observer.unobserve(element);
15203
+ observer.disconnect();
15204
+ });
15205
+ this.observers.clear();
15206
+ }
15207
+ }
15208
+
15167
15209
  class ResizeObserverService {
15168
15210
  constructor({ element, maxSize, minScale }) {
15169
15211
  this.element = element;
@@ -15203,9 +15245,9 @@ class ResizeObserverService {
15203
15245
  newWidth = Math.min(containerWidth, this.maxSize.width);
15204
15246
  newHeight = newWidth / this.aspectRatio;
15205
15247
  // If the height exceeds the container, adjust based on height
15206
- if (newHeight > containerHeight) {
15207
- newHeight = containerHeight;
15208
- newWidth = newHeight * this.aspectRatio;
15248
+ if (newWidth > containerWidth) {
15249
+ newWidth = containerWidth;
15250
+ newHeight = containerHeight * this.aspectRatio;
15209
15251
  }
15210
15252
  // Ensure we're not going below minimum dimensions
15211
15253
  newWidth = Math.max(newWidth, this.minSize.width);
@@ -15232,6 +15274,36 @@ class ResizeObserverService {
15232
15274
  }
15233
15275
  }
15234
15276
 
15277
+ function calculateScaleFactor(elementScale) {
15278
+ // Step 1: Apply square root for non-linear scaling
15279
+ // This creates a more gradual scaling effect, especially for larger changes
15280
+ // For example:
15281
+ // - elementScale of 0.25 (1/4 size) becomes 0.5
15282
+ // - elementScale of 1 (unchanged) remains 1
15283
+ // - elementScale of 4 (4x size) becomes 2
15284
+ const baseFactor = Math.sqrt(elementScale);
15285
+ // Step 2: Apply additional dampening to further soften the scaling effect
15286
+ // The dampening factor (0.5) can be adjusted:
15287
+ // - Lower values (closer to 0) make scaling more subtle
15288
+ // - Higher values (closer to 1) make scaling more pronounced
15289
+ const dampening = 0.35;
15290
+ // Calculate the scaleFactor:
15291
+ // 1. (baseFactor - 1) represents the change from the original size
15292
+ // 2. Multiply by dampening to reduce the effect
15293
+ // 3. Add 1 to center the scaling around the original size
15294
+ // For example, if baseFactor is 2:
15295
+ // scaleFactor = 1 + (2 - 1) * 0.5 = 1.5
15296
+ const scaleFactor = 1 + (baseFactor - 1) * dampening;
15297
+ // Step 3: Define the allowed range for the scale factor
15298
+ // This ensures that the font size never changes too drastically
15299
+ const minScale = 0.35; // Font will never be smaller than 50% of original
15300
+ const maxScale = 1.5; // Font will never be larger than 150% of original
15301
+ // Step 4: Clamp the scale factor to the defined range
15302
+ // Math.min ensures the value doesn't exceed maxScale
15303
+ // Math.max ensures the value isn't less than minScale
15304
+ return Math.max(minScale, Math.min(maxScale, scaleFactor));
15305
+ }
15306
+
15235
15307
  const CAROUSEL_COMPONENT_STYLE = ({ width, height, fluid }) => `
15236
15308
  :host {
15237
15309
  position: relative;
@@ -15419,6 +15491,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15419
15491
  this.autoplayInterval = null;
15420
15492
  this.useDots = false;
15421
15493
  this.useButtons = false;
15494
+ this.originalFontSizes = new Map();
15422
15495
  this.attachShadow({ mode: 'open' });
15423
15496
  }
15424
15497
  connectedCallback() {
@@ -15457,7 +15530,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15457
15530
  this.validateOptions();
15458
15531
  }
15459
15532
  setupResizeObserver() {
15460
- if (this.data) {
15533
+ if (this.data && !this.data.fluid) {
15461
15534
  this.resizeObserver = new ResizeObserverService({
15462
15535
  element: this,
15463
15536
  maxSize: {
@@ -15470,7 +15543,28 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15470
15543
  }
15471
15544
  }
15472
15545
  handleCarouselSizeChanged(event) {
15473
- console.info('Carousel Size Changed', event);
15546
+ const isRBSpot = 'rbHeroadaksda'.startsWith('rb');
15547
+ if (!isRBSpot) {
15548
+ // Adjust text elements font size based on the scale factor
15549
+ this.adjustFontSize(event.detail.scale);
15550
+ }
15551
+ }
15552
+ adjustFontSize(elementScale) {
15553
+ var _a;
15554
+ const scaleFactor = calculateScaleFactor(elementScale);
15555
+ // Find all text elements within the shadow root
15556
+ const elements = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('h1, h2, h3, h4, p, span');
15557
+ elements === null || elements === void 0 ? void 0 : elements.forEach((element) => {
15558
+ if (element instanceof HTMLElement) {
15559
+ if (!this.originalFontSizes.has(element)) {
15560
+ const originalSize = parseFloat(window.getComputedStyle(element).fontSize);
15561
+ this.originalFontSizes.set(element, originalSize);
15562
+ }
15563
+ const originalSize = this.originalFontSizes.get(element);
15564
+ const newFontSize = originalSize * scaleFactor;
15565
+ element.style.fontSize = `${newFontSize}px`;
15566
+ }
15567
+ });
15474
15568
  }
15475
15569
  render() {
15476
15570
  var _a;
@@ -15679,7 +15773,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15679
15773
  * #########################################################
15680
15774
  */
15681
15775
  setupResizeObserver() {
15682
- if (this.data) {
15776
+ if (this.data && !this.data.fluid) {
15683
15777
  this.resizeObserver = new ResizeObserverService({
15684
15778
  element: this,
15685
15779
  maxSize: {
@@ -15696,20 +15790,23 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15696
15790
  * #########################################################
15697
15791
  */
15698
15792
  handleSpotSizeChanged(event) {
15699
- console.info('Spot Size Changed', event);
15700
- // Adjust text elements font size based on the scale factor
15701
- this.adjustFontSize(event.detail.scale);
15793
+ var _a, _b, _c;
15794
+ const isRBSpot = (_c = (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.spot) === null || _b === void 0 ? void 0 : _b.startsWith('rb')) !== null && _c !== void 0 ? _c : false;
15795
+ if (!isRBSpot) {
15796
+ // Adjust text elements font size based on the scale factor
15797
+ this.adjustFontSize(event.detail.scale);
15798
+ }
15702
15799
  }
15703
15800
  adjustFontSize(elementScale) {
15704
15801
  var _a;
15705
- const scaleFactor = this.calculateScaleFactor(elementScale);
15802
+ const scaleFactor = calculateScaleFactor(elementScale);
15706
15803
  // Find all text elements within the shadow root
15707
15804
  const elements = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('h1, h2, h3, h4, p, span');
15708
15805
  elements === null || elements === void 0 ? void 0 : elements.forEach((element) => {
15709
15806
  if (element instanceof HTMLElement) {
15710
15807
  if (!this.originalFontSizes.has(element)) {
15711
- const orignalSize = parseFloat(window.getComputedStyle(element).fontSize);
15712
- this.originalFontSizes.set(element, orignalSize);
15808
+ const originalSize = parseFloat(window.getComputedStyle(element).fontSize);
15809
+ this.originalFontSizes.set(element, originalSize);
15713
15810
  }
15714
15811
  const originalSize = this.originalFontSizes.get(element);
15715
15812
  const newFontSize = originalSize * scaleFactor;
@@ -15717,35 +15814,6 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15717
15814
  }
15718
15815
  });
15719
15816
  }
15720
- calculateScaleFactor(elementScale) {
15721
- // Step 1: Apply square root for non-linear scaling
15722
- // This creates a more gradual scaling effect, especially for larger changes
15723
- // For example:
15724
- // - elementScale of 0.25 (1/4 size) becomes 0.5
15725
- // - elementScale of 1 (unchanged) remains 1
15726
- // - elementScale of 4 (4x size) becomes 2
15727
- const baseFactor = Math.sqrt(elementScale);
15728
- // Step 2: Apply additional dampening to further soften the scaling effect
15729
- // The dampening factor (0.5) can be adjusted:
15730
- // - Lower values (closer to 0) make scaling more subtle
15731
- // - Higher values (closer to 1) make scaling more pronounced
15732
- const dampening = 0.5;
15733
- // Calculate the scaleFactor:
15734
- // 1. (baseFactor - 1) represents the change from the original size
15735
- // 2. Multiply by dampening to reduce the effect
15736
- // 3. Add 1 to center the scaling around the original size
15737
- // For example, if baseFactor is 2:
15738
- // scaleFactor = 1 + (2 - 1) * 0.5 = 1.5
15739
- const scaleFactor = 1 + (baseFactor - 1) * dampening;
15740
- // Step 3: Define the allowed range for the scale factor
15741
- // This ensures that the font size never changes too drastically
15742
- const minScale = 0.5; // Font will never be smaller than 90% of original
15743
- const maxScale = 1.5; // Font will never be larger than 110% of original
15744
- // Step 4: Clamp the scale factor to the defined range
15745
- // Math.min ensures the value doesn't exceed maxScale
15746
- // Math.max ensures the value isn't less than minScale
15747
- return Math.max(minScale, Math.min(maxScale, scaleFactor));
15748
- }
15749
15817
  /**
15750
15818
  * Spot element rendering
15751
15819
  * #########################################################
@@ -15796,6 +15864,7 @@ class ElementService {
15796
15864
  }
15797
15865
  const spot = document.createElement(SPOT_ELEMENT_TAG);
15798
15866
  spot.data = {
15867
+ spot: config === null || config === void 0 ? void 0 : config.spot,
15799
15868
  fluid: (_a = config === null || config === void 0 ? void 0 : config.fluid) !== null && _a !== void 0 ? _a : false,
15800
15869
  ...config,
15801
15870
  };
@@ -15817,6 +15886,7 @@ class ElementService {
15817
15886
  }
15818
15887
  const carousel = document.createElement(CAROUSEL_ELEMENT_TAG);
15819
15888
  carousel.data = {
15889
+ spot: config === null || config === void 0 ? void 0 : config.spot,
15820
15890
  fluid: false,
15821
15891
  ...config,
15822
15892
  };
@@ -16701,12 +16771,7 @@ function wideSkyscraperV1Template(spot) {
16701
16771
 
16702
16772
  const STYLES$7 = ({ primaryImage, mobilePrimaryImage = primaryImage }, { prefix }) => `
16703
16773
  <style>
16704
- :host {
16705
- min-width: 320px;
16706
- min-height: 223px;
16707
- }
16708
-
16709
- .${prefix}__content {
16774
+ .${prefix} {
16710
16775
  display: block;
16711
16776
  width: 100%;
16712
16777
  height: 100%;
@@ -16715,10 +16780,11 @@ const STYLES$7 = ({ primaryImage, mobilePrimaryImage = primaryImage }, { prefix
16715
16780
  background-repeat: no-repeat;
16716
16781
  background-position: center;
16717
16782
  cursor: pointer;
16783
+ container-type: inline-size;
16718
16784
  }
16719
16785
 
16720
- @media (min-width: 640px) {
16721
- .${prefix}__content {
16786
+ @container (min-width: 640px) {
16787
+ .${prefix} {
16722
16788
  background-image: url("${primaryImage}");
16723
16789
  }
16724
16790
  }
@@ -16728,7 +16794,7 @@ function rbCollectionBannerWithoutTextBlockTemplate(spot, config) {
16728
16794
  const { prefix = '' } = config;
16729
16795
  return `
16730
16796
  ${STYLES$7(spot, config)}
16731
- <div class="${prefix}__content"></div>
16797
+ <div class="${prefix}"></div>
16732
16798
  `;
16733
16799
  }
16734
16800
 
@@ -16737,16 +16803,6 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16737
16803
  return `
16738
16804
  <style>
16739
16805
  .${prefix} {
16740
- min-width: 320px;
16741
- min-height: 388px;
16742
- width: 100%;
16743
- height: 100%;
16744
- display: block;
16745
- position: relative;
16746
- container-type: inline-size;
16747
- }
16748
-
16749
- .${prefix}__content {
16750
16806
  display: flex;
16751
16807
  flex-direction: column;
16752
16808
  justify-content: flex-end;
@@ -16761,6 +16817,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16761
16817
  box-sizing: border-box;
16762
16818
  color: ${textColor};
16763
16819
  cursor: pointer;
16820
+ container-type: inline-size;
16764
16821
  }
16765
16822
 
16766
16823
  .${prefix}__text {
@@ -16805,17 +16862,17 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16805
16862
  transition: background-color 0.3s ease;
16806
16863
  }
16807
16864
 
16808
- .${prefix}__content:hover .cta-button {
16865
+ .${prefix}:hover .cta-button {
16809
16866
  background-color: ${ctaBorderColor.length === 7 ? `${ctaBorderColor}15` : `${ctaBorderColor}`};
16810
16867
  }
16811
16868
 
16812
- @media (min-width: 640px) {
16813
- .${prefix}__content {
16869
+ @container (min-width: 640px) {
16870
+ .${prefix} {
16814
16871
  background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
16815
16872
  }
16816
16873
  }
16817
16874
 
16818
- @media (min-width: 768px) {
16875
+ @container (min-width: 768px) {
16819
16876
  .${prefix}__primary-image {
16820
16877
  width: 66.66666%;
16821
16878
  height: 100%;
@@ -16826,7 +16883,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16826
16883
  height: 100%;
16827
16884
  width: 33.33333%;
16828
16885
  }
16829
-
16886
+
16830
16887
  .${prefix}__secondary-image {
16831
16888
  width: 100%;
16832
16889
  height: 50%;
@@ -16835,7 +16892,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16835
16892
  .${prefix}__header {
16836
16893
  font-size: 22px;
16837
16894
  }
16838
-
16895
+
16839
16896
  .${prefix}__description {
16840
16897
  font-size: 12px;
16841
16898
  }
@@ -16845,7 +16902,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16845
16902
  }
16846
16903
  }
16847
16904
 
16848
- @media (min-width: 1024px) {
16905
+ @container (min-width: 1024px) {
16849
16906
  .${prefix}__header {
16850
16907
  font-size: 24px;
16851
16908
  }
@@ -16859,11 +16916,11 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
16859
16916
  }
16860
16917
  }
16861
16918
 
16862
- @media (min-width: 1280px) {
16919
+ @container (min-width: 1280px) {
16863
16920
  .${prefix}__header {
16864
16921
  font-size: 28px;
16865
16922
  }
16866
-
16923
+
16867
16924
  .${prefix}__description {
16868
16925
  font-size: 14px;
16869
16926
  }
@@ -16883,13 +16940,11 @@ function rbHomepageHeroFullImageTemplate(spot, config) {
16883
16940
  ${GFONT_CORMORANT}
16884
16941
  ${STYLES$6(spot, config)}
16885
16942
  <div class="${prefix}">
16886
- <div class="${prefix}__content">
16887
- <div class="${prefix}__text">
16888
- ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
16889
- ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
16890
- ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
16891
- </div>
16892
- </div>
16943
+ <div class="${prefix}__text">
16944
+ ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
16945
+ ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
16946
+ ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
16947
+ </div>
16893
16948
  </div>
16894
16949
  `;
16895
16950
  }
@@ -16897,8 +16952,6 @@ function rbHomepageHeroFullImageTemplate(spot, config) {
16897
16952
  const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextColor = textColor, primaryImage, mobilePrimaryImage = primaryImage, secondaryImage, mobileSecondaryImage = secondaryImage, }, { prefix }) => `
16898
16953
  <style>
16899
16954
  .${prefix} {
16900
- min-width: 320px;
16901
- min-height: 388px;
16902
16955
  width: 100%;
16903
16956
  height: 100%;
16904
16957
  display: block;
@@ -16910,7 +16963,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
16910
16963
  width: 100%;
16911
16964
  height: 100%;
16912
16965
  display: flex;
16913
- flex-direction: column;
16966
+ flex-direction: column;
16914
16967
  background-color: transparent;
16915
16968
  gap: 5px;
16916
16969
  color: inherit;
@@ -16997,7 +17050,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
16997
17050
  opacity: 0.8;
16998
17051
  }
16999
17052
 
17000
- @media (min-width: 640px) {
17053
+ @container (min-width: 640px) {
17001
17054
  .${prefix}__primary-image {
17002
17055
  background-image: url("${primaryImage}");
17003
17056
  }
@@ -17007,7 +17060,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17007
17060
  }
17008
17061
  }
17009
17062
 
17010
- @media (min-width: 768px) {
17063
+ @container (min-width: 768px) {
17011
17064
  .${prefix}__content {
17012
17065
  flex-direction: row;
17013
17066
  }
@@ -17032,6 +17085,39 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17032
17085
  width: 100%;
17033
17086
  height: 50%;
17034
17087
  }
17088
+ .${prefix}__header {
17089
+ font-size: 22px;
17090
+ }
17091
+ .${prefix}__description {
17092
+ font-size: 12px;
17093
+ }
17094
+ .${prefix}__cta-button {
17095
+ font-size: 12px;
17096
+ }
17097
+ }
17098
+
17099
+ @container (min-width: 1024px) {
17100
+ .${prefix}__header {
17101
+ font-size: 24px;
17102
+ }
17103
+ .${prefix}__description {
17104
+ font-size: 13px;
17105
+ }
17106
+ .${prefix}__cta-button {
17107
+ font-size: 13px;
17108
+ }
17109
+ }
17110
+
17111
+ @container (min-width: 1280px) {
17112
+ .${prefix}__header {
17113
+ font-size: 28px;
17114
+ }
17115
+ .${prefix}__description {
17116
+ font-size: 14px;
17117
+ }
17118
+ .${prefix}__cta-button {
17119
+ font-size: 14px;
17120
+ }
17035
17121
  }
17036
17122
  </style>
17037
17123
  `;
@@ -17061,23 +17147,15 @@ function rbHomepageHeroThreeTileTemplate(spot, config) {
17061
17147
  const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextColor = textColor, primaryImage, mobilePrimaryImage = primaryImage, }, { prefix }) => `
17062
17148
  <style>
17063
17149
  .${prefix} {
17064
- min-width: 320px;
17065
- min-height: 388px;
17066
- width: 100%;
17067
- height: 100%;
17068
- display: block;
17069
- position: relative;
17070
- container-type: inline-size;
17071
- }
17072
-
17073
- .${prefix}__content {
17074
17150
  width: 100%;
17075
17151
  height: 100%;
17076
17152
  display: flex;
17077
- flex-direction: column-reverse;
17153
+ flex-direction: column-reverse;
17078
17154
  background-color: transparent;
17079
17155
  gap: 5px;
17080
17156
  cursor: pointer;
17157
+ container-type: inline-size;
17158
+ position: relative;
17081
17159
  }
17082
17160
 
17083
17161
  .${prefix}__image {
@@ -17122,7 +17200,7 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17122
17200
  font-style: normal;
17123
17201
  font-weight: 400;
17124
17202
  }
17125
-
17203
+
17126
17204
  .${prefix}__cta-button {
17127
17205
  color: ${ctaTextColor};
17128
17206
  background-color: transparent;
@@ -17143,25 +17221,57 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17143
17221
  opacity: 0.8;
17144
17222
  }
17145
17223
 
17146
- @media (min-width: 640px) {
17224
+ @container (min-width: 640px) {
17147
17225
  .${prefix}__image {
17148
17226
  background-image: url("${primaryImage}");
17149
17227
  }
17150
17228
  }
17151
- @media (min-width: 768px) {
17152
- .${prefix}__content {
17229
+
17230
+ @container (min-width: 768px) {
17231
+ .${prefix} {
17153
17232
  flex-direction: row;
17154
17233
  }
17155
-
17156
17234
  .${prefix}__image {
17157
17235
  width: 66.66666%;
17158
17236
  height: 100%;
17159
17237
  }
17160
-
17161
17238
  .${prefix}__text {
17162
17239
  width: 33.33333%;
17163
17240
  height: 100%;
17164
17241
  }
17242
+ .${prefix}__header {
17243
+ font-size: 22px;
17244
+ }
17245
+ .${prefix}__description {
17246
+ font-size: 12px;
17247
+ }
17248
+ .${prefix}__cta-button {
17249
+ font-size: 12px;
17250
+ }
17251
+ }
17252
+
17253
+ @container (min-width: 1024px) {
17254
+ .${prefix}__header {
17255
+ font-size: 24px;
17256
+ }
17257
+ .${prefix}__description {
17258
+ font-size: 13px;
17259
+ }
17260
+ .${prefix}__cta-button {
17261
+ font-size: 13px;
17262
+ }
17263
+ }
17264
+
17265
+ @container (min-width: 1280px) {
17266
+ .${prefix}__header {
17267
+ font-size: 28px;
17268
+ }
17269
+ .${prefix}__description {
17270
+ font-size: 14px;
17271
+ }
17272
+ .${prefix}__cta-button {
17273
+ font-size: 14px;
17274
+ }
17165
17275
  }
17166
17276
  </style>
17167
17277
  `;
@@ -17173,14 +17283,12 @@ function rbHomepageHeroTwoTileTemplate(spot, config) {
17173
17283
  ${GFONT_CORMORANT}
17174
17284
  ${STYLES$4(spot, config)}
17175
17285
  <div class="${prefix}">
17176
- <div class="${prefix}__content">
17177
- <div class="${prefix}__text">
17178
- ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17179
- ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
17180
- ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
17181
- </div>
17182
- <div class="${prefix}__image"></div>
17286
+ <div class="${prefix}__text">
17287
+ ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17288
+ ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
17289
+ ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
17183
17290
  </div>
17291
+ <div class="${prefix}__image"></div>
17184
17292
  </div>
17185
17293
  `;
17186
17294
  }
@@ -17189,12 +17297,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17189
17297
  const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
17190
17298
  return `
17191
17299
  <style>
17192
- :host {
17193
- min-width: 320px;
17194
- min-height: 334px;
17195
- }
17196
-
17197
- .${prefix}__content {
17300
+ .${prefix} {
17198
17301
  width: 100%;
17199
17302
  height: 100%;
17200
17303
  display: flex;
@@ -17208,6 +17311,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17208
17311
  overflow: hidden;
17209
17312
  cursor: pointer;
17210
17313
  color: ${textColor};
17314
+ container-type: inline-size;
17211
17315
  }
17212
17316
 
17213
17317
  .${prefix}__text {
@@ -17254,17 +17358,17 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17254
17358
  font-weight: 400;
17255
17359
  }
17256
17360
 
17257
- .${prefix}__content:hover .${prefix}__cta-button {
17361
+ .${prefix}:hover .${prefix}__cta-button {
17258
17362
  background-color: ${ctaBorderColor.length === 7 ? `${ctaBorderColor}15` : `${ctaBorderColor}`};
17259
17363
  }
17260
17364
 
17261
- @media (min-width: 640px) {
17262
- .${prefix}__content {
17365
+ @container (min-width: 640px) {
17366
+ .${prefix} {
17263
17367
  background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
17264
17368
  }
17265
17369
  }
17266
17370
 
17267
- @media (min-width: 768px) {
17371
+ @container (min-width: 768px) {
17268
17372
  .${prefix}__text {
17269
17373
  padding: 25px;
17270
17374
  }
@@ -17283,7 +17387,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17283
17387
  }
17284
17388
  }
17285
17389
 
17286
- @media (min-width: 1024px) {
17390
+ @container (min-width: 1024px) {
17287
17391
  .${prefix}__text {
17288
17392
  padding: 30px;
17289
17393
  }
@@ -17301,7 +17405,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17301
17405
  }
17302
17406
  }
17303
17407
 
17304
- @media (min-width: 1280px) {
17408
+ @container (min-width: 1280px) {
17305
17409
  .${prefix}__cta-button {
17306
17410
  font-size: 14px;
17307
17411
  }
@@ -17316,7 +17420,7 @@ function rbLargeCategoryImageToutTemplate(spot, config) {
17316
17420
  ${GFONT_SOURCE_SANS_3}
17317
17421
  ${GFONT_CORMORANT}
17318
17422
  ${STYLES$3(spot, config)}
17319
- <div class="${prefix}__content">
17423
+ <div class="${prefix}">
17320
17424
  <div class="${prefix}__text">
17321
17425
  ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17322
17426
  ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
@@ -17330,12 +17434,7 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17330
17434
  const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
17331
17435
  return `
17332
17436
  <style>
17333
- :host {
17334
- min-width: 320px;
17335
- min-height: 150px;
17336
- }
17337
-
17338
- .${prefix}__content {
17437
+ .${prefix} {
17339
17438
  width: 100%;
17340
17439
  height: 100%;
17341
17440
  display: flex;
@@ -17348,6 +17447,7 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17348
17447
  background-size: cover;
17349
17448
  background-position: center;
17350
17449
  background-repeat: no-repeat;
17450
+ container-type: inline-size;
17351
17451
  }
17352
17452
 
17353
17453
  .${prefix}__text {
@@ -17365,25 +17465,25 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17365
17465
  margin: 0;
17366
17466
  }
17367
17467
 
17368
- @media (min-width: 640px) {
17369
- .${prefix}__content {
17468
+ @container (min-width: 640px) {
17469
+ .${prefix} {
17370
17470
  background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
17371
17471
  }
17372
17472
  }
17373
17473
 
17374
- @media (min-width: 768px) {
17474
+ @container (min-width: 768px) {
17375
17475
  .${prefix}__header {
17376
17476
  font-size: 22px;
17377
17477
  }
17378
17478
  }
17379
17479
 
17380
- @media (min-width: 1024px) {
17480
+ @container (min-width: 1024px) {
17381
17481
  .${prefix}__header {
17382
17482
  font-size: 24px;
17383
17483
  }
17384
17484
  }
17385
17485
 
17386
- @media (min-width: 1280px) {
17486
+ @container (min-width: 1280px) {
17387
17487
  .${prefix}__header {
17388
17488
  font-size: 28px;
17389
17489
  }
@@ -17397,7 +17497,7 @@ function rbNavigationBannerTemplate(spot, config) {
17397
17497
  ${GFONT_PRECONNECT}
17398
17498
  ${GFONT_SOURCE_SANS_3}
17399
17499
  ${STYLES$2(spot, config)}
17400
- <div class="${prefix}__content">
17500
+ <div class="${prefix}">
17401
17501
  <div class="${prefix}__text">
17402
17502
  ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17403
17503
  </div>
@@ -17409,12 +17509,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17409
17509
  const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
17410
17510
  return `
17411
17511
  <style>
17412
- :host {
17413
- min-width: 165px;
17414
- min-height: 300px;
17415
- }
17416
-
17417
- .${prefix}__content {
17512
+ .${prefix} {
17418
17513
  width: 100%;
17419
17514
  height: 100%;
17420
17515
  display: flex;
@@ -17427,6 +17522,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17427
17522
  border-radius: 5px;
17428
17523
  overflow: hidden;
17429
17524
  cursor: pointer;
17525
+ container-type: inline-size;
17430
17526
  }
17431
17527
 
17432
17528
  .${prefix}__text {
@@ -17441,12 +17537,11 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17441
17537
  font-family: "Source Sans 3", system-ui;
17442
17538
  font-style: normal;
17443
17539
  font-weight: 400;
17444
- line-height: normal;
17445
17540
  margin: 0;
17446
17541
  }
17447
17542
 
17448
- @media (min-width: 640px) {
17449
- .${prefix}__content {
17543
+ @container (min-width: 640px) {
17544
+ .${prefix} {
17450
17545
  background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
17451
17546
  }
17452
17547
  }
@@ -17459,7 +17554,7 @@ function rbSmallCategoryImageToutTemplate(spot, config) {
17459
17554
  ${GFONT_PRECONNECT}
17460
17555
  ${GFONT_CORMORANT}
17461
17556
  ${STYLES$1(spot, config)}
17462
- <div class="${prefix}__content">
17557
+ <div class="${prefix}">
17463
17558
  <div class="${prefix}__text">
17464
17559
  ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17465
17560
  </div>
@@ -17469,12 +17564,7 @@ function rbSmallCategoryImageToutTemplate(spot, config) {
17469
17564
 
17470
17565
  const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primaryImage, mobilePrimaryImage = primaryImage, }, { prefix }) => `
17471
17566
  <style>
17472
- :host {
17473
- min-width: 165px;
17474
- min-height: 250px;
17475
- }
17476
-
17477
- .${prefix}__content {
17567
+ .${prefix} {
17478
17568
  width: 100%;
17479
17569
  height: 100%;
17480
17570
  background-color: ${backgroundColor};
@@ -17482,6 +17572,7 @@ const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primar
17482
17572
  display: flex;
17483
17573
  flex-direction: column;
17484
17574
  border-radius: 5px;
17575
+ container-type: inline-size;
17485
17576
  }
17486
17577
 
17487
17578
  .${prefix}__image {
@@ -17513,11 +17604,10 @@ const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primar
17513
17604
  font-family: "Source Sans 3", system-ui;
17514
17605
  font-style: normal;
17515
17606
  font-weight: 400;
17516
- line-height: normal;
17517
17607
  margin: 0;
17518
17608
  }
17519
17609
 
17520
- @media (min-width: 640px) {
17610
+ @container (min-width: 640px) {
17521
17611
  .${prefix}__image {
17522
17612
  background-image: url("${primaryImage}");
17523
17613
  }
@@ -17530,7 +17620,7 @@ function rbSmallDiscoverToutTemplate(spot, config) {
17530
17620
  ${GFONT_PRECONNECT}
17531
17621
  ${GFONT_CORMORANT}
17532
17622
  ${STYLES(spot, config)}
17533
- <div class="${prefix}__content">
17623
+ <div class="${prefix}">
17534
17624
  <div class="${prefix}__image"></div>
17535
17625
  <div class="${prefix}__text">
17536
17626
  ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
@@ -17540,11 +17630,12 @@ function rbSmallDiscoverToutTemplate(spot, config) {
17540
17630
  }
17541
17631
 
17542
17632
  /**
17543
- * Creates the spot html string based on the provided spot data.
17633
+ * Returns the HTML element for the given spot.
17544
17634
  *
17545
- * @param {ISpot} spot - The spot data.
17635
+ * @param {ISpot} spot - The spot object.
17636
+ * @param {ISpotTemplateConfig} config - The spot template configuration.
17546
17637
  *
17547
- * @return {string} - The spot html string.
17638
+ * @return {HTMLElement | null} - The HTML element for the given spot or null if the spot template is not found.
17548
17639
  */
17549
17640
  const SPOT_TEMPLATE_HTML_ELEMENT = (spot, config) => {
17550
17641
  const templates = {
@@ -17617,6 +17708,197 @@ const SPOT_TEMPLATE_HTML_ELEMENT = (spot, config) => {
17617
17708
  return spotHtmlStringToElement(spotHtmlString);
17618
17709
  };
17619
17710
 
17711
+ /**
17712
+ * PubSub class
17713
+ * Manages event subscriptions and publications
17714
+ * @template IEventMap A record type defining the structure of events and their data
17715
+ */
17716
+ class PubSub {
17717
+ constructor() {
17718
+ /**
17719
+ * Object to store subscribers for each event type
17720
+ */
17721
+ this.subscribers = {};
17722
+ }
17723
+ /**
17724
+ * Subscribe to an event
17725
+ * @param eventType - The type of event to subscribe to
17726
+ * @param callback - The function to be called when the event is published
17727
+ * @returns A function to unsubscribe from the event
17728
+ *
17729
+ * @Example:
17730
+ * const unsubscribe = pubSub.subscribe('userLogin', (data) => {
17731
+ * console.log(`User ${data.username} logged in`);
17732
+ * });
17733
+ */
17734
+ subscribe(eventType, callback) {
17735
+ if (!this.subscribers[eventType]) {
17736
+ this.subscribers[eventType] = [];
17737
+ }
17738
+ this.subscribers[eventType].push(callback);
17739
+ // Return an unsubscribe function
17740
+ return () => {
17741
+ this.subscribers[eventType] = this.subscribers[eventType].filter((cb) => cb !== callback);
17742
+ };
17743
+ }
17744
+ /**
17745
+ * Publish an event
17746
+ * @param eventType - The type of event to publish
17747
+ * @param data - The data to be passed to the event subscribers
17748
+ *
17749
+ * @Example:
17750
+ * pubSub.publish('userLogin', { username: 'john_doe', timestamp: Date.now() });
17751
+ */
17752
+ publish(eventType, data) {
17753
+ if (!this.subscribers[eventType]) {
17754
+ return;
17755
+ }
17756
+ this.subscribers[eventType].forEach((callback) => callback(data));
17757
+ }
17758
+ }
17759
+ /**
17760
+ * Usage Example:
17761
+ *
17762
+ * interface IEventMap {
17763
+ * userLogin: { username: string; timestamp: number };
17764
+ * pageView: { url: string; timestamp: number };
17765
+ * }
17766
+ *
17767
+ * const pubSub = new PubSub<IEventMap>();
17768
+ *
17769
+ * // Subscribe to events
17770
+ * const unsubscribeLogin = pubSub.subscribe('userLogin', (data) => {
17771
+ * console.log(`User ${data.username} logged in at ${new Date(data.timestamp)}`);
17772
+ * });
17773
+ *
17774
+ * pubSub.subscribe('pageView', (data) => {
17775
+ * console.log(`Page ${data.url} viewed at ${new Date(data.timestamp)}`);
17776
+ * });
17777
+ *
17778
+ * // Publish events
17779
+ * pubSub.publish('userLogin', { username: 'john_doe', timestamp: Date.now() });
17780
+ * pubSub.publish('pageView', { url: '/home', timestamp: Date.now() });
17781
+ *
17782
+ * // Unsubscribe from an event
17783
+ * unsubscribeLogin();
17784
+ */
17785
+
17786
+ class EventService {
17787
+ constructor() {
17788
+ this.pubSub = new PubSub();
17789
+ this.activeSpots = new Map();
17790
+ this.intersectionObserver = new IntersectionObserverService();
17791
+ }
17792
+ static getInstance() {
17793
+ if (!EventService.instance) {
17794
+ EventService.instance = new EventService();
17795
+ }
17796
+ return EventService.instance;
17797
+ }
17798
+ registerSpot({ placementId, element, spot }) {
17799
+ this.activeSpots.set(spot.id, {
17800
+ placementId,
17801
+ element,
17802
+ impressionTracked: false,
17803
+ });
17804
+ // Handle intersection observer
17805
+ this.handleIntersectionObserver(placementId, spot, element);
17806
+ // Attach click event listener
17807
+ element.addEventListener('click', async () => {
17808
+ var _a, _b;
17809
+ this.pubSub.publish(exports.RMN_SPOT_EVENT.CLICK, {
17810
+ placementId,
17811
+ spotId: spot.id,
17812
+ element,
17813
+ });
17814
+ // Fire click event
17815
+ await this.fireEvent({
17816
+ event: exports.RMN_SPOT_EVENT.CLICK,
17817
+ eventUrl: (_b = (_a = spot.events.find((event) => event.event === exports.RMN_SPOT_EVENT.CLICK)) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : '',
17818
+ });
17819
+ });
17820
+ // Publish spot created event
17821
+ this.pubSub.publish(exports.RMN_SPOT_EVENT.MOUNTED, {
17822
+ placementId,
17823
+ spotId: spot.id,
17824
+ spotType: spot.spot,
17825
+ spotVariant: spot.variant,
17826
+ element,
17827
+ });
17828
+ }
17829
+ unregisterSpot(spotId) {
17830
+ const spotData = this.activeSpots.get(spotId);
17831
+ if (spotData) {
17832
+ this.intersectionObserver.unobserve(spotData.element);
17833
+ // this.resizeObserver?.disconnect();
17834
+ this.pubSub.publish(exports.RMN_SPOT_EVENT.UNMOUNTED, {
17835
+ placementId: spotData.placementId,
17836
+ spotId,
17837
+ });
17838
+ this.activeSpots.delete(spotId);
17839
+ }
17840
+ }
17841
+ handleIntersectionObserver(placementId, spot, element) {
17842
+ const spotIsVisibleCb = async () => {
17843
+ var _a, _b;
17844
+ this.pubSub.publish(exports.RMN_SPOT_EVENT.IMPRESSION, {
17845
+ placementId,
17846
+ spotId: spot.id,
17847
+ element,
17848
+ });
17849
+ this.intersectionObserver.unobserve(element);
17850
+ this.activeSpots.set(spot.id, {
17851
+ placementId,
17852
+ element,
17853
+ impressionTracked: true,
17854
+ });
17855
+ // Fire impression event
17856
+ await this.fireEvent({
17857
+ event: exports.RMN_SPOT_EVENT.IMPRESSION,
17858
+ eventUrl: (_b = (_a = spot.events.find((event) => event.event === exports.RMN_SPOT_EVENT.IMPRESSION)) === null || _a === void 0 ? void 0 : _a.url) !== null && _b !== void 0 ? _b : '',
17859
+ });
17860
+ };
17861
+ this.intersectionObserver.observe(element, spotIsVisibleCb);
17862
+ }
17863
+ subscribe(eventType, callback) {
17864
+ return this.pubSub.subscribe(eventType, callback);
17865
+ }
17866
+ publish(eventType, data) {
17867
+ this.pubSub.publish(eventType, data);
17868
+ }
17869
+ /**
17870
+ * Fires an event using the navigator.sendBeacon method and redirects the user if the event is a click event.
17871
+ *
17872
+ * @param {IFireEventParams} params - The parameters for firing the event.
17873
+ * @param {RMN_SPOT_EVENT} params.event - The event type.
17874
+ * @param {string} params.eventUrl - The URL to which the event is sent.
17875
+ * @returns {Promise<void>} - A promise that resolves when the event is fired.
17876
+ */
17877
+ async fireEvent({ event, eventUrl }) {
17878
+ const didFireEvent = navigator.sendBeacon(eventUrl);
17879
+ if (didFireEvent && event === exports.RMN_SPOT_EVENT.CLICK) {
17880
+ window.location.href = this.getRedirectUrlFromPayload(eventUrl);
17881
+ }
17882
+ }
17883
+ /**
17884
+ * Extracts and decodes a URL from a base64-encoded query parameter.
17885
+ *
17886
+ * @param {string} url - The URL containing the base64-encoded query parameter.
17887
+ * @returns {string} - The decoded URL or an empty string if decoding fails.
17888
+ */
17889
+ getRedirectUrlFromPayload(url) {
17890
+ var _a, _b;
17891
+ const base64String = (_a = new URL(url).searchParams.get('e')) !== null && _a !== void 0 ? _a : '';
17892
+ try {
17893
+ const data = JSON.parse(atob(base64String));
17894
+ return (_b = data.ur) !== null && _b !== void 0 ? _b : '';
17895
+ }
17896
+ catch (_c) {
17897
+ return '';
17898
+ }
17899
+ }
17900
+ }
17901
+
17620
17902
  const SELECTION_API_PATH = '/spots/selection';
17621
17903
 
17622
17904
  class SelectionService extends BaseApi {
@@ -17651,6 +17933,7 @@ class LiquidCommerceRmnClient {
17651
17933
  constructor(auth) {
17652
17934
  this.selectionService = SelectionService.getInstance(auth);
17653
17935
  this.elementService = ElementService.getInstance();
17936
+ this.eventService = EventService.getInstance();
17654
17937
  }
17655
17938
  /**
17656
17939
  * Makes a selection request on our server based on the provided data.
@@ -17701,6 +17984,14 @@ class LiquidCommerceRmnClient {
17701
17984
  }
17702
17985
  }
17703
17986
  }
17987
+ /**
17988
+ * Returns the event manager instance.
17989
+ *
17990
+ * @return {EventService} - The event manager instance.
17991
+ */
17992
+ eventManager() {
17993
+ return this.eventService;
17994
+ }
17704
17995
  /**
17705
17996
  * Makes a selection request on our server based on the provided data.
17706
17997
  *
@@ -17741,6 +18032,11 @@ class LiquidCommerceRmnClient {
17741
18032
  console.warn(`RmnSdk: Failed to inject carousel spot element. Could not create element for type "${spot.spot}".`);
17742
18033
  return;
17743
18034
  }
18035
+ this.eventSpotElement({
18036
+ spot,
18037
+ placementId: placement.id,
18038
+ element: content,
18039
+ });
17744
18040
  carouselSlides.push(content);
17745
18041
  }
17746
18042
  const { maxWidth, maxHeight } = spots.reduce((max, spot) => ({
@@ -17750,6 +18046,7 @@ class LiquidCommerceRmnClient {
17750
18046
  const carouselElement = this.elementService.createCarouselElement({
17751
18047
  slides: carouselSlides,
17752
18048
  config: {
18049
+ fluid: config === null || config === void 0 ? void 0 : config.fluid,
17753
18050
  width: maxWidth,
17754
18051
  height: maxHeight,
17755
18052
  minScale: (_a = config === null || config === void 0 ? void 0 : config.minScale) !== null && _a !== void 0 ? _a : 0.25, // Scale down to 25% of the original size
@@ -17783,6 +18080,8 @@ class LiquidCommerceRmnClient {
17783
18080
  const spotElement = this.elementService.createSpotElement({
17784
18081
  content,
17785
18082
  config: {
18083
+ fluid: config === null || config === void 0 ? void 0 : config.fluid,
18084
+ spot: spot.spot,
17786
18085
  width: spot.width,
17787
18086
  height: spot.height,
17788
18087
  minScale: (_a = config === null || config === void 0 ? void 0 : config.minScale) !== null && _a !== void 0 ? _a : 0.25, // Scale down to 25% of the original size
@@ -17792,8 +18091,20 @@ class LiquidCommerceRmnClient {
17792
18091
  console.warn(`RmnSdk: Failed to inject spot element. Could not create element for type "${injectItem.spotType}".`);
17793
18092
  return;
17794
18093
  }
18094
+ this.eventSpotElement({
18095
+ spot,
18096
+ placementId: injectItem.placementId,
18097
+ element: spotElement,
18098
+ });
17795
18099
  placement.replaceChildren(spotElement);
17796
18100
  }
18101
+ eventSpotElement({ spot, placementId, element, }) {
18102
+ this.eventService.registerSpot({
18103
+ placementId,
18104
+ element,
18105
+ spot,
18106
+ });
18107
+ }
17797
18108
  /**
17798
18109
  * Prevents duplicate placement ids in the inject data.
17799
18110
  *