@getlupa/client 1.8.1 → 1.8.3

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.
@@ -6166,6 +6166,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
6166
6166
  const DEFAULT_PAGE_SIZE_SELECTION = [12, 24, 36, 60];
6167
6167
  const LUPA_ROUTING_EVENT = "lupaRedirect";
6168
6168
  const RATING_STAR_HTML = "☆";
6169
+ const RESULT_ROOT_SELECTOR = "#lupa-search-results";
6169
6170
  const production = "https://api.lupasearch.com/v1/";
6170
6171
  const staging = "https://api.staging.lupasearch.com/v1/";
6171
6172
  const Env$1 = {
@@ -7150,7 +7151,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
7150
7151
  const [min, max] = range.split(FACET_RANGE_SEPARATOR);
7151
7152
  return {
7152
7153
  gte: min,
7153
- lt: max
7154
+ lte: max
7154
7155
  };
7155
7156
  }
7156
7157
  if (key.startsWith(FACET_PARAMS_TYPE.HIERARCHY)) {
@@ -8356,6 +8357,13 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8356
8357
  });
8357
8358
  return { dynamicDataIdMap, loading, enhanceSearchResultsWithDynamicData };
8358
8359
  });
8360
+ const joinUrlParts = (...parts) => {
8361
+ var _a, _b, _c;
8362
+ if (parts.length === 1) {
8363
+ return `${parts[0]}`;
8364
+ }
8365
+ return (_c = (_b = (_a = parts == null ? void 0 : parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""))) == null ? void 0 : _a.filter((part) => part !== "")) == null ? void 0 : _b.join("/")) != null ? _c : "";
8366
+ };
8359
8367
  const _hoisted_1$16 = ["src"];
8360
8368
  const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8361
8369
  __name: "ProductImage",
@@ -8374,12 +8382,11 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8374
8382
  return typeof imageUrl2 === "string" && (imageUrl2.indexOf("http://") === 0 || imageUrl2.indexOf("https://") === 0);
8375
8383
  });
8376
8384
  const imageUrl = computed(() => {
8377
- var _a;
8378
8385
  const imageUrl2 = image.value;
8379
8386
  if (hasFullImageUrl.value) {
8380
8387
  return imageUrl2;
8381
8388
  }
8382
- return `${(_a = rootImageUrl.value) != null ? _a : ""}/${imageUrl2}`;
8389
+ return rootImageUrl.value ? joinUrlParts(rootImageUrl.value, imageUrl2) : `/${imageUrl2}`;
8383
8390
  });
8384
8391
  const hasImage = computed(() => Boolean(hasFullImageUrl.value || image.value));
8385
8392
  const placeholder = computed(() => props.options.placeholder);
@@ -8614,22 +8621,21 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8614
8621
  ResultsLayoutEnum2["LIST"] = "List";
8615
8622
  return ResultsLayoutEnum2;
8616
8623
  })(ResultsLayoutEnum || {});
8617
- const RESULT_ROOT_ID = "lupa-search-results";
8618
8624
  const SHADOW_ROOT_ID = "lupa-shadow-id";
8619
8625
  const CONTAINER_ROOT_ID = "lupa-search-container";
8620
- const scrollToSearchResults = (timeout = 500) => {
8626
+ const scrollToSearchResults = (timeout = 500, containerSelector) => {
8621
8627
  if (timeout) {
8622
- setTimeout(() => scrollTo(RESULT_ROOT_ID), timeout);
8628
+ setTimeout(() => scrollTo(containerSelector != null ? containerSelector : RESULT_ROOT_SELECTOR), timeout);
8623
8629
  } else {
8624
- scrollTo(RESULT_ROOT_ID);
8630
+ scrollTo(RESULT_ROOT_SELECTOR);
8625
8631
  }
8626
8632
  };
8627
- const scrollTo = (elementId) => {
8633
+ const scrollTo = (elementSelector) => {
8628
8634
  var _a, _b;
8629
- let el = document.getElementById(elementId);
8635
+ let el = document.querySelector(elementSelector);
8630
8636
  const shadowRoot = (_a = document.getElementById(SHADOW_ROOT_ID)) == null ? void 0 : _a.shadowRoot;
8631
8637
  if (!el) {
8632
- el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementId)) != null ? _b : null;
8638
+ el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementSelector)) != null ? _b : null;
8633
8639
  }
8634
8640
  if (!el) {
8635
8641
  return;
@@ -11451,7 +11457,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
11451
11457
  return typeof currentFilters.value.gte === "string" ? parseFloat(currentFilters.value.gte) : currentFilters.value.gte;
11452
11458
  });
