vviinn-widgets 2.48.0 → 2.48.1

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 (40) hide show
  1. package/dist/cjs/{package-60884765.js → package-504b33d0.js} +1 -1
  2. package/dist/cjs/vviinn-carousel_4.cjs.entry.js +18 -9
  3. package/dist/cjs/vviinn-vpr-button.cjs.entry.js +1 -1
  4. package/dist/cjs/vviinn-vps-button.cjs.entry.js +1 -1
  5. package/dist/cjs/vviinn-vps-widget.cjs.entry.js +2 -2
  6. package/dist/collection/components/vviinn-carousel/constants.js +1 -0
  7. package/dist/collection/components/vviinn-carousel/vviinn-carousel.css +28 -32
  8. package/dist/collection/components/vviinn-carousel/vviinn-carousel.js +11 -3
  9. package/dist/collection/components/vviinn-product-card/vviinn-product-card.css +37 -14
  10. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +1 -1
  11. package/dist/collection/components/vviinn-skeleton/vviinn-skeleton.css +1 -1
  12. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-widget.css +8 -0
  13. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-widget.js +1 -1
  14. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.js +1 -1
  15. package/dist/esm/{package-f211a164.js → package-411cd846.js} +1 -1
  16. package/dist/esm/vviinn-carousel_4.entry.js +18 -9
  17. package/dist/esm/vviinn-vpr-button.entry.js +1 -1
  18. package/dist/esm/vviinn-vps-button.entry.js +1 -1
  19. package/dist/esm/vviinn-vps-widget.entry.js +2 -2
  20. package/dist/types/components/vviinn-carousel/constants.d.ts +1 -0
  21. package/dist/types/components/vviinn-carousel/vviinn-carousel.d.ts +2 -0
  22. package/dist/vviinn-widgets/p-80c039c8.js +1 -0
  23. package/{www/build/p-611134af.entry.js → dist/vviinn-widgets/p-b0da4c4c.entry.js} +1 -1
  24. package/dist/vviinn-widgets/p-ccad6b6b.entry.js +1 -0
  25. package/{www/build/p-6a4cca13.entry.js → dist/vviinn-widgets/p-d0b47939.entry.js} +1 -1
  26. package/dist/vviinn-widgets/p-decd641b.entry.js +1 -0
  27. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  28. package/package.json +1 -1
  29. package/www/build/p-80c039c8.js +1 -0
  30. package/{dist/vviinn-widgets/p-611134af.entry.js → www/build/p-b0da4c4c.entry.js} +1 -1
  31. package/www/build/p-ccad6b6b.entry.js +1 -0
  32. package/{dist/vviinn-widgets/p-6a4cca13.entry.js → www/build/p-d0b47939.entry.js} +1 -1
  33. package/www/build/p-decd641b.entry.js +1 -0
  34. package/www/build/vviinn-widgets.esm.js +1 -1
  35. package/dist/vviinn-widgets/p-8caa4f35.js +0 -1
  36. package/dist/vviinn-widgets/p-9b410195.entry.js +0 -1
  37. package/dist/vviinn-widgets/p-e3625408.entry.js +0 -1
  38. package/www/build/p-8caa4f35.js +0 -1
  39. package/www/build/p-9b410195.entry.js +0 -1
  40. package/www/build/p-e3625408.entry.js +0 -1
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
2
 
3
- const version = "2.48.0";
3
+ const version = "2.48.1";
4
4
 
5
5
  exports.version = version;
@@ -6,7 +6,7 @@ const index = require('./index-5619b5ec.js');
6
6
  const search_store = require('./search.store-0b319593.js');
7
7
  const i18next = require('./i18next-74ff3413.js');
8
8
  const customizedSlots = require('./customized-slots-1b59bd38.js');
9
- const _package = require('./package-60884765.js');
9
+ const _package = require('./package-504b33d0.js');
10
10
  const index$1 = require('./index-279a6a0f.js');
11
11
 
