vviinn-widgets 2.136.0 → 2.136.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 (61) hide show
  1. package/dist/cjs/{index-f7204218.js → index-4aba5eb2.js} +72 -0
  2. package/dist/cjs/{package-1ad58aed.js → package-c3453d61.js} +1 -1
  3. package/dist/cjs/search-filters_19.cjs.entry.js +6 -5
  4. package/dist/cjs/vviinn-button_2.cjs.entry.js +2 -1
  5. package/dist/cjs/vviinn-carousel_9.cjs.entry.js +7 -7
  6. package/dist/cjs/vviinn-vps-button.cjs.entry.js +1 -1
  7. package/dist/cjs/vviinn-vps-widget.cjs.entry.js +5 -5
  8. package/dist/collection/components/vviinn-carousel/vviinn-carousel.js +2 -2
  9. package/dist/collection/components/vviinn-modal/vviinn-modal.js +3 -2
  10. package/dist/collection/components/vviinn-product-card/vviinn-energy-label/vviinn-energy-label.js +2 -1
  11. package/dist/collection/components/vviinn-product-card/vviinn-product-card.js +2 -1
  12. package/dist/collection/components/vviinn-results/vviinn-results.js +2 -1
  13. package/dist/collection/components/vviinn-text-search/vviinn-text-search.js +2 -1
  14. package/dist/collection/components/vviinn-vpr-button/recommendations-sidebar/recommendations-sidebar.js +2 -1
  15. package/dist/collection/components/vviinn-vpr-button/vviinn-vpr-button.js +0 -1
  16. package/dist/collection/components/vviinn-vpr-widget/vviinn-vpr-widget.js +1 -1
  17. package/dist/collection/components/vviinn-vps-button/vviinn-vps-button.js +1 -2
  18. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.css +1 -1
  19. package/dist/collection/components/vviinn-vps-widget/vviinn-vps-widget.js +4 -5
  20. package/dist/collection/cssParts/index.js +20 -0
  21. package/dist/collection/cssParts/product.js +46 -0
  22. package/dist/esm/index-0b2d463f.js +118 -0
  23. package/dist/esm/{package-281e6673.js → package-5f612786.js} +1 -1
  24. package/dist/esm/search-filters_19.entry.js +6 -5
  25. package/dist/esm/vviinn-button_2.entry.js +2 -1
  26. package/dist/esm/vviinn-carousel_9.entry.js +7 -7
  27. package/dist/esm/vviinn-vps-button.entry.js +1 -1
  28. package/dist/esm/vviinn-vps-widget.entry.js +5 -5
  29. package/dist/types/components/vviinn-vpr-button/vviinn-vpr-button.d.ts +0 -1
  30. package/dist/types/components/vviinn-vpr-widget/vviinn-vpr-widget.d.ts +0 -1
  31. package/dist/types/components/vviinn-vps-button/vviinn-vps-button.d.ts +1 -2
  32. package/dist/types/cssParts/index.d.ts +6 -0
  33. package/dist/types/cssParts/product.d.ts +4 -0
  34. package/dist/vviinn-widgets/{p-7533fb17.js → p-516b37c8.js} +1 -1
  35. package/dist/vviinn-widgets/p-8bcbfccd.entry.js +1 -0
  36. package/dist/vviinn-widgets/{p-7a790250.entry.js → p-8f29425e.entry.js} +1 -1
  37. package/dist/vviinn-widgets/p-94be9803.entry.js +11 -0
  38. package/dist/vviinn-widgets/p-c1b321ca.entry.js +1 -0
  39. package/dist/vviinn-widgets/p-c421209b.js +1 -0
  40. package/dist/vviinn-widgets/p-c63571ac.entry.js +1 -0
  41. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  42. package/package.json +1 -1
  43. package/www/build/{p-7533fb17.js → p-516b37c8.js} +1 -1
  44. package/www/build/p-8bcbfccd.entry.js +1 -0
  45. package/www/build/{p-7a790250.entry.js → p-8f29425e.entry.js} +1 -1
  46. package/www/build/p-94be9803.entry.js +11 -0
  47. package/www/build/p-c1b321ca.entry.js +1 -0
  48. package/www/build/p-c421209b.js +1 -0
  49. package/www/build/p-c63571ac.entry.js +1 -0
  50. package/www/build/vviinn-widgets.esm.js +1 -1
  51. package/dist/esm/index-5edc8c32.js +0 -52
  52. package/dist/vviinn-widgets/p-463dd865.entry.js +0 -1
  53. package/dist/vviinn-widgets/p-5beafc98.entry.js +0 -1
  54. package/dist/vviinn-widgets/p-b41e7a5b.entry.js +0 -1
  55. package/dist/vviinn-widgets/p-ed7b5941.js +0 -1
  56. package/dist/vviinn-widgets/p-f44794c2.entry.js +0 -11
  57. package/www/build/p-463dd865.entry.js +0 -1
  58. package/www/build/p-5beafc98.entry.js +0 -1
  59. package/www/build/p-b41e7a5b.entry.js +0 -1
  60. package/www/build/p-ed7b5941.js +0 -1
  61. package/www/build/p-f44794c2.entry.js +0 -11
@@ -44,14 +44,86 @@ const histogramPartsList = [
44
44
  "histogram-label",
45
45
  ];
46
46
 
47
+ const productCardGeneralPartsList = [
48
+ "product-card",
49
+ "content-container",
50
+ "brand",
51
+ "product-type",
52
+ "currency",
53
+ "deeplink",
54
+ "image",
55
+ "image-container",
56
+ "image-link",
57
+ "image-picture",
58
+ "title",
59
+ "basket-button",
60
+ "basket-button-container",
61
+ "update-button-item",
62
+ "product-card-actions",
63
+ "product-card-top-actions",
64
+ "discount-label",
65
+ "discount-percentage",
66
+ ];
67
+ const energyLabelPartsList = [
68
+ "energy-label-container",
69
+ "energy-label-icon",
70
+ "energy-label-product-type",
71
+ "energy-label-data-sheet-link",
72
+ ];
73
+ const customLabelPartsList = [
74
+ "custom-label-0",
75
+ "custom-label-1",
76
+ "custom-label-2",
77
+ "custom-label-3",
78
+ "custom-label-4",
79
+ ];
80
+ const pricePartsList = [
81
+ "price-container",
82
+ "price-regular",
83
+ "price-sale",
84
+ "price-outdated",
85
+ "price-amount-regular",
86
+ "price-amount-sale",
87
+ "price-amount-outdated",
88
+ "price-amount-base-regular",
89
+ "price-amount-base-sale",
90
+ "price-amount-base-outdated",
91
+ "price-prefix",
92
+ ];
93
+
47
94
  const makeExportPartsString = (...args) => args.flat().join(", ");
48
95
  const extendedFiltersParts = makeExportPartsString(extendedFiltersPartsList, histogramPartsList, generalFiltersPartsList);
49
96
  const filtersParts = makeExportPartsString(filtersPartsList, histogramPartsList, generalFiltersPartsList);
50
97
  makeExportPartsString(selectedFiltersPartsList, generalFiltersPartsList);
51
98
  const priceRangeParts = makeExportPartsString(histogramPartsList);
99
+ const energyLabelParts = makeExportPartsString(energyLabelPartsList);
100
+ const productCardParts = makeExportPartsString(productCardGeneralPartsList, pricePartsList, customLabelPartsList, energyLabelPartsList);
52
101
  const searchWidgetFilterParts = makeExportPartsString(extendedFiltersPartsList, filtersPartsList, histogramPartsList, generalFiltersPartsList);
102
+ const searchWidgetButtonParts = makeExportPartsString([
103
+ "upload-photo_button",
104
+ "start-camera_button",
105
+ ]);
106
+ const searchBarParts = makeExportPartsString([
107
+ "text-search-input",
108
+ "text-search-button",
109
+ ]);
110
+ const carouselParts = makeExportPartsString([
111
+ "items-group",
112
+ "carousel-button",
113
+ ]);
114
+ const modalParts = makeExportPartsString([
115
+ "results-title",
116
+ "close-button",
117
+ "secondary-action",
118
+ ]);
53
119
 
120
+ exports.carouselParts = carouselParts;
121
+ exports.energyLabelParts = energyLabelParts;
54
122
  exports.extendedFiltersParts = extendedFiltersParts;
55
123
  exports.filtersParts = filtersParts;
124
+ exports.modalParts = modalParts;
56
125
  exports.priceRangeParts = priceRangeParts;
126
+ exports.productCardParts = productCardParts;
127
+ exports.searchBarParts = searchBarParts;
128
+ exports.searchWidgetButtonParts = searchWidgetButtonParts;
57
129
  exports.searchWidgetFilterParts = searchWidgetFilterParts;
@@ -123,7 +123,7 @@ const slotChangeListener = (component, element) => {
123
123
  component.connectedCallback.call(component);
124
124
  };
125
125
 
126
- const version = "2.136.0";
126
+ const version = "2.136.1";
127
127
 
128
128
  exports.SlotSkeleton = SlotSkeleton;
