@liquidcommercedev/rmn-sdk 1.4.6-beta.5 → 1.4.6-beta.7
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.cjs +267 -203
- package/dist/index.esm.js +267 -203
- package/dist/types/enums.d.ts +1 -1
- package/dist/types/modules/element/component/utils.d.ts +1 -0
- package/dist/types/modules/element/element.interface.d.ts +2 -0
- package/dist/types/modules/event/event.interface.d.ts +13 -14
- package/dist/types/modules/event/index.d.ts +1 -0
- package/dist/types/modules/selection/selection.interface.d.ts +3 -1
- package/dist/types/modules/selection/selection.service.d.ts +4 -2
- package/dist/types/rmn-client.d.ts +7 -3
- package/dist/types/types.d.ts +3 -1
- package/package.json +1 -1
- package/umd/liquidcommerce-rmn-sdk.min.js +1 -1
package/dist/index.cjs
CHANGED
@@ -56,9 +56,9 @@ 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["INJECT_SPOTS"] = "INJECT_SPOTS";
|
59
60
|
RMN_SPOT_EVENT["MOUNTED"] = "MOUNTED";
|
60
61
|
RMN_SPOT_EVENT["UNMOUNTED"] = "UNMOUNTED";
|
61
|
-
RMN_SPOT_EVENT["RESIZED"] = "RESIZED";
|
62
62
|
RMN_SPOT_EVENT["IMPRESSION"] = "IMPRESSION";
|
63
63
|
RMN_SPOT_EVENT["CLICK"] = "CLICK";
|
64
64
|
RMN_SPOT_EVENT["PURCHASE"] = "PURCHASE";
|
@@ -15246,9 +15246,9 @@ class ResizeObserverService {
|
|
15246
15246
|
newWidth = Math.min(containerWidth, this.maxSize.width);
|
15247
15247
|
newHeight = newWidth / this.aspectRatio;
|
15248
15248
|
// If the height exceeds the container, adjust based on height
|
15249
|
-
if (
|
15250
|
-
|
15251
|
-
|
15249
|
+
if (newWidth > containerWidth) {
|
15250
|
+
newWidth = containerWidth;
|
15251
|
+
newHeight = containerHeight * this.aspectRatio;
|
15252
15252
|
}
|
15253
15253
|
// Ensure we're not going below minimum dimensions
|
15254
15254
|
newWidth = Math.max(newWidth, this.minSize.width);
|
@@ -15275,6 +15275,36 @@ class ResizeObserverService {
|
|
15275
15275
|
}
|
15276
15276
|
}
|
15277
15277
|
|
15278
|
+
function calculateScaleFactor(elementScale) {
|
15279
|
+
// Step 1: Apply square root for non-linear scaling
|
15280
|
+
// This creates a more gradual scaling effect, especially for larger changes
|
15281
|
+
// For example:
|
15282
|
+
// - elementScale of 0.25 (1/4 size) becomes 0.5
|
15283
|
+
// - elementScale of 1 (unchanged) remains 1
|
15284
|
+
// - elementScale of 4 (4x size) becomes 2
|
15285
|
+
const baseFactor = Math.sqrt(elementScale);
|
15286
|
+
// Step 2: Apply additional dampening to further soften the scaling effect
|
15287
|
+
// The dampening factor (0.5) can be adjusted:
|
15288
|
+
// - Lower values (closer to 0) make scaling more subtle
|
15289
|
+
// - Higher values (closer to 1) make scaling more pronounced
|
15290
|
+
const dampening = 0.35;
|
15291
|
+
// Calculate the scaleFactor:
|
15292
|
+
// 1. (baseFactor - 1) represents the change from the original size
|
15293
|
+
// 2. Multiply by dampening to reduce the effect
|
15294
|
+
// 3. Add 1 to center the scaling around the original size
|
15295
|
+
// For example, if baseFactor is 2:
|
15296
|
+
// scaleFactor = 1 + (2 - 1) * 0.5 = 1.5
|
15297
|
+
const scaleFactor = 1 + (baseFactor - 1) * dampening;
|
15298
|
+
// Step 3: Define the allowed range for the scale factor
|
15299
|
+
// This ensures that the font size never changes too drastically
|
15300
|
+
const minScale = 0.35; // Font will never be smaller than 50% of original
|
15301
|
+
const maxScale = 1.5; // Font will never be larger than 150% of original
|
15302
|
+
// Step 4: Clamp the scale factor to the defined range
|
15303
|
+
// Math.min ensures the value doesn't exceed maxScale
|
15304
|
+
// Math.max ensures the value isn't less than minScale
|
15305
|
+
return Math.max(minScale, Math.min(maxScale, scaleFactor));
|
15306
|
+
}
|
15307
|
+
|
15278
15308
|
const CAROUSEL_COMPONENT_STYLE = ({ width, height, fluid }) => `
|
15279
15309
|
:host {
|
15280
15310
|
position: relative;
|
@@ -15462,6 +15492,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15462
15492
|
this.autoplayInterval = null;
|
15463
15493
|
this.useDots = false;
|
15464
15494
|
this.useButtons = false;
|
15495
|
+
this.originalFontSizes = new Map();
|
15465
15496
|
this.attachShadow({ mode: 'open' });
|
15466
15497
|
}
|
15467
15498
|
connectedCallback() {
|
@@ -15500,7 +15531,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15500
15531
|
this.validateOptions();
|
15501
15532
|
}
|
15502
15533
|
setupResizeObserver() {
|
15503
|
-
if (this.data) {
|
15534
|
+
if (this.data && !this.data.fluid) {
|
15504
15535
|
this.resizeObserver = new ResizeObserverService({
|
15505
15536
|
element: this,
|
15506
15537
|
maxSize: {
|
@@ -15512,9 +15543,29 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15512
15543
|
this.addEventListener('spotSizeChanged', this.handleCarouselSizeChanged.bind(this));
|
15513
15544
|
}
|
15514
15545
|
}
|
15515
|
-
|
15516
|
-
|
15517
|
-
|
15546
|
+
handleCarouselSizeChanged(event) {
|
15547
|
+
const isRBSpot = 'rbHeroadaksda'.startsWith('rb');
|
15548
|
+
if (!isRBSpot) {
|
15549
|
+
// Adjust text elements font size based on the scale factor
|
15550
|
+
this.adjustFontSize(event.detail.scale);
|
15551
|
+
}
|
15552
|
+
}
|
15553
|
+
adjustFontSize(elementScale) {
|
15554
|
+
var _a;
|
15555
|
+
const scaleFactor = calculateScaleFactor(elementScale);
|
15556
|
+
// Find all text elements within the shadow root
|
15557
|
+
const elements = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('h1, h2, h3, h4, p, span');
|
15558
|
+
elements === null || elements === void 0 ? void 0 : elements.forEach((element) => {
|
15559
|
+
if (element instanceof HTMLElement) {
|
15560
|
+
if (!this.originalFontSizes.has(element)) {
|
15561
|
+
const originalSize = parseFloat(window.getComputedStyle(element).fontSize);
|
15562
|
+
this.originalFontSizes.set(element, originalSize);
|
15563
|
+
}
|
15564
|
+
const originalSize = this.originalFontSizes.get(element);
|
15565
|
+
const newFontSize = originalSize * scaleFactor;
|
15566
|
+
element.style.fontSize = `${newFontSize}px`;
|
15567
|
+
}
|
15568
|
+
});
|
15518
15569
|
}
|
15519
15570
|
render() {
|
15520
15571
|
var _a;
|
@@ -15723,7 +15774,7 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15723
15774
|
* #########################################################
|
15724
15775
|
*/
|
15725
15776
|
setupResizeObserver() {
|
15726
|
-
if (this.data) {
|
15777
|
+
if (this.data && !this.data.fluid) {
|
15727
15778
|
this.resizeObserver = new ResizeObserverService({
|
15728
15779
|
element: this,
|
15729
15780
|
maxSize: {
|
@@ -15740,13 +15791,16 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15740
15791
|
* #########################################################
|
15741
15792
|
*/
|
15742
15793
|
handleSpotSizeChanged(event) {
|
15743
|
-
|
15744
|
-
|
15745
|
-
|
15794
|
+
var _a, _b, _c;
|
15795
|
+
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;
|
15796
|
+
if (!isRBSpot) {
|
15797
|
+
// Adjust text elements font size based on the scale factor
|
15798
|
+
this.adjustFontSize(event.detail.scale);
|
15799
|
+
}
|
15746
15800
|
}
|
15747
15801
|
adjustFontSize(elementScale) {
|
15748
15802
|
var _a;
|
15749
|
-
const scaleFactor =
|
15803
|
+
const scaleFactor = calculateScaleFactor(elementScale);
|
15750
15804
|
// Find all text elements within the shadow root
|
15751
15805
|
const elements = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('h1, h2, h3, h4, p, span');
|
15752
15806
|
elements === null || elements === void 0 ? void 0 : elements.forEach((element) => {
|
@@ -15761,35 +15815,6 @@ if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined
|
|
15761
15815
|
}
|
15762
15816
|
});
|
15763
15817
|
}
|
15764
|
-
calculateScaleFactor(elementScale) {
|
15765
|
-
// Step 1: Apply square root for non-linear scaling
|
15766
|
-
// This creates a more gradual scaling effect, especially for larger changes
|
15767
|
-
// For example:
|
15768
|
-
// - elementScale of 0.25 (1/4 size) becomes 0.5
|
15769
|
-
// - elementScale of 1 (unchanged) remains 1
|
15770
|
-
// - elementScale of 4 (4x size) becomes 2
|
15771
|
-
const baseFactor = Math.sqrt(elementScale);
|
15772
|
-
// Step 2: Apply additional dampening to further soften the scaling effect
|
15773
|
-
// The dampening factor (0.5) can be adjusted:
|
15774
|
-
// - Lower values (closer to 0) make scaling more subtle
|
15775
|
-
// - Higher values (closer to 1) make scaling more pronounced
|
15776
|
-
const dampening = 0.5;
|
15777
|
-
// Calculate the scaleFactor:
|
15778
|
-
// 1. (baseFactor - 1) represents the change from the original size
|
15779
|
-
// 2. Multiply by dampening to reduce the effect
|
15780
|
-
// 3. Add 1 to center the scaling around the original size
|
15781
|
-
// For example, if baseFactor is 2:
|
15782
|
-
// scaleFactor = 1 + (2 - 1) * 0.5 = 1.5
|
15783
|
-
const scaleFactor = 1 + (baseFactor - 1) * dampening;
|
15784
|
-
// Step 3: Define the allowed range for the scale factor
|
15785
|
-
// This ensures that the font size never changes too drastically
|
15786
|
-
const minScale = 0.5; // Font will never be smaller than 90% of original
|
15787
|
-
const maxScale = 1.5; // Font will never be larger than 110% of original
|
15788
|
-
// Step 4: Clamp the scale factor to the defined range
|
15789
|
-
// Math.min ensures the value doesn't exceed maxScale
|
15790
|
-
// Math.max ensures the value isn't less than minScale
|
15791
|
-
return Math.max(minScale, Math.min(maxScale, scaleFactor));
|
15792
|
-
}
|
15793
15818
|
/**
|
15794
15819
|
* Spot element rendering
|
15795
15820
|
* #########################################################
|
@@ -15840,6 +15865,7 @@ class ElementService {
|
|
15840
15865
|
}
|
15841
15866
|
const spot = document.createElement(SPOT_ELEMENT_TAG);
|
15842
15867
|
spot.data = {
|
15868
|
+
spot: config === null || config === void 0 ? void 0 : config.spot,
|
15843
15869
|
fluid: (_a = config === null || config === void 0 ? void 0 : config.fluid) !== null && _a !== void 0 ? _a : false,
|
15844
15870
|
...config,
|
15845
15871
|
};
|
@@ -15861,6 +15887,7 @@ class ElementService {
|
|
15861
15887
|
}
|
15862
15888
|
const carousel = document.createElement(CAROUSEL_ELEMENT_TAG);
|
15863
15889
|
carousel.data = {
|
15890
|
+
spot: config === null || config === void 0 ? void 0 : config.spot,
|
15864
15891
|
fluid: false,
|
15865
15892
|
...config,
|
15866
15893
|
};
|
@@ -16745,12 +16772,7 @@ function wideSkyscraperV1Template(spot) {
|
|
16745
16772
|
|
16746
16773
|
const STYLES$7 = ({ primaryImage, mobilePrimaryImage = primaryImage }, { prefix }) => `
|
16747
16774
|
<style>
|
16748
|
-
|
16749
|
-
min-width: 320px;
|
16750
|
-
min-height: 223px;
|
16751
|
-
}
|
16752
|
-
|
16753
|
-
.${prefix}__content {
|
16775
|
+
.${prefix} {
|
16754
16776
|
display: block;
|
16755
16777
|
width: 100%;
|
16756
16778
|
height: 100%;
|
@@ -16759,10 +16781,11 @@ const STYLES$7 = ({ primaryImage, mobilePrimaryImage = primaryImage }, { prefix
|
|
16759
16781
|
background-repeat: no-repeat;
|
16760
16782
|
background-position: center;
|
16761
16783
|
cursor: pointer;
|
16784
|
+
container-type: inline-size;
|
16762
16785
|
}
|
16763
16786
|
|
16764
|
-
@
|
16765
|
-
.${prefix}
|
16787
|
+
@container (min-width: 640px) {
|
16788
|
+
.${prefix} {
|
16766
16789
|
background-image: url("${primaryImage}");
|
16767
16790
|
}
|
16768
16791
|
}
|
@@ -16772,7 +16795,7 @@ function rbCollectionBannerWithoutTextBlockTemplate(spot, config) {
|
|
16772
16795
|
const { prefix = '' } = config;
|
16773
16796
|
return `
|
16774
16797
|
${STYLES$7(spot, config)}
|
16775
|
-
<div class="${prefix}
|
16798
|
+
<div class="${prefix}"></div>
|
16776
16799
|
`;
|
16777
16800
|
}
|
16778
16801
|
|
@@ -16781,16 +16804,6 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16781
16804
|
return `
|
16782
16805
|
<style>
|
16783
16806
|
.${prefix} {
|
16784
|
-
min-width: 320px;
|
16785
|
-
min-height: 388px;
|
16786
|
-
width: 100%;
|
16787
|
-
height: 100%;
|
16788
|
-
display: block;
|
16789
|
-
position: relative;
|
16790
|
-
container-type: inline-size;
|
16791
|
-
}
|
16792
|
-
|
16793
|
-
.${prefix}__content {
|
16794
16807
|
display: flex;
|
16795
16808
|
flex-direction: column;
|
16796
16809
|
justify-content: flex-end;
|
@@ -16805,6 +16818,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16805
16818
|
box-sizing: border-box;
|
16806
16819
|
color: ${textColor};
|
16807
16820
|
cursor: pointer;
|
16821
|
+
container-type: inline-size;
|
16808
16822
|
}
|
16809
16823
|
|
16810
16824
|
.${prefix}__text {
|
@@ -16849,17 +16863,17 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16849
16863
|
transition: background-color 0.3s ease;
|
16850
16864
|
}
|
16851
16865
|
|
16852
|
-
.${prefix}
|
16866
|
+
.${prefix}:hover .cta-button {
|
16853
16867
|
background-color: ${ctaBorderColor.length === 7 ? `${ctaBorderColor}15` : `${ctaBorderColor}`};
|
16854
16868
|
}
|
16855
16869
|
|
16856
|
-
@
|
16857
|
-
.${prefix}
|
16870
|
+
@container (min-width: 640px) {
|
16871
|
+
.${prefix} {
|
16858
16872
|
background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
|
16859
16873
|
}
|
16860
16874
|
}
|
16861
16875
|
|
16862
|
-
@
|
16876
|
+
@container (min-width: 768px) {
|
16863
16877
|
.${prefix}__primary-image {
|
16864
16878
|
width: 66.66666%;
|
16865
16879
|
height: 100%;
|
@@ -16870,7 +16884,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16870
16884
|
height: 100%;
|
16871
16885
|
width: 33.33333%;
|
16872
16886
|
}
|
16873
|
-
|
16887
|
+
|
16874
16888
|
.${prefix}__secondary-image {
|
16875
16889
|
width: 100%;
|
16876
16890
|
height: 50%;
|
@@ -16879,7 +16893,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16879
16893
|
.${prefix}__header {
|
16880
16894
|
font-size: 22px;
|
16881
16895
|
}
|
16882
|
-
|
16896
|
+
|
16883
16897
|
.${prefix}__description {
|
16884
16898
|
font-size: 12px;
|
16885
16899
|
}
|
@@ -16889,7 +16903,7 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16889
16903
|
}
|
16890
16904
|
}
|
16891
16905
|
|
16892
|
-
@
|
16906
|
+
@container (min-width: 1024px) {
|
16893
16907
|
.${prefix}__header {
|
16894
16908
|
font-size: 24px;
|
16895
16909
|
}
|
@@ -16903,11 +16917,11 @@ const STYLES$6 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
16903
16917
|
}
|
16904
16918
|
}
|
16905
16919
|
|
16906
|
-
@
|
16920
|
+
@container (min-width: 1280px) {
|
16907
16921
|
.${prefix}__header {
|
16908
16922
|
font-size: 28px;
|
16909
16923
|
}
|
16910
|
-
|
16924
|
+
|
16911
16925
|
.${prefix}__description {
|
16912
16926
|
font-size: 14px;
|
16913
16927
|
}
|
@@ -16927,13 +16941,11 @@ function rbHomepageHeroFullImageTemplate(spot, config) {
|
|
16927
16941
|
${GFONT_CORMORANT}
|
16928
16942
|
${STYLES$6(spot, config)}
|
16929
16943
|
<div class="${prefix}">
|
16930
|
-
|
16931
|
-
|
16932
|
-
|
16933
|
-
|
16934
|
-
|
16935
|
-
</div>
|
16936
|
-
</div>
|
16944
|
+
<div class="${prefix}__text">
|
16945
|
+
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
16946
|
+
${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
|
16947
|
+
${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
|
16948
|
+
</div>
|
16937
16949
|
</div>
|
16938
16950
|
`;
|
16939
16951
|
}
|
@@ -16941,8 +16953,6 @@ function rbHomepageHeroFullImageTemplate(spot, config) {
|
|
16941
16953
|
const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextColor = textColor, primaryImage, mobilePrimaryImage = primaryImage, secondaryImage, mobileSecondaryImage = secondaryImage, }, { prefix }) => `
|
16942
16954
|
<style>
|
16943
16955
|
.${prefix} {
|
16944
|
-
min-width: 320px;
|
16945
|
-
min-height: 388px;
|
16946
16956
|
width: 100%;
|
16947
16957
|
height: 100%;
|
16948
16958
|
display: block;
|
@@ -16954,7 +16964,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
16954
16964
|
width: 100%;
|
16955
16965
|
height: 100%;
|
16956
16966
|
display: flex;
|
16957
|
-
flex-direction: column;
|
16967
|
+
flex-direction: column;
|
16958
16968
|
background-color: transparent;
|
16959
16969
|
gap: 5px;
|
16960
16970
|
color: inherit;
|
@@ -17041,7 +17051,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
17041
17051
|
opacity: 0.8;
|
17042
17052
|
}
|
17043
17053
|
|
17044
|
-
@
|
17054
|
+
@container (min-width: 640px) {
|
17045
17055
|
.${prefix}__primary-image {
|
17046
17056
|
background-image: url("${primaryImage}");
|
17047
17057
|
}
|
@@ -17051,7 +17061,7 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
17051
17061
|
}
|
17052
17062
|
}
|
17053
17063
|
|
17054
|
-
@
|
17064
|
+
@container (min-width: 768px) {
|
17055
17065
|
.${prefix}__content {
|
17056
17066
|
flex-direction: row;
|
17057
17067
|
}
|
@@ -17076,6 +17086,39 @@ const STYLES$5 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
17076
17086
|
width: 100%;
|
17077
17087
|
height: 50%;
|
17078
17088
|
}
|
17089
|
+
.${prefix}__header {
|
17090
|
+
font-size: 22px;
|
17091
|
+
}
|
17092
|
+
.${prefix}__description {
|
17093
|
+
font-size: 12px;
|
17094
|
+
}
|
17095
|
+
.${prefix}__cta-button {
|
17096
|
+
font-size: 12px;
|
17097
|
+
}
|
17098
|
+
}
|
17099
|
+
|
17100
|
+
@container (min-width: 1024px) {
|
17101
|
+
.${prefix}__header {
|
17102
|
+
font-size: 24px;
|
17103
|
+
}
|
17104
|
+
.${prefix}__description {
|
17105
|
+
font-size: 13px;
|
17106
|
+
}
|
17107
|
+
.${prefix}__cta-button {
|
17108
|
+
font-size: 13px;
|
17109
|
+
}
|
17110
|
+
}
|
17111
|
+
|
17112
|
+
@container (min-width: 1280px) {
|
17113
|
+
.${prefix}__header {
|
17114
|
+
font-size: 28px;
|
17115
|
+
}
|
17116
|
+
.${prefix}__description {
|
17117
|
+
font-size: 14px;
|
17118
|
+
}
|
17119
|
+
.${prefix}__cta-button {
|
17120
|
+
font-size: 14px;
|
17121
|
+
}
|
17079
17122
|
}
|
17080
17123
|
</style>
|
17081
17124
|
`;
|
@@ -17105,23 +17148,15 @@ function rbHomepageHeroThreeTileTemplate(spot, config) {
|
|
17105
17148
|
const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextColor = textColor, primaryImage, mobilePrimaryImage = primaryImage, }, { prefix }) => `
|
17106
17149
|
<style>
|
17107
17150
|
.${prefix} {
|
17108
|
-
min-width: 320px;
|
17109
|
-
min-height: 388px;
|
17110
|
-
width: 100%;
|
17111
|
-
height: 100%;
|
17112
|
-
display: block;
|
17113
|
-
position: relative;
|
17114
|
-
container-type: inline-size;
|
17115
|
-
}
|
17116
|
-
|
17117
|
-
.${prefix}__content {
|
17118
17151
|
width: 100%;
|
17119
17152
|
height: 100%;
|
17120
17153
|
display: flex;
|
17121
|
-
flex-direction: column-reverse;
|
17154
|
+
flex-direction: column-reverse;
|
17122
17155
|
background-color: transparent;
|
17123
17156
|
gap: 5px;
|
17124
17157
|
cursor: pointer;
|
17158
|
+
container-type: inline-size;
|
17159
|
+
position: relative;
|
17125
17160
|
}
|
17126
17161
|
|
17127
17162
|
.${prefix}__image {
|
@@ -17166,7 +17201,7 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
17166
17201
|
font-style: normal;
|
17167
17202
|
font-weight: 400;
|
17168
17203
|
}
|
17169
|
-
|
17204
|
+
|
17170
17205
|
.${prefix}__cta-button {
|
17171
17206
|
color: ${ctaTextColor};
|
17172
17207
|
background-color: transparent;
|
@@ -17187,25 +17222,57 @@ const STYLES$4 = ({ textColor = '#212121', backgroundColor = '#e8e6de', ctaTextC
|
|
17187
17222
|
opacity: 0.8;
|
17188
17223
|
}
|
17189
17224
|
|
17190
|
-
@
|
17225
|
+
@container (min-width: 640px) {
|
17191
17226
|
.${prefix}__image {
|
17192
17227
|
background-image: url("${primaryImage}");
|
17193
17228
|
}
|
17194
17229
|
}
|
17195
|
-
|
17196
|
-
|
17230
|
+
|
17231
|
+
@container (min-width: 768px) {
|
17232
|
+
.${prefix} {
|
17197
17233
|
flex-direction: row;
|
17198
17234
|
}
|
17199
|
-
|
17200
17235
|
.${prefix}__image {
|
17201
17236
|
width: 66.66666%;
|
17202
17237
|
height: 100%;
|
17203
17238
|
}
|
17204
|
-
|
17205
17239
|
.${prefix}__text {
|
17206
17240
|
width: 33.33333%;
|
17207
17241
|
height: 100%;
|
17208
17242
|
}
|
17243
|
+
.${prefix}__header {
|
17244
|
+
font-size: 22px;
|
17245
|
+
}
|
17246
|
+
.${prefix}__description {
|
17247
|
+
font-size: 12px;
|
17248
|
+
}
|
17249
|
+
.${prefix}__cta-button {
|
17250
|
+
font-size: 12px;
|
17251
|
+
}
|
17252
|
+
}
|
17253
|
+
|
17254
|
+
@container (min-width: 1024px) {
|
17255
|
+
.${prefix}__header {
|
17256
|
+
font-size: 24px;
|
17257
|
+
}
|
17258
|
+
.${prefix}__description {
|
17259
|
+
font-size: 13px;
|
17260
|
+
}
|
17261
|
+
.${prefix}__cta-button {
|
17262
|
+
font-size: 13px;
|
17263
|
+
}
|
17264
|
+
}
|
17265
|
+
|
17266
|
+
@container (min-width: 1280px) {
|
17267
|
+
.${prefix}__header {
|
17268
|
+
font-size: 28px;
|
17269
|
+
}
|
17270
|
+
.${prefix}__description {
|
17271
|
+
font-size: 14px;
|
17272
|
+
}
|
17273
|
+
.${prefix}__cta-button {
|
17274
|
+
font-size: 14px;
|
17275
|
+
}
|
17209
17276
|
}
|
17210
17277
|
</style>
|
17211
17278
|
`;
|
@@ -17217,14 +17284,12 @@ function rbHomepageHeroTwoTileTemplate(spot, config) {
|
|
17217
17284
|
${GFONT_CORMORANT}
|
17218
17285
|
${STYLES$4(spot, config)}
|
17219
17286
|
<div class="${prefix}">
|
17220
|
-
<div class="${prefix}
|
17221
|
-
|
17222
|
-
|
17223
|
-
|
17224
|
-
${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
|
17225
|
-
</div>
|
17226
|
-
<div class="${prefix}__image"></div>
|
17287
|
+
<div class="${prefix}__text">
|
17288
|
+
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
17289
|
+
${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
|
17290
|
+
${spot.ctaText ? `<span class="${prefix}__cta-button">${spot.ctaText}</span>` : ''}
|
17227
17291
|
</div>
|
17292
|
+
<div class="${prefix}__image"></div>
|
17228
17293
|
</div>
|
17229
17294
|
`;
|
17230
17295
|
}
|
@@ -17233,12 +17298,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
17233
17298
|
const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
|
17234
17299
|
return `
|
17235
17300
|
<style>
|
17236
|
-
|
17237
|
-
min-width: 320px;
|
17238
|
-
min-height: 334px;
|
17239
|
-
}
|
17240
|
-
|
17241
|
-
.${prefix}__content {
|
17301
|
+
.${prefix} {
|
17242
17302
|
width: 100%;
|
17243
17303
|
height: 100%;
|
17244
17304
|
display: flex;
|
@@ -17252,6 +17312,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
17252
17312
|
overflow: hidden;
|
17253
17313
|
cursor: pointer;
|
17254
17314
|
color: ${textColor};
|
17315
|
+
container-type: inline-size;
|
17255
17316
|
}
|
17256
17317
|
|
17257
17318
|
.${prefix}__text {
|
@@ -17298,17 +17359,17 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
17298
17359
|
font-weight: 400;
|
17299
17360
|
}
|
17300
17361
|
|
17301
|
-
.${prefix}
|
17362
|
+
.${prefix}:hover .${prefix}__cta-button {
|
17302
17363
|
background-color: ${ctaBorderColor.length === 7 ? `${ctaBorderColor}15` : `${ctaBorderColor}`};
|
17303
17364
|
}
|
17304
17365
|
|
17305
|
-
@
|
17306
|
-
.${prefix}
|
17366
|
+
@container (min-width: 640px) {
|
17367
|
+
.${prefix} {
|
17307
17368
|
background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
|
17308
17369
|
}
|
17309
17370
|
}
|
17310
17371
|
|
17311
|
-
@
|
17372
|
+
@container (min-width: 768px) {
|
17312
17373
|
.${prefix}__text {
|
17313
17374
|
padding: 25px;
|
17314
17375
|
}
|
@@ -17327,7 +17388,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
17327
17388
|
}
|
17328
17389
|
}
|
17329
17390
|
|
17330
|
-
@
|
17391
|
+
@container (min-width: 1024px) {
|
17331
17392
|
.${prefix}__text {
|
17332
17393
|
padding: 30px;
|
17333
17394
|
}
|
@@ -17345,7 +17406,7 @@ const STYLES$3 = ({ textColor = '#ffffff', ctaTextColor = textColor, ctaBorderCo
|
|
17345
17406
|
}
|
17346
17407
|
}
|
17347
17408
|
|
17348
|
-
@
|
17409
|
+
@container (min-width: 1280px) {
|
17349
17410
|
.${prefix}__cta-button {
|
17350
17411
|
font-size: 14px;
|
17351
17412
|
}
|
@@ -17360,7 +17421,7 @@ function rbLargeCategoryImageToutTemplate(spot, config) {
|
|
17360
17421
|
${GFONT_SOURCE_SANS_3}
|
17361
17422
|
${GFONT_CORMORANT}
|
17362
17423
|
${STYLES$3(spot, config)}
|
17363
|
-
<div class="${prefix}
|
17424
|
+
<div class="${prefix}">
|
17364
17425
|
<div class="${prefix}__text">
|
17365
17426
|
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
17366
17427
|
${spot.description ? `<p class="${prefix}__description">${spot.description}</p>` : ''}
|
@@ -17374,12 +17435,7 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17374
17435
|
const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
|
17375
17436
|
return `
|
17376
17437
|
<style>
|
17377
|
-
|
17378
|
-
min-width: 320px;
|
17379
|
-
min-height: 150px;
|
17380
|
-
}
|
17381
|
-
|
17382
|
-
.${prefix}__content {
|
17438
|
+
.${prefix} {
|
17383
17439
|
width: 100%;
|
17384
17440
|
height: 100%;
|
17385
17441
|
display: flex;
|
@@ -17392,6 +17448,7 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17392
17448
|
background-size: cover;
|
17393
17449
|
background-position: center;
|
17394
17450
|
background-repeat: no-repeat;
|
17451
|
+
container-type: inline-size;
|
17395
17452
|
}
|
17396
17453
|
|
17397
17454
|
.${prefix}__text {
|
@@ -17409,25 +17466,25 @@ const STYLES$2 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17409
17466
|
margin: 0;
|
17410
17467
|
}
|
17411
17468
|
|
17412
|
-
@
|
17413
|
-
.${prefix}
|
17469
|
+
@container (min-width: 640px) {
|
17470
|
+
.${prefix} {
|
17414
17471
|
background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
|
17415
17472
|
}
|
17416
17473
|
}
|
17417
17474
|
|
17418
|
-
@
|
17475
|
+
@container (min-width: 768px) {
|
17419
17476
|
.${prefix}__header {
|
17420
17477
|
font-size: 22px;
|
17421
17478
|
}
|
17422
17479
|
}
|
17423
17480
|
|
17424
|
-
@
|
17481
|
+
@container (min-width: 1024px) {
|
17425
17482
|
.${prefix}__header {
|
17426
17483
|
font-size: 24px;
|
17427
17484
|
}
|
17428
17485
|
}
|
17429
17486
|
|
17430
|
-
@
|
17487
|
+
@container (min-width: 1280px) {
|
17431
17488
|
.${prefix}__header {
|
17432
17489
|
font-size: 28px;
|
17433
17490
|
}
|
@@ -17441,7 +17498,7 @@ function rbNavigationBannerTemplate(spot, config) {
|
|
17441
17498
|
${GFONT_PRECONNECT}
|
17442
17499
|
${GFONT_SOURCE_SANS_3}
|
17443
17500
|
${STYLES$2(spot, config)}
|
17444
|
-
<div class="${prefix}
|
17501
|
+
<div class="${prefix}">
|
17445
17502
|
<div class="${prefix}__text">
|
17446
17503
|
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
17447
17504
|
</div>
|
@@ -17453,12 +17510,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17453
17510
|
const linearGradient = linearGradientColorStop(overlay || [], 'rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 30%');
|
17454
17511
|
return `
|
17455
17512
|
<style>
|
17456
|
-
|
17457
|
-
min-width: 165px;
|
17458
|
-
min-height: 300px;
|
17459
|
-
}
|
17460
|
-
|
17461
|
-
.${prefix}__content {
|
17513
|
+
.${prefix} {
|
17462
17514
|
width: 100%;
|
17463
17515
|
height: 100%;
|
17464
17516
|
display: flex;
|
@@ -17471,6 +17523,7 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17471
17523
|
border-radius: 5px;
|
17472
17524
|
overflow: hidden;
|
17473
17525
|
cursor: pointer;
|
17526
|
+
container-type: inline-size;
|
17474
17527
|
}
|
17475
17528
|
|
17476
17529
|
.${prefix}__text {
|
@@ -17485,12 +17538,11 @@ const STYLES$1 = ({ textColor = '#ffffff', primaryImage, mobilePrimaryImage = pr
|
|
17485
17538
|
font-family: "Source Sans 3", system-ui;
|
17486
17539
|
font-style: normal;
|
17487
17540
|
font-weight: 400;
|
17488
|
-
line-height: normal;
|
17489
17541
|
margin: 0;
|
17490
17542
|
}
|
17491
17543
|
|
17492
|
-
@
|
17493
|
-
.${prefix}
|
17544
|
+
@container (min-width: 640px) {
|
17545
|
+
.${prefix} {
|
17494
17546
|
background-image: linear-gradient(to top, ${linearGradient}), url("${primaryImage}");
|
17495
17547
|
}
|
17496
17548
|
}
|
@@ -17503,7 +17555,7 @@ function rbSmallCategoryImageToutTemplate(spot, config) {
|
|
17503
17555
|
${GFONT_PRECONNECT}
|
17504
17556
|
${GFONT_CORMORANT}
|
17505
17557
|
${STYLES$1(spot, config)}
|
17506
|
-
<div class="${prefix}
|
17558
|
+
<div class="${prefix}">
|
17507
17559
|
<div class="${prefix}__text">
|
17508
17560
|
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
17509
17561
|
</div>
|
@@ -17513,12 +17565,7 @@ function rbSmallCategoryImageToutTemplate(spot, config) {
|
|
17513
17565
|
|
17514
17566
|
const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primaryImage, mobilePrimaryImage = primaryImage, }, { prefix }) => `
|
17515
17567
|
<style>
|
17516
|
-
|
17517
|
-
min-width: 165px;
|
17518
|
-
min-height: 250px;
|
17519
|
-
}
|
17520
|
-
|
17521
|
-
.${prefix}__content {
|
17568
|
+
.${prefix} {
|
17522
17569
|
width: 100%;
|
17523
17570
|
height: 100%;
|
17524
17571
|
background-color: ${backgroundColor};
|
@@ -17526,6 +17573,7 @@ const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primar
|
|
17526
17573
|
display: flex;
|
17527
17574
|
flex-direction: column;
|
17528
17575
|
border-radius: 5px;
|
17576
|
+
container-type: inline-size;
|
17529
17577
|
}
|
17530
17578
|
|
17531
17579
|
.${prefix}__image {
|
@@ -17557,11 +17605,10 @@ const STYLES = ({ textColor = '#000000', backgroundColor = 'transparent', primar
|
|
17557
17605
|
font-family: "Source Sans 3", system-ui;
|
17558
17606
|
font-style: normal;
|
17559
17607
|
font-weight: 400;
|
17560
|
-
line-height: normal;
|
17561
17608
|
margin: 0;
|
17562
17609
|
}
|
17563
17610
|
|
17564
|
-
@
|
17611
|
+
@container (min-width: 640px) {
|
17565
17612
|
.${prefix}__image {
|
17566
17613
|
background-image: url("${primaryImage}");
|
17567
17614
|
}
|
@@ -17574,7 +17621,7 @@ function rbSmallDiscoverToutTemplate(spot, config) {
|
|
17574
17621
|
${GFONT_PRECONNECT}
|
17575
17622
|
${GFONT_CORMORANT}
|
17576
17623
|
${STYLES(spot, config)}
|
17577
|
-
<div class="${prefix}
|
17624
|
+
<div class="${prefix}">
|
17578
17625
|
<div class="${prefix}__image"></div>
|
17579
17626
|
<div class="${prefix}__text">
|
17580
17627
|
${spot.header ? `<h2 class="${prefix}__header">${spot.header}</h2>` : ''}
|
@@ -17755,8 +17802,6 @@ class EventService {
|
|
17755
17802
|
element,
|
17756
17803
|
impressionTracked: false,
|
17757
17804
|
});
|
17758
|
-
// Handle resize observer
|
17759
|
-
// this.handleResizeObserver(placementId, spot, element);
|
17760
17805
|
// Handle intersection observer
|
17761
17806
|
this.handleIntersectionObserver(placementId, spot, element);
|
17762
17807
|
// Attach click event listener
|
@@ -17794,35 +17839,6 @@ class EventService {
|
|
17794
17839
|
this.activeSpots.delete(spotId);
|
17795
17840
|
}
|
17796
17841
|
}
|
17797
|
-
// private handleResizeObserver(placementId: string, spot: ISpot, element: HTMLElement): void {
|
17798
|
-
// // this.resizeObserver = new ResizeObserverService({
|
17799
|
-
// // element,
|
17800
|
-
// // maxSize: {
|
17801
|
-
// // width: spot.width,
|
17802
|
-
// // height: spot.height,
|
17803
|
-
// // },
|
17804
|
-
// // minScale: 0.25,
|
17805
|
-
// // });
|
17806
|
-
//
|
17807
|
-
// const sizeChangedCb = (event: ISizeChangedEvent) => {
|
17808
|
-
// // Publish spot resized event
|
17809
|
-
// this.pubSub.publish(RMN_SPOT_EVENT.RESIZED, {
|
17810
|
-
// placementId,
|
17811
|
-
// spotId: spot.id,
|
17812
|
-
// scale: event.detail.scale,
|
17813
|
-
// previousDimensions: {
|
17814
|
-
// width: event.detail.width,
|
17815
|
-
// height: event.detail.height,
|
17816
|
-
// },
|
17817
|
-
// currentDimensions: {
|
17818
|
-
// width: event.detail.newWidth,
|
17819
|
-
// height: event.detail.newHeight,
|
17820
|
-
// },
|
17821
|
-
// });
|
17822
|
-
// };
|
17823
|
-
//
|
17824
|
-
// element.addEventListener('spotSizeChanged', sizeChangedCb as EventListener);
|
17825
|
-
// }
|
17826
17842
|
handleIntersectionObserver(placementId, spot, element) {
|
17827
17843
|
const spotIsVisibleCb = async () => {
|
17828
17844
|
var _a, _b;
|
@@ -17898,19 +17914,19 @@ class SelectionService extends BaseApi {
|
|
17898
17914
|
*
|
17899
17915
|
* @param {ISpotSelectionParams} data - Spots selection parameters.
|
17900
17916
|
*
|
17901
|
-
* @return {Promise<ISpots>} - The spots response object.
|
17917
|
+
* @return {Promise<ISpots | { error: string }>} - The spots response object.
|
17902
17918
|
*/
|
17903
17919
|
async spotSelection(data) {
|
17904
17920
|
const { isOk, val, isErr } = await this.post(SELECTION_API_PATH, data, {});
|
17905
17921
|
if (isErr) {
|
17906
|
-
|
17922
|
+
return { error: `There was an error during spot selection: (${isErr === null || isErr === void 0 ? void 0 : isErr.errorMessage})` };
|
17907
17923
|
}
|
17908
17924
|
if (isOk && val && val.data && (val === null || val === void 0 ? void 0 : val.refresh.token)) {
|
17909
17925
|
this.authInfo.authenticated = true;
|
17910
17926
|
this.authInfo.token = val.refresh.token;
|
17911
17927
|
return val.data.spots;
|
17912
17928
|
}
|
17913
|
-
|
17929
|
+
return { error: 'Spot selection response was not successful' };
|
17914
17930
|
}
|
17915
17931
|
}
|
17916
17932
|
|
@@ -17927,7 +17943,7 @@ class LiquidCommerceRmnClient {
|
|
17927
17943
|
*
|
17928
17944
|
* @param {ISpotSelectionParams} params - Spots selection parameters.
|
17929
17945
|
*
|
17930
|
-
* @return {Promise<ISpots>} - The spots response object.
|
17946
|
+
* @return {Promise<ISpots | {error : string}>} - The spots response object.
|
17931
17947
|
*/
|
17932
17948
|
async spotSelection(params) {
|
17933
17949
|
return this.selectionService.spotSelection(params);
|
@@ -17941,31 +17957,51 @@ class LiquidCommerceRmnClient {
|
|
17941
17957
|
*/
|
17942
17958
|
async injectSpotElement(params) {
|
17943
17959
|
var _a;
|
17944
|
-
const
|
17960
|
+
const config = params.config;
|
17961
|
+
let inject = params.inject;
|
17962
|
+
this.eventService.publish(exports.RMN_SPOT_EVENT.INJECT_SPOTS, {
|
17963
|
+
isLoading: true,
|
17964
|
+
isCompleted: false,
|
17965
|
+
error: null,
|
17966
|
+
});
|
17945
17967
|
if (!inject.length) {
|
17946
|
-
|
17968
|
+
this.eventError('RmnSdk: Failed to inject spot element. Please provide at least one spot element to inject.');
|
17969
|
+
return;
|
17970
|
+
}
|
17971
|
+
const hasDuplicatePlacementIds = this.preventDuplicateSpotPlacementIds(inject);
|
17972
|
+
if (!hasDuplicatePlacementIds) {
|
17973
|
+
return;
|
17974
|
+
}
|
17975
|
+
inject = this.preventNonExistentSpotTypes(inject);
|
17976
|
+
const response = await this.spotSelectionRequest({ ...params, inject });
|
17977
|
+
if (typeof response === 'object' && 'error' in response) {
|
17978
|
+
this.eventError(response.error);
|
17947
17979
|
return;
|
17948
17980
|
}
|
17949
|
-
this.preventDuplicateSpotPlacementIds(inject);
|
17950
|
-
const response = await this.spotSelectionRequest(params);
|
17951
17981
|
for (const item of inject) {
|
17952
17982
|
const itemConfig = (_a = item.config) !== null && _a !== void 0 ? _a : config;
|
17953
17983
|
const spots = response[item.placementId];
|
17954
17984
|
if (!(spots === null || spots === void 0 ? void 0 : spots.length)) {
|
17955
|
-
|
17985
|
+
this.eventError(`RmnSdk: Failed to inject spot element. No spots found for type "${item.spotType}".`, { placementId: item.placementId, type: item.spotType });
|
17956
17986
|
continue;
|
17957
17987
|
}
|
17958
17988
|
const placementId = item.placementId.replace('#', '');
|
17959
17989
|
const placement = document.getElementById(placementId);
|
17960
17990
|
if (!placement) {
|
17961
|
-
|
17991
|
+
this.eventError(`RmnSdk: Failed to inject spot element. Placement not found for id "#${placementId}".`, { placementId, type: item.spotType });
|
17962
17992
|
continue;
|
17963
17993
|
}
|
17964
17994
|
if (spots.length === 1) {
|
17965
|
-
this.injectOneSpotElement(item, placement, spots[0], itemConfig);
|
17995
|
+
const isInjected = this.injectOneSpotElement(item, placement, spots[0], itemConfig);
|
17996
|
+
if (!isInjected) {
|
17997
|
+
continue;
|
17998
|
+
}
|
17966
17999
|
}
|
17967
18000
|
if (spots.length > 1) {
|
17968
|
-
this.injectCarouselSpotElement(placement, spots, itemConfig);
|
18001
|
+
const isInjected = this.injectCarouselSpotElement(placement, spots, itemConfig);
|
18002
|
+
if (!isInjected) {
|
18003
|
+
continue;
|
18004
|
+
}
|
17969
18005
|
}
|
17970
18006
|
}
|
17971
18007
|
}
|
@@ -17982,7 +18018,7 @@ class LiquidCommerceRmnClient {
|
|
17982
18018
|
*
|
17983
18019
|
* @param {IInjectSpotElementParams} params - Parameters for injecting spot elements.
|
17984
18020
|
*
|
17985
|
-
* @return {Promise<ISpots>} - The spots response object.
|
18021
|
+
* @return {Promise<ISpots | {error: string}>} - The spots response object.
|
17986
18022
|
*/
|
17987
18023
|
async spotSelectionRequest(params) {
|
17988
18024
|
const { inject, filter, config } = params;
|
@@ -18014,8 +18050,8 @@ class LiquidCommerceRmnClient {
|
|
18014
18050
|
const spot = this.elementService.overrideSpotColors(spotItem, config === null || config === void 0 ? void 0 : config.colors);
|
18015
18051
|
const content = SPOT_TEMPLATE_HTML_ELEMENT(spot, { overlay: config === null || config === void 0 ? void 0 : config.overlay });
|
18016
18052
|
if (!content) {
|
18017
|
-
|
18018
|
-
|
18053
|
+
this.eventError(`RmnSdk: Failed to inject carousel spot element. Could not create element for type "${spot.spot}".`, { placementId: placement.id, type: spot.spot });
|
18054
|
+
continue;
|
18019
18055
|
}
|
18020
18056
|
this.eventSpotElement({
|
18021
18057
|
spot,
|
@@ -18031,6 +18067,7 @@ class LiquidCommerceRmnClient {
|
|
18031
18067
|
const carouselElement = this.elementService.createCarouselElement({
|
18032
18068
|
slides: carouselSlides,
|
18033
18069
|
config: {
|
18070
|
+
fluid: config === null || config === void 0 ? void 0 : config.fluid,
|
18034
18071
|
width: maxWidth,
|
18035
18072
|
height: maxHeight,
|
18036
18073
|
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
|
@@ -18038,10 +18075,11 @@ class LiquidCommerceRmnClient {
|
|
18038
18075
|
},
|
18039
18076
|
});
|
18040
18077
|
if (!carouselElement) {
|
18041
|
-
|
18042
|
-
return;
|
18078
|
+
this.eventError(`RmnSdk: Failed to inject spot carousel element. Could not create spot carousel element.`, { placementId: placement.id });
|
18079
|
+
return false;
|
18043
18080
|
}
|
18044
18081
|
placement.replaceChildren(carouselElement);
|
18082
|
+
return true;
|
18045
18083
|
}
|
18046
18084
|
/**
|
18047
18085
|
* Injects a single spot element into the provided placement.
|
@@ -18058,20 +18096,22 @@ class LiquidCommerceRmnClient {
|
|
18058
18096
|
const spotData = this.elementService.overrideSpotColors(spot, config === null || config === void 0 ? void 0 : config.colors);
|
18059
18097
|
const content = SPOT_TEMPLATE_HTML_ELEMENT(spotData, { overlay: config === null || config === void 0 ? void 0 : config.overlay });
|
18060
18098
|
if (!content) {
|
18061
|
-
|
18062
|
-
return;
|
18099
|
+
this.eventError(`RmnSdk: Failed to inject spot element. Could not create element for type "${injectItem.spotType}".`, { placementId: injectItem.placementId, type: injectItem.spotType });
|
18100
|
+
return false;
|
18063
18101
|
}
|
18064
18102
|
const spotElement = this.elementService.createSpotElement({
|
18065
18103
|
content,
|
18066
18104
|
config: {
|
18105
|
+
fluid: config === null || config === void 0 ? void 0 : config.fluid,
|
18106
|
+
spot: spot.spot,
|
18067
18107
|
width: spot.width,
|
18068
18108
|
height: spot.height,
|
18069
18109
|
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
|
18070
18110
|
},
|
18071
18111
|
});
|
18072
18112
|
if (!spotElement) {
|
18073
|
-
|
18074
|
-
return;
|
18113
|
+
this.eventError(`RmnSdk: Failed to inject spot element. Could not create element for type "${injectItem.spotType}".`, { placementId: injectItem.placementId, type: injectItem.spotType });
|
18114
|
+
return false;
|
18075
18115
|
}
|
18076
18116
|
this.eventSpotElement({
|
18077
18117
|
spot,
|
@@ -18079,6 +18119,7 @@ class LiquidCommerceRmnClient {
|
|
18079
18119
|
element: spotElement,
|
18080
18120
|
});
|
18081
18121
|
placement.replaceChildren(spotElement);
|
18122
|
+
return true;
|
18082
18123
|
}
|
18083
18124
|
eventSpotElement({ spot, placementId, element, }) {
|
18084
18125
|
this.eventService.registerSpot({
|
@@ -18100,10 +18141,33 @@ class LiquidCommerceRmnClient {
|
|
18100
18141
|
const placementIds = new Set();
|
18101
18142
|
for (const item of inject) {
|
18102
18143
|
if (placementIds.has(item.placementId)) {
|
18103
|
-
|
18144
|
+
this.eventError(`RmnSdk: Duplicate placement id (${item.placementId}) found. Please provide a unique placement id for each spot element.`, { placementId: item.placementId, type: item.spotType });
|
18145
|
+
return false;
|
18104
18146
|
}
|
18105
18147
|
placementIds.add(item.placementId);
|
18106
18148
|
}
|
18149
|
+
return true;
|
18150
|
+
}
|
18151
|
+
preventNonExistentSpotTypes(inject) {
|
18152
|
+
const newInject = [];
|
18153
|
+
for (const item of inject) {
|
18154
|
+
if (!Object.values(exports.RMN_SPOT_TYPE).includes(item.spotType)) {
|
18155
|
+
this.eventError(`RmnSdk: Invalid spot type (${item.spotType}) found. Please provide a valid spot type for each spot element.`, { placementId: item.placementId, type: item.spotType });
|
18156
|
+
continue;
|
18157
|
+
}
|
18158
|
+
newInject.push(item);
|
18159
|
+
}
|
18160
|
+
return newInject;
|
18161
|
+
}
|
18162
|
+
eventError(error, spot) {
|
18163
|
+
this.eventService.publish(exports.RMN_SPOT_EVENT.INJECT_SPOTS, {
|
18164
|
+
isLoading: false,
|
18165
|
+
isCompleted: true,
|
18166
|
+
error: {
|
18167
|
+
message: error,
|
18168
|
+
spot,
|
18169
|
+
},
|
18170
|
+
});
|
18107
18171
|
}
|
18108
18172
|
}
|
18109
18173
|
/**
|