vviinn-widgets 2.224.0 → 2.224.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 (65) hide show
  1. package/dist/cjs/{index-CMOB6Jkt.js → index-DJP-DLP2.js} +62 -66
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/{search.store-CIlbtjnr.js → search.store-BOJh7lOl.js} +51 -23
  4. package/dist/cjs/vviinn-button_6.cjs.entry.js +1 -1
  5. package/dist/cjs/vviinn-camera_12.cjs.entry.js +48 -87
  6. package/dist/cjs/vviinn-carousel_10.cjs.entry.js +16 -19
  7. package/dist/cjs/vviinn-shop-the-look.cjs.entry.js +2 -2
  8. package/dist/cjs/vviinn-text-search.cjs.entry.js +1 -1
  9. package/dist/cjs/vviinn-widgets.cjs.js +1 -1
  10. package/dist/collection/components/vviinn-cropper/vviinn-cropper.js +14 -33
  11. package/dist/collection/components/vviinn-filters/helpers/syncRequestFilters.js +8 -10
  12. package/dist/collection/components/vviinn-filters/vviinn-extended-filters.js +6 -5
  13. package/dist/collection/components/vviinn-filters/vviinn-filters.js +6 -5
  14. package/dist/collection/components/vviinn-filters/vviinn-selected-filters.js +25 -61
  15. package/dist/collection/components/vviinn-results/vviinn-results.js +4 -13
  16. package/dist/collection/components/vviinn-shop-the-look/helpers.js +1 -1
  17. package/dist/collection/store/helpers/applyResponseFilters.js +13 -0
  18. package/dist/collection/store/helpers/searchSequence.js +13 -0
  19. package/dist/collection/store/search.store.js +25 -23
  20. package/dist/esm/{index-DgbindDo.js → index-Dh2tkxzk.js} +62 -67
  21. package/dist/esm/loader.js +1 -1
  22. package/dist/esm/{search.store-DU3Lki_P.js → search.store-D5QcaJG3.js} +51 -23
  23. package/dist/esm/vviinn-button_6.entry.js +1 -1
  24. package/dist/esm/vviinn-camera_12.entry.js +48 -87
  25. package/dist/esm/vviinn-carousel_10.entry.js +14 -17
  26. package/dist/esm/vviinn-shop-the-look.entry.js +2 -2
  27. package/dist/esm/vviinn-text-search.entry.js +1 -1
  28. package/dist/esm/vviinn-widgets.js +1 -1
  29. package/dist/types/components/vviinn-cropper/vviinn-cropper.d.ts +0 -2
  30. package/dist/types/components/vviinn-filters/helpers/syncRequestFilters.d.ts +4 -2
  31. package/dist/types/components/vviinn-filters/vviinn-extended-filters.d.ts +1 -0
  32. package/dist/types/components/vviinn-filters/vviinn-filters.d.ts +1 -0
  33. package/dist/types/components/vviinn-filters/vviinn-selected-filters.d.ts +6 -7
  34. package/dist/types/components/vviinn-results/vviinn-results.d.ts +0 -1
  35. package/dist/types/components.d.ts +0 -1
  36. package/dist/types/store/helpers/applyResponseFilters.d.ts +13 -0
  37. package/dist/types/store/helpers/searchSequence.d.ts +3 -0
  38. package/dist/types/store/search.store.d.ts +11 -1
  39. package/dist/vviinn-widgets/{p-cc315187.entry.js → p-8dde73ee.entry.js} +1 -1
  40. package/dist/vviinn-widgets/{p-e2e5ad4f.entry.js → p-92eb8c8c.entry.js} +1 -1
  41. package/dist/vviinn-widgets/p-CICPwuU-.js +1 -0
  42. package/dist/vviinn-widgets/{p-CW4GgUsa.js → p-DOdiegD0.js} +1 -1
  43. package/dist/vviinn-widgets/p-b77cf635.entry.js +1 -0
  44. package/dist/vviinn-widgets/p-c54e5eae.entry.js +1 -0
  45. package/dist/vviinn-widgets/p-d5fa46c6.entry.js +1 -0
  46. package/dist/vviinn-widgets/vviinn-widgets.esm.js +1 -1
  47. package/package.json +12 -8
  48. package/www/build/{p-cc315187.entry.js → p-8dde73ee.entry.js} +1 -1
  49. package/www/build/{p-e2e5ad4f.entry.js → p-92eb8c8c.entry.js} +1 -1
  50. package/www/build/p-CICPwuU-.js +1 -0
  51. package/www/build/{p-CW4GgUsa.js → p-DOdiegD0.js} +1 -1
  52. package/www/build/p-b77cf635.entry.js +1 -0
  53. package/www/build/{p-4ff95f30.js → p-c4df99b0.js} +1 -1
  54. package/www/build/p-c54e5eae.entry.js +1 -0
  55. package/www/build/p-d5fa46c6.entry.js +1 -0
  56. package/www/build/vviinn-widgets.esm.js +1 -1
  57. package/www/index.html +1 -1
  58. package/dist/vviinn-widgets/p-3ee8f4dc.entry.js +0 -1
  59. package/dist/vviinn-widgets/p-427a9578.entry.js +0 -1
  60. package/dist/vviinn-widgets/p-73c048a0.entry.js +0 -1
  61. package/dist/vviinn-widgets/p-BMGBYwye.js +0 -1
  62. package/www/build/p-3ee8f4dc.entry.js +0 -1
  63. package/www/build/p-427a9578.entry.js +0 -1
  64. package/www/build/p-73c048a0.entry.js +0 -1
  65. package/www/build/p-BMGBYwye.js +0 -1
@@ -2,9 +2,9 @@
2
2
 
