@liquidcommercedev/rmn-sdk 1.5.0-beta.6 → 1.5.0-beta.8

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
@@ -15560,11 +15560,13 @@ const CAROUSEL_COMPONENT_STYLE = ({ width, height, fluid }) => `
15560
15560
  position: relative;
15561
15561
  height: 100%;
15562
15562
  width: 100%;
15563
+ display: flex;
15564
+ transition: transform 0.5s ease-in-out;
15563
15565
  }
15564
15566
 
15565
15567
  .slide {
15566
- display: none;
15567
-
15568
+ flex: 0 0 100%;
15569
+ display: flex;
15568
15570
  justify-content: center;
15569
15571
  align-items: center;
15570
15572
  height: 100%;
@@ -15869,9 +15871,9 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15869
15871
  renderSlides() {
15870
15872
  const slidesContainer = document.createElement('div');
15871
15873
  slidesContainer.className = 'slides';
15872
- this.slides.forEach((slide, index) => {
15874
+ this.slides.forEach((slide) => {
15873
15875
  const slideElement = document.createElement('div');
15874
- slideElement.className = `slide ${index === this.currentSlide ? 'active' : ''}`;
15876
+ slideElement.className = 'slide';
15875
15877
  if (slide instanceof HTMLElement) {
15876
15878
  slideElement.appendChild(slide);
15877
15879
  }
@@ -15950,10 +15952,9 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
15950
15952
  updateCarousel() {
15951
15953
  if (!this.slidesContainer)
15952
15954
  return;
15953
- const slides = Array.from(this.slidesContainer.children);
15954
- slides.forEach((slide, index) => {
15955
- slide.classList.toggle('active', index === this.currentSlide);
15956
- });
15955
+ // Calculate the translation distance based on current slide
15956
+ const translateX = -this.currentSlide * 100;
15957
+ this.slidesContainer.style.transform = `translateX(${translateX}%)`;
15957
15958
  this.updateDots();
15958
15959
  }
15959
15960
  updateDots() {
@@ -16377,12 +16378,13 @@ function spotHtmlStringToElement(htmlString) {
16377
16378
  spot.className = 'spot';
16378
16379
  spot.innerHTML = htmlString;
16379
16380
  Object.assign(spot.style, {
16380
- position: 'relative',
16381
16381
  display: 'block',
16382
16382
  width: '100%',
16383
16383
  height: '100%',
16384
16384
  margin: '0',
16385
16385
  padding: '0',
16386
+ containerType: 'inline-size',
16387
+ position: 'relative',
16386
16388
  });
16387
16389
  return spot;
16388
16390
  }
@@ -17252,7 +17254,6 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17252
17254
  box-sizing: border-box;
17253
17255
  color: ${textColor};
17254
17256
  cursor: pointer;
17255
- container-type: inline-size;
17256
17257
  }
17257
17258
 
17258
17259
  .${prefix}__text {
@@ -17268,7 +17269,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17268
17269
  .${prefix}__header {
17269
17270
  font-size: 24px;
17270
17271
  margin: 0;
17271
- font-family: "Cormorant";
17272
+ font-family: "Cormorant", system-ui;
17272
17273
  font-style: normal;
17273
17274
  font-weight: 300;
17274
17275
  line-height: normal;
@@ -17387,7 +17388,6 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17387
17388
  height: 100%;
17388
17389
  display: block;
17389
17390
  position: relative;
17390
- container-type: inline-size;
17391
17391
  }
17392
17392
 
17393
17393
  .${prefix}__content {
@@ -17578,15 +17578,20 @@ function rbHomepageHeroThreeTileTemplate(spot, config) {
17578
17578
  const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextColor = textColor, primaryImage, mobilePrimaryImage = primaryImage, }, { prefix }) => `
17579
17579
  <style>
17580
17580
  .${prefix} {
17581
+ width: 100%;
17582
+ height: 100%;
17583
+ background-color: transparent;
17584
+ cursor: pointer;
17585
+ position: relative;
17586
+ }
17587
+
17588
+ .${prefix}__content {
17581
17589
  width: 100%;
17582
17590
  height: 100%;
17583
17591
  display: flex;
17584
17592
  flex-direction: column-reverse;
17585
17593
  background-color: transparent;
17586
17594
  gap: 6px;
17587
- cursor: pointer;
17588
- container-type: inline-size;
17589
- position: relative;
17590
17595
  }
17591
17596
 
17592
17597
  .${prefix}__image {
@@ -17617,7 +17622,7 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17617
17622
  font-size: 18px;
17618
17623
  margin: 0;
17619
17624
  color: inherit;
17620
- font-family: "Cormorant";
17625
+ font-family: "Cormorant", system-ui;
17621
17626
  font-style: normal;
17622
17627
  font-weight: 700;
17623
17628
  line-height: normal;
@@ -17659,7 +17664,7 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
17659
17664
  }