129
129
  exports.campaignTypeNames = campaignTypeNames;
@@ -6,8 +6,9 @@ const index = require('./index-711d38e6.js');
6
6
  const search_store = require('./search.store-2527c63a.js');
7
7
  const Rectangle = require('./Rectangle-99c25901.js');
8
8
  const index$1 = require('./index-c94b611a.js');
9
- const _package = require('./package-1ad58aed.js');
9
+ const _package = require('./package-c3453d61.js');
10
10
  const index$2 = require('./index-4c9a5dbb.js');
11
+ const index$3 = require('./index-4aba5eb2.js');
11
12
  const SearchModalUploadIcon = require('./SearchModalUploadIcon-23f00a14.js');
12
13
 
13
14
  const MinusIcon = () => (index.h("svg", { width: "32", height: "32", viewBox: "0 0 32 32", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -3882,10 +3883,10 @@ const VviinnModal = class {
3882
3883
  }), search_store.Option.getOrElse(() => null));
3883
3884
  }
3884
3885
  render() {
3885
- return (index.h(index.Host, { exportparts: "secondary-action, title, close-button", class: { closed: !this.active, "first-screen": this.isFirstScreen }, onAnimationEnd: (ev) => this.handleAnimationEnd(ev) }, index.h("div", { class: "head" }, !this.hideBackButton && (index.h("button", { part: "secondary-action", onClick: () => {
3886
+ return (index.h(index.Host, { exportparts: index$3.modalParts, class: { closed: !this.active, "first-screen": this.isFirstScreen }, onAnimationEnd: (ev) => this.handleAnimationEnd(ev) }, index.h("div", { class: "head" }, !this.hideBackButton && (index.h("button", { part: "secondary-action", onClick: () => {
3886
3887
  this.resetState();
3887
3888
  this.resetTopScroll();
3888
- } }, index.h(SecondaryActionIcon, null))), index.h("div", { class: "title", part: "title" }, this.renderImage(), index.h("slot", { name: "vviinn-image-search-modal-title" }, index$1.instance.t("imageSearchModalTitle"))), index.h("button", { onClick: () => this.close(), class: "close-button", part: "close-button" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, index.h("path", { d: "M12 13.3892L6.91958 18.4696C6.72248 18.6667 6.49095 18.7653 6.225 18.7653C5.95905 18.7653 5.72753 18.6667 5.53043 18.4696C5.33333 18.2725 5.23478 18.041 5.23478 17.775C5.23478 17.5091 5.33333 17.2776 5.53043 17.0805L10.6109 12L5.53043 6.9196C5.33333 6.7225 5.23478 6.49098 5.23478 6.22503C5.23478 5.95908 5.33333 5.72755 5.53043 5.53045C5.72753 5.33335 5.95905 5.2348 6.225 5.2348C6.49095 5.2348 6.72248 5.33335 6.91958 5.53045L12 10.6109L17.0804 5.53045C17.2775 5.33335 17.5091 5.2348 17.775 5.2348C18.041 5.2348 18.2725 5.33335 18.4696 5.53045C18.6667 5.72755 18.7652 5.95908 18.7652 6.22503C18.7652 6.49098 18.6667 6.7225 18.4696 6.9196L13.3892 12L18.4696 17.0805C18.6667 17.2776 18.7652 17.5091 18.7652 17.775C18.7652 18.041 18.6667 18.2725 18.4696 18.4696C18.2725 18.6667 18.041 18.7653 17.775 18.7653C17.5091 18.7653 17.2775 18.6667 17.0804 18.4696L12 13.3892Z", fill: "currentColor" })))), index.h("div", { class: "body" }, index.h("slot", null))));
3889
+ } }, index.h(SecondaryActionIcon, null))), index.h("div", { class: "title", part: "results-title" }, this.renderImage(), index.h("slot", { name: "vviinn-image-search-modal-title" }, index$1.instance.t("imageSearchModalTitle"))), index.h("button", { onClick: () => this.close(), class: "close-button", part: "close-button" }, index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, index.h("path", { d: "M12 13.3892L6.91958 18.4696C6.72248 18.6667 6.49095 18.7653 6.225 18.7653C5.95905 18.7653 5.72753 18.6667 5.53043 18.4696C5.33333 18.2725 5.23478 18.041 5.23478 17.775C5.23478 17.5091 5.33333 17.2776 5.53043 17.0805L10.6109 12L5.53043 6.9196C5.33333 6.7225 5.23478 6.49098 5.23478 6.22503C5.23478 5.95908 5.33333 5.72755 5.53043 5.53045C5.72753 5.33335 5.95905 5.2348 6.225 5.2348C6.49095 5.2348 6.72248 5.33335 6.91958 5.53045L12 10.6109L17.0804 5.53045C17.2775 5.33335 17.5091 5.2348 17.775 5.2348C18.041 5.2348 18.2725 5.33335 18.4696 5.53045C18.6667 5.72755 18.7652 5.95908 18.7652 6.22503C18.7652 6.49098 18.6667 6.7225 18.4696 6.9196L13.3892 12L18.4696 17.0805C18.6667 17.2776 18.7652 17.5091 18.7652 17.775C18.7652 18.041 18.6667 18.2725 18.4696 18.4696C18.2725 18.6667 18.041 18.7653 17.775 18.7653C17.5091 18.7653 17.2775 18.6667 17.0804 18.4696L12 13.3892Z", fill: "currentColor" })))), index.h("div", { class: "body" }, index.h("slot", null))));
3889
3890
  }
3890
3891
  get el() { return index.getElement(this); }
3891
3892
  };