3
3
  var index = require('./index-BU8FMTXn.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
- var search_store = require('./search.store-CIlbtjnr.js');
5
+ var search_store = require('./search.store-BOJh7lOl.js');
6
6
  var index$2 = require('./index-CP1QUrJT.js');
7
- var index$1 = require('./index-CMOB6Jkt.js');
7
+ var index$1 = require('./index-DJP-DLP2.js');
8
8
  var store = require('./store-jPZ4ROqV.js');
9
9
  var cropperUtils = require('./cropperUtils-DCDOLeBS.js');
10
10
  var cssUrlHelper = require('./cssUrlHelper-B5A2BBm7.js');
@@ -296,7 +296,6 @@ const VviinnCropper = class {
296
296
  this.vviinnCropperAspectRatioError = index.createEvent(this, "vviinnCropperAspectRatioError");
297
297
  this.vviinnCropperResetState = index.createEvent(this, "vviinnCropperResetState");
298
298
  this.vviinnResetCropArea = index.createEvent(this, "vviinnResetCropArea");
299
- this.vviinnSelectedFiltersReset = index.createEvent(this, "vviinnSelectedFiltersReset");
300
299
  /** Save to Local Storage mode for uploaded image */
301
300
  this.saveImageMode = "once";
302
301
  /** Automatically trigger visual search after crop. Set to false to handle search manually via vviinnCropperCropEnd event */
@@ -397,7 +396,10 @@ const VviinnCropper = class {
397
396
  return Object.assign({ campaignTypeId: "VPS", campaignTypeName: search_store.campaignTypeNames["VPS"], widgetVersion: search_store.version }, search_store.addIfNotEmpty("widgetId", this.el.id));
398
397
  };
399
398
  this.triggerVisualSearch = async () => {
400
- Rectangle._functionExports.pipe(await search_store.makeVisualSearchRequest(this.storeName, null, this.token, this.apiPath), Rectangle.fold(() => {
399
+ Rectangle._functionExports.pipe(await search_store.makeVisualSearchRequest(this.storeName, null, this.token, {
400
+ apiPath: this.apiPath,
401
+ dropAppliedFilters: true,
402
+ }), Rectangle.fold(() => {
401
403
  this.vviinnNoResult.emit(this.getBasicEventData());
402
404
  }, () => { }));
403
405
  };
@@ -476,6 +478,10 @@ const VviinnCropper = class {
476
478
  if (!this.state.imageBounds)
477
479
  return;
478
480
  const normalizedSearchArea = Rectangle.divideOnSized(this.state.imageBounds)(cropboxData);
481
+ // Before the events: a host listening on vviinnCropperCropEnd searches synchronously, and
482
+ // dropAppliedFilters only shapes requests we make ourselves.
483
+ if (!this.autoSearch && this.state.requestFilters.length)
484
+ this.state.requestFilters = [];
479
485
  this.vviinnCropperCropEnd.emit(Object.assign({ searchArea: cropboxData, normalizedSearchArea, imageBounds: this.state.imageBounds }, (this.state.visualSearchId && {
480
486
  requestId: this.state.visualSearchId,
481
487
  })));
@@ -484,7 +490,8 @@ const VviinnCropper = class {
484
490
  this.vviinnImageCrop.emit({
485
491
  isTriggeredByVpsWidget: this.showInWidget,
486
492
  });
487
- this.autoSearch && this.triggerVisualSearch();
493
+ if (this.autoSearch)
494
+ this.triggerVisualSearch();
488
495
  };
489
496
  this.showPreloader = () => this.state.searchStatus === "loading" &&
490
497
  this.state.searchType === "image" &&
@@ -539,20 +546,17 @@ const VviinnCropper = class {
539
546
  return;
540
547
  if (this.cropper)
541
548
  this.state.croppedImageUrl = (_d = (_b = (_a = this.cropper).getCroppedCanvas) === null || _b === void 0 ? void 0 : (_c = _b.call(_a)).toDataURL) === null || _d === void 0 ? void 0 : _d.call(_c);
542
- this.vviinnSelectedFiltersReset.emit({
543
- isTriggeredByVpsWidget: this.showInWidget,
544
- });
545
549
  }
546
550
  render() {
547
551
  var _a;
548
- return (index.h(index.Host, { key: 'b50ccb5595b27ef6673ff9d9350fc30359a6f7ce', class: {
552
+ return (index.h(index.Host, { key: 'd21160534d7b061f52b6a9cd990b4f774a7e3fb7', class: {
549
553
  "show-in-widget": this.showInWidget,
550
554
  active: !!this.state.image,
551
- } }, cssUrlHelper.renderExternalCSS(this.cssUrl), index.h("div", { key: 'efd816ed4e19082091567714fee4ef40efe9a6c4', class: "container" }, this.state.image && (index.h("div", { key: '13f35758ba243eb73513e17375daca8431538383', class: "image-container", style: {
555
+ } }, cssUrlHelper.renderExternalCSS(this.cssUrl), index.h("div", { key: 'c21fefcf982b5f569adad7a5934d442da666a0c3', class: "container" }, this.state.image && (index.h("div", { key: 'a9b71be06d432d1f35c53cf5721b6708580dfc95', class: "image-container", style: {
552
556
  width: `${this.width.toString()}px`,
553
557
  overflow: "hidden",
554
- } }, index.h("img", { key: '7525aae0654325fb25c88106a9ee1fface11a62e', decoding: "async", width: this.width, height: this.height, src: this.state.image.src, draggable: false, onLoad: this.loadImage, alt: store.instance.t("a11y.cropperImage") }), (_a = this.state.detectedObjects) === null || _a === void 0 ? void 0 :
555
- _a.map((object) => (index.h("vviinn-detected-object", { detectedObject: object, selectedDetectedObject: this.selectedDetectedObject, basicEventData: this.basicEventData, imageBounds: this.state.imageBounds, showInWidget: this.showInWidget }))))), this.showPreloader() && (index.h("div", { key: 'b89ad46bda5279b77f4fe258f7a6d4af08f81c29', class: "image-preloader" }, index.h("vviinn-preloader", { key: '34f55578c05321480d7e3d8141a4638df8aad08b' }))))));
558
+ } }, index.h("img", { key: 'a15e6593d83afbcb0713b77ebd6712c8f08d43e3', decoding: "async", width: this.width, height: this.height, src: this.state.image.src, draggable: false, onLoad: this.loadImage, alt: store.instance.t("a11y.cropperImage") }), (_a = this.state.detectedObjects) === null || _a === void 0 ? void 0 :
559
+ _a.map((object) => (index.h("vviinn-detected-object", { detectedObject: object, selectedDetectedObject: this.selectedDetectedObject, basicEventData: this.basicEventData, imageBounds: this.state.imageBounds, showInWidget: this.showInWidget }))))), this.showPreloader() && (index.h("div", { key: '853db6a1f6b06f4ade2bda740df2de525e7d1404', class: "image-preloader" }, index.h("vviinn-preloader", { key: '35ad67441ad3c70938ce499a99d9e821841f00fb' }))))));
556
560
  }
557
561
  get el() { return index.getElement(this); }
558
562
  };
@@ -725,7 +729,7 @@ const oneClickDiscoveryModes = [
725
729
 
726
730
  const vviinnResultsCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration-default:0.5s;--search-modal-animation-duration-default:0.25s;--search-modal-animation-duration-mobile-default:0.35s;}:host{display:block}:host(.show-in-widget){display:grid;overflow-y:auto;overflow-x:hidden;padding:unset;position:relative;width:100%}:host::part(product-card){width:100%;height:100%}:host::part(content-card){height:100%}:host::part(list-card){height:calc(100% - 20px)}.products{width:100%;align-content:center;align-items:start;box-sizing:border-box;display:grid;grid-gap:32px 16px;grid-template-columns:repeat(\n auto-fill,\n minmax(\n var(--product-card-width, var(--product-card-results-min-width)),\n 1fr\n )\n );justify-items:center;padding:0 24px 24px 16px;position:absolute}:host(.show-in-widget) .products{grid-template-columns:repeat(\n auto-fill,\n minmax(var(--product-card-width, var(--product-card-widget-min-width)), 1fr)\n )}:host(:not(.show-in-widget)) .products{position:static;padding:0}.hidden{visibility:hidden;height:1px}products.hidden{display:none}.vviinn-results-product-card-actions vviinn-vpr-button::part(button){position:relative;display:flex;justify-content:center;align-items:center;color:var(--color-icon-inverse);padding:var(--spacing-50);gap:var(--spacing-50);border-radius:var(--border-radius-100);background:var(--button-bg-color-frosted);backdrop-filter:blur(calc(var(--filter-blur-150, 12px) / 2))}.vviinn-results-product-card-actions vviinn-vpr-button::part(button)::after{content:\"\";position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(1.55)}.vviinn-results-product-card-actions vviinn-vpr-button::part(button):hover{background:var(--button-bg-color-frosted-hover)}#one-click-discovery-append{width:100%;grid-column:1 / -1}vviinn-recommendations-sidebar::part(body){border:1px solid var(--color-border-02);border-left:none;border-right:none;margin-top:-9px;max-height:unset}@media screen and (max-width: 768px){vviinn-recommendations-sidebar::part(body){margin-top:-1px}}vviinn-recommendations-sidebar::part(source-image){display:none}vviinn-recommendations-sidebar::part(sidebar-header){padding:0;min-height:40px;margin-bottom:24px;align-items:center;justify-items:left;text-align:left}vviinn-recommendations-sidebar::part(sidebar-content){padding:0}:host(.matching-discovery) vviinn-recommendations-sidebar::part(items-group){grid-template-columns:repeat(\n auto-fill,\n minmax(\n var(--product-card-width, var(--product-card-results-min-width)),\n 1fr\n )\n )}:host(.show-in-widget) vviinn-recommendations-sidebar::part(recommendations-results),:host(.show-in-widget) vviinn-recommendations-sidebar::part(items-group){grid-template-columns:repeat(\n auto-fill,\n minmax(var(--product-card-widget-min-width), 1fr)\n )}@media (max-width: 768px){:host(.show-in-widget){align-content:start;position:static;overflow-y:unset;width:100%;padding-top:0;margin-top:12px}.products{position:static;padding:0;width:unset;row-gap:24px;justify-content:center}.nothing-found{position:static;grid-gap:64px;padding:unset;align-content:start;width:unset}}@media (max-width: 380px){.products{-moz-column-gap:10px;column-gap:10px}}";
727
731
 
728
- var __rest$2 = (undefined && undefined.__rest) || function (s, e) {
732
+ var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
729
733
  var t = {};
730
734
  for (var p in s)
731
735
  if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -840,7 +844,7 @@ const VviinnResults = class {
840
844
  if (!detail.query)
841
845
  return;
842
846
  search_store.setTextSearchQuery(this.storeName, detail.query);
843
- const _a = this.getBasicEventData("TPS"), rest = __rest$2(_a, ["campaignTypeId"]);
847
+ const _a = this.getBasicEventData("TPS"), rest = __rest$1(_a, ["campaignTypeId"]);
844
848
  const textSearchStartedEvent = index$1.createWidgetEvent("TPS")(Object.assign({ action: "search", session_id: this.uiSessionId }, rest));
845
849
  store.trackEvent(textSearchStartedEvent, this.token, this.apiPath);
846
850
  this.getTextSearchResults();
@@ -865,7 +869,7 @@ const VviinnResults = class {
865
869
  if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
866
870
  return;
867
871
  const { action, kind, customTrigger } = detail;
868
- const _a = this.getBasicEventData(customTrigger), rest = __rest$2(_a, ["campaignTypeId"]);
872
+ const _a = this.getBasicEventData(customTrigger), rest = __rest$1(_a, ["campaignTypeId"]);
869
873
  if (action === "select" || action === "deselect" || action === "reset")
870
874
  this.initResultEvents();
871
875
  if (customTrigger === "TPS")
@@ -884,14 +888,6 @@ const VviinnResults = class {
884
888
  search_store.resetStore(this.storeName, "appStateOnly");
885
889
  this.updateCampaignIds();
886
890
  };
887
- this.imageCropHandler = ({ detail }) => {
888
- if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
889
- return;
890
- this.vviinnSelectedFiltersReset.emit({
891
- isTriggeredByVpsWidget: this.showInWidget,
892
- });
893
- this.state.requestFilters = [];
894
- };
895
891
  this.oneClickDiscoveryAppendClosedHandler = ({ detail, }) => {
896
892
  if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
897
893
  return;
@@ -914,7 +910,7 @@ const VviinnResults = class {
914
910
  });
915
911
  }
916
912
  createTrackingEventBody(detail) {
917
- const { productRank, productId} = detail, rest = __rest$2(detail, ["productRank", "productId", "campaignTypeId", "clickEvent"]);
913
+ const { productRank, productId} = detail, rest = __rest$1(detail, ["productRank", "productId", "campaignTypeId", "clickEvent"]);
918
914
  return Object.assign({ session_id: this.uiSessionId, rank: productRank, product: productId }, rest);
919
915
  }
920
916
  async componentWillLoad() {
@@ -967,7 +963,7 @@ const VviinnResults = class {
967
963
  }));
968
964
  }
969
965
  async getVisualSearchResults(searchId) {
970
- return Rectangle._functionExports.pipe(await search_store.makeVisualSearchRequest(this.storeName, searchId !== null && searchId !== void 0 ? searchId : this.state.visualSearchId, this.token, this.apiPath), Rectangle.fold(() => {
966
+ return Rectangle._functionExports.pipe(await search_store.makeVisualSearchRequest(this.storeName, searchId !== null && searchId !== void 0 ? searchId : this.state.visualSearchId, this.token, { apiPath: this.apiPath }), Rectangle.fold(() => {
971
967
  this.vviinnNoResult.emit(this.getBasicEventData("VPS"));
972
968
  return null;
973
969
  }, (response) => response));
@@ -995,7 +991,6 @@ const VviinnResults = class {
995
991
  ["vviinnTextSearchStarted", this.textSearchStartedHandler],
996
992
  ["vviinnFiltersChanged", this.filtersChangedHandler],
997
993
  ["vviinnFilterTriggered", this.filterTriggeredHandler],
998
- ["vviinnImageCrop", this.imageCropHandler],
999
994
  [
1000
995
  "vviinnOneClickDiscoveryAppendClosed",
1001
996
  this.oneClickDiscoveryAppendClosedHandler,
@@ -1076,7 +1071,7 @@ const VviinnResults = class {
1076
1071
  store.trackEvent(addToWishlistEvent, this.token, this.apiPath);
1077
1072
  }
1078
1073
  trackResultEvent(type) {
1079
- const _a = this.getBasicEventData(), { campaignTypeId } = _a, rest = __rest$2(_a, ["campaignTypeId"]);
1074
+ const _a = this.getBasicEventData(), { campaignTypeId } = _a, rest = __rest$1(_a, ["campaignTypeId"]);
1080
1075
  let resultEvent = index$1.createResultEventByType(type, campaignTypeId)(Object.assign({ session_id: this.uiSessionId }, rest));
1081
1076
  store.trackEvent(resultEvent, this.token, this.apiPath);
1082
1077
  }
@@ -1149,13 +1144,13 @@ const VviinnResults = class {
1149
1144
  render() {
1150
1145
  var _a;
1151
1146
  const resultsLength = this.getResults().length;
1152
- return (index.h(index.Host, { key: 'd62957bb1294f3a62e14fa9a3eb97c7ef6007eae', id: "results-block", class: {
1147
+ return (index.h(index.Host, { key: '6717d12dc2c915c1f347ee0d626c2e14bd22495c', id: "results-block", class: {
1153
1148
  "show-in-widget": this.showInWidget,
1154
1149
  "matching-discovery": this.oneClickDiscoveryMode === "append-slider",
1155
- }, exportparts: `${index$3.productCardParts}, ${index$3.listCardParts}, ${index$3.contentCardParts}, ${index$3.productCardsGridPart}` }, cssUrlHelper.renderExternalCSS(this.cssUrl), index.h("div", { key: '69f7a38dc02f42c357dbae8cf154ecb78380f270', class: "nothing-found" }, this.getCurrentErrorType() && (index.h("vviinn-error", { key: 'd78ed9f6d777d7ec1686b10b709deee018c4391e', errorType: this.getCurrentErrorType(), handler: this.resetWidgetState, hasBackground: this.showInWidget, searchType: this.state.searchType }))), index.h("div", { key: 'be3db62dcfd508b6f60036454d3c825d6c27f5ae', class: {
1150
+ }, exportparts: `${index$3.productCardParts}, ${index$3.listCardParts}, ${index$3.contentCardParts}, ${index$3.productCardsGridPart}` }, cssUrlHelper.renderExternalCSS(this.cssUrl), index.h("div", { key: '16e9465ffc9dcfeb3f7eddbd7d340c4a8a6910a6', class: "nothing-found" }, this.getCurrentErrorType() && (index.h("vviinn-error", { key: '1aa58576b33310b819cf8bc96e12635dd1dda6c8', errorType: this.getCurrentErrorType(), handler: this.resetWidgetState, hasBackground: this.showInWidget, searchType: this.state.searchType }))), index.h("div", { key: '83bdaeb513300871388847247407a6925d8e9398', class: {
1156
1151
  hidden: this.showAspectRatioError || resultsLength === 0,
1157
1152
  products: true,
1158
- }, part: index$3.productCardsGridPart, id: "vviinn-results-products" }, resultsLength > 0 && this.renderResults(), index.h("div", { key: '88d3d2d5880806b9e24799694cc540de676d17f8', id: "one-click-discovery-append", style: {
1153
+ }, part: index$3.productCardsGridPart, id: "vviinn-results-products" }, resultsLength > 0 && this.renderResults(), index.h("div", { key: '44c26b1e19e097962ed8b004b98fce6099ade20d', id: "one-click-discovery-append", style: {
1159
1154
  order: ((_a = this.oneClickDiscoveryAppendIndex) !== null && _a !== void 0 ? _a : resultsLength).toString(),
1160
1155
  } }))));
1161
1156
  }
@@ -1169,18 +1164,6 @@ VviinnResults.style = vviinnResultsCss;
1169
1164
 
1170
1165
  const vviinnFiltersCss = ":host{--font-family-base:Inter, system-ui, sans-serif;--font-family-mono:monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--font-size-display:32px;--font-size-title:24px;--font-size-headline:18px;--font-size-label-large:16px;--font-size-label:14px;--font-size-body-large:16px;--font-size-body:14px;--font-size-caption:12px;--line-height-display:40px;--line-height-title:32px;--line-height-headline:24px;--line-height-label-large:24px;--line-height-label:20px;--line-height-body-large:24px;--line-height-body:20px;--line-height-caption:16px;--letter-spacing-title:0px;--letter-spacing-headline:0px;--letter-spacing-label-large:0px;--letter-spacing-label:0px;--letter-spacing-body-large:0px;--letter-spacing-body:0px;--letter-spacing-caption:0px;--font-weight-400:400;--font-weight-500:500;--font-weight-600:600;--font-weight-700:700;--spacing-none:0px;--spacing-25:2px;--spacing-50:4px;--spacing-75:6px;--spacing-100:8px;--spacing-125:10px;--spacing-150:12px;--spacing-200:16px;--spacing-250:20px;--spacing-300:24px;--spacing-400:32px;--spacing-500:40px;--spacing-600:48px;--border-radius-none:0px;--border-radius-25:2px;--border-radius-50:4px;--border-radius-100:8px;--border-radius-150:12px;--border-radius-200:16px;--border-radius-300:24px;--border-radius-400:32px;--border-radius-full:9999px;--stroke-width-none:0px;--stroke-width-25:1px;--stroke-width-50:2px;--stroke-width-75:3px;--stroke-width-100:4px;--stroke-width-150:6px;--stroke-width-200:8px;--stroke-width-300:12px;--product-card-widget-min-width:135px;--product-card-results-min-width:250px;--image-set-mode-min-width:155px;--source-card-set-mode-max-width:500px;--filter-blur-none:0px;--filter-blur-100:8px;--filter-blur-150:12px;--filter-blur-200:16px;--color-bg-base:#ffffff;--color-bg-inverse:#161616;--color-border-00:#ffffff;--color-border-01:#f4f4f4;--color-border-02:#e0e0e0;--color-border-03:#c6c6c6;--color-border-inverse-00:#161616;--color-border-inverse-01:#393939;--color-field-01:#ffffff;--color-field-02:#f4f4f4;--color-icon-primary:#161616;--color-icon-secondary:#525252;--color-icon-helper:#8d8d8d;--color-icon-on-color:#ffffff;--color-icon-inverse:#ffffff;--color-icon-disabled:#16161640;--color-text-primary:#161616;--color-text-secondary:#707070;--color-text-helper:#8d8d8d;--color-text-placeholder:#a8a8a8;--color-text-on-color:#ffffff;--color-text-inverse:#ffffff;--color-text-disabled:#16161640;--button-bg-color-primary:#000000;--button-bg-color-primary-hover:#161616;--button-bg-color-primary-active:#1e1e1e;--button-bg-color-secondary:#f4f4f4;--button-bg-color-secondary-hover:#e0e0e0;--button-bg-color-secondary-active:#c6c6c6;--button-bg-color-ghost-hover:#f4f4f4;--button-bg-color-ghost-active:#eaeaea;--button-bg-color-frosted:#6f6f6f66;--button-bg-color-frosted-hover:#6f6f6f80;--button-bg-color-frosted-active:#6f6f6f99;--button-bg-color-disabled:#e0e0e0;--button-bg-color-positive:#dcfce7;--surface-bg-color-01:#f4f4f4;--surface-bg-color-01-hover:#eaeaea;--surface-bg-color-01-active:#e0e0e0;--surface-bg-color-02:#ffffff;--surface-bg-color-inverse:#262626;--surface-bg-color-inverse-hover:#303030;--surface-bg-color-inverse-active:#393939;--surface-bg-color-disabled:#e0e0e0;--surface-bg-color-shadow-01:#dddddd;--surface-bg-color-shadow-02:#c6c6c6;--chip-bg-color-primary:#161616;--chip-bg-color-primary-hover:#1e1e1e;--chip-bg-color-primary-active:#262626;--chip-bg-color-subtle:#f4f4f4;--chip-bg-color-subtle-hover:#eaeaea;--chip-bg-color-subtle-active:#e0e0e0;--chip-bg-color-outline-hover:#f4f4f4;--chip-bg-color-outline-active:#eaeaea;--label-bg-color-accent:#ff3944;--sidebar-animation-duration-default:0.5s;--search-modal-animation-duration-default:0.25s;--search-modal-animation-duration-mobile-default:0.35s;}:host{display:block;font-family:var(--font-family, var(--font-family-base));font-style:normal;display:contents;}.filters-modal-list,.sub-filters-wrapper,.main-filters-list,.filters-modal-sub-list,.selected-filters-wrapper{list-style:none;margin:0;padding:0}.main-filters-list{padding:var(--spacing-25);gap:var(--spacing-25);border-radius:8px;background:var(--surface-bg-color-01);display:inline-flex}vviinn-range-filter{width:100%;max-width:500px;padding-bottom:var(--spacing-150)}.filters-search-input-container{position:relative;box-sizing:border-box;width:100%;display:flex;align-items:center}.filters-search-icon{position:absolute;left:var(--spacing-100);color:var(--color-icon-helper);z-index:1;pointer-events:none;display:flex;align-items:center;justify-content:center}.filters-search-input{width:100%;padding:var(--spacing-100) var(--spacing-100) var(--spacing-100)\n var(--spacing-500);border:none;background:var(--color-bg-base);font-family:var(--font-family, var(--font-family-base));font-size:var(--font-size-body);font-weight:var(--font-weight-400);line-height:var(--line-height-body);color:var(--color-text-primary);box-sizing:border-box;outline:none}.filters-search-input::-moz-placeholder{color:var(--color-text-placeholder)}.filters-search-input::placeholder{color:var(--color-text-placeholder)}.filters-modal-main-button,.filters-sub-button,.filters-main-button,.filters-modal-close,.filters-sub-button-selected{font-family:var(--font-family, var(--font-family-base));cursor:pointer;border:none}.filters-sub-button,.filters-main-button{font-size:var(--font-size-body);font-weight:var(--font-weight-400);line-height:var(--line-height-body);letter-spacing:var(--letter-spacing-body);display:flex;justify-content:center;align-items:center;border-radius:6px}.filters-main-button{padding:var(--spacing-100);color:var(--color-text-secondary);background:none;transition:background 0.15s,\n color 0.15s}.filters-main-button.active,.filters-main-button:hover{background:var(--surface-bg-color-02);color:var(--color-text-primary)}.sub-filters-wrapper,.selected-filters-wrapper{gap:var(--spacing-100);display:flex;flex-direction:row;overflow-x:auto;scrollbar-width:thin}.sub-filters-wrapper{align-items:center;gap:var(--spacing-100);margin:16px -2px 0}.sub-filters-wrapper>li{padding:2px}.selected-filters-wrapper{align-items:center;gap:var(--spacing-100);flex-wrap:wrap}.filters-sub-button{color:var(--color-text-primary);background:var(--surface-bg-color-01);padding:var(--spacing-100);gap:var(--spacing-25);height:100%}.filters-sub-button>span,.filters-sub-button-selected>span{display:inline-flex;justify-content:center;align-items:center;gap:var(--spacing-25);white-space:nowrap}.filters-sub-button>span>span,.filters-sub-button-selected>span>span{padding:var(--spacing-25)}.filters-sub-button:hover{background:var(--surface-bg-color-01-hover)}.filters-sub-button:disabled{cursor:not-allowed;background:var(--surface-bg-color-disabled);color:var(--color-text-disabled)}.filters-more-button{display:flex;padding:var(--spacing-100);gap:var(--spacing-50);border-radius:var(--border-radius-100);align-items:flex-start;background-color:var(--button-bg-color-secondary);transition:background-color 0.1s;border:none;cursor:pointer}.filters-more-button:hover{background-color:var(--button-bg-color-secondary-hover)}.filters-modal-wrapper{display:flex;flex-direction:column;background:#ffffff}.filters-modal.button,.filters-modal.modal{display:none;position:fixed;top:0;bottom:0;right:0;left:0;z-index:99999;background-color:rgba(0, 0, 0, 0.5)}.filters-modal.button .filters-modal-wrapper{position:fixed;top:0;bottom:0;right:0;width:420px;z-index:99999;border-radius:var(--border-radius-400) var(--border-radius-none)\n var(--border-radius-none) var(--border-radius-400)}.filters-modal.preview{display:block}.filters-modal.open{display:block}.filters-modal-header{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:var(--color-text-primary);text-align:center;border-bottom:1px solid var(--color-border-01)}.filters-modal-header.show-header-content{min-height:64px}.filters-modal-title{margin:0;padding:0;font-size:var(--font-size-headline);font-weight:var(--font-weight-500);line-height:var(--line-height-headline);letter-spacing:var(--letter-spacing-headline)}.filters-modal-no-filters-message{font-size:var(--font-size-caption);color:var(--color-text-secondary);font-weight:var(--font-weight-500);line-height:var(--line-height-caption);letter-spacing:var(--letter-spacing-caption);text-align:center;padding:var(--spacing-300) var(--spacing-200);display:flex;align-items:center;justify-content:center}.filters-modal-main{overflow-y:auto;scrolbar-width:thin}.filters-modal-list{margin:var(--spacing-50) 0 0 var(--spacing-300)}.filters-modal-list>li{padding-right:var(--spacing-300)}.filters-modal:not(.preview-inline) .filters-modal-list>li:not(:last-child) .filters-modal-main-button-wrapper{border-bottom:1px solid var(--color-border-01)}.filters-modal-main-button{position:relative;width:100%;background:none;text-align:left;padding:var(--spacing-200) 0;color:var(--color-text-primary);font-size:var(--font-size-label-large);font-weight:var(--font-weight-500);line-height:var(--line-height-label-large);letter-spacing:var(--letter-spacing-label-large)}.filters-modal-main-button>svg{position:absolute;right:0;top:var(--spacing-200);color:var(--color-icon-helper);transform:rotate(90deg)}.filters-modal-main-button:hover>svg{color:var(--color-icon-primary);transition:color 0.2s}.filters-modal-main-button-wrapper.open .filters-modal-main-button>svg{transform:rotate(-90deg);color:var(--color-icon-primary)}.filters-modal-sub-list{display:none}.filters-modal-main-button-wrapper.open .filters-modal-sub-list{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-bottom:var(--spacing-150)}.filters-modal-sub-list>li{display:contents}.filters-modal-close{position:absolute;color:#6f6f6f;right:var(--spacing-100);top:var(--spacing-200);cursor:pointer;background:none}.filters-modal-close:hover{color:#000}.filters-modal.preview .filters-modal-close{display:none}.filters-more-modal-button{background:none;border:none;cursor:pointer;display:flex;align-items:center;height:36px;padding:var(--spacing-75);gap:var(--spacing-50);border-radius:var(--border-radius-100);background-color:var(--surface-bg-color-01);transition:background-color 0.1s;font-family:var(--font-family, var(--font-family-base));font-size:var(--font-size-label);color:var(--color-text-primary)}.filters-more-modal-button.custom:not(.clickable){cursor:default}.filters-more-modal-button:hover{background-color:var(--surface-bg-color-01-hover)}.filters-more-modal-button.active{background:var(--surface-bg-color-inverse);color:var(--color-text-inverse)}.filters-more-modal-button.active .filters-option-icon-wrapper{border-color:var(--color-bg-base);background-color:var(--color-bg-base);color:var(--color-icon-primary)}.filters-more-modal-button>span{white-space:nowrap;padding:var(--spacing-25)}.filters-more-modal-button:disabled{cursor:not-allowed;opacity:0.5}.filters-more-modal-button img{box-sizing:border-box;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:var(--border-radius-full);border:1px solid var(--color-border-01)}.filters-modal-actions{border-top:1px solid var(--color-border-01);padding:var(--spacing-125);z-index:10;border-radius:0px 0px 0px 32px}.filters-modal-apply,.filters-modal-reset{font-family:var(--font-family, var(--font-family-base))}.filters-modal-apply{cursor:pointer;width:100%;border:none;margin-bottom:20px;display:flex;padding:var(--spacing-150);justify-content:center;align-items:center;gap:var(--spacing-50);align-self:stretch;color:var(--color-text-inverse);text-align:center;border-radius:var(--border-radius-150);background:var(--button-bg-color-primary);font-size:var(--font-size-label-large);font-weight:var(--font-weight-500);line-height:var(--line-height-label-large);letter-spacing:var(--letter-spacing-label-large)}.filters-modal-apply:disabled{background:var(--button-bg-color-disabled);color:var(--color-text-disabled)}.filters-modal-reset{background:none;border:none;cursor:pointer;display:block;text-align:center;width:100%;padding:var(--spacing-125) 0;color:var(--color-text-secondary);text-align:center;font-size:var(--font-size-label);font-weight:var(--font-weight-500);line-height:var(--line-height-label);letter-spacing:var(--letter-spacing-label)}.filters-modal-reset:hover{color:var(--color-text-primary)}.selected-filters-wrapper>li .filters-sub-button-selected{border-radius:var(--border-radius-100);background:var(--surface-bg-color-inverse);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:var(--spacing-100)}.selected-filters-wrapper>li.hidden{display:none}.filters-sub-button-selected{display:flex;align-items:center;gap:var(--spacing-25);background:var(--surface-bg-color-inverse);border-radius:var(--border-radius-100);color:var(--color-text-inverse);text-overflow:ellipsis;font-size:var(--font-size-body);font-weight:var(--font-weight-400);line-height:var(--line-height-body);letter-spacing:var(--letter-spacing-body);padding:var(--spacing-100)}.filters-sub-button-color-dot{box-sizing:border-box;width:24px;height:24px;border-radius:var(--border-radius-full);border:var(--stroke-width-50) solid var(--color-border-01)}.selected-filters-wrapper .filters-sub-button-selected{width:24px;height:24px;border:none}.filters-option-icon-wrapper{display:flex;box-sizing:border-box;align-items:center;justify-content:center;border-radius:4px;border:2px solid #e0e0e0;background:#fff;width:20px;height:20px}.filters-modal-main-button-added-options{color:var(--color-text-secondary);text-overflow:ellipsis;padding-right:var(--spacing-100);font-size:var(--font-size-body);font-weight:var(--font-weight-400);line-height:var(--line-height-body);letter-spacing:var(--letter-spacing-body)}.filters-modal-main-button-added-options>span::after{content:\", \"}.filters-modal-main-button-added-options>span:last-child::after{content:\"\"}.filters-modal.preview-inline,.filters-modal.preview-inline .filters-modal-wrapper,.filters-modal.preview-inline .filters-modal-main{overflow:visible}.filters-modal.preview-inline .filters-modal-header,.filters-modal.preview-inline .filters-modal-actions{display:none}.filters-modal.preview-inline .filters-modal-list{margin:0;flex-direction:row;gap:var(--spacing-100);display:flex;flex-wrap:wrap}.filters-modal.preview-inline .extended-filters-row{box-sizing:border-box;padding-right:0;border-radius:var(--border-radius-100);background:var(--surface-bg-color-01)}.filters-modal.preview-inline .filters-modal-main-button{width:100%;display:flex;align-items:center;padding:var(--spacing-75);gap:var(--spacing-25);justify-content:space-between;font-size:var(--font-size-body);font-weight:var(--font-weight-400)}.filters-modal.preview-inline .filters-modal-main-button>svg{position:static}.filters-modal.preview-inline .extended-filters-row{position:relative}.filters-modal.preview-inline .filters-search-container{max-height:225px;width:-moz-max-content;width:max-content;min-width:140px;height:-moz-fit-content;height:fit-content;overflow:hidden;position:absolute;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:stretch;padding:0;top:calc(100% + var(--spacing-75));left:0;right:0;z-index:1000;border-radius:var(--border-radius-150);border:1px solid var(--color-border-01);background-color:var(--color-bg-base);box-shadow:0 4px 8px 0 rgba(0, 0, 0, 0.1);box-sizing:border-box}.filters-modal.preview-inline .filters-search-input-container{position:sticky;top:0;background-color:var(--color-bg-base);padding:var(--spacing-50);border-bottom:1px solid var(--color-border-01);z-index:1}.filters-modal.preview-inline .filters-modal-sub-list{position:static;border:none;background:none;box-shadow:none;padding:var(--spacing-50);margin:0;max-height:165px;width:100%;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:flex-start;gap:8px;overflow-y:auto;scrollbar-width:thin}.filters-modal.preview-inline .align-right .filters-search-container{left:auto;right:0}.filters-modal.preview-inline .filters-more-modal-button{width:100%;gap:var(--spacing-150);background-color:var(--color-bg-base)}.filters-modal.preview-inline .filters-option-icon-wrapper{margin-left:auto}.filters-modal.preview-inline .filters-more-modal-button:hover{background-color:var(--surface-bg-color-01-hover)}.filters-modal.preview-inline .filters-more-modal-button.active{color:var(--color-text-primary)}.filters-modal.preview-inline .filters-more-modal-button.active .filters-option-icon-wrapper{border-color:var(--color-bg-inverse);background-color:var(--color-bg-inverse);color:var(--color-icon-inverse)}.filters-modal.preview-inline .filters-modal-sub-list:has(vviinn-range-filter){padding:0 var(--spacing-75);width:220px;max-height:unset}.filters-modal.preview-inline vviinn-range-filter{width:100%}@media (max-width: 768px){.sub-filters-wrapper,.selected-filters-wrapper{flex-wrap:unset;overflow-x:auto;scrollbar-width:none;padding-bottom:0}.sub-filters-wrapper,.selected-filters-wrapper{-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.sub-filters-wrapper::-webkit-scrollbar,.selected-filters-wrapper::-webkit-scrollbar{display:none}:host(.show-in-widget) .selected-filters-container{overflow-x:auto;width:100%}:host(.show-in-widget) .selected-filters-wrapper{padding:0 var(--spacing-300)}.filters-modal.button .filters-modal-wrapper,.filters-modal.modal .filters-modal-wrapper{width:100%;border-radius:24px 24px 0px 0px}.filters-modal.button .filters-modal-wrapper{top:10%}.filters-modal.modal .filters-modal-wrapper{position:fixed;width:100%;height:calc(100% - 64px);bottom:0;transform:translateY(-64px)}.filters-modal.modal .filters-modal-header{font-size:var(--font-size-body-large)}.filters-modal.modal .filters-modal-main{padding-bottom:120px}vviinn-range-filter{max-width:unset}:host(.show-in-widget.primary-filters) vviinn-range-filter{max-width:calc(100% - 48px);transform:translateX(24px)}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}";
1171
1166
 
1172
- var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
1173
- var t = {};
1174
- for (var p in s)
1175
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
1176
- t[p] = s[p];
1177
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
1178
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1179
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
1180
- t[p[i]] = s[p[i]];
1181
- }
1182
- return t;
1183
- };
1184
1167
  const VviinnSelectedFilters = class {
1185
1168
  constructor(hostRef) {
1186
1169
  index.registerInstance(this, hostRef);
@@ -1193,10 +1176,12 @@ const VviinnSelectedFilters = class {
1193
1176
  /** @internal */
1194
1177
  this.showInWidget = false;
1195
1178
  this.requestFilters = [];
1196
- this.selectedFilterButtons = [];
1197
1179
  this.textSearchCustomFilter = null;
1198
1180
  this.imageSrc = null;
1199
- this.intervalCustomFilters = {};
1181
+ // Rebuilt in componentWillRender and consumed by the render after it, so plain fields.
1182
+ // The local requestFilters drive that rebuild — reads there register no subscription.
1183
+ this.selectedFilterButtons = [];
1184
+ this.intervalFilterButtons = [];
1200
1185
  this.handleSubFilterSelection = (filterValue, selectedFilter) => {
1201
1186
  this.requestFilters = index$1.triggerFilter({
1202
1187
  filterValue,
@@ -1212,22 +1197,16 @@ const VviinnSelectedFilters = class {
1212
1197
  this.skipStateChanges = (isTriggeredByVpsWidget) => this.showInWidget !== isTriggeredByVpsWidget;
1213
1198
  this.resetInnerState = (resetTextSearchFilter = false, resetImageFilter = false) => {
1214
1199
  this.requestFilters = [];
1215
- this.selectedFilterButtons = [];
1216
- this.intervalCustomFilters = {};
1217
1200
  resetTextSearchFilter && (this.textSearchCustomFilter = null);
1218
1201
  resetImageFilter && (this.imageSrc = null);
1219
1202
  };
1220
1203
  this.handleFilterTriggered = ({ detail, }) => {
1221
- var _a;
1222
1204
  if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
1223
1205
  return;
1224
1206
  if (detail.customTrigger === "TPS") {
1225
1207
  this.resetInnerState(true, true);
1226
1208
  this.textSearchCustomFilter = detail.kind;
1227
1209
  }
1228
- if (detail.action === "select" && ((_a = detail.filter) === null || _a === void 0 ? void 0 : _a.type) === "interval") {
1229
- this.setIntervalFilterLabel(detail.filter, detail.value.interval);
1230
- }
1231
1210
  };
1232
1211
  this.handleImageUploadStarted = ({ detail }) => {
1233
1212
  if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
@@ -1246,13 +1225,6 @@ const VviinnSelectedFilters = class {
1246
1225
  this.skipStateChanges(isTriggeredByVpsWidget))
1247
1226
  return;
1248
1227
  this.requestFilters = filters;
1249
- const activeIntervalColumns = new Set(filters
1250
- .filter((f) => f.values && f.values.length > 0)
1251
- .map((f) => f.column));
1252
- const updatedIntervalFilters = Object.fromEntries(Object.entries(this.intervalCustomFilters).filter(([column]) => activeIntervalColumns.has(column)));
1253
- if (Object.keys(updatedIntervalFilters).length !==
1254
- Object.keys(this.intervalCustomFilters).length)
1255
- this.intervalCustomFilters = updatedIntervalFilters;
1256
1228
  };
1257
1229
  this.handleSelectedFiltersReset = ({ detail }) => {
1258
1230
  if (this.skipStateChanges(detail.isTriggeredByVpsWidget))
@@ -1273,8 +1245,6 @@ const VviinnSelectedFilters = class {
1273
1245
  this.imageSrc = imageSrc;
1274
1246
  };
1275
1247
  this.handleIntervalButtonClick = (column) => {
1276
- const _a = this.intervalCustomFilters, _b = column, remaining = __rest$1(_a, [typeof _b === "symbol" ? _b : _b + ""]);
1277
- this.intervalCustomFilters = remaining;
1278
1248
  this.requestFilters = index$1.triggerRemoveIntervalFilter({
1279
1249
  column,
1280
1250
  requestFilters: this.requestFilters,
@@ -1303,7 +1273,7 @@ const VviinnSelectedFilters = class {
1303
1273
  connectedCallback() {
1304
1274
  const { state, onChange } = search_store.useSearchStore(this.showInWidget);
1305
1275
  this.state = state;
1306
- index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
1276
+ this.disposeStoreListener = index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
1307
1277
  this.eventAbortController = new AbortController();
1308
1278
  const { signal } = this.eventAbortController;
1309
1279
  index$2.addEventListenersWithSignal(document, [
@@ -1323,16 +1293,18 @@ const VviinnSelectedFilters = class {
1323
1293
  this.replaceSlotsContent();
1324
1294
  }
1325
1295
  disconnectedCallback() {
1326
- var _a;
1296
+ var _a, _b;
1327
1297
  (_a = this.eventAbortController) === null || _a === void 0 ? void 0 : _a.abort();
1298
+ (_b = this.disposeStoreListener) === null || _b === void 0 ? void 0 : _b.call(this);
1328
1299
  }
1329
1300
  componentWillRender() {
1330
1301
  var _a;
1331
1302
  this.selectedFilterButtons = [];
1303
+ this.intervalFilterButtons = [];
1332
1304
  const filters = ((_a = this.state) === null || _a === void 0 ? void 0 : _a.dynamicFilters) || [];
1333
1305
  filters.forEach((filter) => {
1334
1306
  if (filter.type === "interval") {
1335
- this.syncPreselectedIntervalFilter(filter);
1307
+ this.collectIntervalButton(filter);
1336
1308
  return;
1337
1309
  }
1338
1310
  if (!("values" in filter))
@@ -1352,32 +1324,28 @@ const VviinnSelectedFilters = class {
1352
1324
  });
1353
1325
  });
1354
1326
  }
1355
- setIntervalFilterLabel(filter, interval) {
1356
- var _a;
1357
- const label = index$1.getIntervalLabel(filter, interval, (_a = this.currencySign) !== null && _a !== void 0 ? _a : store.defaultConfig.currencySign, true);
1358
- if (label) {
1359
- this.intervalCustomFilters = Object.assign(Object.assign({}, this.intervalCustomFilters), { [filter.column]: label });
1360
- }
1361
- else {
1362
- const _b = this.intervalCustomFilters, _c = filter.column, remaining = __rest$1(_b, [typeof _c === "symbol" ? _c : _c + ""]);
1363
- this.intervalCustomFilters = remaining;
1364
- }
1365
- }
1366
- syncPreselectedIntervalFilter(filter) {
1327
+ /** A chip exists only while the column has an applied interval to show. */
1328
+ collectIntervalButton(filter) {
1367
1329
  var _a;
1368
- if (this.intervalCustomFilters[filter.column])
1330
+ const applied = index$1.getSelectedInterval(this.requestFilters, filter.column);
1331
+ if (!applied)
1369
1332
  return;
1370
- const matchingRequest = this.requestFilters.find((rf) => rf.column === filter.column);
1371
- if (!((_a = matchingRequest === null || matchingRequest === void 0 ? void 0 : matchingRequest.values) === null || _a === void 0 ? void 0 : _a.length))
1333
+ const label = index$1.getIntervalLabel(filter, applied, (_a = this.currencySign) !== null && _a !== void 0 ? _a : store.defaultConfig.currencySign, true);
1334
+ if (!label)
1372
1335
  return;
1373
- this.setIntervalFilterLabel(filter, matchingRequest.values[0]);
1336
+ const { column } = filter;
1337
+ this.intervalFilterButtons.push(index.h("div", { key: column }, RenderCustomButton({
1338
+ label,
1339
+ buttonType: "range",
1340
+ onClick: () => this.handleIntervalButtonClick(column),
1341
+ })));
1374
1342
  }
1375
1343
  render() {
1376
1344
  var _a, _b;
1377
1345
  if (this.showInWidget &&
1378
1346
  !this.selectedFilterButtons.length &&
1379
1347
  !this.state.croppedImageUrl &&
1380
- !Object.keys(this.intervalCustomFilters).length)
1348
+ !this.intervalFilterButtons.length)
1381
1349
  return null;
1382
1350
  return (index.h(index.Host, { class: {
1383
1351
  "show-in-widget": this.showInWidget,
@@ -1399,14 +1367,7 @@ const VviinnSelectedFilters = class {
1399
1367
  imageSrc: this.state.croppedImageUrl,
1400
1368
  onClick: this.handleCropButtonClick,
1401
1369
  hidden: !this.state.searchArea,
1402
- }), Object.entries(this.intervalCustomFilters)
1403
- .filter(([, label]) => label && label.trim().length > 0)
1404
- .map(([column, label]) => (index.h("div", { key: column }, RenderCustomButton({
1405
- label,
1406
- buttonType: "range",
1407
- onClick: () => this.handleIntervalButtonClick(column),
1408
- hidden: false,
1409
- })))), this.selectedFilterButtons))));
1370
+ }), this.intervalFilterButtons, this.selectedFilterButtons))));
1410
1371
  }
1411
1372
  get el() { return index.getElement(this); }
1412
1373
  };
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-BU8FMTXn.js');
4
- var search_store = require('./search.store-CIlbtjnr.js');
4
+ var search_store = require('./search.store-BOJh7lOl.js');
5
5
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
6
6
  var store = require('./store-jPZ4ROqV.js');
7
- var index$1 = require('./index-CMOB6Jkt.js');
7
+ var index$1 = require('./index-DJP-DLP2.js');
8
8
  var constants = require('./constants-BlwqMvns.js');
9
9
  var index$2 = require('./index-CP1QUrJT.js');
10
10
  var index$3 = require('./index-BF9aENF8.js');
@@ -620,11 +620,6 @@ const getFilterOptions = (filter) => {
620
620
  : [];
621
621
  };
622
622
 
623
- const getSelectedInterval = (requestFilters, column) => {
624
- const intervalFilter = requestFilters.find((filter) => filter.column === column);
625
- return intervalFilter === null || intervalFilter === void 0 ? void 0 : intervalFilter.values[0];
626
- };
627
-
628
623
  const RenderSearchInput = ({ searchTerm, onSearchInput, placeholder = "Start Search...", iconSlot, }) => (index.h("div", { class: "filters-search-input-container", part: "filters-search-input-container" },
629
624
  index.h("div", { class: "filters-search-icon", part: "filters-search-icon" },
630
625
  index.h("slot", { name: "vviinn-filters-search-icon" }, iconSlot || index.h(SearchIcon, null))),
@@ -854,8 +849,8 @@ const VviinnExtendedFilters = class {
854
849
  searchTerm: this.searchTerm,
855
850
  onSearchInput: this.handleSearchInput,
856
851
  placeholder: store.instance.t("filters.search.placeholder"),
857
- }), index.h("ul", { class: "filters-modal-sub-list", part: "extended-filters-sub-list" }, mainFilter.type === "interval" ? (index.h("vviinn-range-filter", { histogram: filterOptions, intervalChangeHandler: (filterValue) => this.intervalFilterChangeHandler(filterValue, mainFilter.column), selectedInterval: getSelectedInterval(this.requestFilters, mainFilter.column), showCurrency: index$1.isPriceFilter(mainFilter.column), currencySign: this.currencySign, showIntervalInputs: this.showIntervalInputs })) : (this.renderFilterOptions(mainFilter, filterOptions))))) : null)));
858
- }))), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && (index.h("div", { class: "filters-modal-actions", part: "extended-filters-actions" }, this.mode === "button" && (index.h("button", { class: "filters-modal-apply", onClick: () => (this.showMore = false), disabled: this.requestFilters.length === 0, part: "extended-filters-apply", type: "button" }, index.h("slot", { name: "vviinn-extended-filters-apply" }, store.instance.t("filters.modal.apply")))), index.h("button", { class: "filters-modal-reset", onClick: this.resetModal, part: "extended-filters-reset", type: "button" }, index.h("slot", { name: "vviinn-extended-filters-reset" }, store.instance.t("filters.modal.resetFilters")))))))));
852
+ }), index.h("ul", { class: "filters-modal-sub-list", part: "extended-filters-sub-list" }, mainFilter.type === "interval" ? (index.h("vviinn-range-filter", { histogram: filterOptions, intervalChangeHandler: (filterValue) => this.intervalFilterChangeHandler(filterValue, mainFilter.column), selectedInterval: index$1.getSelectedInterval(this.requestFilters, mainFilter.column), showCurrency: index$1.isPriceFilter(mainFilter.column), currencySign: this.currencySign, showIntervalInputs: this.showIntervalInputs })) : (this.renderFilterOptions(mainFilter, filterOptions))))) : null)));
853
+ }))), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && (index.h("div", { class: "filters-modal-actions", part: "extended-filters-actions" }, this.mode === "button" && (index.h("button", { class: "filters-modal-apply", onClick: this.handleCloseModal, disabled: this.requestFilters.length === 0, part: "extended-filters-apply", type: "button" }, index.h("slot", { name: "vviinn-extended-filters-apply" }, store.instance.t("filters.modal.apply")))), index.h("button", { class: "filters-modal-reset", onClick: this.resetModal, part: "extended-filters-reset", type: "button" }, index.h("slot", { name: "vviinn-extended-filters-reset" }, store.instance.t("filters.modal.resetFilters")))))))));
859
854
  }
