vviinn-widgets 2.197.0 → 2.198.0

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 (46) hide show
  1. package/dist/cjs/{index-BrWTzRc7.js → index-CF8yXqXJ.js} +4 -0
  2. package/dist/cjs/{package-BL578Fil.js → package-tfkS0Qj1.js} +1 -1
  3. package/dist/cjs/vviinn-button_6.cjs.entry.js +3 -3
  4. package/dist/cjs/vviinn-camera_12.cjs.entry.js +2 -2
  5. package/dist/cjs/vviinn-carousel_10.cjs.entry.js +9 -9
  6. package/dist/cjs/vviinn-detected-object_2.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 +6 -4
  9. package/dist/collection/components/vviinn-cropper/vviinn-detected-object/vviinn-detected-object.css +3 -1
  10. package/dist/collection/components/vviinn-product-card/render-helpers.js +2 -2
  11. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +2 -2
  12. package/dist/collection/components/vviinn-vpr-button/vviinn-vpr-button.js +4 -2
  13. package/dist/collection/cssParts/index.js +2 -0
  14. package/dist/collection/cssParts/product.js +2 -0
  15. package/dist/esm/{index-CtuL3RiP.js → index-DyZfzSpJ.js} +4 -0
  16. package/dist/esm/{package-DZVuE7LY.js → package-DiWvyInL.js} +1 -1
  17. package/dist/esm/vviinn-button_6.entry.js +3 -3
  18. package/dist/esm/vviinn-camera_12.entry.js +2 -2
  19. package/dist/esm/vviinn-carousel_10.entry.js +9 -9
  20. package/dist/esm/vviinn-detected-object_2.entry.js +1 -1
  21. package/dist/esm/vviinn-text-search.entry.js +1 -1
  22. package/dist/types/components/vviinn-carousel/vviinn-carousel.d.ts +3 -1
  23. package/dist/types/components/vviinn-product-card/render-helpers.d.ts +1 -1
  24. package/dist/types/components/vviinn-vpr-button/vviinn-vpr-button.d.ts +3 -1
  25. package/dist/types/components/vviinn-vpr-widget/vviinn-vpr-widget.d.ts +3 -1
  26. package/dist/vviinn-widgets/{p-f3b8af7d.entry.js → p-6394a344.entry.js} +1 -1
  27. package/dist/vviinn-widgets/{p-60672b4b.entry.js → p-7708fb5e.entry.js} +1 -1
  28. package/dist/vviinn-widgets/p-89a5a04e.entry.js +1 -0
  29. package/dist/vviinn-widgets/{p-c6fad937.entry.js → p-937360db.entry.js} +1 -1
  30. package/dist/vviinn-widgets/{p-DZVuE7LY.js → p-DiWvyInL.js} +1 -1
  31. package/dist/vviinn-widgets/{p-CtuL3RiP.js → p-DyZfzSpJ.js} +1 -1
  32. package/dist/vviinn-widgets/{p-6c573566.entry.js → p-a11e1d2f.entry.js} +1 -1
  33. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  34. package/package.json +1 -1
  35. package/www/build/{p-f3b8af7d.entry.js → p-6394a344.entry.js} +1 -1
  36. package/www/build/{p-b4b6c1f6.js → p-70b5ea54.js} +1 -1
  37. package/www/build/{p-60672b4b.entry.js → p-7708fb5e.entry.js} +1 -1
  38. package/www/build/p-89a5a04e.entry.js +1 -0
  39. package/www/build/{p-c6fad937.entry.js → p-937360db.entry.js} +1 -1
  40. package/www/build/{p-DZVuE7LY.js → p-DiWvyInL.js} +1 -1
  41. package/www/build/{p-CtuL3RiP.js → p-DyZfzSpJ.js} +1 -1
  42. package/www/build/{p-6c573566.entry.js → p-a11e1d2f.entry.js} +1 -1
  43. package/www/build/vviinn-widgets.esm.js +1 -1
  44. package/www/index.html +1 -1
  45. package/dist/vviinn-widgets/p-2c7fc702.entry.js +0 -1
  46. package/www/build/p-2c7fc702.entry.js +0 -1
@@ -99,6 +99,8 @@ const customLabelPartsList = [
99
99
  "custom-label-2",
100
100
  "custom-label-3",
101
101
  "custom-label-4",
102
+ "custom-label-content",
103
+ "custom-label-image",
102
104
  ];