11453
11459
  const currentLte = computed(() => {
11454
- return typeof currentFilters.value.lt === "string" ? parseFloat(currentFilters.value.lt) : currentFilters.value.lt;
11460
+ return typeof currentFilters.value.lte === "string" ? parseFloat(currentFilters.value.lte) : currentFilters.value.lte;
11455
11461
  });
11456
11462
  const currentMinValue = computed(() => {
11457
11463
  return currentGte.value ? Math.max(currentGte.value, facetMin.value) : facetMin.value;
@@ -11998,8 +12004,10 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
11998
12004
  const props = __props;
11999
12005
  const paramStore = useParamsStore();
12000
12006
  const searchResultStore = useSearchResultStore();
12007
+ const optionsStore = useOptionsStore();
12001
12008
  const { filters } = storeToRefs(paramStore);
12002
12009
  const { facets } = storeToRefs(searchResultStore);
12010
+ const { searchResultOptions } = storeToRefs(optionsStore);
12003
12011
  computed(() => {
12004
12012
  var _a;
12005
12013
  return (_a = facets.value) == null ? void 0 : _a.filter((f2) => {
@@ -12014,6 +12022,14 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12014
12022
  return !((_a2 = props.options.promotedFacets) == null ? void 0 : _a2.includes(f2.key));
12015
12023
  });
12016
12024
  });
12025
+ const scrollToResultsOptions = computed(() => {
12026
+ var _a, _b, _c, _d, _e, _f;
12027
+ return {
12028
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12029
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12030
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12031
+ };
12032
+ });
12017
12033
  const handleFacetSelect = (facetAction) => {
12018
12034
  switch (facetAction.type) {
12019
12035
  case "terms":
@@ -12026,7 +12042,12 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12026
12042
  toggleHierarchyFilter(paramStore.appendParams, facetAction, filters.value);
12027
12043
  break;
12028
12044
  }
12029
- scrollToSearchResults();
12045
+ if (scrollToResultsOptions.value.enabled) {
12046
+ scrollToSearchResults(
12047
+ scrollToResultsOptions.value.timeout,
12048
+ scrollToResultsOptions.value.container
12049
+ );
12050
+ }
12030
12051
  };
12031
12052
  const clear2 = (facet) => {
12032
12053
  const param = getFacetKey(facet.key, facet.type);
@@ -12338,7 +12359,9 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12338
12359
  });
12339
12360
  const paramStore = useParamsStore();
12340
12361
  const screenStore = useScreenStore();
12362
+ const optionsStore = useOptionsStore();
12341
12363
  const { isMobileWidth } = storeToRefs(screenStore);
12364
+ const { searchResultOptions } = storeToRefs(optionsStore);
12342
12365
  const pageOptionsCount = computed(() => {
12343
12366
  return isMobileWidth.value ? props.options.displayMobile : props.options.display;
12344
12367
  });
@@ -12372,12 +12395,25 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12372
12395
  const showPagination = computed(() => {
12373
12396
  return pages.value.length > 1;
12374
12397
  });
12398
+ const scrollToResultsOptions = computed(() => {
12399
+ var _a, _b, _c, _d, _e, _f;
12400
+ return {
12401
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12402
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12403
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12404
+ };
12405
+ });
12375
12406
  const handlePageChange = (page) => {
12376
12407
  if (page > 0) {
12377
12408
  paramStore.appendParams({
12378
12409
  params: [{ name: QUERY_PARAMS$1.PAGE, value: page.toString() }]
12379
12410
  });
12380
- scrollToSearchResults();
12411
+ if (scrollToResultsOptions.value.enabled) {
12412
+ scrollToSearchResults(
12413
+ scrollToResultsOptions.value.timeout,
12414
+ scrollToResultsOptions.value.container
12415
+ );
12416
+ }
12381
12417
  }
12382
12418
  };
12383
12419
  return (_ctx, _cache) => {
@@ -6166,6 +6166,7 @@ const DEFAULT_PAGE_SIZE = 12;
6166
6166
  const DEFAULT_PAGE_SIZE_SELECTION = [12, 24, 36, 60];
6167
6167
  const LUPA_ROUTING_EVENT = "lupaRedirect";
6168
6168
  const RATING_STAR_HTML = "☆";
6169
+ const RESULT_ROOT_SELECTOR = "#lupa-search-results";
6169
6170
  const production = "https://api.lupasearch.com/v1/";
6170
6171
  const staging = "https://api.staging.lupasearch.com/v1/";
6171
6172
  const Env$1 = {
@@ -7150,7 +7151,7 @@ const parseFacetKey = (key, searchParams) => {
7150
7151
  const [min, max] = range.split(FACET_RANGE_SEPARATOR);
7151
7152
  return {
7152
7153
  gte: min,
7153
- lt: max
7154
+ lte: max
7154
7155
  };
7155
7156
  }
7156
7157
  if (key.startsWith(FACET_PARAMS_TYPE.HIERARCHY)) {
@@ -8356,6 +8357,13 @@ const useDynamicDataStore = defineStore("dynamicData", () => {
8356
8357
  });
8357
8358
  return { dynamicDataIdMap, loading, enhanceSearchResultsWithDynamicData };
8358
8359
  });
8360
+ const joinUrlParts = (...parts) => {
8361
+ var _a, _b, _c;
8362
+ if (parts.length === 1) {
8363
+ return `${parts[0]}`;
8364
+ }
8365
+ return (_c = (_b = (_a = parts == null ? void 0 : parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""))) == null ? void 0 : _a.filter((part) => part !== "")) == null ? void 0 : _b.join("/")) != null ? _c : "";
8366
+ };
8359
8367
  const _hoisted_1$16 = ["src"];