860
855
  renderFilterOptions(filter, filterOptions) {
861
856
  const { column: filterColumn } = filter;
@@ -925,7 +920,7 @@ const VviinnExtendedFilters = class {
925
920
  const { state, onChange } = search_store.useSearchStore(this.showInWidget);
926
921
  this.state = state;
927
922
  this.isPreviewInlineMode = this.mode === "preview-inline";
928
- index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
923
+ this.disposeStoreListener = index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
929
924
  this.eventAbortController = new AbortController();
930
925
  const { signal } = this.eventAbortController;
931
926
  index$2.addEventListenersWithSignal(document, [
@@ -943,8 +938,9 @@ const VviinnExtendedFilters = class {
943
938
  this.filtersStringWatcher();
944
939
  }
945
940
  disconnectedCallback() {
946
- var _a;
941
+ var _a, _b;
947
942
  (_a = this.eventAbortController) === null || _a === void 0 ? void 0 : _a.abort();
943
+ (_b = this.disposeStoreListener) === null || _b === void 0 ? void 0 : _b.call(this);
948
944
  }
949
945
  applyModalPositioning(event) {
950
946
  const button = event.target;
@@ -973,9 +969,9 @@ const VviinnExtendedFilters = class {
973
969
  }
974
970
  render() {
975
971
  const filters = this.getFilters();
976
- return (index.h(index.Host, { key: 'f2f23f0f4e997ff8ec7b00a96a84ba4ea18f5d3f', class: {
972
+ return (index.h(index.Host, { key: '17dffe40a2006c10422b01a5eacef821fc4eac3e', class: {
977
973
  "show-in-widget": this.showInWidget,
978
- }, exportParts: index$3.extendedFiltersParts }, index.h("div", { key: '57de996421fe25deb1cc484bc0ea2598e7dfb3c1', ref: (el) => (this.filterAnnouncementRef = el), "aria-live": "polite", class: "sr-only" }), index$2.SlotSkeleton("filters"), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && this.mode === "button" && (index.h("vviinn-extended-filters-button", { key: '0219f9a675885f280eb93cbaab4fb426af18e029' })), this.renderModal(filters)));
974
+ }, exportParts: index$3.extendedFiltersParts }, index.h("div", { key: '64d4df4b93d375d7ed234c61953d5dce525c50c9', ref: (el) => (this.filterAnnouncementRef = el), "aria-live": "polite", class: "sr-only" }), index$2.SlotSkeleton("filters"), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && this.mode === "button" && (index.h("vviinn-extended-filters-button", { key: '5c22262743a77599189da5e205d1f254462967dc' })), this.renderModal(filters)));
979
975
  }
980
976
  get el() { return index.getElement(this); }
981
977
  static get watchers() { return {
@@ -1105,7 +1101,7 @@ const VviinnFilters = class {
1105
1101
  connectedCallback() {
1106
1102
  const { state, onChange } = search_store.useSearchStore(this.showInWidget);
1107
1103
  this.state = state;
1108
- index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
1104
+ this.disposeStoreListener = index$1.syncRequestFilters(state, onChange, (filters) => (this.requestFilters = filters));
1109
1105
  this.eventAbortController = new AbortController();
1110
1106
  const { signal } = this.eventAbortController;
1111
1107
  index$2.addEventListenersWithSignal(document, [
@@ -1122,8 +1118,9 @@ const VviinnFilters = class {
1122
1118
  this.replaceSlotsContent();
1123
1119
  }
1124
1120
  disconnectedCallback() {
1125
- var _a;
1121
+ var _a, _b;
1126
1122
  (_a = this.eventAbortController) === null || _a === void 0 ? void 0 : _a.abort();
1123
+ (_b = this.disposeStoreListener) === null || _b === void 0 ? void 0 : _b.call(this);
1127
1124
  }
1128
1125
  replaceSlotsContent() {
1129
1126
  const slots = this.el.querySelectorAll("[slot]");
@@ -1136,17 +1133,17 @@ const VviinnFilters = class {
1136
1133
  const filters = this.getFilters().filter((filter) => filter.isPrimary);
1137
1134
  const { selectedFilter, handleSubFilterSelection } = this;
1138
1135
  const filterOptions = getFilterOptions(selectedFilter);
1139
- return (index.h(index.Host, { key: '43ca9aa547e2436a198c6b98599edc256ead2908', class: {
1136
+ return (index.h(index.Host, { key: 'ba3369b4a89acb5202a634d224896bcf30889c76', class: {
1140
1137
  "show-in-widget": this.showInWidget,
1141
1138
  "primary-filters": true,
1142
- }, onKeyDown: this.handleKeyDown, exportparts: index$3.filtersParts }, index$2.SlotSkeleton("filters"), index.h("div", { key: 'cbc3b18419bd5797c97270e7104c723a08185750', ref: (el) => (this.filterAnnouncementRef = el), "aria-live": "polite", class: "sr-only" }), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && (index.h("nav", { key: '1d879a02b353b8e11dc633d634012b254385488d', "aria-label": store.instance.t("a11y.productFilters") }, index.h("ul", { key: '2487026565e1f54ea19359a4a710d477c26ef4ff', class: "main-filters-list", part: "filters-list" }, filters.map((filter) => {
1139
+ }, onKeyDown: this.handleKeyDown, exportparts: index$3.filtersParts }, index$2.SlotSkeleton("filters"), index.h("div", { key: '5b3b189ce56c3fc31a1fcc6acc542ff9363c203d', ref: (el) => (this.filterAnnouncementRef = el), "aria-live": "polite", class: "sr-only" }), (filters === null || filters === void 0 ? void 0 : filters.length) > 0 && (index.h("nav", { key: 'd93428343a6f7b6959abc6fe834795a0cc2016aa', "aria-label": store.instance.t("a11y.productFilters") }, index.h("ul", { key: '7c19a7f68d2d827237899a71a40fffb859c8e6c6', class: "main-filters-list", part: "filters-list" }, filters.map((filter) => {
1143
1140
  const isExpanded = this.selectedFilterColumn === filter.column;
1144
1141
  return (index.h("li", null, index.h("button", { class: `filters-main-button ${this.showActiveOnMainButton(filter)}`, onClick: () => this.handleMainFilterSelection(filter), part: "filters-main-button", "aria-expanded": isExpanded ? "true" : "false", "aria-label": store.instance.t("a11y.filterButton", {
1145
1142
  label: filter.label,
1146
1143
  }), type: "button" }, filter.label)));
1147
- })))), !!selectedFilter && selectedFilter.isPrimary && (index.h("section", { key: '1b54108c059e98426e83bfeac574be5ae5143504', class: "filters-footer", part: "filters-footer", "aria-label": store.instance.t("a11y.filterOptions", {
1144
+ })))), !!selectedFilter && selectedFilter.isPrimary && (index.h("section", { key: 'efc6fa873255b1998f82eb161ca79557a5b3338e', class: "filters-footer", part: "filters-footer", "aria-label": store.instance.t("a11y.filterOptions", {
1148
1145
  label: selectedFilter.label,
1149
- }) }, (selectedFilter === null || selectedFilter === void 0 ? void 0 : selectedFilter.type) === "interval" ? (index.h("vviinn-range-filter", { histogram: filterOptions, intervalChangeHandler: this.intervalChangeHandler, selectedInterval: getSelectedInterval(this.requestFilters, selectedFilter.column), showCurrency: index$1.isPriceFilter(selectedFilter.column), showIntervalInputs: this.showIntervalInputs })) : (index.h("ul", { class: "sub-filters-wrapper", part: "filters-footer-list" }, !!filterOptions &&
1146
+ }) }, (selectedFilter === null || selectedFilter === void 0 ? void 0 : selectedFilter.type) === "interval" ? (index.h("vviinn-range-filter", { histogram: filterOptions, intervalChangeHandler: this.intervalChangeHandler, selectedInterval: index$1.getSelectedInterval(this.requestFilters, selectedFilter.column), showCurrency: index$1.isPriceFilter(selectedFilter.column), showIntervalInputs: this.showIntervalInputs })) : (index.h("ul", { class: "sub-filters-wrapper", part: "filters-footer-list" }, !!filterOptions &&
1150
1147
  filterOptions.map(({ value, label, active }) => {
1151
1148
  const isSelected = index$1.isSubFilterActive(this.requestFilters, value, selectedFilter);
1152
1149
  return index$1.RenderFilterButton({
@@ -4,7 +4,7 @@ var index = require('./index-BU8FMTXn.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
5
  var cropperUtils = require('./cropperUtils-DCDOLeBS.js');
6
6
  var swiperElement = require('./swiper-element-DjtzojCR.js');
7
- var search_store = require('./search.store-CIlbtjnr.js');
7
+ var search_store = require('./search.store-BOJh7lOl.js');
8
8
  var SecondaryActionIcon = require('./SecondaryActionIcon-CuNEBTWD.js');
9
9
  var index$1 = require('./index-BF9aENF8.js');
10
10
  var store = require('./store-jPZ4ROqV.js');
@@ -246,7 +246,7 @@ const handleDetectedObjectClick = async (params) => {
246
246
  return Rectangle.EitherExports.left("Image element is missing");
247
247
  }
248
248
  search_store.shopTheLookState.searchArea = detectedObject;
249
- const result = await search_store.makeVisualSearchRequest("shopTheLook", visualSearchId || null, token, apiPath, campaignId);
249
+ const result = await search_store.makeVisualSearchRequest("shopTheLook", visualSearchId || null, token, { apiPath, campaignId });
250
250
  return Rectangle.EitherExports.fold((error) => Rectangle.EitherExports.left(`Visual search failed: ${error.inner}`), (searchResponse) => {
251
251
  var _a;
252
252
  const searchResults = ((_a = searchResponse.data) === null || _a === void 0 ? void 0 : _a.products) || [];
@@ -2,7 +2,7 @@
2
2
 
3
3
  var index = require('./index-BU8FMTXn.js');
4
4
  var Rectangle = require('./Rectangle-7dF6_xf3.js');
5
- var search_store = require('./search.store-CIlbtjnr.js');
5
+ var search_store = require('./search.store-BOJh7lOl.js');
6
6
  var index$2 = require('./index-CP1QUrJT.js');
7
7
  var store = require('./store-jPZ4ROqV.js');
8
8
  var index$1 = require('./index-BF9aENF8.js');