vviinn-widgets 2.212.2 → 2.212.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/{index-CuEyZlCU.js → index-_0g0X5c_.js} +4 -2
  2. package/dist/cjs/{search.store-DONgsZoB.js → search.store-d2QXWz7H.js} +1 -1
  3. package/dist/cjs/vviinn-button_6.cjs.entry.js +1 -1
  4. package/dist/cjs/vviinn-camera_12.cjs.entry.js +2 -2
  5. package/dist/cjs/vviinn-carousel_10.cjs.entry.js +8 -6
  6. package/dist/cjs/vviinn-shop-the-look.cjs.entry.js +1 -1
  7. package/dist/cjs/vviinn-text-search.cjs.entry.js +1 -1
  8. package/dist/collection/components/vviinn-carousel/vviinn-carousel.js +5 -3
  9. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +3 -2
  10. package/dist/collection/recommendation/index.js +2 -1
  11. package/dist/esm/{index-BMIjtG2f.js → index-0PZup3PH.js} +4 -3
  12. package/dist/esm/{search.store-D6GBV7af.js → search.store-KDs2rpoU.js} +1 -1
  13. package/dist/esm/vviinn-button_6.entry.js +1 -1
  14. package/dist/esm/vviinn-camera_12.entry.js +2 -2
  15. package/dist/esm/vviinn-carousel_10.entry.js +9 -7
  16. package/dist/esm/vviinn-shop-the-look.entry.js +1 -1
  17. package/dist/esm/vviinn-text-search.entry.js +1 -1
  18. package/dist/types/recommendation/index.d.ts +1 -0
  19. package/dist/vviinn-widgets/{p-e6d25c9e.entry.js → p-61b490a2.entry.js} +1 -1
  20. package/dist/vviinn-widgets/{p-427659f7.entry.js → p-6c99a37d.entry.js} +1 -1
  21. package/dist/vviinn-widgets/p-76e100e5.entry.js +1 -0
  22. package/dist/vviinn-widgets/p-Dg7konTz.js +1 -0
  23. package/dist/vviinn-widgets/{p-B0fYM6b6.js → p-DwYeDk0H.js} +1 -1
  24. package/dist/vviinn-widgets/{p-3009f50c.entry.js → p-ad077480.entry.js} +1 -1
  25. package/dist/vviinn-widgets/{p-a38fa5e0.entry.js → p-d7367e02.entry.js} +1 -1
  26. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  27. package/package.json +1 -1
  28. package/www/build/{p-9eddab00.js → p-1ac73229.js} +1 -1
  29. package/www/build/{p-e6d25c9e.entry.js → p-61b490a2.entry.js} +1 -1
  30. package/www/build/{p-427659f7.entry.js → p-6c99a37d.entry.js} +1 -1
  31. package/www/build/p-76e100e5.entry.js +1 -0
  32. package/www/build/p-Dg7konTz.js +1 -0
  33. package/www/build/{p-B0fYM6b6.js → p-DwYeDk0H.js} +1 -1
  34. package/www/build/{p-3009f50c.entry.js → p-ad077480.entry.js} +1 -1
  35. package/www/build/{p-a38fa5e0.entry.js → p-d7367e02.entry.js} +1 -1
  36. package/www/build/vviinn-widgets.esm.js +1 -1
  37. package/www/index.html +1 -1
  38. package/dist/vviinn-widgets/p-3Gd2O2eN.js +0 -1
  39. package/dist/vviinn-widgets/p-3cbb3938.entry.js +0 -1
  40. package/www/build/p-3Gd2O2eN.js +0 -1
  41. package/www/build/p-3cbb3938.entry.js +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-OrE9ITel.js');
4
- var search_store = require('./search.store-DONgsZoB.js');
4
+ var search_store = require('./search.store-d2QXWz7H.js');
5
5
  var store = require('./store-jPZ4ROqV.js');
6
6
 