8360
8368
  const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8361
8369
  __name: "ProductImage",
@@ -8374,12 +8382,11 @@ const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8374
8382
  return typeof imageUrl2 === "string" && (imageUrl2.indexOf("http://") === 0 || imageUrl2.indexOf("https://") === 0);
8375
8383
  });
8376
8384
  const imageUrl = computed(() => {
8377
- var _a;
8378
8385
  const imageUrl2 = image.value;
8379
8386
  if (hasFullImageUrl.value) {
8380
8387
  return imageUrl2;
8381
8388
  }
8382
- return `${(_a = rootImageUrl.value) != null ? _a : ""}/${imageUrl2}`;
8389
+ return rootImageUrl.value ? joinUrlParts(rootImageUrl.value, imageUrl2) : `/${imageUrl2}`;
8383
8390
  });
8384
8391
  const hasImage = computed(() => Boolean(hasFullImageUrl.value || image.value));
8385
8392
  const placeholder = computed(() => props.options.placeholder);
@@ -8614,22 +8621,21 @@ var ResultsLayoutEnum = /* @__PURE__ */ ((ResultsLayoutEnum2) => {
8614
8621
  ResultsLayoutEnum2["LIST"] = "List";
8615
8622
  return ResultsLayoutEnum2;
8616
8623
  })(ResultsLayoutEnum || {});
8617
- const RESULT_ROOT_ID = "lupa-search-results";
8618
8624
  const SHADOW_ROOT_ID = "lupa-shadow-id";
8619
8625
  const CONTAINER_ROOT_ID = "lupa-search-container";
8620
- const scrollToSearchResults = (timeout = 500) => {
8626
+ const scrollToSearchResults = (timeout = 500, containerSelector) => {
8621
8627
  if (timeout) {
8622
- setTimeout(() => scrollTo(RESULT_ROOT_ID), timeout);
8628
+ setTimeout(() => scrollTo(containerSelector != null ? containerSelector : RESULT_ROOT_SELECTOR), timeout);
8623
8629
  } else {
8624
- scrollTo(RESULT_ROOT_ID);
8630
+ scrollTo(RESULT_ROOT_SELECTOR);
8625
8631
  }
8626
8632
  };
8627
- const scrollTo = (elementId) => {
8633
+ const scrollTo = (elementSelector) => {
8628
8634
  var _a, _b;
8629
- let el = document.getElementById(elementId);
8635
+ let el = document.querySelector(elementSelector);
8630
8636
  const shadowRoot = (_a = document.getElementById(SHADOW_ROOT_ID)) == null ? void 0 : _a.shadowRoot;
8631
8637
  if (!el) {
8632
- el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementId)) != null ? _b : null;
8638
+ el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementSelector)) != null ? _b : null;
8633
8639
  }