17660
17665
 
17661
17666
  @container (min-width: 768px) {
17662
- .${prefix} {
17667
+ .${prefix}__content {
17663
17668
  flex-direction: row;
17664
17669
  }
17665
17670
  .${prefix}__image {
@@ -17714,12 +17719,14 @@ function rbHomepageHeroTwoTileTemplate(spot, config) {
17714
17719
  ${GFONT_CORMORANT}
17715
17720
  ${STYLES$4(spot, config)}
17716
17721
  <div class="${prefix}">
17717
- <div class="${prefix}__text">
17718
- ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17719
- ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
17720
- ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
17721
- </div>
17722
- <div class="${prefix}__image"></div>
17722
+ <div class="${prefix}__content">
17723
+ <div class="${prefix}__text">
17724
+ ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17725
+ ${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
17726
+ ${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
17727
+ </div>
17728
+ <div class="${prefix}__image"></div>
17729
+ </div>
17723
17730
  </div>
17724
17731
  `;
17725
17732
  }
@@ -17742,12 +17749,10 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17742
17749
  overflow: hidden;
17743
17750
  cursor: pointer;
17744
17751
  color: ${textColor};
17745
- container-type: inline-size;
17746
17752
  }
17747
17753
 
17748
17754
  .${prefix}__text {
17749
17755
  padding: 20px;
17750
- width: 70%;
17751
17756
  display: flex;
17752
17757
  flex-direction: column;
17753
17758
  justify-content: center;
@@ -17759,7 +17764,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
17759
17764
  color: inherit;
17760
17765
  margin: 0;
17761
17766
  font-size: 20px;
17762
- font-family: "Cormorant";
17767
+ font-family: "Cormorant", system-ui;
17763
17768
  font-style: normal;
17764
17769
  font-weight: 300;
17765
17770
  line-height: normal;
@@ -17878,7 +17883,6 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17878
17883
  background-size: cover;
17879
17884
  background-position: center;
17880
17885
  background-repeat: no-repeat;
17881
- container-type: inline-size;
17882
17886
  position: relative;
17883
17887
  }
17884
17888
 
@@ -17948,12 +17952,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17948
17952
  border-radius: 5px;
17949
17953
  overflow: hidden;
17950
17954
  cursor: pointer;
17951
- container-type: inline-size;
17952
- }
17953
-
17954
- .${prefix}__text {
17955
- padding: 10px;
17956
- width: 70%;
17955
+ position: relative;
17957
17956
  }
17958
17957
 
17959
17958
  .${prefix}__header {
@@ -17964,6 +17963,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
17964
17963
  font-style: normal;
17965
17964
  font-weight: 400;
17966
17965
  margin: 0;
17966
+ padding: 10px;
17967
17967
  }
17968
17968
 
17969
17969
  @container (min-width: 640px) {
@@ -17981,9 +17981,7 @@ function rbSmallCategoryImageToutTemplate(spot, config) {
17981
17981
  ${GFONT_CORMORANT}
17982
17982
  ${STYLES$1(spot, config)}
17983
17983
  <div class="${prefix}">
17984
- <div class="${prefix}__text">
17985
- ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17986
- </div>
17984
+ ${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
17987
17985
  </div>
17988
17986
  `;
17989
17987
  }
@@ -17998,7 +17996,6 @@ const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primar
17998
17996
  display: flex;
17999
17997
  flex-direction: column;
18000
17998
  border-radius: 5px;
18001
- container-type: inline-size;
18002
17999
  }
18003
18000
 
18004
18001
  .${prefix}__image {
@@ -18388,11 +18385,38 @@ class EventService {
18388
18385
  },
18389
18386
  };
18390
18387
  }
18391
- this.spotStates.set(placementId, { ...currentState, ...updates });
18388
+ const merged = this.deepMerge(currentState, updates);
18389
+ this.spotStates.set(placementId, merged);
18392
18390
  if (publish) {
18393
18391
  this.pubSub.publish(exports.RMN_SPOT_EVENT.LIFECYCLE_STATE, this.spotStates.get(placementId));
18394
18392
  }
18395
18393
  }
18394
+ deepMerge(current, updates) {
18395
+ return {
18396
+ identifier: {
18397
+ ...current.identifier,
18398
+ ...updates.identifier,
18399
+ },
18400
+ dom: updates.dom
18401
+ ? {
18402
+ ...current.dom,
18403
+ ...updates.dom,
18404
+ }
18405
+ : current.dom,
18406
+ state: updates.state
18407
+ ? {
18408
+ ...current.state,
18409
+ ...updates.state,
18410
+ }
18411
+ : current.state,
18412
+ displayConfig: updates.displayConfig
18413
+ ? {
18414
+ ...current.displayConfig,
18415
+ ...updates.displayConfig,
18416
+ }
18417
+ : current.displayConfig,
18418
+ };
18419
+ }
18396
18420
  async handleClick({ placementId, spot, spotElement, }) {
18397
18421
  var _a, _b, _c;
18398
18422
  // Publish click event
@@ -18747,10 +18771,12 @@ class LiquidCommerceRmnClient {
18747
18771
  const config = params.config;
18748
18772
  let inject = params.inject;
18749
18773
  if (!inject.length) {
18774
+ // Handle no spots error state
18750
18775
  this.eventService.handleSpotState('all', {
18751
18776
  state: {
18752
18777
  error: 'No spot elements provided for injection.',
18753
18778
  loading: false,
18779
+ mounted: false,
18754
18780
  },
18755
18781
  });
18756
18782
  return;
@@ -18769,9 +18795,12 @@ class LiquidCommerceRmnClient {
18769
18795
  // const response = await this.useSpotSelectionExample(inject);
18770
18796
  // Handle the response
18771
18797
  if (typeof response === 'object' && 'error' in response) {
18798
+ // Handle request error state
18772
18799
  this.eventService.handleSpotState('all', {
18773
18800
  state: {
18774
18801
  error: response.error,
18802
+ mounted: false,
18803
+ loading: false,
18775
18804
  },
18776
18805
  });
18777
18806
  return;
@@ -18780,9 +18809,11 @@ class LiquidCommerceRmnClient {
18780
18809
  const itemConfig = (_a = item.config) !== null && _a !== void 0 ? _a : config;
18781
18810
  const spots = response[item.placementId];
18782
18811
  if (!(spots === null || spots === void 0 ? void 0 : spots.length)) {
18812
+ // Handle no spots found error state
18783
18813
  this.eventService.handleSpotState(item.placementId, {
18784
18814
  state: {
18785
18815
  error: `No spots found for type "${item.spotType}".`,
18816
+ mounted: false,
18786
18817
  loading: false,
18787
18818
  },
18788
18819
  });
@@ -18791,9 +18822,11 @@ class LiquidCommerceRmnClient {
18791
18822
  const placementId = item.placementId.replace('#', '');
18792
18823
  const placement = document.getElementById(placementId);
18793
18824
  if (!placement) {
18825
+ // Handle placement not found error state
18794
18826
  this.eventService.handleSpotState(item.placementId, {
18795
18827
  state: {
18796
18828
  error: `Placement not found for id "${placementId}".`,
18829
+ mounted: false,
18797
18830
  loading: false,
18798
18831
  },
18799
18832
  });
@@ -18808,12 +18841,14 @@ class LiquidCommerceRmnClient {
18808
18841
  display: 'flex',
18809
18842
  justifyContent: 'center',
18810
18843
  });
18844
+ // Handle single spot
18811
18845
  if (spots.length === 1) {
18812
18846
  const isInjected = this.injectOneSpotElement(item, placement, spots[0], itemConfig);
18813
18847
  if (!isInjected) {
18814
18848
  continue;
18815
18849
  }
18816
18850
  }
18851
+ // Handle multiple spots (carousel)
18817
18852
  if (spots.length > 1) {
18818
18853
  const isInjected = this.injectCarouselSpotElement(placement, spots, itemConfig);
18819
18854
  if (!isInjected) {
@@ -18857,18 +18892,24 @@ class LiquidCommerceRmnClient {
18857
18892
  const carouselSlides = [];
18858
18893
  for (const spotItem of spots) {
18859
18894
  this.eventService.handleSpotState(placement.id, {
18895
+ identifier: {
18896
+ placementId: placement.id,
18897
+ spotType: spotItem.spot,
18898
+ spotId: spotItem.id,
18899
+ },
18860
18900
  displayConfig: {
18901
+ isSingleItem: false,
18861
18902
  isCarousel: true,
18862
18903
  isCarouselItem: true,
18863
- isSingleItem: false,
18864
18904
  },
18865
- }, false);
18905
+ });
18866
18906
  const spot = this.elementService.overrideSpotColors(spotItem, config === null || config === void 0 ? void 0 : config.colors);
18867
18907
  const content = SPOT_TEMPLATE_HTML_ELEMENT(spot, { overlay: config === null || config === void 0 ? void 0 : config.overlay });
18868
18908
  if (!content) {
18869
18909
  this.eventService.handleSpotState(placement.id, {
18870
18910
  state: {
18871
18911
  error: `Failed to inject carousel spot item element. Could not create element for type "${spot.spot}".`,
18912
+ mounted: false,
18872
18913
  loading: false,
18873
18914
  },
18874
18915
  });
@@ -18901,6 +18942,7 @@ class LiquidCommerceRmnClient {
18901
18942
  this.eventService.handleSpotState(placement.id, {
18902
18943
  state: {
18903
18944
  error: `Failed to inject spot carousel element. Could not create spot carousel element.`,
18945
+ mounted: false,
18904
18946
  loading: false,
18905
18947
  },
18906
18948
  });
@@ -18910,10 +18952,12 @@ class LiquidCommerceRmnClient {
18910
18952
  this.eventService.handleSpotState(placement.id, {
18911
18953
  dom: {
18912
18954
  spotElement: carouselElement,
18955
+ visibleOnViewport: false,
18913
18956
  },
18914
18957
  state: {
18915
18958
  mounted: true,
18916
18959
  loading: false,
18960
+ error: undefined,
18917
18961
  },
18918
18962
  });
18919
18963
  return true;
@@ -18930,18 +18974,25 @@ class LiquidCommerceRmnClient {
18930
18974
  */
18931
18975
  injectOneSpotElement(injectItem, placement, spot, config) {
18932
18976
  var _a;
18933
- const spotData = this.elementService.overrideSpotColors(spot, config === null || config === void 0 ? void 0 : config.colors);
18934
18977
  this.eventService.handleSpotState(injectItem.placementId, {
18978
+ identifier: {
18979
+ placementId: injectItem.placementId,
18980
+ spotType: injectItem.spotType,
18981
+ spotId: spot.id,
18982
+ },
18935
18983
  displayConfig: {
18936
18984
  isSingleItem: true,
18985
+ isCarousel: false,
18986
+ isCarouselItem: false,
18937
18987
  },
18938
- }, false);
18939
- // Create the spot template element
18988
+ });
18989
+ const spotData = this.elementService.overrideSpotColors(spot, config === null || config === void 0 ? void 0 : config.colors);
18940
18990
  const content = SPOT_TEMPLATE_HTML_ELEMENT(spotData, { overlay: config === null || config === void 0 ? void 0 : config.overlay });
18941
18991
  if (!content) {
18942
18992
  this.eventService.handleSpotState(injectItem.placementId, {
18943
18993
  state: {
18944
18994
  error: `Failed to inject spot element. Could not create element for type "${injectItem.spotType}".`,
18995
+ mounted: false,
18945
18996
  loading: false,
18946
18997
  },
18947
18998
  });
@@ -18962,6 +19013,7 @@ class LiquidCommerceRmnClient {
18962
19013
  this.eventService.handleSpotState(injectItem.placementId, {
18963
19014
  state: {
18964
19015
  error: `Failed to inject spot element. Could not create element for type "${injectItem.spotType}".`,
19016
+ mounted: false,
18965
19017
  loading: false,
18966
19018
  },
18967
19019
  });
@@ -18976,10 +19028,12 @@ class LiquidCommerceRmnClient {
18976
19028
  this.eventService.handleSpotState(injectItem.placementId, {
18977
19029
  dom: {
18978
19030
  spotElement,
19031
+ visibleOnViewport: false,
18979
19032
  },
18980
19033
  state: {
18981
19034
  mounted: true,
18982
19035
  loading: false,
19036
+ error: undefined,
18983
19037
  },
18984
19038
  });
18985
19039
  return true;
@@ -19000,6 +19054,8 @@ class LiquidCommerceRmnClient {
19000
19054
  this.eventService.handleSpotState(item.placementId, {
19001
19055
  state: {
19002
19056
  error: `Duplicate placement id (${item.placementId}) found. Please provide a unique placement id for each spot element.`,
19057
+ mounted: false,
19058
+ loading: false,
19003
19059
  },
19004
19060
  });
19005
19061
  return false;
@@ -19015,6 +19071,8 @@ class LiquidCommerceRmnClient {
19015
19071
  this.eventService.handleSpotState(item.placementId, {
19016
19072
  state: {
19017
19073
  error: `Invalid spot type (${item.spotType}) found. Please provide a valid spot type for each spot element.`,
19074
+ mounted: false,
19075
+ loading: false,
19018
19076
  },
19019
19077
  });
19020
19078
  continue;
@@ -19023,6 +19081,7 @@ class LiquidCommerceRmnClient {
19023
19081
  }
19024
19082
  return newInject;
19025
19083
  }
19084
+ // Initialize spots with loading state and identifiers
19026
19085
  updateSpotsState(inject) {
19027
19086
  for (const item of inject) {
19028
19087
  this.eventService.handleSpotState(item.placementId, {
@@ -19032,6 +19091,8 @@ class LiquidCommerceRmnClient {
19032
19091
  },
19033
19092
  state: {
19034
19093
  loading: true,
19094
+ mounted: false,
19095
+ error: undefined,
19035
19096
  },
19036
19097
  });
19037
19098
  }