7
7
  const PlusIcon = () => (index.h("svg", { width: "32", height: "32", viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg", class: "plus-icon", "aria-hidden": "true" },
@@ -33,6 +33,7 @@ const getRecommendationsBody = ({ productId, campaigns, color, excluded, dynamic
33
33
  const staticFilters = Object.assign(Object.assign({}, search_store.addIfNotEmpty("color", color)), search_store.addIfNotEmpty("excluded", search_store.parseStringToExcluded(excluded)));
34
34
  return Object.assign(Object.assign(Object.assign({ productId }, search_store.addIfNotEmpty("dynamicFilters", dynamicFilters)), search_store.addIfNotEmpty("campaigns", parseCampaigns(campaigns))), search_store.addIfNotEmpty("staticFilters", staticFilters));
35
35
  };
36
+ const CUSTOM_LABELS_DELIMITER = "|";
36
37
  const getCustomLabels = (recommendation) => {
37
38
  const { custom_label_0, custom_label_1, custom_label_2, custom_label_3, custom_label_4, } = recommendation;
38
39
  return [
@@ -43,7 +44,7 @@ const getCustomLabels = (recommendation) => {
43
44
  custom_label_4,
44
45
  ]
45
46
  .map((label) => label !== null && label !== void 0 ? label : "")
46
- .join(",");
47
+ .join(CUSTOM_LABELS_DELIMITER);
47
48
  };
48
49
 
49
50
  /**
@@ -371,6 +372,7 @@ const createImageSearchEvent = createTrackingEvent({
371
372
  exports.CAROUSEL_CONTENT_WIDTH_CSS_VAR = CAROUSEL_CONTENT_WIDTH_CSS_VAR;
372
373
  exports.CAROUSEL_IMAGE_WIDTH_CSS_VAR = CAROUSEL_IMAGE_WIDTH_CSS_VAR;
373
374
  exports.CONTENT_GROUP_CSS_CLASS = CONTENT_GROUP_CSS_CLASS;
375
+ exports.CUSTOM_LABELS_DELIMITER = CUSTOM_LABELS_DELIMITER;
374
376
  exports.DEFAULT_COLUMNS_NUMBER = DEFAULT_COLUMNS_NUMBER;
375
377
  exports.FilterIconClose = FilterIconClose;
376
378
  exports.PlusIcon = PlusIcon;
@@ -8786,7 +8786,7 @@ const encodeToBase64UTF8 = (str) => {
8786
8786
  return btoa(String.fromCharCode.apply(null, utf8Array));
8787
8787
  };
8788
8788
 
8789
- const version = "2.212.2";
8789
+ const version = "2.212.4";
8790
8790
 
8791
8791
  const appStateGlobalDefaults = {
8792
8792
  excluded: null,
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-OrE9ITel.js');
4
4
  var store = require('./store-jPZ4ROqV.js');
5
- var search_store = require('./search.store-DONgsZoB.js');
5
+ var search_store = require('./search.store-d2QXWz7H.js');
6
6
  var customizedSlots = require('./customized-slots-CqOPLiML.js');
7
7
  var SecondaryActionIcon = require('./SecondaryActionIcon-BZg-ADIW.js');
8
8
  var index$1 = require('./index-DLEDOlRe.js');
@@ -2,9 +2,9 @@
2
2
 
3
3
  var index = require('./index-OrE9ITel.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
- var search_store = require('./search.store-DONgsZoB.js');
5
+ var search_store = require('./search.store-d2QXWz7H.js');
6
6
  var customizedSlots = require('./customized-slots-CqOPLiML.js');
7
- var index$1 = require('./index-CuEyZlCU.js');
7
+ var index$1 = require('./index-_0g0X5c_.js');
8
8
  var store = require('./store-jPZ4ROqV.js');
9
9
  var cropperUtils = require('./cropperUtils-DCDOLeBS.js');
10
10
  var index$2 = require('./index-DLEDOlRe.js');
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-OrE9ITel.js');
4
- var search_store = require('./search.store-DONgsZoB.js');
4
+ var search_store = require('./search.store-d2QXWz7H.js');
5
5
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
6
6
  var store = require('./store-jPZ4ROqV.js');
7
- var index$2 = require('./index-CuEyZlCU.js');
7
+ var index$2 = require('./index-_0g0X5c_.js');
8
8
  var index$1 = require('./index-DLEDOlRe.js');
9
9
  var customizedSlots = require('./customized-slots-CqOPLiML.js');
10
10
  var index$3 = require('./index-CzqCGUTk.js');
@@ -281,6 +281,8 @@ const VviinnCarousel = class {
281
281
  };
282
282
  contentNode.addEventListener("scroll", this.scrollHandler);
283
283
  }
284
+ // Re-render to recalculate button states with actual DOM dimensions
285
+ index.forceUpdate(this);
284
286
  }
285
287
  recommendationsWatcher() {
286
288
  if (this.isSetMode) {
@@ -556,10 +558,10 @@ const VviinnCarousel = class {
556
558
  }
557
559
  render() {
558
560
  var _a, _b, _c, _d, _e;
559
- return (index.h(index.Host, { key: '150d87472b3f2cbfb1c1bcd8bca09d9adbb097a0', class: this.getClassMap() }, index.h("div", { key: '6fba890b59ae1a4127656575171f41d0cdec5c3d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { key: 'c1d5dd3ba4c155ad8f08b1677a9a643850c1e4c3', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: index$2.getCustomLabels(this.sourceProduct), responsive: true })), index.h("div", { key: '15042b233cf87753ec9380ecc6fd468e8960317b', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (index.h(index.Fragment, { key: '583c28ab0ad1aea77f3dd5fd8f457c4b0360563f' }, index.h("button", { key: '66c52cd02f1a243558c5e042a0543ed63cffac32', class: {
561
+ return (index.h(index.Host, { key: 'e11e8cfb234d70f22b8ea47021726140d5247253', class: this.getClassMap() }, index.h("div", { key: '5bc27834ea27a3612f35aa5b715d24c38900c654', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { key: '3d21ba5ad6d7a953b6b17452235c09f155b0b425', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: index$2.getCustomLabels(this.sourceProduct), responsive: true })), index.h("div", { key: 'e36046bb907dd55167ce8decd2a3d2d687158a6a', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (index.h(index.Fragment, { key: '15e0e414cc95a022db4c6a65b652012b0a9a52f2' }, index.h("button", { key: 'dcd7427334ffbd97857866ec3b07b8d845eb9361', class: {
560
562
  prev: true,
561
563
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
562
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": store.instance.t("buttons.previous") }, index.h(ChevronIcon, { key: 'd011c12f24630ac1c2082f0e121dfc1ddf83cac9' })), index.h("button", { key: 'c1f194134f8f6d3e72c159758560b80ca9c88ab6', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": store.instance.t("buttons.next") }, index.h(ChevronIcon, { key: '06c3a6d24d6face1422aebbe114307db0009fb1c' })))))), this.showBullets() && (index.h("div", { key: 'fc80bfc98162372377b409e9dd21e1f2e297403e', class: "bullets" }, this.renderBullets()))));
564
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": store.instance.t("buttons.previous") }, index.h(ChevronIcon, { key: '26ae32a753c9d932cf9c2123ea10584f24c8e953' })), index.h("button", { key: 'e63bcc69a7302ee13da94f9b17f5f7c7c76d3615', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": store.instance.t("buttons.next") }, index.h(ChevronIcon, { key: 'dde6c8dec93b6fac3938d11f3542659eec1232b9' })))))), this.showBullets() && (index.h("div", { key: '1fe11a8336061aff451962e99adb59654de0e6e2', class: "bullets" }, this.renderBullets()))));
563
565
  }
564
566
  get el() { return index.getElement(this); }
565
567
  static get watchers() { return {
@@ -1877,7 +1879,7 @@ const VviinnProductCard = class {
1877
1879
  animated: this.isTransitioning,
1878
1880
  "product-card--source": this.isSourceProduct,
1879
1881
  "set-mode": this.isSetMode,
1880
- }, exportparts: search_store.productCardParts, "data-id": this.productId }, openProductLink.renderExternalCSS(this.cssUrl), index.h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (index.h(index.Fragment, null, index.h("vviinn-skeleton", { height: 40 }), index.h("vviinn-skeleton", { height: 20, halfWidth: true }), index.h("vviinn-skeleton", { height: 40 }))) : (index.h(index.Fragment, null, index.h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, index.h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (index.h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (index.h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (index.h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), index.h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","), "content")))), index.h("div", { class: {
1882
+ }, exportparts: search_store.productCardParts, "data-id": this.productId }, openProductLink.renderExternalCSS(this.cssUrl), index.h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (index.h(index.Fragment, null, index.h("vviinn-skeleton", { height: 40 }), index.h("vviinn-skeleton", { height: 20, halfWidth: true }), index.h("vviinn-skeleton", { height: 40 }))) : (index.h(index.Fragment, null, index.h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, index.h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (index.h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (index.h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (index.h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), index.h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(index$2.CUSTOM_LABELS_DELIMITER), "content")))), index.h("div", { class: {
1881
1883
  "basket-button-container": true,
1882
1884
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
1883
1885
  }, part: "basket-button-container" }, index.h("button", { class: {
@@ -1925,7 +1927,7 @@ const VviinnProductCard = class {
1925
1927
  animationInterval: generateRandomNumber(800, 1400),
1926
1928
  productData: this.productData,
1927
1929
  });
1928
- }, "aria-label": store.instance.t("a11y.findSimilarProducts") }, index.h("div", null, index.h("slot", { name: "vviinn-update-button-icon" }, index.h(UpdateIcon, { width: 14, height: 14 }))))), index.h("div", { class: "product-card-actions", part: "product-card-actions" }, index.h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(","), "image")), this.showFooterArrow && index.h("div", { class: "footer-arrow" })));
1930
+ }, "aria-label": store.instance.t("a11y.findSimilarProducts") }, index.h("div", null, index.h("slot", { name: "vviinn-update-button-icon" }, index.h(UpdateIcon, { width: 14, height: 14 }))))), index.h("div", { class: "product-card-actions", part: "product-card-actions" }, index.h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(index$2.CUSTOM_LABELS_DELIMITER), "image")), this.showFooterArrow && index.h("div", { class: "footer-arrow" })));
1929
1931
  }
1930
1932
  get el() { return index.getElement(this); }
1931
1933
  static get watchers() { return {
@@ -4,7 +4,7 @@ var index = require('./index-OrE9ITel.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
5
  var cropperUtils = require('./cropperUtils-DCDOLeBS.js');
6
6
  var swiperElement = require('./swiper-element-DjtzojCR.js');
7
- var search_store = require('./search.store-DONgsZoB.js');
7
+ var search_store = require('./search.store-d2QXWz7H.js');
8
8
  var SecondaryActionIcon = require('./SecondaryActionIcon-BZg-ADIW.js');
9
9
  var index$1 = require('./index-CzqCGUTk.js');
10
10
  var store = require('./store-jPZ4ROqV.js');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-OrE9ITel.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
- var search_store = require('./search.store-DONgsZoB.js');
5
+ var search_store = require('./search.store-d2QXWz7H.js');
6
6
  var customizedSlots = require('./customized-slots-CqOPLiML.js');
7
7
  var store = require('./store-jPZ4ROqV.js');
8
8
  var index$1 = require('./index-CzqCGUTk.js');
@@ -1,4 +1,4 @@
1
- import { Host, h, Fragment, } from "@stencil/core";
1
+ import { Host, h, Fragment, forceUpdate, } from "@stencil/core";
2
2
  import { chunksOf } from "fp-ts/lib/Array";
3
3
  import { pipe } from "fp-ts/lib/function";
4
4
  import i18next from "i18next";
@@ -159,6 +159,8 @@ export class VviinnCarousel {
159
159
  };
160
160
  contentNode.addEventListener("scroll", this.scrollHandler);
161
161
  }
162
+ // Re-render to recalculate button states with actual DOM dimensions
163
+ forceUpdate(this);
162
164
  }
163
165
  recommendationsWatcher() {
164
166
  if (this.isSetMode) {
@@ -434,10 +436,10 @@ export class VviinnCarousel {
434
436
  }
435
437
  render() {
436
438
  var _a, _b, _c, _d, _e;
437
- return (h(Host, { key: '150d87472b3f2cbfb1c1bcd8bca09d9adbb097a0', class: this.getClassMap() }, h("div", { key: '6fba890b59ae1a4127656575171f41d0cdec5c3d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'c1d5dd3ba4c155ad8f08b1677a9a643850c1e4c3', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: '15042b233cf87753ec9380ecc6fd468e8960317b', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '583c28ab0ad1aea77f3dd5fd8f457c4b0360563f' }, h("button", { key: '66c52cd02f1a243558c5e042a0543ed63cffac32', class: {
439
+ return (h(Host, { key: 'e11e8cfb234d70f22b8ea47021726140d5247253', class: this.getClassMap() }, h("div", { key: '5bc27834ea27a3612f35aa5b715d24c38900c654', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: '3d21ba5ad6d7a953b6b17452235c09f155b0b425', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: 'e36046bb907dd55167ce8decd2a3d2d687158a6a', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '15e0e414cc95a022db4c6a65b652012b0a9a52f2' }, h("button", { key: 'dcd7427334ffbd97857866ec3b07b8d845eb9361', class: {
438
440
  prev: true,
439
441
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
440
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": i18next.t("buttons.previous") }, h(ChevronIcon, { key: 'd011c12f24630ac1c2082f0e121dfc1ddf83cac9' })), h("button", { key: 'c1f194134f8f6d3e72c159758560b80ca9c88ab6', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": i18next.t("buttons.next") }, h(ChevronIcon, { key: '06c3a6d24d6face1422aebbe114307db0009fb1c' })))))), this.showBullets() && (h("div", { key: 'fc80bfc98162372377b409e9dd21e1f2e297403e', class: "bullets" }, this.renderBullets()))));
442
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": i18next.t("buttons.previous") }, h(ChevronIcon, { key: '26ae32a753c9d932cf9c2123ea10584f24c8e953' })), h("button", { key: 'e63bcc69a7302ee13da94f9b17f5f7c7c76d3615', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": i18next.t("buttons.next") }, h(ChevronIcon, { key: 'dde6c8dec93b6fac3938d11f3542659eec1232b9' })))))), this.showBullets() && (h("div", { key: '1fe11a8336061aff451962e99adb59654de0e6e2', class: "bullets" }, this.renderBullets()))));
441
443
  }
442
444
  static get is() { return "vviinn-carousel"; }
443
445
  static get originalStyleUrls() {
@@ -6,6 +6,7 @@ import i18next from "i18next";
6
6
  import { setupIntersectionObserver, } from "../../dom";
7
7
  import { Linked, Price, parseBasePrice, renderCustomLabels, ContentCardContent, ListCardContent, renderProductCardImage, } from "./render-helpers";
8
8
  import { HOVER_DELAY_MS, shouldShowMultipleImages, getCurrentImage, createHoverTimerManager, } from "./helpers";
9
+ import { CUSTOM_LABELS_DELIMITER } from "../../recommendation";
9
10
  import styles from "./vviinn-product-card.css";
10
11
  import { campaignTypeNames } from "../../campaign/Campaign";
11
12
  import { slotChangeListener } from "../customized-slots";
@@ -337,7 +338,7 @@ export class VviinnProductCard {
337
338
  animated: this.isTransitioning,
338
339
  "product-card--source": this.isSourceProduct,
339
340
  "set-mode": this.isSetMode,
340
- }, exportparts: productCardParts, "data-id": this.productId }, renderExternalCSS(this.cssUrl), h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (h(Fragment, null, h("vviinn-skeleton", { height: 40 }), h("vviinn-skeleton", { height: 20, halfWidth: true }), h("vviinn-skeleton", { height: 40 }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","), "content")))), h("div", { class: {
341
+ }, exportparts: productCardParts, "data-id": this.productId }, renderExternalCSS(this.cssUrl), h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (h(Fragment, null, h("vviinn-skeleton", { height: 40 }), h("vviinn-skeleton", { height: 20, halfWidth: true }), h("vviinn-skeleton", { height: 40 }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(CUSTOM_LABELS_DELIMITER), "content")))), h("div", { class: {
341
342
  "basket-button-container": true,
342
343
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
343
344
  }, part: "basket-button-container" }, h("button", { class: {
@@ -385,7 +386,7 @@ export class VviinnProductCard {
385
386
  animationInterval: generateRandomNumber(800, 1400),
386
387
  productData: this.productData,
387
388
  });
388
- }, "aria-label": i18next.t("a11y.findSimilarProducts") }, h("div", null, h("slot", { name: "vviinn-update-button-icon" }, h(UpdateIcon, { width: 14, height: 14 }))))), h("div", { class: "product-card-actions", part: "product-card-actions" }, h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(","), "image")), this.showFooterArrow && h("div", { class: "footer-arrow" })));
389
+ }, "aria-label": i18next.t("a11y.findSimilarProducts") }, h("div", null, h("slot", { name: "vviinn-update-button-icon" }, h(UpdateIcon, { width: 14, height: 14 }))))), h("div", { class: "product-card-actions", part: "product-card-actions" }, h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(CUSTOM_LABELS_DELIMITER), "image")), this.showFooterArrow && h("div", { class: "footer-arrow" })));
389
390
  }
390
391
  static get is() { return "vviinn-product-card"; }
391
392
  static get encapsulation() { return "shadow"; }
@@ -11,6 +11,7 @@ export const getRecommendationsBody = ({ productId, campaigns, color, excluded,
11
11
  const staticFilters = Object.assign(Object.assign({}, addIfNotEmpty("color", color)), addIfNotEmpty("excluded", parseStringToExcluded(excluded)));
12
12
  return Object.assign(Object.assign(Object.assign({ productId }, addIfNotEmpty("dynamicFilters", dynamicFilters)), addIfNotEmpty("campaigns", parseCampaigns(campaigns))), addIfNotEmpty("staticFilters", staticFilters));
13
13
  };
14
+ export const CUSTOM_LABELS_DELIMITER = "|";
14
15
  export const getCustomLabels = (recommendation) => {
15
16
  const { custom_label_0, custom_label_1, custom_label_2, custom_label_3, custom_label_4, } = recommendation;
16
17
  return [
@@ -21,5 +22,5 @@ export const getCustomLabels = (recommendation) => {
21
22
  custom_label_4,
22
23
  ]
23
24
  .map((label) => label !== null && label !== void 0 ? label : "")
24
- .join(",");
25
+ .join(CUSTOM_LABELS_DELIMITER);
25
26
  };
@@ -1,5 +1,5 @@
1
1
  import { h } from './index-C5qrIvmr.js';
2
- import { a as addIfNotEmpty, t as parseStringToExcluded, w as isValueMatch, x as isIntervalMatch, y as valueToString, z as extractFilterValue } from './search.store-D6GBV7af.js';
2
+ import { a as addIfNotEmpty, t as parseStringToExcluded, w as isValueMatch, x as isIntervalMatch, y as valueToString, z as extractFilterValue } from './search.store-KDs2rpoU.js';
3
3
  import { i as instance } from './store-BJxQCbNV.js';
4
4
 
5
5
  const PlusIcon = () => (h("svg", { width: "32", height: "32", viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg", class: "plus-icon", "aria-hidden": "true" },
@@ -31,6 +31,7 @@ const getRecommendationsBody = ({ productId, campaigns, color, excluded, dynamic
31
31
  const staticFilters = Object.assign(Object.assign({}, addIfNotEmpty("color", color)), addIfNotEmpty("excluded", parseStringToExcluded(excluded)));
32
32
  return Object.assign(Object.assign(Object.assign({ productId }, addIfNotEmpty("dynamicFilters", dynamicFilters)), addIfNotEmpty("campaigns", parseCampaigns(campaigns))), addIfNotEmpty("staticFilters", staticFilters));
33
33
  };
34
+ const CUSTOM_LABELS_DELIMITER = "|";
34
35
  const getCustomLabels = (recommendation) => {
35
36
  const { custom_label_0, custom_label_1, custom_label_2, custom_label_3, custom_label_4, } = recommendation;
36
37
  return [
@@ -41,7 +42,7 @@ const getCustomLabels = (recommendation) => {
41
42
  custom_label_4,
42
43
  ]
43
44
  .map((label) => label !== null && label !== void 0 ? label : "")
44
- .join(",");
45
+ .join(CUSTOM_LABELS_DELIMITER);
45
46
  };
46
47
 
47
48
  /**
@@ -366,4 +367,4 @@ const createImageSearchEvent = createTrackingEvent({
366
367
  typ: SEARCH_EVENT_TYPE,
367
368
  });
368
369
 
369
- export { CONTENT_GROUP_CSS_CLASS as C, DEFAULT_COLUMNS_NUMBER as D, FilterIconClose as F, PlusIcon as P, RESULTS_CALCULATED_COLUMNS_CSS_VAR as R, SET_MODE_IMAGE_WIDTH_CSS_VAR as S, createFilterEvent as a, createAddToBasketEvent as b, createWidgetEvent as c, createAddToWishlistEvent as d, createResultEventByType as e, createProductEventByType as f, getRemoveFilterAriaLabel as g, getCustomLabels as h, getIntervalLabel as i, triggerRemoveIntervalFilter as j, announceToScreenReader as k, isSubFilterActive as l, RenderFilterButton as m, createImageSearchEvent as n, CAROUSEL_IMAGE_WIDTH_CSS_VAR as o, CAROUSEL_CONTENT_WIDTH_CSS_VAR as p, SCROLL_POSITION_TOLERANCE as q, triggerResetFilters as r, syncRequestFilters as s, triggerFilter as t, isPriceFilter as u, v4 as v, getRecommendationsBody as w };
370
+ export { CONTENT_GROUP_CSS_CLASS as C, DEFAULT_COLUMNS_NUMBER as D, FilterIconClose as F, PlusIcon as P, RESULTS_CALCULATED_COLUMNS_CSS_VAR as R, SET_MODE_IMAGE_WIDTH_CSS_VAR as S, createFilterEvent as a, createAddToBasketEvent as b, createWidgetEvent as c, createAddToWishlistEvent as d, createResultEventByType as e, createProductEventByType as f, getRemoveFilterAriaLabel as g, getCustomLabels as h, getIntervalLabel as i, triggerRemoveIntervalFilter as j, announceToScreenReader as k, isSubFilterActive as l, RenderFilterButton as m, createImageSearchEvent as n, CAROUSEL_IMAGE_WIDTH_CSS_VAR as o, CAROUSEL_CONTENT_WIDTH_CSS_VAR as p, SCROLL_POSITION_TOLERANCE as q, triggerResetFilters as r, syncRequestFilters as s, triggerFilter as t, isPriceFilter as u, v4 as v, CUSTOM_LABELS_DELIMITER as w, getRecommendationsBody as x };
@@ -8784,7 +8784,7 @@ const encodeToBase64UTF8 = (str) => {
8784
8784
  return btoa(String.fromCharCode.apply(null, utf8Array));
8785
8785
  };
8786
8786
 
8787
- const version = "2.212.2";
8787
+ const version = "2.212.4";
8788
8788
 
8789
8789
  const appStateGlobalDefaults = {
8790
8790
  excluded: null,
@@ -1,6 +1,6 @@
1
1
  import { h, r as registerInstance, H as Host, c as createEvent, g as getElement, F as Fragment } from './index-C5qrIvmr.js';
2
2
  import { i as instance } from './store-BJxQCbNV.js';
3
- import { l as getAcceptableFileFormatsForDisplay, c as campaignTypeNames, a as addIfNotEmpty, n as modalParts, o as searchState, p as carouselParts, q as productCardParts, r as recommendationsParts, u as useSearchStore, v as version } from './search.store-D6GBV7af.js';
3
+ import { l as getAcceptableFileFormatsForDisplay, c as campaignTypeNames, a as addIfNotEmpty, n as modalParts, o as searchState, p as carouselParts, q as productCardParts, r as recommendationsParts, u as useSearchStore, v as version } from './search.store-KDs2rpoU.js';
4
4
  import { s as slotChangeListener } from './customized-slots-5-oNsq_M.js';
5
5
  import { S as SecondaryActionIcon } from './SecondaryActionIcon-Co8n0aty.js';
6
6
  import { a as SIDEBAR_ANIMATION_DURATION, P as PRODUCT_CARD_IMAGE_WIDTH, D as DISCOVERY_WIDGET_IMAGE_RESOLUTION_WIDTH, L as LOADING_CLASS_DELAY, b as addEventListenersWithSignal } from './index-DlCdKcyY.js';
@@ -1,8 +1,8 @@
1
1
  import { h, r as registerInstance, c as createEvent, H as Host, g as getElement, F as Fragment } from './index-C5qrIvmr.js';
2
2
  import { _ as _functionExports, E as EitherExports, f as fold, b as fromImage, a as divideOnSized, e as isLeft, m as match, O as OptionExports } from './Rectangle-dmgo4KMB.js';
3
- import { A as toFile, g as makeUploadFileRequest, B as getImageSizes, v as version, c as campaignTypeNames, a as addIfNotEmpty, f as makeVisualSearchRequest, u as useSearchStore, C as checkImageType, j as getAcceptableFileFormats, s as setTextSearchQuery, D as resetStore, m as makeTextSearchRequest, E as makeProductListingPageRequest, F as productCardsGridPart, q as productCardParts, G as listCardParts, H as contentCardParts, I as selectedFiltersParts, J as suggestionsParts, K as checkDeviceType, t as parseStringToExcluded, L as filtersParts, M as extendedFiltersParts, n as modalParts, d as searchBarParts, N as searchWidgetFilterParts, O as searchWidgetButtonParts } from './search.store-D6GBV7af.js';
3
+ import { A as toFile, g as makeUploadFileRequest, B as getImageSizes, v as version, c as campaignTypeNames, a as addIfNotEmpty, f as makeVisualSearchRequest, u as useSearchStore, C as checkImageType, j as getAcceptableFileFormats, s as setTextSearchQuery, D as resetStore, m as makeTextSearchRequest, E as makeProductListingPageRequest, F as productCardsGridPart, q as productCardParts, G as listCardParts, H as contentCardParts, I as selectedFiltersParts, J as suggestionsParts, K as checkDeviceType, t as parseStringToExcluded, L as filtersParts, M as extendedFiltersParts, n as modalParts, d as searchBarParts, N as searchWidgetFilterParts, O as searchWidgetButtonParts } from './search.store-KDs2rpoU.js';
4
4
  import { s as slotChangeListener, p as productCardSlotNames, v as vprIconSlotName, S as SlotSkeleton } from './customized-slots-5-oNsq_M.js';
5
- import { g as getRemoveFilterAriaLabel, F as FilterIconClose, P as PlusIcon, R as RESULTS_CALCULATED_COLUMNS_CSS_VAR, c as createWidgetEvent, a as createFilterEvent, v as v4, b as createAddToBasketEvent, d as createAddToWishlistEvent, e as createResultEventByType, f as createProductEventByType, h as getCustomLabels, t as triggerFilter, i as getIntervalLabel, j as triggerRemoveIntervalFilter, k as announceToScreenReader, s as syncRequestFilters, l as isSubFilterActive, m as RenderFilterButton, n as createImageSearchEvent } from './index-BMIjtG2f.js';
5
+ import { g as getRemoveFilterAriaLabel, F as FilterIconClose, P as PlusIcon, R as RESULTS_CALCULATED_COLUMNS_CSS_VAR, c as createWidgetEvent, a as createFilterEvent, v as v4, b as createAddToBasketEvent, d as createAddToWishlistEvent, e as createResultEventByType, f as createProductEventByType, h as getCustomLabels, t as triggerFilter, i as getIntervalLabel, j as triggerRemoveIntervalFilter, k as announceToScreenReader, s as syncRequestFilters, l as isSubFilterActive, m as RenderFilterButton, n as createImageSearchEvent } from './index-0PZup3PH.js';
6
6
  import { i as instance, t as trackEvent, a as isTrackingEnabled, d as defaultConfig } from './store-BJxQCbNV.js';
7
7
  import { M as MIN_SEARCH_AREA_SIZE, S as SUPPORTED_ASPECT_RATIO, a as MIN_IMAGE_SIDE_FOR_CROPPER, C as Cropper, c as cropperOptions, g as getCropBoxData, i as isCropBoxChangeMinimal, D as DEFAULT_IMAGE_SIZE } from './cropperUtils-CkB6bG3L.js';
8
8
  import { b as addEventListenersWithSignal, R as RESULTS_WIDGET_IMAGE_RESOLUTION_WIDTH, f as findSlotElements, g as getSlotNames, c as SCROLL_TO_DISCOVERY_DELAY, s as setElementInteractivity, S as SEARCH_WIDGET_IMAGE_RESOLUTION_WIDTH } from './index-DlCdKcyY.js';
@@ -1,8 +1,8 @@
1
- import { h, r as registerInstance, c as createEvent, F as Fragment, H as Host, g as getElement } from './index-C5qrIvmr.js';
2
- import { c as campaignTypeNames, a as addIfNotEmpty, _ as _ArrayExports, P as energyLabelParts, u as useSearchStore, M as extendedFiltersParts, L as filtersParts, Q as imageParts, R as isMobile, H as contentCardParts, G as listCardParts, q as productCardParts, S as priceRangeParts, T as fromString, U as fold, v as version } from './search.store-D6GBV7af.js';
1
+ import { h, r as registerInstance, c as createEvent, f as forceUpdate, F as Fragment, H as Host, g as getElement } from './index-C5qrIvmr.js';
2
+ import { c as campaignTypeNames, a as addIfNotEmpty, _ as _ArrayExports, P as energyLabelParts, u as useSearchStore, M as extendedFiltersParts, L as filtersParts, Q as imageParts, R as isMobile, H as contentCardParts, G as listCardParts, q as productCardParts, S as priceRangeParts, T as fromString, U as fold, v as version } from './search.store-KDs2rpoU.js';
3
3
  import { X as has, Y as tuple, _ as _functionExports, g as requireSemigroup, O as OptionExports, v as pipe$1, N as chainW, Z as makeRequest, L as fromEither, $ as resolveApiPath, a0 as createInitPostRequest, a1 as Apply, a2 as TaskEitherExports, E as EitherExports } from './Rectangle-dmgo4KMB.js';
4
4
  import { i as instance, d as defaultConfig, t as trackEvent, a as isTrackingEnabled } from './store-BJxQCbNV.js';
5
- import { S as SET_MODE_IMAGE_WIDTH_CSS_VAR, C as CONTENT_GROUP_CSS_CLASS, o as CAROUSEL_IMAGE_WIDTH_CSS_VAR, p as CAROUSEL_CONTENT_WIDTH_CSS_VAR, R as RESULTS_CALCULATED_COLUMNS_CSS_VAR, D as DEFAULT_COLUMNS_NUMBER, h as getCustomLabels, q as SCROLL_POSITION_TOLERANCE, r as triggerResetFilters, t as triggerFilter, k as announceToScreenReader, i as getIntervalLabel, u as isPriceFilter, l as isSubFilterActive, m as RenderFilterButton, s as syncRequestFilters, P as PlusIcon, v as v4, c as createWidgetEvent, e as createResultEventByType, b as createAddToBasketEvent, d as createAddToWishlistEvent, f as createProductEventByType, w as getRecommendationsBody } from './index-BMIjtG2f.js';
5
+ import { S as SET_MODE_IMAGE_WIDTH_CSS_VAR, C as CONTENT_GROUP_CSS_CLASS, o as CAROUSEL_IMAGE_WIDTH_CSS_VAR, p as CAROUSEL_CONTENT_WIDTH_CSS_VAR, R as RESULTS_CALCULATED_COLUMNS_CSS_VAR, D as DEFAULT_COLUMNS_NUMBER, h as getCustomLabels, q as SCROLL_POSITION_TOLERANCE, r as triggerResetFilters, t as triggerFilter, k as announceToScreenReader, i as getIntervalLabel, u as isPriceFilter, l as isSubFilterActive, m as RenderFilterButton, s as syncRequestFilters, P as PlusIcon, w as CUSTOM_LABELS_DELIMITER, v as v4, c as createWidgetEvent, e as createResultEventByType, b as createAddToBasketEvent, d as createAddToWishlistEvent, f as createProductEventByType, x as getRecommendationsBody } from './index-0PZup3PH.js';
6
6
  import { P as PRODUCT_CARD_IMAGE_WIDTH, D as DISCOVERY_WIDGET_IMAGE_RESOLUTION_WIDTH, b as addEventListenersWithSignal, i as isElementInSelector, d as PRODUCT_CARD_IMAGE_RESOLUTION_WIDTH } from './index-DlCdKcyY.js';
7
7
  import { s as slotChangeListener, S as SlotSkeleton } from './customized-slots-5-oNsq_M.js';
8
8
  import { i as initializeLocale } from './index-T4QhG8cc.js';
@@ -279,6 +279,8 @@ const VviinnCarousel = class {
279
279
  };
280
280
  contentNode.addEventListener("scroll", this.scrollHandler);
281
281
  }
282
+ // Re-render to recalculate button states with actual DOM dimensions
283
+ forceUpdate(this);
282
284
  }
283
285
  recommendationsWatcher() {
284
286
  if (this.isSetMode) {
@@ -554,10 +556,10 @@ const VviinnCarousel = class {
554
556
  }
555
557
  render() {
556
558
  var _a, _b, _c, _d, _e;
557
- return (h(Host, { key: '150d87472b3f2cbfb1c1bcd8bca09d9adbb097a0', class: this.getClassMap() }, h("div", { key: '6fba890b59ae1a4127656575171f41d0cdec5c3d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'c1d5dd3ba4c155ad8f08b1677a9a643850c1e4c3', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: '15042b233cf87753ec9380ecc6fd468e8960317b', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '583c28ab0ad1aea77f3dd5fd8f457c4b0360563f' }, h("button", { key: '66c52cd02f1a243558c5e042a0543ed63cffac32', class: {
559
+ return (h(Host, { key: 'e11e8cfb234d70f22b8ea47021726140d5247253', class: this.getClassMap() }, h("div", { key: '5bc27834ea27a3612f35aa5b715d24c38900c654', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: '3d21ba5ad6d7a953b6b17452235c09f155b0b425', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: (_b = (_a = this.sourceProduct.image) === null || _a === void 0 ? void 0 : _a.thumbnail) !== null && _b !== void 0 ? _b : (_c = this.sourceProduct.image) === null || _c === void 0 ? void 0 : _c.original, images: this.sourceProduct.images, showMultipleImages: this.showMultipleImages, disableMobileSwiper: true, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_d = this.sourceProduct.basePrice) === null || _d === void 0 ? void 0 : _d.actual, baseSalePrice: (_e = this.sourceProduct.basePrice) === null || _e === void 0 ? void 0 : _e.sale, addPriceContainer: this.addPriceContainer, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currencySign: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, numberLocale: this.numberLocale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: 'e36046bb907dd55167ce8decd2a3d2d687158a6a', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '15e0e414cc95a022db4c6a65b652012b0a9a52f2' }, h("button", { key: 'dcd7427334ffbd97857866ec3b07b8d845eb9361', class: {
558
560
  prev: true,
559
561
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
560
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": instance.t("buttons.previous") }, h(ChevronIcon, { key: 'd011c12f24630ac1c2082f0e121dfc1ddf83cac9' })), h("button", { key: 'c1f194134f8f6d3e72c159758560b80ca9c88ab6', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": instance.t("buttons.next") }, h(ChevronIcon, { key: '06c3a6d24d6face1422aebbe114307db0009fb1c' })))))), this.showBullets() && (h("div", { key: 'fc80bfc98162372377b409e9dd21e1f2e297403e', class: "bullets" }, this.renderBullets()))));
562
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": instance.t("buttons.previous") }, h(ChevronIcon, { key: '26ae32a753c9d932cf9c2123ea10584f24c8e953' })), h("button", { key: 'e63bcc69a7302ee13da94f9b17f5f7c7c76d3615', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": instance.t("buttons.next") }, h(ChevronIcon, { key: 'dde6c8dec93b6fac3938d11f3542659eec1232b9' })))))), this.showBullets() && (h("div", { key: '1fe11a8336061aff451962e99adb59654de0e6e2', class: "bullets" }, this.renderBullets()))));
561
563
  }
562
564
  get el() { return getElement(this); }
563
565
  static get watchers() { return {
@@ -1875,7 +1877,7 @@ const VviinnProductCard = class {
1875
1877
  animated: this.isTransitioning,
1876
1878
  "product-card--source": this.isSourceProduct,
1877
1879
  "set-mode": this.isSetMode,
1878
- }, exportparts: productCardParts, "data-id": this.productId }, renderExternalCSS(this.cssUrl), h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (h(Fragment, null, h("vviinn-skeleton", { height: 40 }), h("vviinn-skeleton", { height: 20, halfWidth: true }), h("vviinn-skeleton", { height: 40 }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","), "content")))), h("div", { class: {
1880
+ }, exportparts: productCardParts, "data-id": this.productId }, renderExternalCSS(this.cssUrl), h("div", { class: "content-container", part: "content-container" }, this.showSkeleton() ? (h(Fragment, null, h("vviinn-skeleton", { height: 40 }), h("vviinn-skeleton", { height: 20, halfWidth: true }), h("vviinn-skeleton", { height: 40 }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink", tabindex: 0 }, h("span", { class: "title", part: "title" }, this.productTitle)), ((_a = this.brand) === null || _a === void 0 ? void 0 : _a.length) > 0 && (h("span", { class: "brand", part: "brand" }, this.brand)), ((_b = this.productType) === null || _b === void 0 ? void 0 : _b.length) > 0 && (h("span", { class: "product-type", part: "product-type" }, this.productType)), ((_c = this === null || this === void 0 ? void 0 : this.energyCertifications) !== null && _c !== void 0 ? _c : []).map((energyCertification) => (h("vviinn-energy-label", { classIconUrls: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classIconUrls, classDataSheetUrl: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classDataSheetUrl, productType: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.productType, certificationClass: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.certificationClass, classRange: energyCertification === null || energyCertification === void 0 ? void 0 : energyCertification.classRange }))), h(Price, { prefix: this.pricePrefix, currency: this.effectiveCurrencySign, numberLocale: this.effectiveNumberLocale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(CUSTOM_LABELS_DELIMITER), "content")))), h("div", { class: {
1879
1881
  "basket-button-container": true,
1880
1882
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
1881
1883
  }, part: "basket-button-container" }, h("button", { class: {
@@ -1923,7 +1925,7 @@ const VviinnProductCard = class {
1923
1925
  animationInterval: generateRandomNumber(800, 1400),
1924
1926
  productData: this.productData,
1925
1927
  });
1926
- }, "aria-label": instance.t("a11y.findSimilarProducts") }, h("div", null, h("slot", { name: "vviinn-update-button-icon" }, h(UpdateIcon, { width: 14, height: 14 }))))), h("div", { class: "product-card-actions", part: "product-card-actions" }, h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(","), "image")), this.showFooterArrow && h("div", { class: "footer-arrow" })));
1928
+ }, "aria-label": instance.t("a11y.findSimilarProducts") }, h("div", null, h("slot", { name: "vviinn-update-button-icon" }, h(UpdateIcon, { width: 14, height: 14 }))))), h("div", { class: "product-card-actions", part: "product-card-actions" }, h("slot", { name: "vviinn-product-card-actions" })), renderCustomLabels(this.customLabels.split(CUSTOM_LABELS_DELIMITER), "image")), this.showFooterArrow && h("div", { class: "footer-arrow" })));
1927
1929
  }
1928
1930
  get el() { return getElement(this); }
1929
1931
  static get watchers() { return {
@@ -2,7 +2,7 @@ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement
2
2
  import { a as divideOnSized, E as EitherExports } from './Rectangle-dmgo4KMB.js';
3
3
  import { C as Cropper, c as cropperOptions, g as getCropBoxData, i as isCropBoxChangeMinimal } from './cropperUtils-CkB6bG3L.js';
4
4
  import { g as getSwiperStyles, c as configureSwiperElement, r as register, e as extractSlideIndex, s as setupIntersectionObserver } from './swiper-element-Er2KrWw1.js';
5
- import { i as isDesktop$1, e as shopTheLookState, f as makeVisualSearchRequest, g as makeUploadFileRequest, h as imageFromFileTask, j as getAcceptableFileFormats, k as shopTheLookParts } from './search.store-D6GBV7af.js';
5
+ import { i as isDesktop$1, e as shopTheLookState, f as makeVisualSearchRequest, g as makeUploadFileRequest, h as imageFromFileTask, j as getAcceptableFileFormats, k as shopTheLookParts } from './search.store-KDs2rpoU.js';
6
6
  import { S as SecondaryActionIcon } from './SecondaryActionIcon-Co8n0aty.js';
7
7
  import { i as initializeLocale } from './index-T4QhG8cc.js';
8
8
  import { d as defaultConfig } from './store-BJxQCbNV.js';
@@ -1,6 +1,6 @@
1
1
  import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-C5qrIvmr.js';
2
2
  import { _ as _functionExports, f as fold } from './Rectangle-dmgo4KMB.js';
3
- import { v as version, c as campaignTypeNames, a as addIfNotEmpty, s as setTextSearchQuery, m as makeTextSearchRequest, b as makeAutoSuggestRequest, u as useSearchStore, d as searchBarParts } from './search.store-D6GBV7af.js';
3
+ import { v as version, c as campaignTypeNames, a as addIfNotEmpty, s as setTextSearchQuery, m as makeTextSearchRequest, b as makeAutoSuggestRequest, u as useSearchStore, d as searchBarParts } from './search.store-KDs2rpoU.js';
4
4
  import { s as slotChangeListener } from './customized-slots-5-oNsq_M.js';
5
5
  import { i as instance, d as defaultConfig } from './store-BJxQCbNV.js';
6
6
  import { i as initializeLocale } from './index-T4QhG8cc.js';
@@ -8,5 +8,6 @@ type GetRecommendationsBodyProps = {
8
8
  dynamicFilters?: RequestDynamicFilterItem[];
9
9
  };
10
10
  export declare const getRecommendationsBody: ({ productId, campaigns, color, excluded, dynamicFilters, }: GetRecommendationsBodyProps) => SimilarProductsRequest | CrossSellingRequest;
11
+ export declare const CUSTOM_LABELS_DELIMITER = "|";
11
12
  export declare const getCustomLabels: (recommendation: Recommendation) => string;
12
13
  export {};