8634
8640
  if (!el) {
8635
8641
  return;
@@ -11451,7 +11457,7 @@ const _sfc_main$R = /* @__PURE__ */ defineComponent({
11451
11457
  return typeof currentFilters.value.gte === "string" ? parseFloat(currentFilters.value.gte) : currentFilters.value.gte;
11452
11458
  });
11453
11459
  const currentLte = computed(() => {
11454
- return typeof currentFilters.value.lt === "string" ? parseFloat(currentFilters.value.lt) : currentFilters.value.lt;
11460
+ return typeof currentFilters.value.lte === "string" ? parseFloat(currentFilters.value.lte) : currentFilters.value.lte;
11455
11461
  });
11456
11462
  const currentMinValue = computed(() => {
11457
11463
  return currentGte.value ? Math.max(currentGte.value, facetMin.value) : facetMin.value;
@@ -11998,8 +12004,10 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
11998
12004
  const props = __props;
11999
12005
  const paramStore = useParamsStore();
12000
12006
  const searchResultStore = useSearchResultStore();
12007
+ const optionsStore = useOptionsStore();
12001
12008
  const { filters } = storeToRefs(paramStore);
12002
12009
  const { facets } = storeToRefs(searchResultStore);
12010
+ const { searchResultOptions } = storeToRefs(optionsStore);
12003
12011
  computed(() => {
12004
12012
  var _a;
12005
12013
  return (_a = facets.value) == null ? void 0 : _a.filter((f2) => {
@@ -12014,6 +12022,14 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
12014
12022
  return !((_a2 = props.options.promotedFacets) == null ? void 0 : _a2.includes(f2.key));
12015
12023
  });
12016
12024
  });
12025
+ const scrollToResultsOptions = computed(() => {
12026
+ var _a, _b, _c, _d, _e, _f;
12027
+ return {
12028
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12029
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12030
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12031
+ };
12032
+ });
12017
12033
  const handleFacetSelect = (facetAction) => {
12018
12034
  switch (facetAction.type) {
12019
12035
  case "terms":
@@ -12026,7 +12042,12 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
12026
12042
  toggleHierarchyFilter(paramStore.appendParams, facetAction, filters.value);
12027
12043
  break;
12028
12044
  }
12029
- scrollToSearchResults();
12045
+ if (scrollToResultsOptions.value.enabled) {
12046
+ scrollToSearchResults(
12047
+ scrollToResultsOptions.value.timeout,
12048
+ scrollToResultsOptions.value.container
12049
+ );
12050
+ }
12030
12051
  };
12031
12052
  const clear2 = (facet) => {
12032
12053
  const param = getFacetKey(facet.key, facet.type);
@@ -12338,7 +12359,9 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
12338
12359
  });
12339
12360
  const paramStore = useParamsStore();
12340
12361
  const screenStore = useScreenStore();
12362
+ const optionsStore = useOptionsStore();
12341
12363
  const { isMobileWidth } = storeToRefs(screenStore);
12364
+ const { searchResultOptions } = storeToRefs(optionsStore);
12342
12365
  const pageOptionsCount = computed(() => {
12343
12366
  return isMobileWidth.value ? props.options.displayMobile : props.options.display;
12344
12367
  });
@@ -12372,12 +12395,25 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
12372
12395
  const showPagination = computed(() => {
12373
12396
  return pages.value.length > 1;
12374
12397
  });
12398
+ const scrollToResultsOptions = computed(() => {
12399
+ var _a, _b, _c, _d, _e, _f;
12400
+ return {
12401
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12402
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12403
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12404
+ };
12405
+ });
12375
12406
  const handlePageChange = (page) => {
12376
12407
  if (page > 0) {
12377
12408
  paramStore.appendParams({
12378
12409
  params: [{ name: QUERY_PARAMS$1.PAGE, value: page.toString() }]
12379
12410
  });
12380
- scrollToSearchResults();
12411
+ if (scrollToResultsOptions.value.enabled) {
12412
+ scrollToSearchResults(
12413
+ scrollToResultsOptions.value.timeout,
12414
+ scrollToResultsOptions.value.container
12415
+ );
12416
+ }
12381
12417
  }
12382
12418
  };
12383
12419
  return (_ctx, _cache) => {
@@ -6164,6 +6164,7 @@ const DEFAULT_PAGE_SIZE = 12;
6164
6164
  const DEFAULT_PAGE_SIZE_SELECTION = [12, 24, 36, 60];
6165
6165
  const LUPA_ROUTING_EVENT = "lupaRedirect";
6166
6166
  const RATING_STAR_HTML = "☆";
6167
+ const RESULT_ROOT_SELECTOR = "#lupa-search-results";
6167
6168
  const production = "https://api.lupasearch.com/v1/";
6168
6169
  const staging = "https://api.staging.lupasearch.com/v1/";
6169
6170
  const Env$1 = {
@@ -7148,7 +7149,7 @@ const parseFacetKey = (key, searchParams) => {
7148
7149
  const [min, max] = range.split(FACET_RANGE_SEPARATOR);
7149
7150
  return {
7150
7151
  gte: min,
7151
- lt: max
7152
+ lte: max
7152
7153
  };
7153
7154
  }
7154
7155
  if (key.startsWith(FACET_PARAMS_TYPE.HIERARCHY)) {
@@ -8354,6 +8355,13 @@ const useDynamicDataStore = defineStore("dynamicData", () => {
8354
8355
  });
8355
8356
  return { dynamicDataIdMap, loading, enhanceSearchResultsWithDynamicData };
8356
8357
  });
8358
+ const joinUrlParts = (...parts) => {
8359
+ var _a, _b, _c;
8360
+ if (parts.length === 1) {
8361
+ return `${parts[0]}`;
8362
+ }
8363
+ return (_c = (_b = (_a = parts == null ? void 0 : parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""))) == null ? void 0 : _a.filter((part) => part !== "")) == null ? void 0 : _b.join("/")) != null ? _c : "";
8364
+ };
8357
8365
  const _hoisted_1$16 = ["src"];
8358
8366
  const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8359
8367
  __name: "ProductImage",
@@ -8372,12 +8380,11 @@ const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8372
8380
  return typeof imageUrl2 === "string" && (imageUrl2.indexOf("http://") === 0 || imageUrl2.indexOf("https://") === 0);
8373
8381
  });