@@ -4284,7 +4285,7 @@ const VviinnResults = class {
4284
4285
  var _a, _b;
4285
4286
  return (index.h(index.Host, { id: "results-block", class: {
4286
4287
  "show-in-widget": this.showInWidget,
4287
- }, exportparts: "image-container, content-container, basket-button-container, title, product-card, brand, product-type, deeplink, currency, image, image-link, image-picture, price-container, price-amount-sale, price-amount-outdated, price-amount-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link" }, index.h("div", { class: "nothing-found" }, ((_a = this.getRecommendations()) === null || _a === void 0 ? void 0 : _a.length) === 0 && this.showInWidget && (index.h("vviinn-empty-results", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() })), this.showAspectRatioError && this.showInWidget && (index.h("vviinn-wrong-aspect-ratio", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() }))), index.h("div", { class: {
4288
+ }, exportparts: index$3.productCardParts }, index.h("div", { class: "nothing-found" }, ((_a = this.getRecommendations()) === null || _a === void 0 ? void 0 : _a.length) === 0 && this.showInWidget && (index.h("vviinn-empty-results", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() })), this.showAspectRatioError && this.showInWidget && (index.h("vviinn-wrong-aspect-ratio", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() }))), index.h("div", { class: {
4288
4289
  hidden: this.showAspectRatioError ||
4289
4290
  (this.recommendations.length === 0 &&
4290
4291
  search_store.searchState.results.length === 0),
@@ -4471,7 +4472,7 @@ const VviinnTextSearch = class {
4471
4472
  }
4472
4473
  }
4473
4474
  render() {
4474
- return (index.h(index.Host, { exportparts: "text-search-input, text-search-button" }, index.h("input", { class: {
4475
+ return (index.h(index.Host, { exportparts: index$3.searchBarParts }, index.h("input", { class: {
4475
4476
  "text-search-input": true,
4476
4477
  "text-search-input--with-icon": this.mode === "upload",
4477
4478
  }, part: "text-search-input", type: "text", placeholder: index$1.instance.t("textSearchPlaceholder"), value: this.searchQuery, onInput: (event) => this.handleInputChange(event), onKeyUp: (event) => this.handleKeyPress(event) }), index.h("button", { class: "text-search-button", part: "text-search-button", onClick: () => this.handleTextSearch(), disabled: search_store.searchState.loading }, this.isShowPreloader() ? (index.h("vviinn-preloader", null)) : (index.h("slot", { name: "vviinn-text-search-icon" }, index.h(TextSearchIcon, null)))), this.mode === "upload" ? (index.h("vviinn-image-selector", { token: this.token, apiPath: this.apiPath, showInTextSearch: true, uploadStartedHandler: this.showLoader.bind(this) }, index.h("span", { slot: "upload-button-text" }, index.h(SearchModalUploadIcon.SearchModalUploadIcon, null)))) : (index.h("slot", { name: "vviinn-text-search-actions" }))));
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-711d38e6.js');
6
6
  const Rectangle = require('./Rectangle-99c25901.js');
7
+ const index$1 = require('./index-4aba5eb2.js');
7
8
 
8
9
  const CrossIcon = () => (index.h("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
9
10
  index.h("path", { d: "M16 1.4L14.6 0L8 6.6L1.4 0L0 1.4L6.6 8L0 14.6L1.4 16L8 9.4L14.6 16L16 14.6L9.4 8L16 1.4Z", fill: "#161616" })));
@@ -116,7 +117,7 @@ const RecommendationsSidebar = class {
116
117
  });
117
118
  }
118
119
  render() {
119
- return (index.h(index.Host, { class: this.getClassMap(), exportparts: "body" }, index.h("aside", { class: "sidebar", part: "body", onAnimationEnd: (e) => this.handleAnimationEnd(e) }, this.mode !== "set" && (index.h("header", { class: { "contains-source-img": this.isSourceImageValid() }, part: "sidebar-header" }, this.renderSourceImage(), index.h("span", { class: "title", part: "title" }, this.sidebarTitle), index.h("button", { class: "close-sidebar", onClick: () => (this.state = "closed") }, index.h(CrossIcon, null)))), index.h("main", { part: "sidebar-content" }, index.h("vviinn-vpr-widget", { exportparts: "image-container, content-container, basket-button-container,brand, product-type, currency, deeplink, image, image-link, image-picture, price-container, price-amount, price-prefix, price-outdated, price-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-sale, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, title: product-title, carousel-button, product-card, items-group, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link, product-card-top-actions", token: this.token, productId: this.productId, imageWidth: this.imageWidth, imageRatio: this.imageRatio, blockTitle: "", mode: this.mode, "campaign-type": this.campaignType, useCarousel: this.useCarousel, onVviinnRecommendationsLoaded: () => (this.state = "open"), showScroll: this.widgetScrollbar, campaigns: this.campaigns, color: this.color, currencySign: this.currencySign, pricePrefix: this.pricePrefix, apiPath: this.apiPath, locale: this.locale, buttonElementId: this.buttonElementId, noResultText: this.noResultText, noResultShow: this.noResultShow, gridArrowsDynamic: this.gridArrowsDynamic, showingInButton: this.showingInButton, excluded: this.excluded, productDetailsNewTab: this.productDetailsNewTab, productDetailsRedirect: this.productDetailsRedirect, closed: this.state === "closed", opened: this.state === "open", addToBasketShow: this.addToBasketShow, cssUrl: this.cssUrl, showFilters: this.showFilters, setModeDiscounts: this.setModeDiscounts, updateButtonLocation: this.updateButtonLocation, addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow })))));
120
+ return (index.h(index.Host, { class: this.getClassMap(), exportparts: "body" }, index.h("aside", { class: "sidebar", part: "body", onAnimationEnd: (e) => this.handleAnimationEnd(e) }, this.mode !== "set" && (index.h("header", { class: { "contains-source-img": this.isSourceImageValid() }, part: "sidebar-header" }, this.renderSourceImage(), index.h("span", { class: "title", part: "recommendations-title" }, this.sidebarTitle), index.h("button", { class: "close-sidebar", onClick: () => (this.state = "closed") }, index.h(CrossIcon, null)))), index.h("main", { part: "sidebar-content" }, index.h("vviinn-vpr-widget", { exportparts: `${index$1.carouselParts}, ${index$1.productCardParts}`, token: this.token, productId: this.productId, imageWidth: this.imageWidth, imageRatio: this.imageRatio, blockTitle: "", mode: this.mode, "campaign-type": this.campaignType, useCarousel: this.useCarousel, onVviinnRecommendationsLoaded: () => (this.state = "open"), showScroll: this.widgetScrollbar, campaigns: this.campaigns, color: this.color, currencySign: this.currencySign, pricePrefix: this.pricePrefix, apiPath: this.apiPath, locale: this.locale, buttonElementId: this.buttonElementId, noResultText: this.noResultText, noResultShow: this.noResultShow, gridArrowsDynamic: this.gridArrowsDynamic, showingInButton: this.showingInButton, excluded: this.excluded, productDetailsNewTab: this.productDetailsNewTab, productDetailsRedirect: this.productDetailsRedirect, closed: this.state === "closed", opened: this.state === "open", addToBasketShow: this.addToBasketShow, cssUrl: this.cssUrl, showFilters: this.showFilters, setModeDiscounts: this.setModeDiscounts, updateButtonLocation: this.updateButtonLocation, addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow })))));
120
121
  }
121
122
  renderSourceImage() {
122
123
  var _a, _b, _c, _d, _e, _f;
@@ -4,12 +4,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-711d38e6.js');
6
6
  const search_store = require('./search.store-2527c63a.js');
7
- const _package = require('./package-1ad58aed.js');
7
+ const _package = require('./package-c3453d61.js');
8
8
  const index$1 = require('./index-4c9a5dbb.js');
9
9
  const index$2 = require('./index-c94b611a.js');
10
+ const index$3 = require('./index-4aba5eb2.js');
10
11
  const triggerFilter = require('./triggerFilter-fcab6cac.js');
11
12
  const Rectangle = require('./Rectangle-99c25901.js');
12
- const index$3 = require('./index-f7204218.js');
13
13
 
14
14
  const BasketIcon = () => (index.h("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
15
15
  index.h("g", { id: "shopping-bag" },
@@ -335,7 +335,7 @@ const VviinnCarousel = class {
335
335
  const salePrice = this.isSetMode
336
336
  ? setModeDiscount
337
337
  : recommendation.price.sale;
338
- return (index.h("vviinn-product-card", { index: rank, 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: this.imageRatio, price: recommendation.price.actual, salePrice: salePrice, basePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.actual, baseSalePrice: (_c = recommendation.basePrice) === null || _c === void 0 ? void 0 : _c.sale, responsive: this.isGridMode, campaignTypeId: this.campaignTypeId, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, "data-id": recommendation.productId, energyCertifications: recommendation.energyCertifications, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount, currency: this.currencySign, pricePrefix: this.pricePrefix, locale: this.locale, setMode: this.isSetMode, customLabels: index$1.getCustomLabels(recommendation), addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow }));
338
+ return (index.h("vviinn-product-card", { index: rank, productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: this.imageRatio, price: recommendation.price.actual, salePrice: salePrice, basePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.actual, baseSalePrice: (_c = recommendation.basePrice) === null || _c === void 0 ? void 0 : _c.sale, responsive: this.isGridMode, campaignTypeId: this.campaignTypeId, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, "data-id": recommendation.productId, energyCertifications: recommendation.energyCertifications, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount, currency: this.currencySign, pricePrefix: this.pricePrefix, locale: this.locale, setMode: this.isSetMode, customLabels: index$1.getCustomLabels(recommendation), addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow }));
339
339
  }
340
340
  renderRecommendationGroup(elements) {
341
341
  return (index.h("div", { class: CONTENT_GROUP_CSS_CLASS, part: "items-group" }, ...elements));
@@ -369,7 +369,7 @@ const VviinnCarousel = class {
369
369
  }
370
370
  render() {
371
371
  var _a, _b;
372
- return (index.h(index.Host, { class: this.getClassMap() }, index.h("div", { class: Object.assign({ body: true }, this.getClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { part: "product-part", class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail, 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, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow })), index.h("div", { class: this.getContentClassMap() }, !this.isSetMode && (index.h("button", { class: "prev", onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isFirstGroup() }, index.h(ChevronIcon, null))), this.renderRecommendations(), !this.isSetMode && (index.h("button", { class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isLastGroup() }, index.h(ChevronIcon, null))))), this.showBullets() && (index.h("div", { class: "bullets" }, this.renderBullets()))));
372
+ return (index.h(index.Host, { class: this.getClassMap() }, index.h("div", { class: Object.assign({ body: true }, this.getClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (index.h("vviinn-product-card", { class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail, 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, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow })), index.h("div", { class: this.getContentClassMap() }, !this.isSetMode && (index.h("button", { class: "prev", onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isFirstGroup() }, index.h(ChevronIcon, null))), this.renderRecommendations(), !this.isSetMode && (index.h("button", { class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isLastGroup() }, index.h(ChevronIcon, null))))), this.showBullets() && (index.h("div", { class: "bullets" }, this.renderBullets()))));
373
373
  }
374
374
  get el() { return index.getElement(this); }
375
375
  static get watchers() { return {
@@ -394,7 +394,7 @@ const VviinnEnergyLabel = class {
394
394
  render() {
395
395
  return (index.h(index.Host, { class: {
396
396
  hidden: !this.classIconUrls && !this.productType && !this.classDataSheetUrl,
397
- }, exportparts: "energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link" }, index.h("div", { class: "container", part: "energy-label-container" }, !!this.classIconUrls && (index.h("img", { class: "class-label-icon", part: "energy-label-icon", src: this.classIconUrls[this.iconDirection] })), (this.productType || this.classDataSheetUrl) && (index.h("div", { class: "info-container" }, this.productType && (index.h("span", { class: "product-type", part: "energy-label-product-type" }, this.productType)), this.classDataSheetUrl && (index.h("a", { class: "data-sheet-link", part: "energy-label-data-sheet-link", href: this.classDataSheetUrl, target: "_blank", rel: "noopener noreferrer" }, index.h("slot", { name: "vviinn-energy-label-data-sheet-text" }, index$2.instance.t("energyLabel.dataSheetText")))))))));
397
+ }, exportparts: index$3.energyLabelParts }, index.h("div", { class: "container", part: "energy-label-container" }, !!this.classIconUrls && (index.h("img", { class: "class-label-icon", part: "energy-label-icon", src: this.classIconUrls[this.iconDirection] })), (this.productType || this.classDataSheetUrl) && (index.h("div", { class: "info-container" }, this.productType && (index.h("span", { class: "product-type", part: "energy-label-product-type" }, this.productType)), this.classDataSheetUrl && (index.h("a", { class: "data-sheet-link", part: "energy-label-data-sheet-link", href: this.classDataSheetUrl, target: "_blank", rel: "noopener noreferrer" }, index.h("slot", { name: "vviinn-energy-label-data-sheet-text" }, index$2.instance.t("energyLabel.dataSheetText")))))))));
398
398
  }
399
399
  get el() { return index.getElement(this); }
400
400
  };
@@ -1285,7 +1285,7 @@ const VviinnProductCard = class {
1285
1285
  var _a, _b, _c;
1286
1286
  return (index.h(index.Host, { part: "product-card", class: {
1287
1287
  animated: this.isTransitioning,
1288
- }, exportparts: "image-container, content-container, basket-button-container, brand, product-type, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, currency, deeplink, image, image-link, image-picture, price-container, price-amount-regular, price-amount-sale, price-amount-outdated, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, discount-label, discount-percentage, title, basket-button, update-button-item, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link, product-card-actions, product-card-top-actions" }, index.h("div", { class: "image-container", part: "image-container" }, index.h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), index.h("div", { class: "product-card-top-actions", part: "product-card-top-actions" }, index.h("button", { class: {
1288
+ }, exportparts: index$3.productCardParts }, index.h("div", { class: "image-container", part: "image-container" }, index.h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), index.h("div", { class: "product-card-top-actions", part: "product-card-top-actions" }, index.h("button", { class: {
1289
1289
  hidden: !this.favoriteShow,
1290
1290
  }, part: "favorite-button", onClick: this.favoriteButtonClickHandler.bind(this) }, index.h("div", { key: "favorite-not-pressed", class: {
1291
1291
  hidden: this.favoriteButonPressed,
@@ -2350,7 +2350,7 @@ const VviinnVprWidget = class {
2350
2350
  }
2351
2351
  renderRecommendation(recommendation, index$2) {
2352
2352
  var _a, _b;
2353
- 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: this.imageRatio, price: recommendation.price.actual, salePrice: recommendation.price.sale, basePrice: (_a = recommendation.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.sale, energyCertifications: recommendation.energyCertifications, addPriceContainer: this.addPriceContainer, responsive: this.isGridMode, addToBasketShow: this.addToBasketShow, campaignTypeId: this.campaignType, index: index$2, widgetElementId: this.id, widgetVersion: _package.version, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, customLabels: index$1.getCustomLabels(recommendation), favoriteShow: this.favoriteShow }));
2353
+ return (index.h("vviinn-product-card", { productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: this.imageRatio, price: recommendation.price.actual, salePrice: recommendation.price.sale, basePrice: (_a = recommendation.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.sale, energyCertifications: recommendation.energyCertifications, addPriceContainer: this.addPriceContainer, responsive: this.isGridMode, addToBasketShow: this.addToBasketShow, campaignTypeId: this.campaignType, index: index$2, widgetElementId: this.id, widgetVersion: _package.version, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, customLabels: index$1.getCustomLabels(recommendation), favoriteShow: this.favoriteShow }));
2354
2354
  }
2355
2355
  renderResults() {
2356
2356
  return (index.h("div", { class: `recommendations-results recommendations-${this.mode}`, part: "recommendations-results" }, this.recommendations.map((r, i) => this.renderRecommendation(r, i))));
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-711d38e6.js');
6
- const _package = require('./package-1ad58aed.js');
6
+ const _package = require('./package-c3453d61.js');
7
7
  const SearchModalUploadIcon = require('./SearchModalUploadIcon-23f00a14.js');
8
8
  const constants = require('./constants-7684cbfc.js');
9
9
 
@@ -5,9 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-711d38e6.js');
6
6
  const search_store = require('./search.store-2527c63a.js');
7
7
  const index$1 = require('./index-c94b611a.js');
8
- const _package = require('./package-1ad58aed.js');
8
+ const _package = require('./package-c3453d61.js');
9
9
  const constants = require('./constants-7684cbfc.js');
10
- const index$2 = require('./index-f7204218.js');
10
+ const index$2 = require('./index-4aba5eb2.js');
11
11
  require('./Rectangle-99c25901.js');
12
12
 
13
13
  const CameraActionIcon = () => (index.h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" },
@@ -34,7 +34,7 @@ const checkDeviceType = () => {
34
34
  return "desktop";
35
35
  };
36
36
 
37
- const vviinnVpsWidgetCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--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-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-size:155px;--product-card-set-mode-max-width:300px;--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:#525252;--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;--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;}:host{display:block}.hidden{visibility:hidden;height:1px}vviinn-overlayed-modal.first-screen::part(title),vviinn-overlayed-modal.first-screen::part(secondary-action){visibility:hidden}.start-page{display:grid;grid-template-columns:repeat(2, 1fr);height:640px}#start-page_block{box-sizing:border-box;display:flex;overflow-y:auto;flex-direction:column;justify-content:center;padding:40px 62px}#start-page_block.error{align-content:center}#start-page_block vviinn-text-search{margin-top:var(--spacing-150)}.start-page_main-content{flex-grow:1;display:flex;flex-direction:column;justify-content:center}.start-page_errors-block{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:var(--spacing-150)}.buttons-group{display:flex;flex-direction:column;gap:var(--spacing-150);margin-top:24px}.action-button{display:grid;border:none;cursor:pointer;align-items:center;border-radius:8px;font-size:16px;height:48px;justify-items:center;font-family:var(--font-family, var(--font-family-base));transition:background 0.1s ease-in-out;color:#525252;background-color:#f4f4f4}.action-button:hover{background-color:#eaeaea}.action-button:first-child{background:var(--color-primary, var(--button-bg-color-primary));border-color:var(--color-primary, var(--button-bg-color-primary));color:white}.action-button:first-child:hover{background:var(--color-primary-hover, var(--button-bg-color-primary-hover));border-color:var(\n --color-primary-hover,\n var(--button-bg-color-primary-hover)\n )}.action-button:active{border-color:black}.action-button-content{display:grid;align-items:center;justify-items:start;justify-content:center;font-family:var(--font-family, var(--font-family-base));grid-template-columns:max-content auto;grid-gap:8px}.action-button .hidden{display:none}.results-page{margin-top:64px;display:grid;grid-template-columns:336px auto;box-sizing:border-box}.results-page>*{padding:24px;box-sizing:border-box}.source-wrapper{display:grid;grid-template-rows:min-content 1fr;min-width:100%;overflow-y:auto;overflow-x:hidden;position:relative}.source-wrapper.text-search-wrapper{padding:24px 24px 0 24px}.filters-wrapper{margin-top:24px;overflow-x:auto;transform:translateX(-24px);min-width:calc(100% + 48px);scrollbar-width:thin;-ms-overflow-style:none}@supports (scrollbar-color: unset){.filters-wrapper{scrollbar-color:transparent transparent}.filters-wrapper:hover{scrollbar-color:initial}}vviinn-filters,vviinn-extended-filters.modal-extended-filters{display:none}vviinn-extended-filters.preview-extended-filters{display:block;position:absolute;width:100%}.extended-filters-button{display:none}search-filters span{display:none}search-filters::part(filter){background:#f4f4f4;border-radius:8px;box-sizing:border-box;color:#161616;font-size:14px;font-weight:400;line-height:20px}search-filters::part(show-more-filters){display:flex;align-items:center;justify-content:center;cursor:pointer;border:1px solid #f4f4f4;min-width:40px;height:40px;border-radius:100px;box-sizing:border-box;color:#161616}search-filters::part(show-more-filters):hover{background:#eaeaea}search-filters::part(filter active){background:var(--color-primary, var(--button-bg-color-primary));color:white}.results-page:not(.active){display:none}.results-page vviinn-text-search{width:calc(100% + 24px)}vviinn-preloader{--preloader-size:24px;display:flex}@media (max-width: 1080px){#start-page_block{padding:24px 36px}}@media (max-width: 768px){.start-page{display:flex;flex-direction:column;height:100%}vviinn-overlayed-modal.first-screen::part(secondary-action){visibility:visible}.results-page vviinn-text-search{width:auto}.start-page.active{height:calc(100vh - 64px);height:calc(100svh - 64px)}.start-page:not(.active){overflow:hidden}.results-page{margin-top:0}.results-page>*{box-sizing:border-box;padding:12px 24px 24px}.source-wrapper{grid-template-rows:min-content auto;width:100%;padding:0}.source-wrapper.image-wrapper .filters-wrapper{padding-left:24px;min-width:100%}vviinn-filters,vviinn-extended-filters.modal-extended-filters{display:block;overflow:hidden}vviinn-extended-filters.preview-extended-filters{display:none}.extended-filters-button{display:block;position:absolute;right:var(--spacing-300);top:0}.results-page{grid-template-rows:min-content;grid-template-columns:unset}#start-page_block{overflow-y:unset;min-height:-moz-fit-content;min-height:fit-content;padding:24px 20px 20px}}@media (max-width: 480px){.start-page{padding-top:0}.action-button-content{grid-gap:10px}}.visually-hidden{clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}";
37
+ const vviinnVpsWidgetCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--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-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-size:155px;--product-card-set-mode-max-width:300px;--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:#525252;--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;--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;}:host{display:block}.hidden{visibility:hidden;height:1px}vviinn-overlayed-modal.first-screen::part(results-title),vviinn-overlayed-modal.first-screen::part(secondary-action){visibility:hidden}.start-page{display:grid;grid-template-columns:repeat(2, 1fr);height:640px}#start-page_block{box-sizing:border-box;display:flex;overflow-y:auto;flex-direction:column;justify-content:center;padding:40px 62px}#start-page_block.error{align-content:center}#start-page_block vviinn-text-search{margin-top:var(--spacing-150)}.start-page_main-content{flex-grow:1;display:flex;flex-direction:column;justify-content:center}.start-page_errors-block{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:var(--spacing-150)}.buttons-group{display:flex;flex-direction:column;gap:var(--spacing-150);margin-top:24px}.action-button{display:grid;border:none;cursor:pointer;align-items:center;border-radius:8px;font-size:16px;height:48px;justify-items:center;font-family:var(--font-family, var(--font-family-base));transition:background 0.1s ease-in-out;color:#525252;background-color:#f4f4f4}.action-button:hover{background-color:#eaeaea}.action-button:first-child{background:var(--color-primary, var(--button-bg-color-primary));border-color:var(--color-primary, var(--button-bg-color-primary));color:white}.action-button:first-child:hover{background:var(--color-primary-hover, var(--button-bg-color-primary-hover));border-color:var(\n --color-primary-hover,\n var(--button-bg-color-primary-hover)\n )}.action-button:active{border-color:black}.action-button-content{display:grid;align-items:center;justify-items:start;justify-content:center;font-family:var(--font-family, var(--font-family-base));grid-template-columns:max-content auto;grid-gap:8px}.action-button .hidden{display:none}.results-page{margin-top:64px;display:grid;grid-template-columns:336px auto;box-sizing:border-box}.results-page>*{padding:24px;box-sizing:border-box}.source-wrapper{display:grid;grid-template-rows:min-content 1fr;min-width:100%;overflow-y:auto;overflow-x:hidden;position:relative}.source-wrapper.text-search-wrapper{padding:24px 24px 0 24px}.filters-wrapper{margin-top:24px;overflow-x:auto;transform:translateX(-24px);min-width:calc(100% + 48px);scrollbar-width:thin;-ms-overflow-style:none}@supports (scrollbar-color: unset){.filters-wrapper{scrollbar-color:transparent transparent}.filters-wrapper:hover{scrollbar-color:initial}}vviinn-filters,vviinn-extended-filters.modal-extended-filters{display:none}vviinn-extended-filters.preview-extended-filters{display:block;position:absolute;width:100%}.extended-filters-button{display:none}search-filters span{display:none}search-filters::part(filter){background:#f4f4f4;border-radius:8px;box-sizing:border-box;color:#161616;font-size:14px;font-weight:400;line-height:20px}search-filters::part(show-more-filters){display:flex;align-items:center;justify-content:center;cursor:pointer;border:1px solid #f4f4f4;min-width:40px;height:40px;border-radius:100px;box-sizing:border-box;color:#161616}search-filters::part(show-more-filters):hover{background:#eaeaea}search-filters::part(filter active){background:var(--color-primary, var(--button-bg-color-primary));color:white}.results-page:not(.active){display:none}.results-page vviinn-text-search{width:calc(100% + 24px)}vviinn-preloader{--preloader-size:24px;display:flex}@media (max-width: 1080px){#start-page_block{padding:24px 36px}}@media (max-width: 768px){.start-page{display:flex;flex-direction:column;height:100%}vviinn-overlayed-modal.first-screen::part(secondary-action){visibility:visible}.results-page vviinn-text-search{width:auto}.start-page.active{height:calc(100vh - 64px);height:calc(100svh - 64px)}.start-page:not(.active){overflow:hidden}.results-page{margin-top:0}.results-page>*{box-sizing:border-box;padding:12px 24px 24px}.source-wrapper{grid-template-rows:min-content auto;width:100%;padding:0}.source-wrapper.image-wrapper .filters-wrapper{padding-left:24px;min-width:100%}vviinn-filters,vviinn-extended-filters.modal-extended-filters{display:block;overflow:hidden}vviinn-extended-filters.preview-extended-filters{display:none}.extended-filters-button{display:block;position:absolute;right:var(--spacing-300);top:0}.results-page{grid-template-rows:min-content;grid-template-columns:unset}#start-page_block{overflow-y:unset;min-height:-moz-fit-content;min-height:fit-content;padding:24px 20px 20px}}@media (max-width: 480px){.start-page{padding-top:0}.action-button-content{grid-gap:10px}}.visually-hidden{clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}";
38
38
 
39
39
  var __rest = (undefined && undefined.__rest) || function (s, e) {
40
40
  var t = {};
@@ -396,11 +396,11 @@ const VviinnVpsWidget = class {
396
396
  }
397
397
  render() {
398
398
  var _a, _b;
399
- return (index.h(index.Host, { exportparts: `image-container, content-container, basket-button-container,brand, product-type, deeplink, currency, image, image-link, image-picture, price-container, price-amount-sale, price-amount-outdated, price-amount-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, title, product-card, upload-photo_button, show-files_button, start-camera_button, text-search-input, text-search-button, close-button, secondary-action, close-button, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link ${index$2.searchWidgetFilterParts}` }, !this.showingInButton && _package.SlotSkeleton("vps"), index.h("vviinn-overlayed-modal", { class: { "first-screen": this.isOnboardingSlide() }, isFirstScreen: this.isOnboardingSlide(), active: this.active, resetState: this.resetState.bind(this), onVviinnWidgetClose: ({ detail }) => {
399
+ return (index.h(index.Host, { exportparts: `${index$2.modalParts}, ${index$2.productCardParts}, ${index$2.searchBarParts}, ${index$2.searchWidgetFilterParts}, ${index$2.searchWidgetButtonParts}` }, !this.showingInButton && _package.SlotSkeleton("vps"), index.h("vviinn-overlayed-modal", { class: { "first-screen": this.isOnboardingSlide() }, isFirstScreen: this.isOnboardingSlide(), active: this.active, resetState: this.resetState.bind(this), onVviinnWidgetClose: ({ detail }) => {
400
400
  if (detail.campaignTypeId !== "VPR")
401
401
  this.handleModalClose();
402
402
  }, buttonElementId: (_a = this.buttonElementId) !== null && _a !== void 0 ? _a : this.widgetElementId, widgetVersion: _package.version, hideBackButton: (this.mode === "upload" && this.showingInButton) ||
403
- (!this.cameraEnabled && this.isOnboardingSlide()), exportparts: "secondary-action, title, close-button" }, index.h("vviinn-slider", { position: this.slidePosition }, index.h("vviinn-slide", { class: {
403
+ (!this.cameraEnabled && this.isOnboardingSlide()), exportparts: index$2.modalParts }, index.h("vviinn-slider", { position: this.slidePosition }, index.h("vviinn-slide", { class: {
404
404
  "start-page": true,
405
405
  "camera-enabled": this.cameraEnabled,
406
406
  } }, index.h("vviinn-example-image", { onVviinnImageUploadFinished: this.handleVviinnImageUploadFinished, onVviinnImageUpload: () => {
@@ -281,7 +281,7 @@ export class VviinnCarousel {
281
281
  const salePrice = this.isSetMode
282
282
  ? setModeDiscount
283
283
  : recommendation.price.sale;
284
- return (h("vviinn-product-card", { index: rank, 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: this.imageRatio, price: recommendation.price.actual, salePrice: salePrice, basePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.actual, baseSalePrice: (_c = recommendation.basePrice) === null || _c === void 0 ? void 0 : _c.sale, responsive: this.isGridMode, campaignTypeId: this.campaignTypeId, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, "data-id": recommendation.productId, energyCertifications: recommendation.energyCertifications, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount, currency: this.currencySign, pricePrefix: this.pricePrefix, locale: this.locale, setMode: this.isSetMode, customLabels: getCustomLabels(recommendation), addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow }));
284
+ return (h("vviinn-product-card", { index: rank, productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: this.imageRatio, price: recommendation.price.actual, salePrice: salePrice, basePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.actual, baseSalePrice: (_c = recommendation.basePrice) === null || _c === void 0 ? void 0 : _c.sale, responsive: this.isGridMode, campaignTypeId: this.campaignTypeId, widgetElementId: this.widgetElementId, widgetVersion: this.widgetVersion, addToBasketShow: this.addToBasketShow, "data-id": recommendation.productId, energyCertifications: recommendation.energyCertifications, updatingAllCards: this.updatingAllCards, defaultAnimationInterval: this.defaultAnimationInterval, updateButtonLocation: this.updateButtonLocation, appliedDiscountPercentage: appliedDiscount, currentDiscountPercentage: this.setModeDiscount, currency: this.currencySign, pricePrefix: this.pricePrefix, locale: this.locale, setMode: this.isSetMode, customLabels: getCustomLabels(recommendation), addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow }));
285
285
  }
286
286
  renderRecommendationGroup(elements) {
287
287
  return (h("div", { class: CONTENT_GROUP_CSS_CLASS, part: "items-group" }, ...elements));
@@ -315,7 +315,7 @@ export class VviinnCarousel {
315
315
  }
316
316
  render() {
317
317
  var _a, _b;
318
- return (h(Host, { class: this.getClassMap() }, h("div", { class: Object.assign({ body: true }, this.getClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { part: "product-part", class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail, 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, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow })), h("div", { class: this.getContentClassMap() }, !this.isSetMode && (h("button", { class: "prev", onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isFirstGroup() }, h(ChevronIcon, null))), this.renderRecommendations(), !this.isSetMode && (h("button", { class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isLastGroup() }, h(ChevronIcon, null))))), this.showBullets() && (h("div", { class: "bullets" }, this.renderBullets()))));
318
+ return (h(Host, { class: this.getClassMap() }, h("div", { class: Object.assign({ body: true }, this.getClassMap()) }, this.isSetMode && this.crossSellingRecommendations.length > 0 && (h("vviinn-product-card", { class: "set-mode product-card--source", productTitle: this.sourceProduct.title, image: this.sourceProduct.image.thumbnail, 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, isSourceProduct: true, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, favoriteShow: this.favoriteShow })), h("div", { class: this.getContentClassMap() }, !this.isSetMode && (h("button", { class: "prev", onClick: () => this.handleCarouselButtonClick("left"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isFirstGroup() }, h(ChevronIcon, null))), this.renderRecommendations(), !this.isSetMode && (h("button", { class: "next", onClick: () => this.handleCarouselButtonClick("right"), part: "carousel-button", disabled: this.gridArrowsDynamic && this.isLastGroup() }, h(ChevronIcon, null))))), this.showBullets() && (h("div", { class: "bullets" }, this.renderBullets()))));
319
319
  }
320
320
  static get is() { return "vviinn-carousel"; }
321
321
  static get originalStyleUrls() {
@@ -7,6 +7,7 @@ import * as O from "fp-ts/lib/Option";
7
7
  import { pipe } from "fp-ts/lib/function";
8
8
  import { sequenceToOption } from "../../utils/option/option";
9
9
  import { SecondaryActionIcon } from "../vviinn-icons/";
10
+ import { modalParts } from "../../cssParts";
10
11
  export class VviinnModal {
11
12
  constructor() {
12
13
  this.active = false;
@@ -49,10 +50,10 @@ export class VviinnModal {
49
50
  }), O.getOrElse(() => null));
50
51
  }
51
52
  render() {
52
- return (h(Host, { exportparts: "secondary-action, title, close-button", class: { closed: !this.active, "first-screen": this.isFirstScreen }, onAnimationEnd: (ev) => this.handleAnimationEnd(ev) }, h("div", { class: "head" }, !this.hideBackButton && (h("button", { part: "secondary-action", onClick: () => {
53
+ return (h(Host, { exportparts: modalParts, class: { closed: !this.active, "first-screen": this.isFirstScreen }, onAnimationEnd: (ev) => this.handleAnimationEnd(ev) }, h("div", { class: "head" }, !this.hideBackButton && (h("button", { part: "secondary-action", onClick: () => {
53
54
  this.resetState();
54
55
  this.resetTopScroll();
55
- } }, h(SecondaryActionIcon, null))), h("div", { class: "title", part: "title" }, this.renderImage(), h("slot", { name: "vviinn-image-search-modal-title" }, i18next.t("imageSearchModalTitle"))), h("button", { onClick: () => this.close(), class: "close-button", part: "close-button" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, h("path", { d: "M12 13.3892L6.91958 18.4696C6.72248 18.6667 6.49095 18.7653 6.225 18.7653C5.95905 18.7653 5.72753 18.6667 5.53043 18.4696C5.33333 18.2725 5.23478 18.041 5.23478 17.775C5.23478 17.5091 5.33333 17.2776 5.53043 17.0805L10.6109 12L5.53043 6.9196C5.33333 6.7225 5.23478 6.49098 5.23478 6.22503C5.23478 5.95908 5.33333 5.72755 5.53043 5.53045C5.72753 5.33335 5.95905 5.2348 6.225 5.2348C6.49095 5.2348 6.72248 5.33335 6.91958 5.53045L12 10.6109L17.0804 5.53045C17.2775 5.33335 17.5091 5.2348 17.775 5.2348C18.041 5.2348 18.2725 5.33335 18.4696 5.53045C18.6667 5.72755 18.7652 5.95908 18.7652 6.22503C18.7652 6.49098 18.6667 6.7225 18.4696 6.9196L13.3892 12L18.4696 17.0805C18.6667 17.2776 18.7652 17.5091 18.7652 17.775C18.7652 18.041 18.6667 18.2725 18.4696 18.4696C18.2725 18.6667 18.041 18.7653 17.775 18.7653C17.5091 18.7653 17.2775 18.6667 17.0804 18.4696L12 13.3892Z", fill: "currentColor" })))), h("div", { class: "body" }, h("slot", null))));
56
+ } }, h(SecondaryActionIcon, null))), h("div", { class: "title", part: "results-title" }, this.renderImage(), h("slot", { name: "vviinn-image-search-modal-title" }, i18next.t("imageSearchModalTitle"))), h("button", { onClick: () => this.close(), class: "close-button", part: "close-button" }, h("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, h("path", { d: "M12 13.3892L6.91958 18.4696C6.72248 18.6667 6.49095 18.7653 6.225 18.7653C5.95905 18.7653 5.72753 18.6667 5.53043 18.4696C5.33333 18.2725 5.23478 18.041 5.23478 17.775C5.23478 17.5091 5.33333 17.2776 5.53043 17.0805L10.6109 12L5.53043 6.9196C5.33333 6.7225 5.23478 6.49098 5.23478 6.22503C5.23478 5.95908 5.33333 5.72755 5.53043 5.53045C5.72753 5.33335 5.95905 5.2348 6.225 5.2348C6.49095 5.2348 6.72248 5.33335 6.91958 5.53045L12 10.6109L17.0804 5.53045C17.2775 5.33335 17.5091 5.2348 17.775 5.2348C18.041 5.2348 18.2725 5.33335 18.4696 5.53045C18.6667 5.72755 18.7652 5.95908 18.7652 6.22503C18.7652 6.49098 18.6667 6.7225 18.4696 6.9196L13.3892 12L18.4696 17.0805C18.6667 17.2776 18.7652 17.5091 18.7652 17.775C18.7652 18.041 18.6667 18.2725 18.4696 18.4696C18.2725 18.6667 18.041 18.7653 17.775 18.7653C17.5091 18.7653 17.2775 18.6667 17.0804 18.4696L12 13.3892Z", fill: "currentColor" })))), h("div", { class: "body" }, h("slot", null))));
56
57
  }
57
58
  static get is() { return "vviinn-modal"; }
58
59
  static get encapsulation() { return "shadow"; }
@@ -1,6 +1,7 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  import i18next from "i18next";
3
3
  import { slotChangeListener } from "../../customized-slots";
4
+ import { energyLabelParts } from "../../../cssParts";
4
5
  /**
5
6
  * @part energy-label-container - Energy label container.
6
7
  * @part energy-label-icon - Icon with an energy class.
@@ -22,7 +23,7 @@ export class VviinnEnergyLabel {
22
23
  render() {
23
24
  return (h(Host, { class: {
24
25
  hidden: !this.classIconUrls && !this.productType && !this.classDataSheetUrl,
25
- }, exportparts: "energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link" }, h("div", { class: "container", part: "energy-label-container" }, !!this.classIconUrls && (h("img", { class: "class-label-icon", part: "energy-label-icon", src: this.classIconUrls[this.iconDirection] })), (this.productType || this.classDataSheetUrl) && (h("div", { class: "info-container" }, this.productType && (h("span", { class: "product-type", part: "energy-label-product-type" }, this.productType)), this.classDataSheetUrl && (h("a", { class: "data-sheet-link", part: "energy-label-data-sheet-link", href: this.classDataSheetUrl, target: "_blank", rel: "noopener noreferrer" }, h("slot", { name: "vviinn-energy-label-data-sheet-text" }, i18next.t("energyLabel.dataSheetText")))))))));
26
+ }, exportparts: energyLabelParts }, h("div", { class: "container", part: "energy-label-container" }, !!this.classIconUrls && (h("img", { class: "class-label-icon", part: "energy-label-icon", src: this.classIconUrls[this.iconDirection] })), (this.productType || this.classDataSheetUrl) && (h("div", { class: "info-container" }, this.productType && (h("span", { class: "product-type", part: "energy-label-product-type" }, this.productType)), this.classDataSheetUrl && (h("a", { class: "data-sheet-link", part: "energy-label-data-sheet-link", href: this.classDataSheetUrl, target: "_blank", rel: "noopener noreferrer" }, h("slot", { name: "vviinn-energy-label-data-sheet-text" }, i18next.t("energyLabel.dataSheetText")))))))));
26
27
  }
27
28
  static get is() { return "vviinn-energy-label"; }
28
29
  static get encapsulation() { return "shadow"; }
@@ -11,6 +11,7 @@ import { slotChangeListener } from "../customized-slots";
11
11
  import { BasketIcon, CheckCircleIcon, UpdateIcon, FavoriteIcon, FavoriteIconPressed, } from "../vviinn-icons";
12
12
  import { generateRandomNumber } from "../../utils/number";
13
13
  import { resources } from "../../locale";
14
+ import { productCardParts } from "../../cssParts";
14
15
  /**
15
16
  * @part image-container - Product Card's image container.
16
17
  * @part content-container - Product Card's content container.
@@ -234,7 +235,7 @@ export class VviinnProductCard {
234
235
  var _a, _b, _c;
235
236
  return (h(Host, { part: "product-card", class: {
236
237
  animated: this.isTransitioning,
237
- }, exportparts: "image-container, content-container, basket-button-container, brand, product-type, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, currency, deeplink, image, image-link, image-picture, price-container, price-amount-regular, price-amount-sale, price-amount-outdated, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, discount-label, discount-percentage, title, basket-button, update-button-item, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link, product-card-actions, product-card-top-actions" }, h("div", { class: "image-container", part: "image-container" }, h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), h("div", { class: "product-card-top-actions", part: "product-card-top-actions" }, h("button", { class: {
238
+ }, exportparts: productCardParts }, h("div", { class: "image-container", part: "image-container" }, h(Linked, { deeplink: this.deeplink, part: "image-link" }, this.renderImage()), h("div", { class: "product-card-top-actions", part: "product-card-top-actions" }, h("button", { class: {
238
239
  hidden: !this.favoriteShow,
239
240
  }, part: "favorite-button", onClick: this.favoriteButtonClickHandler.bind(this) }, h("div", { key: "favorite-not-pressed", class: {
240
241
  hidden: this.favoriteButonPressed,
@@ -24,6 +24,7 @@ import i18next from "i18next";
24
24
  import { resources } from "../../locale";
25
25
  import { slotChangeListener } from "../customized-slots";
26
26
  import { getCustomLabels } from "../../recommendation";
27
+ import { productCardParts } from "../../cssParts";
27
28
  /**
28
29
  * @part product-card - Product Card itself.
29
30
  * @part image-container - Product Card's image container.
@@ -384,7 +385,7 @@ export class VviinnResults {
384
385
  var _a, _b;
385
386
  return (h(Host, { id: "results-block", class: {
386
387
  "show-in-widget": this.showInWidget,
387
- }, exportparts: "image-container, content-container, basket-button-container, title, product-card, brand, product-type, deeplink, currency, image, image-link, image-picture, price-container, price-amount-sale, price-amount-outdated, price-amount-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link" }, h("div", { class: "nothing-found" }, ((_a = this.getRecommendations()) === null || _a === void 0 ? void 0 : _a.length) === 0 && this.showInWidget && (h("vviinn-empty-results", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() })), this.showAspectRatioError && this.showInWidget && (h("vviinn-wrong-aspect-ratio", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() }))), h("div", { class: {
388
+ }, exportparts: productCardParts }, h("div", { class: "nothing-found" }, ((_a = this.getRecommendations()) === null || _a === void 0 ? void 0 : _a.length) === 0 && this.showInWidget && (h("vviinn-empty-results", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() })), this.showAspectRatioError && this.showInWidget && (h("vviinn-wrong-aspect-ratio", { handler: () => this === null || this === void 0 ? void 0 : this.resetState() }))), h("div", { class: {
388
389
  hidden: this.showAspectRatioError ||
389
390
  (this.recommendations.length === 0 &&
390
391
  searchState.results.length === 0),
@@ -6,6 +6,7 @@ import i18next from "i18next";
6
6
  import { resources } from "../../locale";
7
7
  import * as E from "fp-ts/Either";
8
8
  import { pipe } from "fp-ts/lib/function";
9
+ import { searchBarParts } from "../../cssParts";
9
10
  /**
10
11
  * @part text-search-input - Text search input.
11
12
  * @part text-search-button - Text search input's search button.
@@ -89,7 +90,7 @@ export class VviinnTextSearch {
89
90
  }
90
91
  }
91
92
  render() {
92
- return (h(Host, { exportparts: "text-search-input, text-search-button" }, h("input", { class: {
93
+ return (h(Host, { exportparts: searchBarParts }, h("input", { class: {
93
94
  "text-search-input": true,
94
95
  "text-search-input--with-icon": this.mode === "upload",
95
96
  }, part: "text-search-input", type: "text", placeholder: i18next.t("textSearchPlaceholder"), value: this.searchQuery, onInput: (event) => this.handleInputChange(event), onKeyUp: (event) => this.handleKeyPress(event) }), h("button", { class: "text-search-button", part: "text-search-button", onClick: () => this.handleTextSearch(), disabled: searchState.loading }, this.isShowPreloader() ? (h("vviinn-preloader", null)) : (h("slot", { name: "vviinn-text-search-icon" }, h(TextSearchIcon, null)))), this.mode === "upload" ? (h("vviinn-image-selector", { token: this.token, apiPath: this.apiPath, showInTextSearch: true, uploadStartedHandler: this.showLoader.bind(this) }, h("span", { slot: "upload-button-text" }, h(SearchModalUploadIcon, null)))) : (h("slot", { name: "vviinn-text-search-actions" }))));
@@ -1,6 +1,7 @@
1
1
  import { Host, h, } from "@stencil/core";
2
2
  import { CrossIcon } from "../../vviinn-icons";
3
3
  import { isClickedInRectBound } from "../../../geometry/Rectangle";
4
+ import { carouselParts, productCardParts } from "../../../cssParts";
4
5
  export class RecommendationsSidebar {
5
6
  constructor() {
6
7
  this.isSourceImageValid = () => { var _a; return !!((_a = this.sourceProduct) === null || _a === void 0 ? void 0 : _a.image); };
@@ -89,7 +90,7 @@ export class RecommendationsSidebar {
89
90
  });
90
91
  }
91
92
  render() {
92
- return (h(Host, { class: this.getClassMap(), exportparts: "body" }, h("aside", { class: "sidebar", part: "body", onAnimationEnd: (e) => this.handleAnimationEnd(e) }, this.mode !== "set" && (h("header", { class: { "contains-source-img": this.isSourceImageValid() }, part: "sidebar-header" }, this.renderSourceImage(), h("span", { class: "title", part: "title" }, this.sidebarTitle), h("button", { class: "close-sidebar", onClick: () => (this.state = "closed") }, h(CrossIcon, null)))), h("main", { part: "sidebar-content" }, h("vviinn-vpr-widget", { exportparts: "image-container, content-container, basket-button-container,brand, product-type, currency, deeplink, image, image-link, image-picture, price-container, price-amount, price-prefix, price-outdated, price-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-sale, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, title: product-title, carousel-button, product-card, items-group, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link, product-card-top-actions", token: this.token, productId: this.productId, imageWidth: this.imageWidth, imageRatio: this.imageRatio, blockTitle: "", mode: this.mode, "campaign-type": this.campaignType, useCarousel: this.useCarousel, onVviinnRecommendationsLoaded: () => (this.state = "open"), showScroll: this.widgetScrollbar, campaigns: this.campaigns, color: this.color, currencySign: this.currencySign, pricePrefix: this.pricePrefix, apiPath: this.apiPath, locale: this.locale, buttonElementId: this.buttonElementId, noResultText: this.noResultText, noResultShow: this.noResultShow, gridArrowsDynamic: this.gridArrowsDynamic, showingInButton: this.showingInButton, excluded: this.excluded, productDetailsNewTab: this.productDetailsNewTab, productDetailsRedirect: this.productDetailsRedirect, closed: this.state === "closed", opened: this.state === "open", addToBasketShow: this.addToBasketShow, cssUrl: this.cssUrl, showFilters: this.showFilters, setModeDiscounts: this.setModeDiscounts, updateButtonLocation: this.updateButtonLocation, addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow })))));
93
+ return (h(Host, { class: this.getClassMap(), exportparts: "body" }, h("aside", { class: "sidebar", part: "body", onAnimationEnd: (e) => this.handleAnimationEnd(e) }, this.mode !== "set" && (h("header", { class: { "contains-source-img": this.isSourceImageValid() }, part: "sidebar-header" }, this.renderSourceImage(), h("span", { class: "title", part: "recommendations-title" }, this.sidebarTitle), h("button", { class: "close-sidebar", onClick: () => (this.state = "closed") }, h(CrossIcon, null)))), h("main", { part: "sidebar-content" }, h("vviinn-vpr-widget", { exportparts: `${carouselParts}, ${productCardParts}`, token: this.token, productId: this.productId, imageWidth: this.imageWidth, imageRatio: this.imageRatio, blockTitle: "", mode: this.mode, "campaign-type": this.campaignType, useCarousel: this.useCarousel, onVviinnRecommendationsLoaded: () => (this.state = "open"), showScroll: this.widgetScrollbar, campaigns: this.campaigns, color: this.color, currencySign: this.currencySign, pricePrefix: this.pricePrefix, apiPath: this.apiPath, locale: this.locale, buttonElementId: this.buttonElementId, noResultText: this.noResultText, noResultShow: this.noResultShow, gridArrowsDynamic: this.gridArrowsDynamic, showingInButton: this.showingInButton, excluded: this.excluded, productDetailsNewTab: this.productDetailsNewTab, productDetailsRedirect: this.productDetailsRedirect, closed: this.state === "closed", opened: this.state === "open", addToBasketShow: this.addToBasketShow, cssUrl: this.cssUrl, showFilters: this.showFilters, setModeDiscounts: this.setModeDiscounts, updateButtonLocation: this.updateButtonLocation, addPriceContainer: this.addPriceContainer, favoriteShow: this.favoriteShow })))));
93
94
  }
94
95
  renderSourceImage() {
95
96
  var _a, _b, _c, _d, _e, _f;
@@ -5,7 +5,6 @@ import { SimilarProductsIcon, CrossSellingIcon } from "../vviinn-icons";
5
5
  * @part button - Clickable button element.
6
6
  * @part vviinn-button - Button element container.
7
7
  * @part product-card - Product Card itself.
8
- * @part product-part - Will be deprecated. Use "product-card" instead.
9
8
  * @part title - Title inside Product Card.
10
9
  * @part brand - Brand inside Product Card.
11
10
  * @part product-type - Product Type inside Product Card.
@@ -366,7 +366,7 @@ export class VviinnVprWidget {
366
366
  }
367
367
  renderRecommendation(recommendation, index) {
368
368
  var _a, _b;
369
- 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: this.imageRatio, price: recommendation.price.actual, salePrice: recommendation.price.sale, basePrice: (_a = recommendation.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.sale, energyCertifications: recommendation.energyCertifications, addPriceContainer: this.addPriceContainer, responsive: this.isGridMode, addToBasketShow: this.addToBasketShow, campaignTypeId: this.campaignType, index: index, widgetElementId: this.id, widgetVersion: version, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, customLabels: getCustomLabels(recommendation), favoriteShow: this.favoriteShow }));
369
+ return (h("vviinn-product-card", { productId: recommendation.productId, productTitle: recommendation.title, productType: recommendation.productType, deeplink: recommendation.deeplink, image: recommendation.image.thumbnail, brand: recommendation.brand, imageWidth: this.imageWidth, imageRatio: this.imageRatio, price: recommendation.price.actual, salePrice: recommendation.price.sale, basePrice: (_a = recommendation.basePrice) === null || _a === void 0 ? void 0 : _a.actual, baseSalePrice: (_b = recommendation.basePrice) === null || _b === void 0 ? void 0 : _b.sale, energyCertifications: recommendation.energyCertifications, addPriceContainer: this.addPriceContainer, responsive: this.isGridMode, addToBasketShow: this.addToBasketShow, campaignTypeId: this.campaignType, index: index, widgetElementId: this.id, widgetVersion: version, currency: this.currencySign, pricePrefix: this.pricePrefix, setMode: this.isSetMode, locale: this.locale, customLabels: getCustomLabels(recommendation), favoriteShow: this.favoriteShow }));
370
370
  }
371
371
  renderResults() {
372
372
  return (h("div", { class: `recommendations-results recommendations-${this.mode}`, part: "recommendations-results" }, this.recommendations.map((r, i) => this.renderRecommendation(r, i))));
@@ -18,9 +18,8 @@ import { DEFAULT_EXAMPLE_IMAGE } from "../../assets/constants";
18
18
  *
19
19
  * @part close-button - Close Button in the modal's header.
20
20
  * @part secondary-action - Back Button in the modal's header.
21
- * @part title - Modal window title.
21
+ * @part results-title - Title on the results page.
22
22
  * @part upload-photo_button - Upload Photo Button.
23
- * @part show-files_button - Show Files Button.
24
23
  * @part start-camera_button - Start Camera Button.
25
24
  * @part product-card - Product Card itself.
26
25
  * @part brand - Brand inside Product Card.
@@ -236,7 +236,7 @@
236
236
  height: 1px;
237
237
  }
238
238
 
239
- vviinn-overlayed-modal.first-screen::part(title),
239
+ vviinn-overlayed-modal.first-screen::part(results-title),
240
240
  vviinn-overlayed-modal.first-screen::part(secondary-action) {
241
241
  visibility: hidden;
242
242
  }
@@ -28,7 +28,7 @@ import { CameraActionIcon, UploadActionIcon } from "../vviinn-icons";
28
28
  import { DEFAULT_EXAMPLE_IMAGE } from "../../assets/constants";
29
29
  import { videoStreamSettings } from "../../video/settings";
30
30
  import { checkDeviceType } from "../../helpers";
31
- import { extendedFiltersParts, filtersParts, searchWidgetFilterParts, } from "../../cssParts";
31
+ import { extendedFiltersParts, filtersParts, modalParts, productCardParts, searchBarParts, searchWidgetButtonParts, searchWidgetFilterParts, } from "../../cssParts";
32
32
  const CAMERA_START_DELAY = 500;
33
33
  /**
34
34
  * @slot vviinn-teaser-text - Text on the widget's main screen.
@@ -45,9 +45,8 @@ const CAMERA_START_DELAY = 500;
45
45
  *
46
46
  * @part close-button - Close Button in the modal's header.
47
47
  * @part secondary-action - Back Button in the modal's header.
48
- * @part title - Modal window title.
48
+ * @part results-title - Title on the results page.
49
49
  * @part upload-photo_button - Upload Photo Button.
50
- * @part show-files_button - Show Files Button.
51
50
  * @part start-camera_button - Start Camera Button.
52
51
  * @part product-card - Product Card itself.
53
52
  * @part image-container - Product Card's image container.
@@ -419,11 +418,11 @@ export class VviinnVpsWidget {
419
418
  }
420
419
  render() {
421
420
  var _a, _b;
422
- return (h(Host, { exportparts: `image-container, content-container, basket-button-container,brand, product-type, deeplink, currency, image, image-link, image-picture, price-container, price-amount-sale, price-amount-outdated, price-amount-regular, price-amount-base-regular, price-amount-base-sale, price-amount-base-outdated, price-outdated, price-regular, price-sale, price-prefix, title, product-card, upload-photo_button, show-files_button, start-camera_button, text-search-input, text-search-button, close-button, secondary-action, close-button, custom-label-0, custom-label-1, custom-label-2, custom-label-3, custom-label-4, energy-label-container, energy-label-icon, energy-label-product-type, energy-label-data-sheet-link ${searchWidgetFilterParts}` }, !this.showingInButton && SlotSkeleton("vps"), h("vviinn-overlayed-modal", { class: { "first-screen": this.isOnboardingSlide() }, isFirstScreen: this.isOnboardingSlide(), active: this.active, resetState: this.resetState.bind(this), onVviinnWidgetClose: ({ detail }) => {
421
+ return (h(Host, { exportparts: `${modalParts}, ${productCardParts}, ${searchBarParts}, ${searchWidgetFilterParts}, ${searchWidgetButtonParts}` }, !this.showingInButton && SlotSkeleton("vps"), h("vviinn-overlayed-modal", { class: { "first-screen": this.isOnboardingSlide() }, isFirstScreen: this.isOnboardingSlide(), active: this.active, resetState: this.resetState.bind(this), onVviinnWidgetClose: ({ detail }) => {
423
422
  if (detail.campaignTypeId !== "VPR")
424
423
  this.handleModalClose();
425
424
  }, buttonElementId: (_a = this.buttonElementId) !== null && _a !== void 0 ? _a : this.widgetElementId, widgetVersion: version, hideBackButton: (this.mode === "upload" && this.showingInButton) ||
426
- (!this.cameraEnabled && this.isOnboardingSlide()), exportparts: "secondary-action, title, close-button" }, h("vviinn-slider", { position: this.slidePosition }, h("vviinn-slide", { class: {
425
+ (!this.cameraEnabled && this.isOnboardingSlide()), exportparts: modalParts }, h("vviinn-slider", { position: this.slidePosition }, h("vviinn-slide", { class: {
427
426
  "start-page": true,
428
427
  "camera-enabled": this.cameraEnabled,
429
428
  } }, h("vviinn-example-image", { onVviinnImageUploadFinished: this.handleVviinnImageUploadFinished, onVviinnImageUpload: () => {