103
105
  const pricePartsList = [
104
106
  "price-container",
@@ -166,6 +168,8 @@ const searchBarParts = makeExportPartsString([
166
168
  const carouselParts = makeExportPartsString([
167
169
  "items-group",
168
170
  "carousel-button",
171
+ "carousel-button-prev",
172
+ "carousel-button-next",
169
173
  "recommendations-results",
170
174
  ]);
171
175
  const modalParts = makeExportPartsString([
@@ -14,7 +14,7 @@ function fromString(s) {
14
14
  return s === "VPR" ? { _tag: "VPR" } : { _tag: "VCS" };
15
15
  }
16
16
 
17
- const version = "2.197.0";
17
+ const version = "2.198.0";
18
18
 
19
19
  exports.campaignTypeNames = campaignTypeNames;
20
20
  exports.fold = fold;
@@ -4,9 +4,9 @@ var index = require('./index-OrE9ITel.js');
4
4
  var i18next = require('./i18next-DkN_8H9H.js');
5
5
  var search_store = require('./search.store-DHFf8KQS.js');
6
6
  var customizedSlots = require('./customized-slots-BzqsGchC.js');
7
- var _package = require('./package-BL578Fil.js');
7
+ var _package = require('./package-tfkS0Qj1.js');
8
8
  var SecondaryActionIcon = require('./SecondaryActionIcon-BZg-ADIW.js');
9
- var index$2 = require('./index-BrWTzRc7.js');
9
+ var index$2 = require('./index-CF8yXqXJ.js');
10
10
  var index$1 = require('./index-DLEDOlRe.js');
11
11
  var Rectangle = require('./Rectangle-DfUOGfXS.js');
12
12
  require('./store-CrCuJC55.js');
@@ -514,7 +514,7 @@ const VviinnVprButton = class {
514
514
  }
515
515
  }
516
516
  render() {
517
- return (index.h(index.Host, { key: '70f005ccac11b1f1c65891d099f7b86c85a87d15', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, index.h("vviinn-button", { key: '289f6814012ab713447e803053519af9a48719d7', addStyle: this.addStyle, part: "vviinn-button" }, index.h("slot", { key: 'f6dae5a6c2a4b05ff0c63fb4a98e1af67c887dcc' }, this.campaignType === "VCS" ? (index.h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (index.h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
517
+ return (index.h(index.Host, { key: 'bf6e6f058b0fcb133df713d43d9603e50783dd7d', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, index.h("vviinn-button", { key: '829e3a82cc5345750696eddadfd307813b02464b', addStyle: this.addStyle, part: "vviinn-button" }, index.h("slot", { key: 'ad46d98bc63a6a4b5555151d8c366216d82299a8' }, this.campaignType === "VCS" ? (index.h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (index.h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
518
518
  }
519
519
  handleClick() {
520
520
  const sidebar = document.createElement("vviinn-recommendations-sidebar");
@@ -9,9 +9,9 @@ var i18next = require('./i18next-DkN_8H9H.js');
9
9
  var cropperUtils = require('./cropperUtils-Bam-BTEk.js');
10
10
  var store = require('./store-CrCuJC55.js');
11
11
  var index$2 = require('./index-DLEDOlRe.js');
12
- var _package = require('./package-BL578Fil.js');
12
+ var _package = require('./package-tfkS0Qj1.js');
13
13
  var resources = require('./resources-CuHgJnvC.js');
14
- var index$3 = require('./index-BrWTzRc7.js');
14
+ var index$3 = require('./index-CF8yXqXJ.js');
15
15
  var constants = require('./constants-DHaugTOE.js');
16
16
 
17
17
  const CameraActionIcon = () => (index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" },
@@ -4,11 +4,11 @@ var index = require('./index-OrE9ITel.js');
4
4
  var search_store = require('./search.store-DHFf8KQS.js');
5
5
  var Rectangle = require('./Rectangle-DfUOGfXS.js');
6
6
  var i18next = require('./i18next-DkN_8H9H.js');
7
- var _package = require('./package-BL578Fil.js');
7
+ var _package = require('./package-tfkS0Qj1.js');
8
8
  var index$2 = require('./index-ClWQDYyW.js');
9
9
  var index$1 = require('./index-DLEDOlRe.js');
10
10
  var customizedSlots = require('./customized-slots-BzqsGchC.js');
11
- var index$3 = require('./index-BrWTzRc7.js');
11
+ var index$3 = require('./index-CF8yXqXJ.js');
12
12
  var resources = require('./resources-CuHgJnvC.js');
13
13
  var store = require('./store-CrCuJC55.js');
14
14
  var intersectionObserver = require('./intersectionObserver-Bz1vF9DA.js');
@@ -552,11 +552,11 @@ const VviinnCarousel = class {
552
552
  }
553
553
  render() {
554
554
  var _a, _b;
555
- return (index.h(index.Host, { key: 'f015108fa2c7662e7d0e9f895c43ec7f8cb935c6', class: this.getClassMap() }, index.h("div", { key: 'ae02f04b92470350121b4961a1537e3bbe44ab7d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { key: 'a88491f2aadf9926dbbf3dba6387e0f536008e0d', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
556
- this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, responsive: true })), index.h("div", { key: '8ac0cc026ec4dcb2352ecd389b1d0cf509198ebd', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (index.h(index.Fragment, { key: '2e494a58cd1ce122d6070536e8471e457622bbe5' }, index.h("button", { key: 'eee629526eee8cb75ffcced2903258e51d8cfb2e', class: {
555
+ return (index.h(index.Host, { key: '4745c2a317b4ea585c40f8cdd66cfdfb951e4d0b', class: this.getClassMap() }, index.h("div", { key: '1ec76f7cb3d3b15e67ab9195de4da16fa4212b19', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { key: 'c69bf237306841f6216c7a88a1283b79afc688be', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
556
+ this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, customLabels: index$2.getCustomLabels(this.sourceProduct), responsive: true })), index.h("div", { key: '07e4e63e35d26830a611ab8f2088ced160b207db', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (index.h(index.Fragment, { key: '9c9c15097bef2d3e016b7399e13900b930d721af' }, index.h("button", { key: 'e8c76792a669f2812bc2865d7d03cca1557e7d46', class: {
557
557
  prev: true,
558
558
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
559
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.isFirst(), "aria-label": i18next.instance.t("buttons.previous") }, index.h(ChevronIcon, { key: '72875239d877e832b88401d6779c33bf876c4f06' })), index.h("button", { key: '6850bf0a197bb01f7b2bedd8198562548f7a997c', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.isLast(), "aria-label": i18next.instance.t("buttons.next") }, index.h(ChevronIcon, { key: 'f9d31901695462145180e183627820adf5a249ce' })))))), this.showBullets() && (index.h("div", { key: '813793500938f9987c9be08506932e9068d1d9b9', class: "bullets" }, this.renderBullets()))));
559
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": i18next.instance.t("buttons.previous") }, index.h(ChevronIcon, { key: 'd0811109ba520c29fbceb752ca77e622148fbfac' })), index.h("button", { key: '5fb23c730e3f625eb7f9d6c909946a4d8a462887', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": i18next.instance.t("buttons.next") }, index.h(ChevronIcon, { key: '8eb8480b52112324a0fe6fe2c06b2617f9ee5d69' })))))), this.showBullets() && (index.h("div", { key: 'e984bf6d3139814c2f076e1b5a41ba2e86b8be07', class: "bullets" }, this.renderBullets()))));
560
560
  }
561
561
  get el() { return index.getElement(this); }
562
562
  static get watchers() { return {
@@ -1504,8 +1504,8 @@ const parseBasePrice = (basePrice) => {
1504
1504
  }
1505
1505
  return basePrice;
1506
1506
  };
1507
- const renderCustomLabels = (labels) => {
1508
- const renderLabel = (label, index$1) => label ? (index.h("span", { part: `custom-label-${index$1}`, class: "custom-label" },
1507
+ const renderCustomLabels = (labels, location) => {
1508
+ const renderLabel = (label, index$1) => label ? (index.h("span", { part: `custom-label-${index$1} custom-label-${location}`, class: "custom-label" },
1509
1509
  index.h("slot", { name: `vviinn-custom-label-${index$1}` }, label))) : null;
1510
1510
  return (index.h(index.Fragment, null, labels.map((label, index) => renderLabel(label, index))));
1511
1511
  };
@@ -1760,7 +1760,7 @@ const VviinnProductCard = class {
1760
1760
  animated: this.isTransitioning,
1761
1761
  "product-card--source": this.isSourceProduct,
1762
1762
  "set-mode": this.isSetMode,
1763
- }, exportparts: index$3.productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","))))), index.h("div", { class: {
1763
+ }, exportparts: index$3.productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, 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: {
1764
1764
  "basket-button-container": true,
1765
1765
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
1766
1766
  }, part: "basket-button-container" }, index.h("button", { class: {
@@ -1792,7 +1792,7 @@ const VviinnProductCard = class {
1792
1792
  animationInterval: generateRandomNumber(800, 1400),
1793
1793
  productData: this.productData,
1794
1794
  });
1795
- }, "aria-label": i18next.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" }))), this.showFooterArrow && index.h("div", { class: "footer-arrow" })));
1795
+ }, "aria-label": i18next.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" })));
1796
1796
  }
1797
1797
  get el() { return index.getElement(this); }
1798
1798
  static get watchers() { return {
@@ -5,7 +5,7 @@ var Rectangle = require('./Rectangle-DfUOGfXS.js');
5
5
  var i18next = require('./i18next-DkN_8H9H.js');
6
6
  require('./store-CrCuJC55.js');
7
7
 
8
- const vviinnDetectedObjectCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration:0.5s;}:host{--button-size:36px;display:block;position:absolute;left:calc(var(--x-position));top:calc(var(--y-position));z-index:2}.detected-object-button{background:transparent;border:none;padding:0;margin:0;font:inherit;color:inherit;position:absolute;left:calc(-1 * var(--button-size) / 2);top:calc(-1 * var(--button-size) / 2);width:var(--button-size);height:var(--button-size);border-radius:50%;cursor:pointer;z-index:3}:host::before,:host::after{content:\"\";cursor:pointer;position:absolute;height:var(--size);width:var(--size);left:calc(-1 * var(--size) / 2);top:calc(-1 * var(--size) / 2)}:host::before{--size:var(--button-size);border-radius:50%;z-index:0;background:rgba(0, 0, 0, 0.16);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:transform 0.07s ease-in-out}:host::after{--size:13px;border-radius:50%;z-index:1;background:white;box-shadow:0px 2px 2px 0px rgba(0, 0, 0, 0.15);transition:transform 0.07s ease-in-out}:host(.active)::before{transform:scale(0.88);background:rgba(0, 0, 0, 0.4)}:host(.active)::after{transform:scale(0.67)}@media (min-width: 768px){:host(:not(.active):hover)::before{transform:scale(1.08);background:rgba(0, 0, 0, 0.32)}}";
8
+ const vviinnDetectedObjectCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration:0.5s;}:host{--button-size:36px;display:block;position:absolute;left:calc(var(--x-position));top:calc(var(--y-position));z-index:2}.detected-object-button{background:transparent;border:none;padding:0;margin:0;font:inherit;color:inherit;position:absolute;left:calc(-1 * var(--button-size) / 2);top:calc(-1 * var(--button-size) / 2);width:var(--button-size);height:var(--button-size);border-radius:50%;cursor:pointer;z-index:3}:host::before,:host::after{content:\"\";cursor:pointer;position:absolute;height:var(--size);width:var(--size);left:calc(-1 * var(--size) / 2);top:calc(-1 * var(--size) / 2);will-change:transform;transform:translateZ(0)}:host::before{--size:var(--button-size);border-radius:50%;z-index:0;background:rgba(0, 0, 0, 0.16);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);transition:transform 0.07s ease-in-out}:host::after{--size:13px;border-radius:50%;z-index:1;background:white;box-shadow:0px 2px 2px 0px rgba(0, 0, 0, 0.15);transition:transform 0.07s ease-in-out}:host(.active)::before{transform:scale(0.88);background:rgba(0, 0, 0, 0.4)}:host(.active)::after{transform:scale(0.67)}@media (min-width: 768px){:host(:not(.active):hover)::before{transform:scale(1.08);background:rgba(0, 0, 0, 0.32)}}";
9
9
 
10
10
  const VviinnDetectedObject = class {
11
11
  constructor(hostRef) {
@@ -6,7 +6,7 @@ var customizedSlots = require('./customized-slots-BzqsGchC.js');
6
6
  var i18next = require('./i18next-DkN_8H9H.js');
7
7
  var resources = require('./resources-CuHgJnvC.js');
8
8
  var Rectangle = require('./Rectangle-DfUOGfXS.js');
9
- var index$1 = require('./index-BrWTzRc7.js');
9
+ var index$1 = require('./index-CF8yXqXJ.js');
10
10
  var store = require('./store-CrCuJC55.js');
11
11
 
12
12
  const TextSearchIcon = () => (index.h("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -10,7 +10,9 @@ import { getCustomLabels } from "../../recommendation";
10
10
  import { addIfNotEmpty } from "../../utils/collections/collectionsUtils";
11
11
  import { DISCOVERY_WIDGET_IMAGE_RESOLUTION_WIDTH, PRODUCT_CARD_IMAGE_WIDTH, } from "../../widget/constants";
12
12
  /**
13
- * @part carousel-button
13
+ * @part carousel-button - Both carousel navigation buttons (generic part)
14
+ * @part carousel-button-prev - The previous/back navigation button
15
+ * @part carousel-button-next - The next/forward navigation button
14
16
  **/
15
17
  export class VviinnCarousel {
16
18
  constructor() {
@@ -426,11 +428,11 @@ export class VviinnCarousel {
426
428
  }
427
429
  render() {
428
430
  var _a, _b;
429
- return (h(Host, { key: 'f015108fa2c7662e7d0e9f895c43ec7f8cb935c6', class: this.getClassMap() }, h("div", { key: 'ae02f04b92470350121b4961a1537e3bbe44ab7d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'a88491f2aadf9926dbbf3dba6387e0f536008e0d', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
430
- this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, responsive: true })), h("div", { key: '8ac0cc026ec4dcb2352ecd389b1d0cf509198ebd', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '2e494a58cd1ce122d6070536e8471e457622bbe5' }, h("button", { key: 'eee629526eee8cb75ffcced2903258e51d8cfb2e', class: {
431
+ return (h(Host, { key: '4745c2a317b4ea585c40f8cdd66cfdfb951e4d0b', class: this.getClassMap() }, h("div", { key: '1ec76f7cb3d3b15e67ab9195de4da16fa4212b19', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'c69bf237306841f6216c7a88a1283b79afc688be', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
432
+ this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: '07e4e63e35d26830a611ab8f2088ced160b207db', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '9c9c15097bef2d3e016b7399e13900b930d721af' }, h("button", { key: 'e8c76792a669f2812bc2865d7d03cca1557e7d46', class: {
431
433
  prev: true,
432
434
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
433
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.isFirst(), "aria-label": i18next.t("buttons.previous") }, h(ChevronIcon, { key: '72875239d877e832b88401d6779c33bf876c4f06' })), h("button", { key: '6850bf0a197bb01f7b2bedd8198562548f7a997c', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.isLast(), "aria-label": i18next.t("buttons.next") }, h(ChevronIcon, { key: 'f9d31901695462145180e183627820adf5a249ce' })))))), this.showBullets() && (h("div", { key: '813793500938f9987c9be08506932e9068d1d9b9', class: "bullets" }, this.renderBullets()))));
435
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": i18next.t("buttons.previous") }, h(ChevronIcon, { key: 'd0811109ba520c29fbceb752ca77e622148fbfac' })), h("button", { key: '5fb23c730e3f625eb7f9d6c909946a4d8a462887', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": i18next.t("buttons.next") }, h(ChevronIcon, { key: '8eb8480b52112324a0fe6fe2c06b2617f9ee5d69' })))))), this.showBullets() && (h("div", { key: 'e984bf6d3139814c2f076e1b5a41ba2e86b8be07', class: "bullets" }, this.renderBullets()))));
434
436
  }
435
437
  static get is() { return "vviinn-carousel"; }
436
438
  static get originalStyleUrls() {
@@ -255,6 +255,8 @@
255
255
  width: var(--size);
256
256
  left: calc(-1 * var(--size) / 2);
257
257
  top: calc(-1 * var(--size) / 2);
258
+ will-change: transform;
259
+ transform: translateZ(0);
258
260
  }
259
261
 
260
262
  :host::before {
@@ -262,8 +264,8 @@
262
264
  border-radius: 50%;
263
265
  z-index: 0;
264
266
  background: rgba(0, 0, 0, 0.16);
267
+ backdrop-filter: blur(4px);
265
268
  -webkit-backdrop-filter: blur(4px);
266
- backdrop-filter: blur(4px);
267
269
  transition: transform 0.07s ease-in-out;
268
270
  }
269
271
 
@@ -29,8 +29,8 @@ export const parseBasePrice = (basePrice) => {
29
29
  }
30
30
  return basePrice;
31
31
  };
32
- export const renderCustomLabels = (labels) => {
33
- const renderLabel = (label, index) => label ? (h("span", { part: `custom-label-${index}`, class: "custom-label" }, h("slot", { name: `vviinn-custom-label-${index}` }, label))) : null;
32
+ export const renderCustomLabels = (labels, location) => {
33
+ const renderLabel = (label, index) => label ? (h("span", { part: `custom-label-${index} custom-label-${location}`, class: "custom-label" }, h("slot", { name: `vviinn-custom-label-${index}` }, label))) : null;
34
34
  return (h(Fragment, null, labels.map((label, index) => renderLabel(label, index))));
35
35
  };
36
36
  export const Price = (props) => {
@@ -291,7 +291,7 @@ export class VviinnProductCard {
291
291
  animated: this.isTransitioning,
292
292
  "product-card--source": this.isSourceProduct,
293
293
  "set-mode": this.isSetMode,
294
- }, exportparts: productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","))))), h("div", { class: {
294
+ }, exportparts: productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, 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: {
295
295
  "basket-button-container": true,
296
296
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
297
297
  }, part: "basket-button-container" }, h("button", { class: {
@@ -323,7 +323,7 @@ export class VviinnProductCard {
323
323
  animationInterval: generateRandomNumber(800, 1400),
324
324
  productData: this.productData,
325
325
  });
326
- }, "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" }))), this.showFooterArrow && h("div", { class: "footer-arrow" })));
326
+ }, "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" })));
327
327
  }
328
328
  static get is() { return "vviinn-product-card"; }
329
329
  static get encapsulation() { return "shadow"; }
@@ -27,7 +27,9 @@ import { addEventListenersWithSignal } from "../../dom";
27
27
  * @part price-regular - Block for a price if no sale price is presented.
28
28
  * @part price-sale - Block for sale price. Rendered only if the sale price is presented.
29
29
  * @part price-prefix - Block rendered before each price element (for ex. "from").
30
- * @part carousel-button - Button for carousel navigation.
30
+ * @part carousel-button - Both carousel navigation buttons (generic part).
31
+ * @part carousel-button-prev - The previous/back carousel navigation button.
32
+ * @part carousel-button-next - The next/forward carousel navigation button.
31
33
  * @part recommendations-results - For internal usage only!
32
34
  * @part recommendations-title - Title of the recommendations grid.
33
35
  * @part recommendations-subtitle - Subtitle of the recommendations grid.
@@ -190,7 +192,7 @@ export class VviinnVprButton {
190
192
  }
191
193
  }
192
194
  render() {
193
- return (h(Host, { key: '70f005ccac11b1f1c65891d099f7b86c85a87d15', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, h("vviinn-button", { key: '289f6814012ab713447e803053519af9a48719d7', addStyle: this.addStyle, part: "vviinn-button" }, h("slot", { key: 'f6dae5a6c2a4b05ff0c63fb4a98e1af67c887dcc' }, this.campaignType === "VCS" ? (h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
195
+ return (h(Host, { key: 'bf6e6f058b0fcb133df713d43d9603e50783dd7d', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, h("vviinn-button", { key: '829e3a82cc5345750696eddadfd307813b02464b', addStyle: this.addStyle, part: "vviinn-button" }, h("slot", { key: 'ad46d98bc63a6a4b5555151d8c366216d82299a8' }, this.campaignType === "VCS" ? (h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
194
196
  }
195
197
  handleClick() {
196
198
  const sidebar = document.createElement("vviinn-recommendations-sidebar");
@@ -27,6 +27,8 @@ export const searchBarParts = makeExportPartsString([
27
27
  export const carouselParts = makeExportPartsString([
28
28
  "items-group",
29
29
  "carousel-button",
30
+ "carousel-button-prev",
31
+ "carousel-button-next",
30
32
  "recommendations-results",
31
33
  ]);
32
34
  export const modalParts = makeExportPartsString([
@@ -40,6 +40,8 @@ export const customLabelPartsList = [
40
40
  "custom-label-2",
41
41
  "custom-label-3",
42
42
  "custom-label-4",
43
+ "custom-label-content",
44
+ "custom-label-image",
43
45
  ];
44
46
  export const pricePartsList = [
45
47
  "price-container",
@@ -97,6 +97,8 @@ const customLabelPartsList = [
97
97
  "custom-label-2",
98
98
  "custom-label-3",
99
99
  "custom-label-4",
100
+ "custom-label-content",
101
+ "custom-label-image",
100
102
  ];
101
103
  const pricePartsList = [
102
104
  "price-container",
@@ -164,6 +166,8 @@ const searchBarParts = makeExportPartsString([
164
166
  const carouselParts = makeExportPartsString([
165
167
  "items-group",
166
168
  "carousel-button",
169
+ "carousel-button-prev",
170
+ "carousel-button-next",
167
171
  "recommendations-results",
168
172
  ]);
169
173
  const modalParts = makeExportPartsString([
@@ -12,6 +12,6 @@ function fromString(s) {
12
12
  return s === "VPR" ? { _tag: "VPR" } : { _tag: "VCS" };
13
13
  }
14
14
 
15
- const version = "2.197.0";
15
+ const version = "2.198.0";
16
16
 
17
17
  export { fold as a, campaignTypeNames as c, fromString as f, version as v };
@@ -2,9 +2,9 @@ import { h, r as registerInstance, H as Host, c as createEvent, g as getElement,
2
2
  import { i as instance } from './i18next-C7V-mvcq.js';
3
3
  import { g as getAcceptableFileFormatsForDisplay, a as addIfNotEmpty, b as searchState, u as useSearchStore } from './search.store-BtRgJeHn.js';
4
4
  import { s as slotChangeListener } from './customized-slots-ZvDCa2Eu.js';
5
- import { c as campaignTypeNames, v as version } from './package-DZVuE7LY.js';
5
+ import { c as campaignTypeNames, v as version } from './package-DiWvyInL.js';
6
6
  import { S as SecondaryActionIcon } from './SecondaryActionIcon-Co8n0aty.js';
7
- import { m as modalParts, c as carouselParts, p as productCardParts } from './index-CtuL3RiP.js';
7
+ import { m as modalParts, c as carouselParts, p as productCardParts } from './index-DyZfzSpJ.js';
8
8
  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';
9
9
  import { i as isClickedInRectBound } from './Rectangle-DM-Jf7YJ.js';
10
10
  import './store-CMhsm-nf.js';
@@ -512,7 +512,7 @@ const VviinnVprButton = class {
512
512
  }
513
513
  }
514
514
  render() {
515
- return (h(Host, { key: '70f005ccac11b1f1c65891d099f7b86c85a87d15', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, h("vviinn-button", { key: '289f6814012ab713447e803053519af9a48719d7', addStyle: this.addStyle, part: "vviinn-button" }, h("slot", { key: 'f6dae5a6c2a4b05ff0c63fb4a98e1af67c887dcc' }, this.campaignType === "VCS" ? (h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
515
+ return (h(Host, { key: 'bf6e6f058b0fcb133df713d43d9603e50783dd7d', role: "button", tabindex: "0", "aria-label": this.getAriaLabel(), onClick: this.handleButtonClick, onKeyDown: this.handleKeyDown }, h("vviinn-button", { key: '829e3a82cc5345750696eddadfd307813b02464b', addStyle: this.addStyle, part: "vviinn-button" }, h("slot", { key: 'ad46d98bc63a6a4b5555151d8c366216d82299a8' }, this.campaignType === "VCS" ? (h(CrossSellingIcon, { width: this.iconSideSize, height: this.iconSideSize })) : (h(SimilarProductsIcon, { width: this.iconSideSize, height: this.iconSideSize }))))));
516
516
  }
517
517
  handleClick() {
518
518
  const sidebar = document.createElement("vviinn-recommendations-sidebar");
@@ -7,9 +7,9 @@ import { i as instance } from './i18next-C7V-mvcq.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-BpgcCYJQ.js';
8
8
  import { u as updateGlobalState, t as trackEvent, g as globalState } from './store-CMhsm-nf.js';
9
9
  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';
10
- import { v as version, c as campaignTypeNames } from './package-DZVuE7LY.js';
10
+ import { v as version, c as campaignTypeNames } from './package-DiWvyInL.js';
11
11
  import { r as resources } from './resources-Cvip80t1.js';
12
- import { a as productCardsGridPart, p as productCardParts, l as listCardParts, b as contentCardParts, d as selectedFiltersParts, e as suggestionsParts, f as filtersParts, g as extendedFiltersParts, m as modalParts, s as searchBarParts, h as searchWidgetFilterParts, i as searchWidgetButtonParts } from './index-CtuL3RiP.js';
12
+ import { a as productCardsGridPart, p as productCardParts, l as listCardParts, b as contentCardParts, d as selectedFiltersParts, e as suggestionsParts, f as filtersParts, g as extendedFiltersParts, m as modalParts, s as searchBarParts, h as searchWidgetFilterParts, i as searchWidgetButtonParts } from './index-DyZfzSpJ.js';
13
13
  import { D as DEFAULT_EXAMPLE_IMAGE } from './constants-DOMXsA9W.js';
14
14
 
15
15
  const CameraActionIcon = () => (h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" },
@@ -2,11 +2,11 @@ import { h, r as registerInstance, c as createEvent, F as Fragment, H as Host, g
2
2
  import { a as addIfNotEmpty, _ as _ArrayExports, u as useSearchStore } from './search.store-BtRgJeHn.js';
3
3
  import { W as has, X as tuple, _ as _functionExports, e as requireSemigroup, O as OptionExports, v as pipe$1, N as chainW, Y as makeRequest, L as fromEither, Z as getApiPath, $ as createInitPostRequest, a0 as Apply, a1 as TaskEitherExports, E as EitherExports } from './Rectangle-DM-Jf7YJ.js';
4
4
  import { i as instance } from './i18next-C7V-mvcq.js';
5
- import { c as campaignTypeNames, f as fromString, a as fold, v as version } from './package-DZVuE7LY.js';
5
+ import { c as campaignTypeNames, f as fromString, a as fold, v as version } from './package-DiWvyInL.js';
6
6
  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-E1xSXX9S.js';
7
7
  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';
8
8
  import { s as slotChangeListener, S as SlotSkeleton } from './customized-slots-ZvDCa2Eu.js';
9
- import { j as energyLabelParts, g as extendedFiltersParts, f as filtersParts, k as imageParts, b as contentCardParts, l as listCardParts, p as productCardParts, n as priceRangeParts } from './index-CtuL3RiP.js';
9
+ import { j as energyLabelParts, g as extendedFiltersParts, f as filtersParts, k as imageParts, b as contentCardParts, l as listCardParts, p as productCardParts, n as priceRangeParts } from './index-DyZfzSpJ.js';
10
10
  import { r as resources } from './resources-Cvip80t1.js';
11
11
  import { g as globalState, t as trackEvent, u as updateGlobalState } from './store-CMhsm-nf.js';
12
12
  import { s as setupIntersectionObserver } from './intersectionObserver-DHxfjh-K.js';
@@ -550,11 +550,11 @@ const VviinnCarousel = class {
550
550
  }
551
551
  render() {
552
552
  var _a, _b;
553
- return (h(Host, { key: 'f015108fa2c7662e7d0e9f895c43ec7f8cb935c6', class: this.getClassMap() }, h("div", { key: 'ae02f04b92470350121b4961a1537e3bbe44ab7d', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'a88491f2aadf9926dbbf3dba6387e0f536008e0d', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
554
- this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, responsive: true })), h("div", { key: '8ac0cc026ec4dcb2352ecd389b1d0cf509198ebd', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '2e494a58cd1ce122d6070536e8471e457622bbe5' }, h("button", { key: 'eee629526eee8cb75ffcced2903258e51d8cfb2e', class: {
553
+ return (h(Host, { key: '4745c2a317b4ea585c40f8cdd66cfdfb951e4d0b', class: this.getClassMap() }, h("div", { key: '1ec76f7cb3d3b15e67ab9195de4da16fa4212b19', class: Object.assign(Object.assign({}, this.getClassMap()), this.getBodyClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { key: 'c69bf237306841f6216c7a88a1283b79afc688be', class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail ||
554
+ this.sourceProduct.image.original, entityType: this.sourceProduct.entityType, price: this.sourceProduct.price.actual, salePrice: this.sourceProduct.price.sale, basePrice: (_a = this.sourceProduct.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = this.sourceProduct.basePrice) === null || _b === void 0 ? void 0 : _b.sale, addPriceContainer: this.addPriceContainer, imageRatio: 1, imageWidth: 300, imageResolutionWidth: this.imageResolutionWidth, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, isSetMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow, customLabels: getCustomLabels(this.sourceProduct), responsive: true })), h("div", { key: '07e4e63e35d26830a611ab8f2088ced160b207db', class: this.getContentClassMap() }, this.renderRecommendations(), this.showArrowButtons() && (h(Fragment, { key: '9c9c15097bef2d3e016b7399e13900b930d721af' }, h("button", { key: 'e8c76792a669f2812bc2865d7d03cca1557e7d46', class: {
555
555
  prev: true,
556
556
  "grid-arrows-dynamic": this.gridArrowsDynamic && this.isGridMode,
557
- }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.isFirst(), "aria-label": instance.t("buttons.previous") }, h(ChevronIcon, { key: '72875239d877e832b88401d6779c33bf876c4f06' })), h("button", { key: '6850bf0a197bb01f7b2bedd8198562548f7a997c', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.isLast(), "aria-label": instance.t("buttons.next") }, h(ChevronIcon, { key: 'f9d31901695462145180e183627820adf5a249ce' })))))), this.showBullets() && (h("div", { key: '813793500938f9987c9be08506932e9068d1d9b9', class: "bullets" }, this.renderBullets()))));
557
+ }, onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button carousel-button-prev", disabled: this.isFirst(), "aria-label": instance.t("buttons.previous") }, h(ChevronIcon, { key: 'd0811109ba520c29fbceb752ca77e622148fbfac' })), h("button", { key: '5fb23c730e3f625eb7f9d6c909946a4d8a462887', class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button carousel-button-next", disabled: this.isLast(), "aria-label": instance.t("buttons.next") }, h(ChevronIcon, { key: '8eb8480b52112324a0fe6fe2c06b2617f9ee5d69' })))))), this.showBullets() && (h("div", { key: 'e984bf6d3139814c2f076e1b5a41ba2e86b8be07', class: "bullets" }, this.renderBullets()))));
558
558
  }
559
559
  get el() { return getElement(this); }
560
560
  static get watchers() { return {
@@ -1502,8 +1502,8 @@ const parseBasePrice = (basePrice) => {
1502
1502
  }
1503
1503
  return basePrice;
1504
1504
  };
1505
- const renderCustomLabels = (labels) => {
1506
- const renderLabel = (label, index) => label ? (h("span", { part: `custom-label-${index}`, class: "custom-label" },
1505
+ const renderCustomLabels = (labels, location) => {
1506
+ const renderLabel = (label, index) => label ? (h("span", { part: `custom-label-${index} custom-label-${location}`, class: "custom-label" },
1507
1507
  h("slot", { name: `vviinn-custom-label-${index}` }, label))) : null;
1508
1508
  return (h(Fragment, null, labels.map((label, index) => renderLabel(label, index))));
1509
1509
  };
@@ -1758,7 +1758,7 @@ const VviinnProductCard = class {
1758
1758
  animated: this.isTransitioning,
1759
1759
  "product-card--source": this.isSourceProduct,
1760
1760
  "set-mode": this.isSetMode,
1761
- }, exportparts: productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, price: this.price, basePrice: parseBasePrice(this.basePrice), salePrice: this.salePrice, baseSalePrice: parseBasePrice(this.baseSalePrice), showInContainer: this.addPriceContainer }), renderCustomLabels(this.customLabels.split(","))))), h("div", { class: {
1761
+ }, exportparts: productCardParts, "data-id": this.productId }, 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.currency, locale: this.locale, 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: {
1762
1762
  "basket-button-container": true,
1763
1763
  hidden: !this.isShowBasketButton() || this.showSkeleton(),
1764
1764
  }, part: "basket-button-container" }, h("button", { class: {
@@ -1790,7 +1790,7 @@ const VviinnProductCard = class {
1790
1790
  animationInterval: generateRandomNumber(800, 1400),
1791
1791
  productData: this.productData,
1792
1792
  });
1793
- }, "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" }))), this.showFooterArrow && h("div", { class: "footer-arrow" })));
1793
+ }, "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" })));
1794
1794
  }
1795
1795
  get el() { return getElement(this); }
1796
1796
  static get watchers() { return {
@@ -3,7 +3,7 @@ import { _ as _functionExports, O as OptionExports, s as scaleWithSized, c as ce
3
3
  import { i as instance } from './i18next-C7V-mvcq.js';
4
4
  import './store-CMhsm-nf.js';
5
5
 
6
- const vviinnDetectedObjectCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration:0.5s;}:host{--button-size:36px;display:block;position:absolute;left:calc(var(--x-position));top:calc(var(--y-position));z-index:2}.detected-object-button{background:transparent;border:none;padding:0;margin:0;font:inherit;color:inherit;position:absolute;left:calc(-1 * var(--button-size) / 2);top:calc(-1 * var(--button-size) / 2);width:var(--button-size);height:var(--button-size);border-radius:50%;cursor:pointer;z-index:3}:host::before,:host::after{content:\"\";cursor:pointer;position:absolute;height:var(--size);width:var(--size);left:calc(-1 * var(--size) / 2);top:calc(-1 * var(--size) / 2)}:host::before{--size:var(--button-size);border-radius:50%;z-index:0;background:rgba(0, 0, 0, 0.16);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);transition:transform 0.07s ease-in-out}:host::after{--size:13px;border-radius:50%;z-index:1;background:white;box-shadow:0px 2px 2px 0px rgba(0, 0, 0, 0.15);transition:transform 0.07s ease-in-out}:host(.active)::before{transform:scale(0.88);background:rgba(0, 0, 0, 0.4)}:host(.active)::after{transform:scale(0.67)}@media (min-width: 768px){:host(:not(.active):hover)::before{transform:scale(1.08);background:rgba(0, 0, 0, 0.32)}}";
6
+ const vviinnDetectedObjectCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration:0.5s;}:host{--button-size:36px;display:block;position:absolute;left:calc(var(--x-position));top:calc(var(--y-position));z-index:2}.detected-object-button{background:transparent;border:none;padding:0;margin:0;font:inherit;color:inherit;position:absolute;left:calc(-1 * var(--button-size) / 2);top:calc(-1 * var(--button-size) / 2);width:var(--button-size);height:var(--button-size);border-radius:50%;cursor:pointer;z-index:3}:host::before,:host::after{content:\"\";cursor:pointer;position:absolute;height:var(--size);width:var(--size);left:calc(-1 * var(--size) / 2);top:calc(-1 * var(--size) / 2);will-change:transform;transform:translateZ(0)}:host::before{--size:var(--button-size);border-radius:50%;z-index:0;background:rgba(0, 0, 0, 0.16);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);transition:transform 0.07s ease-in-out}:host::after{--size:13px;border-radius:50%;z-index:1;background:white;box-shadow:0px 2px 2px 0px rgba(0, 0, 0, 0.15);transition:transform 0.07s ease-in-out}:host(.active)::before{transform:scale(0.88);background:rgba(0, 0, 0, 0.4)}:host(.active)::after{transform:scale(0.67)}@media (min-width: 768px){:host(:not(.active):hover)::before{transform:scale(1.08);background:rgba(0, 0, 0, 0.32)}}";
7
7
 
8
8
  const VviinnDetectedObject = class {
9
9
  constructor(hostRef) {
@@ -4,7 +4,7 @@ import { s as slotChangeListener } from './customized-slots-ZvDCa2Eu.js';
4
4
  import { i as instance } from './i18next-C7V-mvcq.js';
5
5
  import { r as resources } from './resources-Cvip80t1.js';
6
6
  import { _ as _functionExports, g as getOrElse } from './Rectangle-DM-Jf7YJ.js';
7
- import { s as searchBarParts } from './index-CtuL3RiP.js';
7
+ import { s as searchBarParts } from './index-DyZfzSpJ.js';
8
8
  import { u as updateGlobalState, g as globalState } from './store-CMhsm-nf.js';
9
9
 
10
10
  const TextSearchIcon = () => (h("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -7,7 +7,9 @@ import { Locale } from "../../locale";
7
7
  type MoveDirection = "left" | "right";
8
8
  export type CarouselMode = "grid" | "continuity" | "set";
9
9
  /**
10
- * @part carousel-button
10
+ * @part carousel-button - Both carousel navigation buttons (generic part)
11
+ * @part carousel-button-prev - The previous/back navigation button
12
+ * @part carousel-button-next - The next/forward navigation button
11
13
  **/
12
14
  export declare class VviinnCarousel {
13
15
  el: HTMLElement;
@@ -21,7 +21,7 @@ type PriceProps = PriceElementProps & {
21
21
  baseSalePrice: BasePrice;
22
22
  showInContainer?: boolean;
23
23
  };
24
- export declare const renderCustomLabels: (labels: string[]) => any;
24
+ export declare const renderCustomLabels: (labels: string[], location: "content" | "image") => any;
25
25
  export declare const Price: FunctionalComponent<PriceProps>;
26
26
  export type ImageProps = {
27
27
  width: number;
@@ -27,7 +27,9 @@ import { OneClickDiscoveryMode } from "../../widget/types";
27
27
  * @part price-regular - Block for a price if no sale price is presented.
28
28
  * @part price-sale - Block for sale price. Rendered only if the sale price is presented.
29
29
  * @part price-prefix - Block rendered before each price element (for ex. "from").
30
- * @part carousel-button - Button for carousel navigation.
30
+ * @part carousel-button - Both carousel navigation buttons (generic part).
31
+ * @part carousel-button-prev - The previous/back carousel navigation button.
32
+ * @part carousel-button-next - The next/forward carousel navigation button.
31
33
  * @part recommendations-results - For internal usage only!
32
34
  * @part recommendations-title - Title of the recommendations grid.
33
35
  * @part recommendations-subtitle - Subtitle of the recommendations grid.
@@ -27,7 +27,9 @@ export type UpdateButtonLocation = "onTop" | "onItem" | "topAndItem";
27
27
  * @part price-regular - Block for a price if no sale price is presented.
28
28
  * @part price-sale - Block for sale price. Rendered only if the sale price is presented.
29
29
  * @part price-prefix - Block rendered before each price element (for ex. "from").
30
- * @part carousel-button - Button for carousel navigation.
30
+ * @part carousel-button - Both carousel navigation buttons (generic part).
31
+ * @part carousel-button-prev - The previous/back carousel navigation button.
32
+ * @part carousel-button-next - The next/forward carousel navigation button.
31
33
  * @part recommendations-results - For internal usage only!
32
34
  * @part recommendations-title - Title of the recommendations grid.
33
35
  * @part recommendations-subtitle - Subtitle of the recommendations grid.