8374
8382
  const imageUrl = computed(() => {
8375
- var _a;
8376
8383
  const imageUrl2 = image.value;
8377
8384
  if (hasFullImageUrl.value) {
8378
8385
  return imageUrl2;
8379
8386
  }
8380
- return `${(_a = rootImageUrl.value) != null ? _a : ""}/${imageUrl2}`;
8387
+ return rootImageUrl.value ? joinUrlParts(rootImageUrl.value, imageUrl2) : `/${imageUrl2}`;
8381
8388
  });
8382
8389
  const hasImage = computed(() => Boolean(hasFullImageUrl.value || image.value));
8383
8390
  const placeholder = computed(() => props.options.placeholder);
@@ -8612,22 +8619,21 @@ var ResultsLayoutEnum = /* @__PURE__ */ ((ResultsLayoutEnum2) => {
8612
8619
  ResultsLayoutEnum2["LIST"] = "List";
8613
8620
  return ResultsLayoutEnum2;
8614
8621
  })(ResultsLayoutEnum || {});
8615
- const RESULT_ROOT_ID = "lupa-search-results";
8616
8622
  const SHADOW_ROOT_ID = "lupa-shadow-id";
8617
8623
  const CONTAINER_ROOT_ID = "lupa-search-container";
8618
- const scrollToSearchResults = (timeout = 500) => {
8624
+ const scrollToSearchResults = (timeout = 500, containerSelector) => {
8619
8625
  if (timeout) {
8620
- setTimeout(() => scrollTo(RESULT_ROOT_ID), timeout);
8626
+ setTimeout(() => scrollTo(containerSelector != null ? containerSelector : RESULT_ROOT_SELECTOR), timeout);
8621
8627
  } else {
8622
- scrollTo(RESULT_ROOT_ID);
8628
+ scrollTo(RESULT_ROOT_SELECTOR);
8623
8629
  }
8624
8630
  };
8625
- const scrollTo = (elementId) => {
8631
+ const scrollTo = (elementSelector) => {
8626
8632
  var _a, _b;
8627
- let el = document.getElementById(elementId);
8633
+ let el = document.querySelector(elementSelector);
8628
8634
  const shadowRoot = (_a = document.getElementById(SHADOW_ROOT_ID)) == null ? void 0 : _a.shadowRoot;
8629
8635
  if (!el) {
8630
- el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementId)) != null ? _b : null;
8636
+ el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementSelector)) != null ? _b : null;
8631
8637
  }