12
12
  const BasketIcon = () => (index.h("svg", { width: "25", height: "24", viewBox: "0 0 25 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -25,6 +25,7 @@ const UpdateIcon = () => (index.h("svg", { xmlns: "http://www.w3.org/2000/svg",
25
25
  const COLUMNS_NUMBER_CSS_VAR = "--vviinn-carousel-columns-internal";
26
26
  const CAROUSEL_WIDTH_CSS_VAR = "--vviinn-carousel-content-width";
27
27
  const CAROUSEL_IMAGE_WIDTH_CSS_VAR = "--vviinn-carousel-image-width";
28
+ const SET_MODE_IMAGE_WIDTH = "--vviinn-set-mode-image-width";
28
29
  const CONTENT_GROUP_CSS_CLASS = "items-group";
29
30
  const SET_MODE_INITIAL_DISCOUNT = 5;
30
31
  const SET_MODE_MAX_DISCOUNT = 15;
@@ -41,7 +42,7 @@ const generateRandomNumber = (min, max) => {
41
42
  return Math.floor(Math.random() * (max - min + 1)) + min;
42
43
  };
43
44
 
44
- const vviinnCarouselCss = ":host{--vviinn-progressbar-width:0;--vviinn-carousel-item-width:150px;--vviinn-carousel-columns-internal:var(--vviinn-carousel-columns, 4);--vviinn-carousel-image-width-system:140px}.body{display:flex;position:relative;width:var(--vviinn-carousel-content-width);flex-direction:column}.body.set{justify-content:space-between;overflow-x:auto;margin-left:auto;display:flex;flex-direction:row;gap:112px}.body.set::-webkit-scrollbar{display:none}@media (max-width: 768px){.body.set{gap:40px}}.body.set .content{max-width:-moz-fit-content;max-width:fit-content;overflow:unset}.bullets{margin-top:16px;display:flex;flex-direction:row;grid-gap:24px;justify-content:center}.bullet{width:10px;height:10px;background:#e0e0e0;border-radius:50%;cursor:pointer}.bullet.active{background:#161616}.content:not(.show-scrollbar),.content.grid{scrollbar-color:#fff0 #fff0}.content:not(.show-scrollbar)::-webkit-scrollbar,.content.grid::-webkit-scrollbar{opacity:0}.content{display:flex;flex-direction:row;grid-gap:8px;overflow-y:hidden;overflow-x:auto;flex-grow:1;padding-bottom:16px}.content.set{grid-gap:20px}.content.left>*{scroll-snap-align:start}.content.right>*{scroll-snap-align:end}:host(.continuity) .prev,:host(.continuity) .next{border-radius:2px}:host(.grid) .prev,:host(.grid) .next{border-radius:50%}.prev,.next{align-items:center;background-color:white;border:none;box-shadow:0px 2px 6px rgba(0, 0, 0, 0.15);fill:#525252;cursor:pointer;display:grid;height:40px;justify-items:center;position:absolute;top:calc(50% - 20px);width:40px;z-index:1;padding:0;margin:0}.next:disabled,.prev:disabled{display:none}.prev svg{transform:rotate(180deg);margin-left:-5px}.prev{left:0}.next{right:0}.items-group{display:grid;grid-gap:16px;grid-template-columns:repeat(var(--vviinn-carousel-columns-internal), 1fr);min-width:100%}vviinn-product-card::part(price-container){text-align:center}@media (max-width: 480px){.items-group{grid-template-columns:repeat(2, 1fr)}}";
45
+ const vviinnCarouselCss = ":host{--vviinn-progressbar-width:0;--vviinn-carousel-columns-internal:var(--vviinn-carousel-columns, 4)}.body{display:flex;position:relative;flex-direction:column}.bullets{margin-top:16px;display:flex;flex-direction:row;grid-gap:24px;justify-content:center}.bullet{width:10px;height:10px;background:#e0e0e0;border-radius:50%;cursor:pointer}.bullet.active{background:#161616}.content:not(.show-scrollbar),.content.grid{scrollbar-color:#fff0 #fff0}.content:not(.show-scrollbar)::-webkit-scrollbar,.content.grid::-webkit-scrollbar{opacity:0}.content{display:flex;flex-direction:row;grid-gap:8px;overflow-y:hidden;overflow-x:auto;flex-grow:1;padding-bottom:16px}.content.left>*{scroll-snap-align:start}.content.right>*{scroll-snap-align:end}:host(.continuity) .prev,:host(.continuity) .next{border-radius:2px}:host(.grid) .prev,:host(.grid) .next{border-radius:50%}.prev,.next{align-items:center;background-color:white;border:none;box-shadow:0px 2px 6px rgba(0, 0, 0, 0.15);fill:#525252;cursor:pointer;display:grid;height:40px;justify-items:center;position:absolute;top:calc(50% - 20px);width:40px;z-index:1;padding:0;margin:0}.next:disabled,.prev:disabled{display:none}.prev svg{transform:rotate(180deg);margin-left:-5px}.prev{left:0}.next{right:0}.items-group{display:grid;grid-gap:16px;grid-template-columns:repeat(var(--vviinn-carousel-columns-internal), 1fr);min-width:100%}vviinn-product-card::part(price-container){text-align:center}@media (max-width: 480px){.items-group{grid-template-columns:repeat(2, 1fr)}}.body.set{max-width:100%;justify-content:space-between;margin-left:auto;display:flex;flex-direction:row;gap:112px}.body.set::-webkit-scrollbar{display:none}@media (max-width: 768px){.body.set{gap:40px}}.content.set{grid-gap:20px;height:-moz-fit-content;height:fit-content;max-width:-moz-fit-content;max-width:fit-content;overflow:unset}";
45
46
 
46
47
  const VviinnCarousel = class {
47
48
  constructor(hostRef) {
@@ -50,6 +51,7 @@ const VviinnCarousel = class {
50
51
  this.resizeObserver = new ResizeObserver(() => this.handleResize());
51
52
  this.defaultAnimationInterval = 2000;
52
53
  this.mutationObserver = new MutationObserver(() => this.cloneSlottedContent());
54
+ this.handleWindowResize = () => this.setImageWidthSetMode("100%");
53
55
  this.isLastGroup = () => this.activeContentGroup === this.getContentGroups().length - 1 &&
54
56
  this.isGridMode;
55
57
  this.isFirstGroup = () => this.activeContentGroup === 0 && this.isGridMode;
@@ -61,10 +63,12 @@ const VviinnCarousel = class {
61
63
  if (recommendationIndex + step < this.recommendations.length) {
62
64
  newCrossSellingRecommendations[crossSellingIndex] =
63
65
  this.recommendations[recommendationIndex + step];
66
+ this.crossSellingRecommendations = [...newCrossSellingRecommendations];
64
67
  let element = this.el.querySelector(`[data-id="${productId}"]`);
65
68
  const button = element.shadowRoot.querySelector(".update-button");
66
69
  button === null || button === void 0 ? void 0 : button.classList.add("hidden");
67
- this.crossSellingRecommendations = [...newCrossSellingRecommendations];
70
+ const imageWidth = element.getBoundingClientRect().width;
71
+ this.setImageWidthSetMode(`${imageWidth}px`);
68
72
  const animationTimer = setTimeout(() => {
69
73
  if (recommendationIndex + step * 2 <= this.recommendations.length - 1) {
70
74
  button === null || button === void 0 ? void 0 : button.classList.remove("hidden");
@@ -102,6 +106,7 @@ const VviinnCarousel = class {
102
106
  this.isContinuityMode = this.mode === "continuity";
103
107
  const columnsNumber = this.getColumnsNumber();
104
108
  if (this.isSetMode) {
109
+ window.addEventListener("resize", this.handleWindowResize);
105
110
  this.sourceProduct = this.recommendations[0];
106
111
  this.recommendations = this.recommendations.slice(1);
107
112
  }
@@ -111,6 +116,7 @@ const VviinnCarousel = class {
111
116
  }
112
117
  disconnectedCallback() {
113
118
  this.resizeObserver.disconnect();
119
+ window.removeEventListener("resize", this.handleWindowResize);
114
120
  }
115
121
  componentDidLoad() {
116
122
  this.setWidth();
@@ -155,6 +161,9 @@ const VviinnCarousel = class {
155
161
  : widthInDocument;
156
162
  this.el.style.setProperty(CAROUSEL_IMAGE_WIDTH_CSS_VAR, `${itemWidth}px`);
157
163
  }
164
+ setImageWidthSetMode(width) {
165
+ this.el.style.setProperty(SET_MODE_IMAGE_WIDTH, width);
166
+ }
158
167
  getContentClassMap() {
159
168
  return {
160
169
  content: true,
@@ -292,7 +301,7 @@ const VviinnCarousel = class {
292
301
  const salePrice = this.isSetMode
293
302
  ? setModeDiscount
294
303
  : recommendation.price.sale;
295
- return (index.h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: salePrice, responsive: this.isGridMode || this.isSetMode, dimmedBackground: this.isContinuityMode || this.isSetMode, campaignTypeId: this.campaignTypeId, index: rank, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, mode: this.mode, "data-id": recommendation.productId, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount }));
304
+ return (index.h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: salePrice, responsive: this.isGridMode, dimmedBackground: this.isContinuityMode || this.isSetMode, campaignTypeId: this.campaignTypeId, index: rank, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, mode: this.mode, "data-id": recommendation.productId, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount }));
296
305
  }
297
306
  renderRecommendationGroup(elements) {
298
307
  return (index.h("div", { class: CONTENT_GROUP_CSS_CLASS, part: "items-group" }, ...elements));
@@ -519,7 +528,7 @@ const Image = (props, onLoadEnd = () => undefined) => (index.h("picture", null,
519
528
  const ResponsiveImage = (props, onLoadEnd = () => undefined) => (index.h("picture", null,
520
529
  index.h("img", { loading: props.lazy ? "lazy" : "eager", part: "image", class: "image responsive", src: processWidth(props.src, props.width), alt: props.title, ref: props.ref, onLoad: onLoadEnd })));
521
530
 
522
- const vviinnProductCardCss = ":host{align-items:center;display:flex;flex-direction:column;position:relative;gap:8px;height:100%;--min-image-size-set-mode:155px}.price-container{display:flex;flex-direction:column}.price-sale,.price-regular{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#161616}.price-outdated{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#757575;text-decoration:line-through}.product-type{word-wrap:anywhere}.image{display:grid;align-content:center;-o-object-position:50% 50%;object-position:50% 50%;-o-object-fit:contain;object-fit:contain;text-align:center;box-sizing:border-box}.image.responsive{width:100%;height:auto;aspect-ratio:1}.brand,.type{display:none}.title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#161616;display:-webkit-box;font-size:16px;font-style:normal;font-weight:500;line-height:24px;overflow:hidden}.deeplink{text-decoration:none;max-width:100%}.image-link{display:contents}picture{position:relative;width:100%}picture::before{content:\"\";opacity:0;width:100%;height:100%;box-sizing:border-box;display:block;top:0;left:0;position:absolute}.update-button{position:absolute;top:8px;right:8px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;z-index:1;background-color:rgba(127, 127, 127, 0.4);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border:none;color:white;cursor:pointer}.update-button::after{content:\"\";position:absolute;top:-4px;right:-4px;width:calc(100% + 8px);height:calc(100% + 8px)}.update-button:hover{background-color:rgba(127, 127, 127, 0.5)}.update-button.hidden{display:none}.basket-button{height:44px;font-size:16px;padding:10px 12px;box-sizing:border-box;border:none;cursor:pointer}.basket-button.basket-button-grid{width:100%;background-color:none;border:1px solid #dddddd}.basket-button.basket-button-continuity{align-self:start;background-color:#f7f7f7}.basket-button-continuity:hover{background-color:#eaeaea}.basket-button-grid:hover{background-color:#f7f7f7}:host(.dimmed) picture::after{content:\"\";width:100%;height:100%;box-sizing:border-box;background-color:#f7f7f7;display:block;top:0;left:0;position:absolute;mix-blend-mode:multiply}:host(.set-mode){line-height:20px}:host(.animated) picture::after{mix-blend-mode:normal}:host(.animated) picture::before{opacity:1;animation:pulse 1.8s infinite}:host(.animated) picture::after{content:url(\"data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_810_154)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M64.7332 1.23333C66.2665 12.2667 67.9665 13.9667 78.6665 15.2333C79.4332 15.3333 79.9999 15.9333 79.9999 16.6667C79.9999 17.4 79.4665 17.9333 78.6665 18.0667C67.9665 19.3667 66.2999 21.0333 64.7332 32.0667C64.6332 32.8 64.0665 33.3333 63.3665 33.3333C62.6665 33.3333 62.0999 32.8 61.9665 32.0667C60.4665 21.0333 58.7665 19.3667 48.0332 18.0667C47.2332 17.9667 46.6999 17.4333 46.6999 16.6667C46.6999 15.9 47.2332 15.3667 48.0332 15.2333C58.7665 13.7667 60.3999 12.2 61.9665 1.23333C62.0999 0.5 62.6665 0 63.3665 0C64.0665 0 64.5999 0.5 64.7332 1.23333ZM38.5665 71.5667C38.3665 72.6 37.6665 73.3333 36.6665 73.3333C35.6665 73.3333 34.9665 72.6 34.7998 71.5667C31.9332 50.7 29.0998 47.9 8.49984 45.2C7.39984 45.1 6.6665 44.3 6.6665 43.3C6.6665 42.3 7.39984 41.5333 8.49984 41.4333C29.1332 39.1333 32.0998 35.9333 34.7998 15.0333C34.9665 14.0333 35.6665 13.3333 36.6665 13.3333C37.6665 13.3333 38.3665 14 38.5665 15.0333C41.2665 35.9333 44.1998 39.1333 64.8665 41.4333C65.9332 41.5333 66.6665 42.2667 66.6665 43.3C66.6665 44.3333 65.9332 45.1 64.8665 45.2C44.1998 47.5 41.2665 50.7 38.5665 71.5667Z' fill='white'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_810_154'%3E%3Crect width='80' height='80' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\");background-color:transparent;position:absolute;width:80px;height:80px;left:calc(50% - 40px);top:calc(50% - 40px)}:host(.animated) .update-button{display:none}:host(.set-mode) .basket-button{display:flex;gap:8px;align-items:center;box-sizing:border-box;justify-content:center;border:none;background-color:#f4f4f4;font-weight:500;color:#525252}:host(.set-mode) .title{font-weight:400;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}:host(.set-mode){align-items:flex-start}:host(.set-mode) .image{border:none;min-width:var(--min-image-size-set-mode);min-height:var(--min-image-size-set-mode)}:host(.set-mode.product-card--source){position:relative;flex-grow:1}:host(.set-mode.product-card--source) .image{aspect-ratio:1;width:100%;height:100%}:host(.set-mode.product-card--source)::after{content:url(\"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.6667 17.3334H8.00002C7.62224 17.3334 7.30558 17.2056 7.05002 16.95C6.79446 16.6945 6.66669 16.3778 6.66669 16C6.66669 15.6222 6.79446 15.3056 7.05002 15.05C7.30558 14.7945 7.62224 14.6667 8.00002 14.6667H14.6667V8.00002C14.6667 7.62224 14.7945 7.30558 15.05 7.05002C15.3056 6.79446 15.6222 6.66669 16 6.66669C16.3778 6.66669 16.6945 6.79446 16.95 7.05002C17.2056 7.30558 17.3334 7.62224 17.3334 8.00002V14.6667H24C24.3778 14.6667 24.6945 14.7945 24.95 15.05C25.2056 15.3056 25.3334 15.6222 25.3334 16C25.3334 16.3778 25.2056 16.6945 24.95 16.95C24.6945 17.2056 24.3778 17.3334 24 17.3334H17.3334V24C17.3334 24.3778 17.2056 24.6945 16.95 24.95C16.6945 25.2056 16.3778 25.3334 16 25.3334C15.6222 25.3334 15.3056 25.2056 15.05 24.95C14.7945 24.6945 14.6667 24.3778 14.6667 24V17.3334Z' fill='%23A8A8A8'/%3E%3C/svg%3E\");background-color:white;position:absolute;padding:16px;top:calc(50% - 48px);right:-88px;outline:1px solid #f4f4f4;border-radius:50%;width:32px;height:32px}@media (max-width: 768px){:host(.set-mode.product-card--source)::after{padding:8px;right:-24px}}:host(.set-mode) .basket-button.applied-discount{background:transparent;border:1px solid #e0e0e0}:host(.set-mode) .price-container{flex-direction:row;gap:12px}@keyframes pulse{0%{background-color:rgb(244, 244, 244)}50%{background-color:rgb(232, 232, 232)}100%{background-color:rgba(244, 244, 244)}}";
531
+ const vviinnProductCardCss = ":host{align-items:center;display:flex;flex-direction:column;position:relative;gap:8px;height:100%;--min-image-size-set-mode:155px}.price-container{display:flex;flex-direction:column}.price-sale,.price-regular{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#161616}.price-outdated{font-style:normal;font-weight:normal;font-size:16px;line-height:24px;color:#757575;text-decoration:line-through}.product-type{word-wrap:anywhere}.image{display:grid;align-content:center;-o-object-position:50% 50%;object-position:50% 50%;-o-object-fit:contain;object-fit:contain;text-align:center;box-sizing:border-box}.image.responsive{width:100%;height:auto;aspect-ratio:1}.brand,.type{display:none}.title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#161616;display:-webkit-box;font-size:16px;font-style:normal;font-weight:500;line-height:24px;overflow:hidden}.deeplink{text-decoration:none;max-width:100%}.image-link{display:contents}picture{position:relative;width:100%}picture::before{content:\"\";opacity:0;width:100%;height:100%;box-sizing:border-box;display:block;top:0;left:0;position:absolute}.update-button{position:absolute;top:8px;right:8px;padding:6px;width:32px;height:32px;z-index:1;background-color:rgba(127, 127, 127, 0.4);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border:none;color:white;cursor:pointer}.update-button svg{width:20px;height:20px}.update-button::after{content:\"\";position:absolute;top:-4px;right:-4px;width:calc(100% + 8px);height:calc(100% + 8px)}.update-button:hover{background-color:rgba(127, 127, 127, 0.5)}.update-button.hidden{display:none}.basket-button{height:44px;font-size:16px;padding:10px 12px;box-sizing:border-box;border:none;cursor:pointer}.basket-button.basket-button-grid{width:100%;background-color:none;border:1px solid #dddddd}.basket-button.basket-button-continuity{align-self:start;background-color:#f7f7f7}.basket-button-continuity:hover{background-color:#eaeaea}.basket-button-grid:hover{background-color:#f7f7f7}:host(.dimmed) picture::after{content:\"\";width:100%;height:100%;box-sizing:border-box;background-color:#f7f7f7;display:block;top:0;left:0;position:absolute;mix-blend-mode:multiply}:host(.animated) picture::after{mix-blend-mode:normal}:host(.animated) picture::before{opacity:1;animation:pulse 1.8s infinite}:host(.animated) picture::after{content:url(\"data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_810_154)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M64.7332 1.23333C66.2665 12.2667 67.9665 13.9667 78.6665 15.2333C79.4332 15.3333 79.9999 15.9333 79.9999 16.6667C79.9999 17.4 79.4665 17.9333 78.6665 18.0667C67.9665 19.3667 66.2999 21.0333 64.7332 32.0667C64.6332 32.8 64.0665 33.3333 63.3665 33.3333C62.6665 33.3333 62.0999 32.8 61.9665 32.0667C60.4665 21.0333 58.7665 19.3667 48.0332 18.0667C47.2332 17.9667 46.6999 17.4333 46.6999 16.6667C46.6999 15.9 47.2332 15.3667 48.0332 15.2333C58.7665 13.7667 60.3999 12.2 61.9665 1.23333C62.0999 0.5 62.6665 0 63.3665 0C64.0665 0 64.5999 0.5 64.7332 1.23333ZM38.5665 71.5667C38.3665 72.6 37.6665 73.3333 36.6665 73.3333C35.6665 73.3333 34.9665 72.6 34.7998 71.5667C31.9332 50.7 29.0998 47.9 8.49984 45.2C7.39984 45.1 6.6665 44.3 6.6665 43.3C6.6665 42.3 7.39984 41.5333 8.49984 41.4333C29.1332 39.1333 32.0998 35.9333 34.7998 15.0333C34.9665 14.0333 35.6665 13.3333 36.6665 13.3333C37.6665 13.3333 38.3665 14 38.5665 15.0333C41.2665 35.9333 44.1998 39.1333 64.8665 41.4333C65.9332 41.5333 66.6665 42.2667 66.6665 43.3C66.6665 44.3333 65.9332 45.1 64.8665 45.2C44.1998 47.5 41.2665 50.7 38.5665 71.5667Z' fill='white'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_810_154'%3E%3Crect width='80' height='80' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\");background-color:transparent;position:absolute;width:80px;height:80px;left:calc(50% - 40px);top:calc(50% - 40px)}:host(.animated) .update-button{display:none}:host(.set-mode){line-height:20px;align-items:flex-start;height:auto}:host(.set-mode) .basket-button{display:flex;gap:8px;align-items:center;box-sizing:border-box;justify-content:center;border:none;background-color:#f4f4f4;font-weight:500;color:#525252}:host(.set-mode:not(.animated)) .basket-button{margin-top:auto}:host(.set-mode) .basket-button:hover{background-color:rgb(234, 234, 234)}:host(.set-mode) .title{font-weight:400}:host(.set-mode) .image{width:var(--vviinn-set-mode-image-width, 100%);height:auto;border:none;aspect-ratio:1;min-width:var(--min-image-size-set-mode);min-height:var(--min-image-size-set-mode)}:host(.set-mode.product-card--source){height:-moz-fit-content;height:fit-content;position:relative;flex-grow:1}:host(.set-mode.product-card--source) .image{aspect-ratio:1;width:100%;height:100%}:host(.set-mode.product-card--source)::after{content:url(\"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14.6667 17.3334H8.00002C7.62224 17.3334 7.30558 17.2056 7.05002 16.95C6.79446 16.6945 6.66669 16.3778 6.66669 16C6.66669 15.6222 6.79446 15.3056 7.05002 15.05C7.30558 14.7945 7.62224 14.6667 8.00002 14.6667H14.6667V8.00002C14.6667 7.62224 14.7945 7.30558 15.05 7.05002C15.3056 6.79446 15.6222 6.66669 16 6.66669C16.3778 6.66669 16.6945 6.79446 16.95 7.05002C17.2056 7.30558 17.3334 7.62224 17.3334 8.00002V14.6667H24C24.3778 14.6667 24.6945 14.7945 24.95 15.05C25.2056 15.3056 25.3334 15.6222 25.3334 16C25.3334 16.3778 25.2056 16.6945 24.95 16.95C24.6945 17.2056 24.3778 17.3334 24 17.3334H17.3334V24C17.3334 24.3778 17.2056 24.6945 16.95 24.95C16.6945 25.2056 16.3778 25.3334 16 25.3334C15.6222 25.3334 15.3056 25.2056 15.05 24.95C14.7945 24.6945 14.6667 24.3778 14.6667 24V17.3334Z' fill='%23A8A8A8'/%3E%3C/svg%3E\");background-color:white;position:absolute;padding:16px;top:calc(50% - 48px);right:-88px;outline:1px solid #f4f4f4;border-radius:50%;width:32px;height:32px}@media (max-width: 768px){:host(.set-mode.product-card--source)::after{padding:8px;right:-24px}}:host(.set-mode) .basket-button.applied-discount{background:transparent;border:1px solid #e0e0e0}:host(.set-mode) .price-container{flex-direction:row;gap:12px}@keyframes pulse{0%{background-color:rgb(244, 244, 244)}50%{background-color:rgb(232, 232, 232)}100%{background-color:rgba(244, 244, 244)}}.discount-label{position:absolute;left:0;top:13px;line-height:20px;padding:2px 4px;border-radius:0px 4px 4px 0px;color:white;background-color:#ff3944;letter-spacing:0.5px}";
523
532
 
524
533
  const VviinnProductCard = class {
525
534
  constructor(hostRef) {
@@ -656,7 +665,7 @@ const VviinnProductCard = class {
656
665
  dimmed: this.dimmedBackground,
657
666
  animated: this.isTransitioning,
658
667
  "set-mode": this.isSetMode,
659
- }, exportparts: "brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title, basket-button, update-button-item" }, index.h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), this.isTransitioning ? (index.h(index.Fragment, null, index.h("vviinn-skeleton", { height: 20 }), index.h("vviinn-skeleton", { height: 20, halfWidth: true }))) : (index.h(index.Fragment, null, index.h(Linked, { deeplink: this.deeplink, part: "deeplink" }, index.h("span", { class: "title", part: "title" }, this.productTitle)), index.h("span", { class: "brand", part: "brand" }, this.brand), index.h("span", { class: "type", part: "type" }, this.productType), index.h(Price, { prefix: (_a = this.pricePrefix) !== null && _a !== void 0 ? _a : search_store.state.pricePrefix, currency: (_b = this.currency) !== null && _b !== void 0 ? _b : search_store.state.currencySign, price: this.price, salePrice: this.salePrice, locale: (_c = this.locale) !== null && _c !== void 0 ? _c : search_store.state.locale }))), (this.addToBasketShow || this.isSetMode) && (index.h(index.Fragment, null, this.isTransitioning ? (index.h("vviinn-skeleton", { height: 44 })) : (index.h("button", { class: {
668
+ }, exportparts: "brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title, basket-button, update-button-item" }, index.h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), this.isTransitioning ? (index.h(index.Fragment, null, index.h("vviinn-skeleton", { height: 20 }), index.h("vviinn-skeleton", { height: 20, halfWidth: true }))) : (index.h(index.Fragment, null, index.h(Linked, { deeplink: this.deeplink, part: "deeplink" }, index.h("span", { class: "title", part: "title" }, this.productTitle)), index.h("span", { class: "brand", part: "brand" }, this.brand), index.h("span", { class: "type", part: "type" }, this.productType), index.h(Price, { prefix: (_a = this.pricePrefix) !== null && _a !== void 0 ? _a : search_store.state.pricePrefix, currency: (_b = this.currency) !== null && _b !== void 0 ? _b : search_store.state.currencySign, price: this.price, salePrice: this.salePrice, locale: (_c = this.locale) !== null && _c !== void 0 ? _c : search_store.state.locale }), this.isSetMode && !this.appliedDiscountPercentage && (index.h("div", { class: "discount-label" }, `-${this.currentDiscountPercentage}%`)))), (this.addToBasketShow || this.isSetMode) && (index.h(index.Fragment, null, this.isTransitioning ? (index.h("vviinn-skeleton", { height: 44 })) : (index.h("button", { class: {
660
669
  "basket-button": true,
661
670
  "basket-button-grid": this.isGridMode || this.isSetMode,
662
671
  "basket-button-continuity ": this.isContinuityMode,
@@ -683,7 +692,7 @@ const VviinnProductCard = class {
683
692
  };
684
693
  VviinnProductCard.style = vviinnProductCardCss;
685
694
 
686
- const vviinnSkeletonCss = ":host{display:block;width:100%;height:100%}.vviinn-skeleton{display:inline-block;animation:pulse 1.2s infinite;line-height:20px}@keyframes pulse{0%{background-color:rgb(244, 244, 244)}50%{background-color:rgb(232, 232, 232)}100%{background-color:rgba(244, 244, 244)}}";
695
+ const vviinnSkeletonCss = ":host{display:block;width:100%;height:100%;line-height:0}.vviinn-skeleton{display:inline-block;animation:pulse 1.2s infinite}@keyframes pulse{0%{background-color:rgb(244, 244, 244)}50%{background-color:rgb(232, 232, 232)}100%{background-color:rgba(244, 244, 244)}}";
687
696
 
688
697
  const VviinnSkeleton = class {
689
698
  constructor(hostRef) {
@@ -1402,7 +1411,7 @@ const resources = {
1402
1411
  },
1403
1412
  };
1404
1413
 
1405
- const vviinnVprWidgetCss = ":host{display:grid;grid-gap:1rem;width:100%}:host(:not(.loaded)){position:absolute;visibility:hidden}:host(.grid) vviinn-product-card::part(image){border:1px solid #dddddd;width:100%}.widget-header{display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;align-items:center}.widget-header h3{margin-top:8px;margin-bottom:0;font-size:14px;font-weight:400;line-height:20px}.update-button{display:flex;align-items:center;justify-content:center;color:#525252;gap:8px;padding:8px 10px;background:rgb(244, 244, 244);border:none;cursor:pointer}.update-button:hover{background:rgb(234, 234, 234)}.update-button svg{color:#6f6f6f}h2{margin:0}vviinn-product-card::part(price-container){align-self:flex-start;text-align:left;display:flex}.results{display:grid;grid-gap:1rem}.no-result-text{font-size:20px}.visually-hidden{position:absolute;top:0;left:0;z-index:-1;height:0;width:0}h2{margin:0}:host(.grid) h2{justify-content:center}:host(.grid) vviinn-product-card::part(image){min-width:100%}:host(.grid) vviinn-product-card::part(image-link){width:100%}:host(.grid) vviinn-product-card::part(title),:host(.grid) vviinn-product-card::part(brand),:host(.grid) vviinn-product-card::part(type){text-align:center}:host(.grid) vviinn-product-card::part(price-container){align-self:center}:host(.continuity) vviinn-product-card::part(title),:host(.continuity) vviinn-product-card::part(brand),:host(.continuity) vviinn-product-card::part(type),:host(.continuity) vviinn-product-card::part(deeplink){text-align:left;max-width:unset;align-self:start}";
1414
+ const vviinnVprWidgetCss = ":host{display:grid;grid-gap:1rem;width:100%}:host(:not(.loaded)){position:absolute;visibility:hidden}:host(.grid) vviinn-product-card::part(image){border:1px solid #dddddd;width:100%}:host(.set) vviinn-carousel{overflow-x:auto}:host(.set) vviinn-carousel::-webkit-scrollbar{display:none}.widget-header{display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;align-items:center}.widget-header h3{margin-top:8px;margin-bottom:0;font-size:14px;font-weight:400;line-height:20px}.update-button{display:flex;align-items:center;justify-content:center;color:#525252;gap:8px;padding:8px 10px;background:rgb(244, 244, 244);border:none;cursor:pointer}.update-button:hover{background:rgb(234, 234, 234)}.update-button svg{color:#6f6f6f}h2{margin:0}vviinn-product-card::part(price-container){align-self:flex-start;text-align:left;display:flex}.results{display:grid;grid-gap:1rem}.no-result-text{font-size:20px}.visually-hidden{position:absolute;top:0;left:0;z-index:-1;height:0;width:0}h2{margin:0}:host(.grid) h2{justify-content:center}:host(.grid) vviinn-product-card::part(image){min-width:100%}:host(.grid) vviinn-product-card::part(image-link){width:100%}:host(.grid) vviinn-product-card::part(title),:host(.grid) vviinn-product-card::part(brand),:host(.grid) vviinn-product-card::part(type){text-align:center}:host(.grid) vviinn-product-card::part(price-container){align-self:center}:host(.continuity) vviinn-product-card::part(title),:host(.continuity) vviinn-product-card::part(brand),:host(.continuity) vviinn-product-card::part(type),:host(.continuity) vviinn-product-card::part(deeplink){text-align:left;max-width:unset;align-self:start}";
1406
1415
 
1407
1416
  var __rest = (undefined && undefined.__rest) || function (s, e) {
1408
1417
  var t = {};
@@ -1546,7 +1555,7 @@ const VviinnVprWidget = class {
1546
1555
  async componentWillLoad() {
1547
1556
  await i18next.instance.init({
1548
1557
  lng: this.locale,
1549
- fallbackLng: "de-DE",
1558
+ fallbackLng: "en",
1550
1559
  resources,
1551
1560
  });
1552
1561
  if (this.excluded) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-5619b5ec.js');
6
- const _package = require('./package-60884765.js');
6
+ const _package = require('./package-504b33d0.js');
7
7
  const VisualSearchIcon = require('./VisualSearchIcon-1180d079.js');
8
8
 
9
9
  const vviinnVprButtonCss = ":host{display:block}";
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-5619b5ec.js');
6
- const _package = require('./package-60884765.js');
6
+ const _package = require('./package-504b33d0.js');
7
7
  const customizedSlots = require('./customized-slots-1b59bd38.js');
8
8
  const constants = require('./constants-7684cbfc.js');
9
9
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-5619b5ec.js');
6
6
  const search_store = require('./search.store-0b319593.js');
7
7
  const i18next = require('./i18next-74ff3413.js');
8
- const _package = require('./package-60884765.js');
8
+ const _package = require('./package-504b33d0.js');
9
9
  const customizedSlots = require('./customized-slots-1b59bd38.js');
10
10
  const index$1 = require('./index-279a6a0f.js');
11
11
  const constants = require('./constants-7684cbfc.js');
@@ -409,7 +409,7 @@ const VviinnVpsWidget = class {
409
409
  async componentWillLoad() {
410
410
  await i18next.instance.init({
411
411
  lng: this.locale,
412
- fallbackLng: "de-DE",
412
+ fallbackLng: "en",
413
413
  resources,
414
414
  });
415
415
  customizedSlots.slotChangeListener(this, this.el);
@@ -1,6 +1,7 @@
1
1
  export const COLUMNS_NUMBER_CSS_VAR = "--vviinn-carousel-columns-internal";
2
2
  export const CAROUSEL_WIDTH_CSS_VAR = "--vviinn-carousel-content-width";
3
3
  export const CAROUSEL_IMAGE_WIDTH_CSS_VAR = "--vviinn-carousel-image-width";
4
+ export const SET_MODE_IMAGE_WIDTH = "--vviinn-set-mode-image-width";
4
5
  export const CONTENT_GROUP_CSS_CLASS = "items-group";
5
6
  export const SET_MODE_INITIAL_DISCOUNT = 5;
6
7
  export const SET_MODE_MAX_DISCOUNT = 15;
@@ -1,42 +1,14 @@
1
1
  :host {
2
2
  --vviinn-progressbar-width: 0;
3
- --vviinn-carousel-item-width: 150px;
4
3
  --vviinn-carousel-columns-internal: var(--vviinn-carousel-columns, 4);
5
- --vviinn-carousel-image-width-system: 140px;
6
4
  }
7
5
 
8
6
  .body {
9
7
  display: flex;
10
8
  position: relative;
11
- width: var(--vviinn-carousel-content-width);
12
9
  flex-direction: column;
13
10
  }
14
11
 
15
- .body.set {
16
- justify-content: space-between;
17
- overflow-x: auto;
18
- margin-left: auto;
19
- display: flex;
20
- flex-direction: row;
21
- gap: 112px;
22
- }
23
-
24
- .body.set::-webkit-scrollbar {
25
- display: none;
26
- }
27
-
28
- @media (max-width: 768px) {
29
- .body.set {
30
- gap: 40px;
31
- }
32
- }
33
-
34
- .body.set .content {
35
- max-width: -moz-fit-content;
36
- max-width: fit-content;
37
- overflow: unset;
38
- }
39
-
40
12
  .bullets {
41
13
  margin-top: 16px;
42
14
  display: flex;
@@ -77,10 +49,6 @@
77
49
  padding-bottom: 16px;
78
50
  }
79
51
 
80
- .content.set {
81
- grid-gap: 20px;
82
- }
83
-
84
52
  .content.left > * {
85
53
  scroll-snap-align: start;
86
54
  }
@@ -152,3 +120,31 @@ vviinn-product-card::part(price-container) {
152
120
  grid-template-columns: repeat(2, 1fr);
153
121
  }
154
122
  }
123
+
124
+ .body.set {
125
+ max-width: 100%;
126
+ justify-content: space-between;
127
+ margin-left: auto;
128
+ display: flex;
129
+ flex-direction: row;
130
+ gap: 112px;
131
+ }
132
+
133
+ .body.set::-webkit-scrollbar {
134
+ display: none;
135
+ }
136
+
137
+ @media (max-width: 768px) {
138
+ .body.set {
139
+ gap: 40px;
140
+ }
141
+ }
142
+
143
+ .content.set {
144
+ grid-gap: 20px;
145
+ height: -moz-fit-content;
146
+ height: fit-content;
147
+ max-width: -moz-fit-content;
148
+ max-width: fit-content;
149
+ overflow: unset;
150
+ }
@@ -1,7 +1,7 @@
1
1
  import { Host, h, } from "@stencil/core";
2
2
  import { chunksOf } from "fp-ts/lib/Array";
3
3
  import { ChevronIcon } from "../vviinn-icons";
4
- import { CAROUSEL_IMAGE_WIDTH_CSS_VAR, CAROUSEL_WIDTH_CSS_VAR, COLUMNS_NUMBER_CSS_VAR, CONTENT_GROUP_CSS_CLASS, SET_MODE_DISCOUNT_STEP, SET_MODE_INITIAL_DISCOUNT, SET_MODE_MAX_DISCOUNT, } from "./constants";
4
+ import { CAROUSEL_IMAGE_WIDTH_CSS_VAR, CAROUSEL_WIDTH_CSS_VAR, COLUMNS_NUMBER_CSS_VAR, CONTENT_GROUP_CSS_CLASS, SET_MODE_DISCOUNT_STEP, SET_MODE_IMAGE_WIDTH, SET_MODE_INITIAL_DISCOUNT, SET_MODE_MAX_DISCOUNT, } from "./constants";
5
5
  import { calculateDiscount } from "../../utils/number";
6
6
  /**
7
7
  * @part carousel-button
@@ -12,6 +12,7 @@ export class VviinnCarousel {
12
12
  this.resizeObserver = new ResizeObserver(() => this.handleResize());
13
13
  this.defaultAnimationInterval = 2000;
14
14
  this.mutationObserver = new MutationObserver(() => this.cloneSlottedContent());
15
+ this.handleWindowResize = () => this.setImageWidthSetMode("100%");
15
16
  this.isLastGroup = () => this.activeContentGroup === this.getContentGroups().length - 1 &&
16
17
  this.isGridMode;
17
18
  this.isFirstGroup = () => this.activeContentGroup === 0 && this.isGridMode;
@@ -23,10 +24,12 @@ export class VviinnCarousel {
23
24
  if (recommendationIndex + step < this.recommendations.length) {
24
25
  newCrossSellingRecommendations[crossSellingIndex] =
25
26
  this.recommendations[recommendationIndex + step];
27
+ this.crossSellingRecommendations = [...newCrossSellingRecommendations];
26
28
  let element = this.el.querySelector(`[data-id="${productId}"]`);
27
29
  const button = element.shadowRoot.querySelector(".update-button");
28
30
  button === null || button === void 0 ? void 0 : button.classList.add("hidden");
29
- this.crossSellingRecommendations = [...newCrossSellingRecommendations];
31
+ const imageWidth = element.getBoundingClientRect().width;
32
+ this.setImageWidthSetMode(`${imageWidth}px`);
30
33
  const animationTimer = setTimeout(() => {
31
34
  if (recommendationIndex + step * 2 <= this.recommendations.length - 1) {
32
35
  button === null || button === void 0 ? void 0 : button.classList.remove("hidden");
@@ -64,6 +67,7 @@ export class VviinnCarousel {
64
67
  this.isContinuityMode = this.mode === "continuity";
65
68
  const columnsNumber = this.getColumnsNumber();
66
69
  if (this.isSetMode) {
70
+ window.addEventListener("resize", this.handleWindowResize);
67
71
  this.sourceProduct = this.recommendations[0];
68
72
  this.recommendations = this.recommendations.slice(1);
69
73
  }
@@ -73,6 +77,7 @@ export class VviinnCarousel {
73
77
  }
74
78
  disconnectedCallback() {
75
79
  this.resizeObserver.disconnect();
80
+ window.removeEventListener("resize", this.handleWindowResize);
76
81
  }
77
82
  componentDidLoad() {
78
83
  this.setWidth();
@@ -117,6 +122,9 @@ export class VviinnCarousel {
117
122
  : widthInDocument;
118
123
  this.el.style.setProperty(CAROUSEL_IMAGE_WIDTH_CSS_VAR, `${itemWidth}px`);
119
124
  }
125
+ setImageWidthSetMode(width) {
126
+ this.el.style.setProperty(SET_MODE_IMAGE_WIDTH, width);
127
+ }
120
128
  getContentClassMap() {
121
129
  return {
122
130
  content: true,
@@ -254,7 +262,7 @@ export class VviinnCarousel {
254
262
  const salePrice = this.isSetMode
255
263
  ? setModeDiscount
256
264
  : recommendation.price.sale;
257
- return (h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: salePrice, responsive: this.isGridMode || this.isSetMode, dimmedBackground: this.isContinuityMode || this.isSetMode, campaignTypeId: this.campaignTypeId, index: rank, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, mode: this.mode, "data-id": recommendation.productId, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount }));
265
+ return (h("vviinn-product-card", { part: "product-part", productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: 1, price: recommendation.price.actual, salePrice: salePrice, responsive: this.isGridMode, dimmedBackground: this.isContinuityMode || this.isSetMode, campaignTypeId: this.campaignTypeId, index: rank, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, mode: this.mode, "data-id": recommendation.productId, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount }));
258
266
  }
259
267
  renderRecommendationGroup(elements) {
260
268
  return (h("div", { class: CONTENT_GROUP_CSS_CLASS, part: "items-group" }, ...elements));
@@ -100,9 +100,7 @@ picture::before {
100
100
  position: absolute;
101
101
  top: 8px;
102
102
  right: 8px;
103
- display: flex;
104
- align-items: center;
105
- justify-content: center;
103
+ padding: 6px;
106
104
  width: 32px;
107
105
  height: 32px;
108
106
  z-index: 1;
@@ -114,6 +112,11 @@ picture::before {
114
112
  cursor: pointer;
115
113
  }
116
114
 
115
+ .update-button svg {
116
+ width: 20px;
117
+ height: 20px;
118
+ }
119
+
117
120
  .update-button::after {
118
121
  content: "";
119
122
  position: absolute;
@@ -172,10 +175,6 @@ picture::before {
172
175
  mix-blend-mode: multiply;
173
176
  }
174
177
 
175
- :host(.set-mode) {
176
- line-height: 20px;
177
- }
178
-
179
178
  :host(.animated) picture::after {
180
179
  mix-blend-mode: normal;
181
180
  }
@@ -199,6 +198,12 @@ picture::before {
199
198
  display: none;
200
199
  }
201
200
 
201
+ :host(.set-mode) {
202
+ line-height: 20px;
203
+ align-items: flex-start;
204
+ height: auto;
205
+ }
206
+
202
207
  :host(.set-mode) .basket-button {
203
208
  display: flex;
204
209
  gap: 8px;
@@ -211,24 +216,30 @@ picture::before {
211
216
  color: #525252;
212
217
  }
213
218
 
214
- :host(.set-mode) .title {
215
- font-weight: 400;
216
- text-overflow: ellipsis;
217
- overflow: hidden;
218
- white-space: nowrap;
219
+ :host(.set-mode:not(.animated)) .basket-button {
220
+ margin-top: auto;
219
221
  }
220
222
 
221
- :host(.set-mode) {
222
- align-items: flex-start;
223
+ :host(.set-mode) .basket-button:hover {
224
+ background-color: rgb(234, 234, 234);
225
+ }
226
+
227
+ :host(.set-mode) .title {
228
+ font-weight: 400;
223
229
  }
224
230
 
225
231
  :host(.set-mode) .image {
232
+ width: var(--vviinn-set-mode-image-width, 100%);
233
+ height: auto;
226
234
  border: none;
235
+ aspect-ratio: 1;
227
236
  min-width: var(--min-image-size-set-mode);
228
237
  min-height: var(--min-image-size-set-mode);
229
238
  }
230
239
 
231
240
  :host(.set-mode.product-card--source) {
241
+ height: -moz-fit-content;
242
+ height: fit-content;
232
243
  position: relative;
233
244
  flex-grow: 1;
234
245
  }
@@ -280,3 +291,15 @@ picture::before {
280
291
  background-color: rgba(244, 244, 244);
281
292
  }
282
293
  }
294
+
295
+ .discount-label {
296
+ position: absolute;
297
+ left: 0;
298
+ top: 13px;
299
+ line-height: 20px;
300
+ padding: 2px 4px;
301
+ border-radius: 0px 4px 4px 0px;
302
+ color: white;
303
+ background-color: #ff3944;
304
+ letter-spacing: 0.5px;
305
+ }
@@ -159,7 +159,7 @@ export class VviinnProductCard {
159
159
  dimmed: this.dimmedBackground,
160
160
  animated: this.isTransitioning,
161
161
  "set-mode": this.isSetMode,
162
- }, exportparts: "brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title, basket-button, update-button-item" }, h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), this.isTransitioning ? (h(Fragment, null, h("vviinn-skeleton", { height: 20 }), h("vviinn-skeleton", { height: 20, halfWidth: true }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink" }, h("span", { class: "title", part: "title" }, this.productTitle)), h("span", { class: "brand", part: "brand" }, this.brand), h("span", { class: "type", part: "type" }, this.productType), h(Price, { prefix: (_a = this.pricePrefix) !== null && _a !== void 0 ? _a : state.pricePrefix, currency: (_b = this.currency) !== null && _b !== void 0 ? _b : state.currencySign, price: this.price, salePrice: this.salePrice, locale: (_c = this.locale) !== null && _c !== void 0 ? _c : state.locale }))), (this.addToBasketShow || this.isSetMode) && (h(Fragment, null, this.isTransitioning ? (h("vviinn-skeleton", { height: 44 })) : (h("button", { class: {
162
+ }, exportparts: "brand, currency, deeplink, image, image-link, price-amount-sale, price-amount-outdated, price-amount-regular, price-container, price-outdated, price-regular, price-sale, price-prefix, title, basket-button, update-button-item" }, h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), this.isTransitioning ? (h(Fragment, null, h("vviinn-skeleton", { height: 20 }), h("vviinn-skeleton", { height: 20, halfWidth: true }))) : (h(Fragment, null, h(Linked, { deeplink: this.deeplink, part: "deeplink" }, h("span", { class: "title", part: "title" }, this.productTitle)), h("span", { class: "brand", part: "brand" }, this.brand), h("span", { class: "type", part: "type" }, this.productType), h(Price, { prefix: (_a = this.pricePrefix) !== null && _a !== void 0 ? _a : state.pricePrefix, currency: (_b = this.currency) !== null && _b !== void 0 ? _b : state.currencySign, price: this.price, salePrice: this.salePrice, locale: (_c = this.locale) !== null && _c !== void 0 ? _c : state.locale }), this.isSetMode && !this.appliedDiscountPercentage && (h("div", { class: "discount-label" }, `-${this.currentDiscountPercentage}%`)))), (this.addToBasketShow || this.isSetMode) && (h(Fragment, null, this.isTransitioning ? (h("vviinn-skeleton", { height: 44 })) : (h("button", { class: {
163
163
  "basket-button": true,
164
164
  "basket-button-grid": this.isGridMode || this.isSetMode,
165
165
  "basket-button-continuity ": this.isContinuityMode,
@@ -2,12 +2,12 @@
2
2
  display: block;
3
3
  width: 100%;
4
4
  height: 100%;
5
+ line-height: 0;
5
6
  }
6
7
 
7
8
  .vviinn-skeleton {
8
9
  display: inline-block;
9
10
  animation: pulse 1.2s infinite;
10
- line-height: 20px;
11
11
  }
12
12
 
13
13
  @keyframes pulse {
@@ -18,6 +18,14 @@
18
18
  width: 100%;
19
19
  }
20
20
 
21
+ :host(.set) vviinn-carousel {
22
+ overflow-x: auto;
23
+ }
24
+
25
+ :host(.set) vviinn-carousel::-webkit-scrollbar {
26
+ display: none;
27
+ }
28
+
21
29
  .widget-header {
22
30
  display: flex;
23
31
  flex-wrap: wrap;
@@ -175,7 +175,7 @@ export class VviinnVprWidget {
175
175
  async componentWillLoad() {
176
176
  await i18next.init({
177
177
  lng: this.locale,
178
- fallbackLng: "de-DE",
178
+ fallbackLng: "en",
179
179
  resources,
180
180
  });
181
181
  if (this.excluded) {
@@ -368,7 +368,7 @@ export class VviinnVpsWidget {
368
368
  async componentWillLoad() {
369
369
  await i18next.init({
370
370
  lng: this.locale,
371
- fallbackLng: "de-DE",
371
+ fallbackLng: "en",
372
372
  resources,
373
373
  });
374
374
  slotChangeListener(this, this.el);
@@ -1,3 +1,3 @@
1
- const version = "2.48.0";
1
+ const version = "2.48.1";
2
2
 
3
3
  export { version as v };