8632
8638
  if (!el) {
8633
8639
  return;
@@ -11449,7 +11455,7 @@ const _sfc_main$R = /* @__PURE__ */ defineComponent({
11449
11455
  return typeof currentFilters.value.gte === "string" ? parseFloat(currentFilters.value.gte) : currentFilters.value.gte;
11450
11456
  });
11451
11457
  const currentLte = computed(() => {
11452
- return typeof currentFilters.value.lt === "string" ? parseFloat(currentFilters.value.lt) : currentFilters.value.lt;
11458
+ return typeof currentFilters.value.lte === "string" ? parseFloat(currentFilters.value.lte) : currentFilters.value.lte;
11453
11459
  });
11454
11460
  const currentMinValue = computed(() => {
11455
11461
  return currentGte.value ? Math.max(currentGte.value, facetMin.value) : facetMin.value;
@@ -11996,8 +12002,10 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
11996
12002
  const props = __props;
11997
12003
  const paramStore = useParamsStore();
11998
12004
  const searchResultStore = useSearchResultStore();
12005
+ const optionsStore = useOptionsStore();
11999
12006
  const { filters } = storeToRefs(paramStore);
12000
12007
  const { facets } = storeToRefs(searchResultStore);
12008
+ const { searchResultOptions } = storeToRefs(optionsStore);
12001
12009
  computed(() => {
12002
12010
  var _a;
12003
12011
  return (_a = facets.value) == null ? void 0 : _a.filter((f2) => {
@@ -12012,6 +12020,14 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
12012
12020
  return !((_a2 = props.options.promotedFacets) == null ? void 0 : _a2.includes(f2.key));
12013
12021
  });
12014
12022
  });
12023
+ const scrollToResultsOptions = computed(() => {
12024
+ var _a, _b, _c, _d, _e, _f;
12025
+ return {
12026
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12027
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12028
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12029
+ };
12030
+ });
12015
12031
  const handleFacetSelect = (facetAction) => {
12016
12032
  switch (facetAction.type) {
12017
12033
  case "terms":
@@ -12024,7 +12040,12 @@ const _sfc_main$M = /* @__PURE__ */ defineComponent({
12024
12040
  toggleHierarchyFilter(paramStore.appendParams, facetAction, filters.value);
12025
12041
  break;
12026
12042
  }
12027
- scrollToSearchResults();
12043
+ if (scrollToResultsOptions.value.enabled) {
12044
+ scrollToSearchResults(
12045
+ scrollToResultsOptions.value.timeout,
12046
+ scrollToResultsOptions.value.container
12047
+ );
12048
+ }
12028
12049
  };
12029
12050
  const clear2 = (facet) => {
12030
12051
  const param = getFacetKey(facet.key, facet.type);
@@ -12336,7 +12357,9 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
12336
12357
  });
12337
12358
  const paramStore = useParamsStore();
12338
12359
  const screenStore = useScreenStore();
12360
+ const optionsStore = useOptionsStore();
12339
12361
  const { isMobileWidth } = storeToRefs(screenStore);
12362
+ const { searchResultOptions } = storeToRefs(optionsStore);
12340
12363
  const pageOptionsCount = computed(() => {
12341
12364
  return isMobileWidth.value ? props.options.displayMobile : props.options.display;
12342
12365
  });
@@ -12370,12 +12393,25 @@ const _sfc_main$F = /* @__PURE__ */ defineComponent({
12370
12393
  const showPagination = computed(() => {
12371
12394
  return pages.value.length > 1;
12372
12395
  });
12396
+ const scrollToResultsOptions = computed(() => {
12397
+ var _a, _b, _c, _d, _e, _f;
12398
+ return {
12399
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12400
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12401
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12402
+ };
12403
+ });
12373
12404
  const handlePageChange = (page) => {
12374
12405
  if (page > 0) {
12375
12406
  paramStore.appendParams({
12376
12407
  params: [{ name: QUERY_PARAMS$1.PAGE, value: page.toString() }]
12377
12408
  });
12378
- scrollToSearchResults();
12409
+ if (scrollToResultsOptions.value.enabled) {
12410
+ scrollToSearchResults(
12411
+ scrollToResultsOptions.value.timeout,
12412
+ scrollToResultsOptions.value.container
12413
+ );
12414
+ }
12379
12415
  }
12380
12416
  };
12381
12417
  return (_ctx, _cache) => {
@@ -6168,6 +6168,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
6168
6168
  const DEFAULT_PAGE_SIZE_SELECTION = [12, 24, 36, 60];
6169
6169
  const LUPA_ROUTING_EVENT = "lupaRedirect";
6170
6170
  const RATING_STAR_HTML = "☆";
6171
+ const RESULT_ROOT_SELECTOR = "#lupa-search-results";
6171
6172
  const production = "https://api.lupasearch.com/v1/";
6172
6173
  const staging = "https://api.staging.lupasearch.com/v1/";
6173
6174
  const Env$1 = {
@@ -7152,7 +7153,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
7152
7153
  const [min, max] = range.split(FACET_RANGE_SEPARATOR);
7153
7154
  return {
7154
7155
  gte: min,
7155
- lt: max
7156
+ lte: max
7156
7157
  };
7157
7158
  }
7158
7159
  if (key.startsWith(FACET_PARAMS_TYPE.HIERARCHY)) {
@@ -8358,6 +8359,13 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8358
8359
  });
8359
8360
  return { dynamicDataIdMap, loading, enhanceSearchResultsWithDynamicData };
8360
8361
  });
8362
+ const joinUrlParts = (...parts) => {
8363
+ var _a, _b, _c;
8364
+ if (parts.length === 1) {
8365
+ return `${parts[0]}`;
8366
+ }
8367
+ return (_c = (_b = (_a = parts == null ? void 0 : parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""))) == null ? void 0 : _a.filter((part) => part !== "")) == null ? void 0 : _b.join("/")) != null ? _c : "";
8368
+ };
8361
8369
  const _hoisted_1$16 = ["src"];
8362
8370
  const _sfc_main$1c = /* @__PURE__ */ defineComponent({
8363
8371
  __name: "ProductImage",
@@ -8376,12 +8384,11 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8376
8384
  return typeof imageUrl2 === "string" && (imageUrl2.indexOf("http://") === 0 || imageUrl2.indexOf("https://") === 0);
8377
8385
  });
8378
8386
  const imageUrl = computed(() => {
8379
- var _a;
8380
8387
  const imageUrl2 = image.value;
8381
8388
  if (hasFullImageUrl.value) {
8382
8389
  return imageUrl2;
8383
8390
  }
8384
- return `${(_a = rootImageUrl.value) != null ? _a : ""}/${imageUrl2}`;
8391
+ return rootImageUrl.value ? joinUrlParts(rootImageUrl.value, imageUrl2) : `/${imageUrl2}`;
8385
8392
  });
8386
8393
  const hasImage = computed(() => Boolean(hasFullImageUrl.value || image.value));
8387
8394
  const placeholder = computed(() => props.options.placeholder);
@@ -8616,22 +8623,21 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
8616
8623
  ResultsLayoutEnum2["LIST"] = "List";
8617
8624
  return ResultsLayoutEnum2;
8618
8625
  })(ResultsLayoutEnum || {});
8619
- const RESULT_ROOT_ID = "lupa-search-results";
8620
8626
  const SHADOW_ROOT_ID = "lupa-shadow-id";
8621
8627
  const CONTAINER_ROOT_ID = "lupa-search-container";
8622
- const scrollToSearchResults = (timeout = 500) => {
8628
+ const scrollToSearchResults = (timeout = 500, containerSelector) => {
8623
8629
  if (timeout) {
8624
- setTimeout(() => scrollTo(RESULT_ROOT_ID), timeout);
8630
+ setTimeout(() => scrollTo(containerSelector != null ? containerSelector : RESULT_ROOT_SELECTOR), timeout);
8625
8631
  } else {
8626
- scrollTo(RESULT_ROOT_ID);
8632
+ scrollTo(RESULT_ROOT_SELECTOR);
8627
8633
  }
8628
8634
  };
8629
- const scrollTo = (elementId) => {
8635
+ const scrollTo = (elementSelector) => {
8630
8636
  var _a, _b;
8631
- let el = document.getElementById(elementId);
8637
+ let el = document.querySelector(elementSelector);
8632
8638
  const shadowRoot = (_a = document.getElementById(SHADOW_ROOT_ID)) == null ? void 0 : _a.shadowRoot;
8633
8639
  if (!el) {
8634
- el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementId)) != null ? _b : null;
8640
+ el = (_b = shadowRoot == null ? void 0 : shadowRoot.getElementById(elementSelector)) != null ? _b : null;
8635
8641
  }
8636
8642
  if (!el) {
8637
8643
  return;
@@ -11453,7 +11459,7 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
11453
11459
  return typeof currentFilters.value.gte === "string" ? parseFloat(currentFilters.value.gte) : currentFilters.value.gte;
11454
11460
  });
11455
11461
  const currentLte = computed(() => {
11456
- return typeof currentFilters.value.lt === "string" ? parseFloat(currentFilters.value.lt) : currentFilters.value.lt;
11462
+ return typeof currentFilters.value.lte === "string" ? parseFloat(currentFilters.value.lte) : currentFilters.value.lte;
11457
11463
  });
11458
11464
  const currentMinValue = computed(() => {
11459
11465
  return currentGte.value ? Math.max(currentGte.value, facetMin.value) : facetMin.value;
@@ -12000,8 +12006,10 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12000
12006
  const props = __props;
12001
12007
  const paramStore = useParamsStore();
12002
12008
  const searchResultStore = useSearchResultStore();
12009
+ const optionsStore = useOptionsStore();
12003
12010
  const { filters } = storeToRefs(paramStore);
12004
12011
  const { facets } = storeToRefs(searchResultStore);
12012
+ const { searchResultOptions } = storeToRefs(optionsStore);
12005
12013
  computed(() => {
12006
12014
  var _a;
12007
12015
  return (_a = facets.value) == null ? void 0 : _a.filter((f2) => {
@@ -12016,6 +12024,14 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12016
12024
  return !((_a2 = props.options.promotedFacets) == null ? void 0 : _a2.includes(f2.key));
12017
12025
  });
12018
12026
  });
12027
+ const scrollToResultsOptions = computed(() => {
12028
+ var _a, _b, _c, _d, _e, _f;
12029
+ return {
12030
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12031
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12032
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12033
+ };
12034
+ });
12019
12035
  const handleFacetSelect = (facetAction) => {
12020
12036
  switch (facetAction.type) {
12021
12037
  case "terms":
@@ -12028,7 +12044,12 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12028
12044
  toggleHierarchyFilter(paramStore.appendParams, facetAction, filters.value);
12029
12045
  break;
12030
12046
  }
12031
- scrollToSearchResults();
12047
+ if (scrollToResultsOptions.value.enabled) {
12048
+ scrollToSearchResults(
12049
+ scrollToResultsOptions.value.timeout,
12050
+ scrollToResultsOptions.value.container
12051
+ );
12052
+ }
12032
12053
  };
12033
12054
  const clear2 = (facet) => {
12034
12055
  const param = getFacetKey(facet.key, facet.type);
@@ -12340,7 +12361,9 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12340
12361
  });
12341
12362
  const paramStore = useParamsStore();
12342
12363
  const screenStore = useScreenStore();
12364
+ const optionsStore = useOptionsStore();
12343
12365
  const { isMobileWidth } = storeToRefs(screenStore);
12366
+ const { searchResultOptions } = storeToRefs(optionsStore);
12344
12367
  const pageOptionsCount = computed(() => {
12345
12368
  return isMobileWidth.value ? props.options.displayMobile : props.options.display;
12346
12369
  });
@@ -12374,12 +12397,25 @@ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
12374
12397
  const showPagination = computed(() => {
12375
12398
  return pages.value.length > 1;
12376
12399
  });
12400
+ const scrollToResultsOptions = computed(() => {
12401
+ var _a, _b, _c, _d, _e, _f;
12402
+ return {
12403
+ enabled: ((_a = searchResultOptions.value.scrollToResults) == null ? void 0 : _a.enabled) === void 0 ? true : (_b = searchResultOptions.value.scrollToResults) == null ? void 0 : _b.enabled,
12404
+ container: (_d = (_c = searchResultOptions.value.scrollToResults) == null ? void 0 : _c.scrollToContainerSelector) != null ? _d : RESULT_ROOT_SELECTOR,
12405
+ timeout: (_f = (_e = searchResultOptions.value.scrollToResults) == null ? void 0 : _e.timeout) != null ? _f : 500
12406
+ };
12407
+ });
12377
12408
  const handlePageChange = (page) => {
12378
12409
  if (page > 0) {
12379
12410
  paramStore.appendParams({
12380
12411
  params: [{ name: QUERY_PARAMS$1.PAGE, value: page.toString() }]
12381
12412
  });
12382
- scrollToSearchResults();
12413
+ if (scrollToResultsOptions.value.enabled) {
12414
+ scrollToSearchResults(
12415
+ scrollToResultsOptions.value.timeout,
12416
+ scrollToResultsOptions.value.container
12417
+ );
12418
+ }
12383
12419
  }
12384
12420
  };
12385
12421
  return (_ctx, _cache) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getlupa/client",
3
- "version": "1.8.1",
3
+ "version": "1.8.3",
4
4
  "main": "dist/lupaSearch.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/src/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "devDependencies": {
22
22
  "@getlupa/client-sdk": "^1.3.4",
23
- "@getlupa/vue": "0.8.0",
23
+ "@getlupa/vue": "0.8.3",
24
24
  "@rushstack/eslint-patch": "^1.3.2",
25
25
  "@tsconfig/node18": "^2.0.1",
26
26
  "@types/jsdom": "^21.1.1",