@nosto/search-js 3.14.0 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/AutocompletePageProvider-BJxsORbo.cjs +1 -0
  2. package/dist/AutocompletePageProvider-DI2PONk8.js +37 -0
  3. package/dist/{CategoryPageProvider-Clj40F3F.cjs → CategoryPageProvider-CYRnaUx1.cjs} +1 -1
  4. package/dist/{CategoryPageProvider-Bou8i9Tx.js → CategoryPageProvider-DcQlylFg.js} +2 -2
  5. package/dist/{InfiniteScrollWithObserver-CoPOQr8Q.cjs → InfiniteScrollWithObserver-CwWRBU3q.cjs} +1 -1
  6. package/dist/{InfiniteScrollWithObserver-6A57AOKr.js → InfiniteScrollWithObserver-kW5lM7Jh.js} +1 -1
  7. package/dist/{SerpPageProvider-B-W6nCqu.js → SerpPageProvider-CsrFA6mA.js} +2 -2
  8. package/dist/{SerpPageProvider-pR-E8S6m.cjs → SerpPageProvider-s4dO49Fx.cjs} +1 -1
  9. package/dist/baseConfig-BMc1698x.js +48 -0
  10. package/dist/baseConfig-gkfFlBOL.cjs +1 -0
  11. package/dist/core/core.cjs.js +1 -1
  12. package/dist/core/core.es.js +1 -1
  13. package/dist/{bindInput-CCx0Fhsg.js → disableNativeAutocomplete-Bkta_WR2.js} +6 -6
  14. package/dist/disableNativeAutocomplete-DI6zaZII.cjs +1 -0
  15. package/dist/isBot-Bs99-Wlv.cjs +1 -0
  16. package/dist/isBot-Dt3hQTa6.js +20 -0
  17. package/dist/preact/autocomplete/autocomplete.cjs.js +1 -1
  18. package/dist/preact/autocomplete/autocomplete.es.js +1 -1
  19. package/dist/preact/category/category.cjs.js +1 -1
  20. package/dist/preact/category/category.es.js +1 -1
  21. package/dist/preact/common/common.cjs.js +1 -1
  22. package/dist/preact/common/common.es.js +4 -4
  23. package/dist/preact/hooks/hooks.cjs.js +1 -1
  24. package/dist/preact/hooks/hooks.d.ts +3 -0
  25. package/dist/preact/hooks/hooks.es.js +281 -217
  26. package/dist/preact/hooks/src/useHistory.d.ts +5 -0
  27. package/dist/preact/hooks/src/useShopifyProduct/types.d.ts +72 -0
  28. package/dist/preact/hooks/src/useShopifyProduct/useShopifyProduct.d.ts +39 -0
  29. package/dist/preact/inject/inject.cjs.js +1 -1
  30. package/dist/preact/inject/inject.d.ts +0 -1
  31. package/dist/preact/inject/inject.es.js +183 -215
  32. package/dist/preact/inject/src/init/injectAutocomplete.d.ts +1 -1
  33. package/dist/preact/legacy/legacy.cjs.js +1 -1
  34. package/dist/preact/legacy/legacy.es.js +3 -3
  35. package/dist/preact/serp/serp.cjs.js +1 -1
  36. package/dist/preact/serp/serp.es.js +3 -3
  37. package/dist/{search-DTqo1D6Y.cjs → search-RNs4Cunh.cjs} +1 -1
  38. package/dist/{search-sC5QgJmw.js → search-mArZ2PXy.js} +14 -14
  39. package/dist/{useActions-CJ71kc2N.cjs → useActions-Drtoxcu4.cjs} +1 -1
  40. package/dist/{useActions-SEyBHGra.js → useActions-MsVW37eV.js} +3 -3
  41. package/dist/useHistory-2uGnArVO.cjs +1 -0
  42. package/dist/useHistory-W6FQSk99.js +20 -0
  43. package/dist/{useLoadMore-hrNp8P0M.js → useLoadMore-CYYoAHua.js} +2 -2
  44. package/dist/{useLoadMore-B0JgcUfM.cjs → useLoadMore-QOHOP_fr.cjs} +1 -1
  45. package/dist/utils/src/bindInput.d.ts +0 -1
  46. package/dist/utils/src/disableNativeAutocomplete.d.ts +1 -0
  47. package/dist/utils/src/storage.d.ts +3 -0
  48. package/dist/utils/utils.cjs.js +1 -1
  49. package/dist/utils/utils.d.ts +2 -1
  50. package/dist/utils/utils.es.js +2 -2
  51. package/package.json +9 -9
  52. package/dist/AutocompletePageProvider-99syi-nl.cjs +0 -1
  53. package/dist/AutocompletePageProvider-HeGU8tjH.js +0 -29
  54. package/dist/baseConfig-CoxOyC7r.cjs +0 -1
  55. package/dist/baseConfig-DzkbWglo.js +0 -48
  56. package/dist/bindInput-BnKvCky1.cjs +0 -1
  57. package/dist/isBot-Lnmft0Z0.js +0 -20
  58. package/dist/isBot-iyBlT_oq.cjs +0 -1
  59. package/dist/preact/inject/src/init/autocomplete/AutocompleteContext.d.ts +0 -12
@@ -1,142 +1,143 @@
1
- import { h as b } from "../../useActions-SEyBHGra.js";
1
+ import { h as b } from "../../useActions-MsVW37eV.js";
2
2
  import { a as z } from "../../logger-_fg_Za9y.js";
3
- import { a as v } from "../../useLoadMore-hrNp8P0M.js";
4
- import { u as le } from "../../useLoadMore-hrNp8P0M.js";
5
- import { useState as R, useCallback as h, useMemo as y, useEffect as A, useRef as N } from "preact/hooks";
6
- import { s as P } from "../../index.es-XNBESE3P.js";
7
- import { p as x } from "../../parseNumber-QA48nJLp.js";
8
- function K(t) {
9
- const r = v((e) => e.response);
10
- return t && Array.isArray(t) || t && z(t) ? t : r;
3
+ import { a as S } from "../../useLoadMore-CYYoAHua.js";
4
+ import { u as he } from "../../useLoadMore-CYYoAHua.js";
5
+ import { useState as x, useCallback as h, useMemo as y, useEffect as X, useRef as A } from "preact/hooks";
6
+ import { u as ve } from "../../useHistory-W6FQSk99.js";
7
+ import { s as N } from "../../index.es-XNBESE3P.js";
8
+ import { p as R } from "../../parseNumber-QA48nJLp.js";
9
+ function te(e) {
10
+ const n = S((t) => t.response);
11
+ return e && Array.isArray(e) || e && z(e) ? e : n;
11
12
  }
12
- function Q(t, r) {
13
- const e = t.data?.filter((d) => d.selected).length ?? 0, { active: o } = {
14
- active: e > 0,
15
- ...r
16
- }, [s, c] = R(o), { toggleProductFilter: i } = b(), l = h(() => {
17
- c(!s);
18
- }, [s]);
13
+ function ne(e, n) {
14
+ const t = e.data?.filter((d) => d.selected).length ?? 0, { active: s } = {
15
+ active: t > 0,
16
+ ...n
17
+ }, [r, c] = x(s), { toggleProductFilter: i } = b(), l = h(() => {
18
+ c(!r);
19
+ }, [r]);
19
20
  return {
20
21
  /** Active value */
21
- active: s,
22
+ active: r,
22
23
  /** Selected filters count */
23
- selectedFiltersCount: e,
24
+ selectedFiltersCount: t,
24
25
  /** Toggle active function */
25
26
  toggleActive: l,
26
27
  /** Toggle product filter function */
27
28
  toggleProductFilter: i
28
29
  };
29
30
  }
30
- function W() {
31
- const { loading: t, facets: r } = v((e) => ({
32
- loading: e.loading,
33
- facets: e.response?.products?.facets ?? []
31
+ function re() {
32
+ const { loading: e, facets: n } = S((t) => ({
33
+ loading: t.loading,
34
+ facets: t.response?.products?.facets ?? []
34
35
  }));
35
36
  return {
36
37
  /** Loading state */
37
- loading: t,
38
+ loading: e,
38
39
  /** Array of facets*/
39
- facets: r
40
+ facets: n
40
41
  };
41
42
  }
42
- function O(t, r) {
43
- const e = r - t;
44
- return !isNaN(e) && e > 0 ? new Array(r - t).fill(void 0).map((o, s) => s + t) : [];
43
+ function C(e, n) {
44
+ const t = n - e;
45
+ return !isNaN(t) && t > 0 ? new Array(n - e).fill(void 0).map((s, r) => r + e) : [];
45
46
  }
46
- function Y(t) {
47
- const { query: r, products: e } = v((o) => ({
48
- query: o.query,
49
- products: o.response.products
47
+ function oe(e) {
48
+ const { query: n, products: t } = S((s) => ({
49
+ query: s.query,
50
+ products: s.response.products
50
51
  }));
51
52
  return y(() => {
52
- if (!e)
53
+ if (!t)
53
54
  return {
54
55
  totalPages: 0,
55
56
  resultsFrom: 0,
56
57
  resultsTo: 0,
57
58
  pages: []
58
59
  };
59
- const o = r.products?.from ?? 0, s = t?.width ?? 1 / 0, c = Math.max(Math.floor(s - 1) / 2, 1), i = e.size > 0 ? Math.floor(o / e.size) + 1 : 1, l = e.size > 0 ? Math.ceil(e.total / e.size) : 0, d = (w) => w >= i - c && w <= i + c, n = o + 1, a = Math.min(o + e.total, e.total), u = {
60
- from: o,
60
+ const s = n.products?.from ?? 0, r = e?.width ?? 1 / 0, c = Math.max(Math.floor(r - 1) / 2, 1), i = t.size > 0 ? Math.floor(s / t.size) + 1 : 1, l = t.size > 0 ? Math.ceil(t.total / t.size) : 0, d = (w) => w >= i - c && w <= i + c, o = s + 1, u = Math.min(s + t.total, t.total), a = {
61
+ from: s,
61
62
  page: i,
62
63
  current: !0
63
64
  }, f = (w) => ({
64
- from: (w - 1) * e.size,
65
+ from: (w - 1) * t.size,
65
66
  page: w,
66
67
  current: w === i
67
- }), m = i > 1 ? f(i - 1) : void 0, p = i < l ? f(i + 1) : void 0, g = i - c - 1 > 1 ? f(1) : void 0, S = i + c + 1 < l ? f(l) : void 0, F = O(1, l + 1).filter(d).map(f);
68
- return !g && F[0]?.page === 2 && F.unshift(f(1)), !S && F[F.length - 1]?.page === l - 1 && F.push(f(l)), {
68
+ }), m = i > 1 ? f(i - 1) : void 0, p = i < l ? f(i + 1) : void 0, g = i - c - 1 > 1 ? f(1) : void 0, v = i + c + 1 < l ? f(l) : void 0, F = C(1, l + 1).filter(d).map(f);
69
+ return !g && F[0]?.page === 2 && F.unshift(f(1)), !v && F[F.length - 1]?.page === l - 1 && F.push(f(l)), {
69
70
  totalPages: l,
70
- resultsFrom: n,
71
- resultsTo: a,
72
- current: u,
71
+ resultsFrom: o,
72
+ resultsTo: u,
73
+ current: a,
73
74
  prev: m,
74
75
  next: p,
75
76
  first: g,
76
- last: S,
77
+ last: v,
77
78
  pages: F
78
79
  };
79
- }, [r, e, t?.width]);
80
+ }, [n, t, e?.width]);
80
81
  }
81
- function ee() {
82
- const [t, r] = R([]), [e, o] = R([]);
83
- return A(() => {
84
- P(async (s) => {
85
- const { products: c, segments: i } = await s.getSearchSessionParams();
86
- r(i ?? []), o(c?.personalizationBoost ?? []);
82
+ function se() {
83
+ const [e, n] = x([]), [t, s] = x([]);
84
+ return X(() => {
85
+ N(async (r) => {
86
+ const { products: c, segments: i } = await r.getSearchSessionParams();
87
+ n(i ?? []), s(c?.personalizationBoost ?? []);
87
88
  });
88
89
  }, []), {
89
- segments: t,
90
- boost: e
90
+ segments: e,
91
+ boost: t
91
92
  };
92
93
  }
93
- function T() {
94
- const { facets: t } = v((n) => ({
95
- facets: n.response.products?.facets ?? []
96
- })), { replaceFilter: r, toggleProductFilter: e } = b(), o = h(
97
- (n) => {
98
- const a = t?.find((u) => u.type === "stats" && u.field === n);
99
- if (a && "min" in a && "max" in a)
100
- return a;
94
+ function O() {
95
+ const { facets: e } = S((o) => ({
96
+ facets: o.response.products?.facets ?? []
97
+ })), { replaceFilter: n, toggleProductFilter: t } = b(), s = h(
98
+ (o) => {
99
+ const u = e?.find((a) => a.type === "stats" && a.field === o);
100
+ if (u && "min" in u && "max" in u)
101
+ return u;
101
102
  },
102
- [t]
103
- ), s = h(
104
- (n) => t?.find((a) => a.field === n)?.name ?? n,
105
- [t]
106
- ), c = h((n) => "field" in n && (n.value instanceof Array || n.range instanceof Array), []), i = h((n) => ({
107
- ...n,
108
- range: n.range?.map((a) => ({
109
- gt: a.gt ? Number(a.gt) : a.gt,
110
- gte: a.gte ? Number(a.gte) : a.gte,
111
- lt: a.lt ? Number(a.lt) : a.lt,
112
- lte: a.lte ? Number(a.lte) : a.lte
103
+ [e]
104
+ ), r = h(
105
+ (o) => e?.find((u) => u.field === o)?.name ?? o,
106
+ [e]
107
+ ), c = h((o) => "field" in o && (o.value instanceof Array || o.range instanceof Array), []), i = h((o) => ({
108
+ ...o,
109
+ range: o.range?.map((u) => ({
110
+ gt: u.gt ? Number(u.gt) : u.gt,
111
+ gte: u.gte ? Number(u.gte) : u.gte,
112
+ lt: u.lt ? Number(u.lt) : u.lt,
113
+ lte: u.lte ? Number(u.lte) : u.lte
113
114
  }))
114
115
  }), []), l = h(
115
- (n) => (n.value ?? []).map((u) => ({
116
- value: u,
117
- field: n.field,
118
- name: s(n.field),
119
- filter: i(n),
116
+ (o) => (o.value ?? []).map((a) => ({
117
+ value: a,
118
+ field: o.field,
119
+ name: r(o.field),
120
+ filter: i(o),
120
121
  remove: () => {
121
- e(n.field, u, !1);
122
+ t(o.field, a, !1);
122
123
  }
123
124
  })),
124
- [i, s, e]
125
+ [i, r, t]
125
126
  ), d = h(
126
- (n) => (n.range ?? []).map((u) => {
127
- const f = u.gte ?? u.gt ?? o(n.field)?.min, m = u.lte ?? u.lt ?? o(n.field)?.max;
127
+ (o) => (o.range ?? []).map((a) => {
128
+ const f = a.gte ?? a.gt ?? s(o.field)?.min, m = a.lte ?? a.lt ?? s(o.field)?.max;
128
129
  if (f !== void 0 && m !== void 0)
129
130
  return {
130
131
  value: `${f} - ${m}`,
131
- field: n.field,
132
- name: s(n.field),
133
- filter: i(n),
132
+ field: o.field,
133
+ name: r(o.field),
134
+ filter: i(o),
134
135
  remove: () => {
135
- r(n.field, void 0);
136
+ n(o.field, void 0);
136
137
  }
137
138
  };
138
139
  }).filter(Boolean),
139
- [i, o, s, r]
140
+ [i, s, r, n]
140
141
  );
141
142
  return {
142
143
  selectFilters: c,
@@ -145,15 +146,15 @@ function T() {
145
146
  };
146
147
  }
147
148
  function k() {
148
- const { filter: t } = v((l) => ({
149
+ const { filter: e } = S((l) => ({
149
150
  filter: l.query.products?.filter ?? []
150
- })), { updateSearch: r } = b(), { selectFilters: e, toValueFilter: o, toRangeFilter: s } = T(), c = y(() => t ? t.filter(e).flatMap((l) => "value" in l ? o(l) : "range" in l ? s(l) : []).filter(Boolean) : [], [t, e, s, o]), i = h(() => {
151
- r({
151
+ })), { updateSearch: n } = b(), { selectFilters: t, toValueFilter: s, toRangeFilter: r } = O(), c = y(() => e ? e.filter(t).flatMap((l) => "value" in l ? s(l) : "range" in l ? r(l) : []).filter(Boolean) : [], [e, t, r, s]), i = h(() => {
152
+ n({
152
153
  products: {
153
154
  filter: []
154
155
  }
155
156
  });
156
- }, [r]);
157
+ }, [n]);
157
158
  return {
158
159
  /** Selected filters array. */
159
160
  filters: c,
@@ -161,12 +162,12 @@ function k() {
161
162
  removeAll: i
162
163
  };
163
164
  }
164
- function q(t) {
165
- const { replaceFilter: r } = b(), { query: e, products: o } = v((u) => ({
166
- query: u.query,
167
- products: u.response.products
168
- })), s = o?.facets?.find((u) => u.id === t);
169
- if (!s)
165
+ function q(e) {
166
+ const { replaceFilter: n } = b(), { query: t, products: s } = S((a) => ({
167
+ query: a.query,
168
+ products: a.response.products
169
+ })), r = s?.facets?.find((a) => a.id === e);
170
+ if (!r)
170
171
  return {
171
172
  min: 0,
172
173
  max: 0,
@@ -174,13 +175,13 @@ function q(t) {
174
175
  updateRange: () => {
175
176
  }
176
177
  };
177
- const c = e.products?.filter?.find((u) => u.field === s.field), i = c?.range ? c.range[0] : void 0, l = typeof i == "object" && ("gte" in i || "lte" in i) ? [x(i.gte), x(i.lte)] : [void 0, void 0], d = "min" in s ? Math.floor(s.min) : 0, n = "max" in s ? Math.ceil(s.max) : 0, a = ([u, f]) => {
178
- const m = u !== void 0 ? Math.floor(u) : void 0, p = f !== void 0 ? Math.ceil(f) : void 0, g = m !== void 0, S = p !== void 0;
179
- (d === m || !g) && (n === p || !S) ? r(s.field, void 0) : (d === m || !g) && S ? r(s.field, {
178
+ const c = t.products?.filter?.find((a) => a.field === r.field), i = c?.range ? c.range[0] : void 0, l = typeof i == "object" && ("gte" in i || "lte" in i) ? [R(i.gte), R(i.lte)] : [void 0, void 0], d = "min" in r ? Math.floor(r.min) : 0, o = "max" in r ? Math.ceil(r.max) : 0, u = ([a, f]) => {
179
+ const m = a !== void 0 ? Math.floor(a) : void 0, p = f !== void 0 ? Math.ceil(f) : void 0, g = m !== void 0, v = p !== void 0;
180
+ (d === m || !g) && (o === p || !v) ? n(r.field, void 0) : (d === m || !g) && v ? n(r.field, {
180
181
  lte: p.toString()
181
- }) : (n === p || !S) && g ? r(s.field, {
182
+ }) : (o === p || !v) && g ? n(r.field, {
182
183
  gte: m.toString()
183
- }) : g && S && r(s.field, {
184
+ }) : g && v && n(r.field, {
184
185
  gte: m.toString(),
185
186
  lte: p.toString()
186
187
  });
@@ -189,44 +190,44 @@ function q(t) {
189
190
  /** Min value */
190
191
  min: d,
191
192
  /** Max value */
192
- max: n,
193
+ max: o,
193
194
  /** Range value */
194
- range: [l[0] ?? d, l[1] ?? n],
195
+ range: [l[0] ?? d, l[1] ?? o],
195
196
  /** Update range function */
196
- updateRange: a
197
+ updateRange: u
197
198
  };
198
199
  }
199
- function te(t, r) {
200
- const { min: e, max: o, range: s, updateRange: c } = q(t), { filters: i } = k(), l = y(() => {
201
- const u = i.find((g) => g?.filter?.range);
200
+ function ie(e, n) {
201
+ const { min: t, max: s, range: r, updateRange: c } = q(e), { filters: i } = k(), l = y(() => {
202
+ const a = i.find((g) => g?.filter?.range);
202
203
  let f = null;
203
- if (u) {
204
- const g = u.filter.range?.[0];
205
- f = [x(g?.gte), x(g?.lte)];
204
+ if (a) {
205
+ const g = a.filter.range?.[0];
206
+ f = [R(g?.gte), R(g?.lte)];
206
207
  }
207
208
  const m = [];
208
- let p = Math.floor(e / r) * r;
209
- for (; p < o; ) {
210
- const g = p + r, S = f && f[0] === p && f[1] === g;
209
+ let p = Math.floor(t / n) * n;
210
+ for (; p < s; ) {
211
+ const g = p + n, v = f && f[0] === p && f[1] === g;
211
212
  m.push({
212
213
  min: p,
213
214
  max: g,
214
- selected: S
215
+ selected: v
215
216
  }), p = g;
216
217
  }
217
218
  return m;
218
- }, [i, e, o, r]), d = (u) => {
219
- c([u, s[1]]);
220
- }, n = (u) => {
221
- c([s[0], u]);
222
- }, a = e !== s[0] || o !== s[1];
219
+ }, [i, t, s, n]), d = (a) => {
220
+ c([a, r[1]]);
221
+ }, o = (a) => {
222
+ c([r[0], a]);
223
+ }, u = t !== r[0] || s !== r[1];
223
224
  return {
224
225
  /** Minimum value */
225
- min: e,
226
+ min: t,
226
227
  /** Maximum value */
227
- max: o,
228
+ max: s,
228
229
  /** Range value */
229
- range: s,
230
+ range: r,
230
231
  /** Update range function */
231
232
  updateRange: c,
232
233
  /** Ranges */
@@ -234,37 +235,98 @@ function te(t, r) {
234
235
  /** Handle min change */
235
236
  handleMinChange: d,
236
237
  /** Handle max change */
237
- handleMaxChange: n,
238
+ handleMaxChange: o,
238
239
  /** Is selected */
239
- isSelected: a
240
+ isSelected: u
240
241
  };
241
242
  }
242
- function ne() {
243
- const { products: t, keywords: r } = v((e) => e.response);
243
+ function ce() {
244
+ const { products: e, keywords: n } = S((t) => t.response);
244
245
  return {
245
246
  /** Array of products */
246
- products: t ?? { hits: [], total: 0 },
247
+ products: e ?? { hits: [], total: 0 },
247
248
  /** Array of keywords */
248
- keywords: r ?? { hits: [], total: 0 }
249
+ keywords: n ?? { hits: [], total: 0 }
249
250
  };
250
251
  }
251
- function re() {
252
- const t = v((e) => e.query.products?.filter);
253
- return y(() => t ? t.reduce((e, o) => e + (Array.isArray(o.value) ? o.value.length : 1), 0) : 0, [t]);
252
+ function ue() {
253
+ const e = S((t) => t.query.products?.filter);
254
+ return y(() => e ? e.reduce((t, s) => t + (Array.isArray(s.value) ? s.value.length : 1), 0) : 0, [e]);
254
255
  }
255
- function L(t) {
256
- return t && !Number.isNaN(t) ? t : 0;
256
+ const j = 5 * 60 * 1e3, M = /* @__PURE__ */ new Map();
257
+ function ae(e) {
258
+ const [n, t] = x({
259
+ product: null,
260
+ loading: !0,
261
+ error: null
262
+ });
263
+ return X(() => {
264
+ if (!e) {
265
+ t({
266
+ product: null,
267
+ loading: !1,
268
+ error: "Product handle is required"
269
+ });
270
+ return;
271
+ }
272
+ t((r) => ({
273
+ ...r,
274
+ loading: !0,
275
+ error: null
276
+ }));
277
+ const s = E(e);
278
+ if (s) {
279
+ t({
280
+ product: s,
281
+ loading: !1,
282
+ error: null
283
+ });
284
+ return;
285
+ }
286
+ D(e).then((r) => {
287
+ V(e, r), t({
288
+ product: r,
289
+ loading: !1,
290
+ error: null
291
+ });
292
+ }).catch((r) => {
293
+ t({
294
+ product: null,
295
+ loading: !1,
296
+ error: r.message || "Failed to fetch product"
297
+ });
298
+ });
299
+ }, [e]), n;
300
+ }
301
+ async function D(e) {
302
+ const n = await fetch(`/products/${e}.js`);
303
+ if (!n.ok)
304
+ throw new Error(`Failed to fetch product: ${n.status} ${n.statusText}`);
305
+ return n.json();
306
+ }
307
+ function E(e) {
308
+ const n = M.get(e);
309
+ return n ? Date.now() - n.created > j ? (M.delete(e), null) : n.product : null;
257
310
  }
258
- function oe(t, r) {
259
- const { from: e, size: o, total: s } = v((n) => ({
260
- from: L(n.query.products?.from ?? 0),
261
- size: L(n.response?.products?.size ?? r),
262
- total: L(n.response?.products?.total ?? 0)
263
- })), { updateSearch: c } = b(), i = e + o, l = y(() => [...t].reverse().filter((n) => n < s), [t, s]), d = h(
264
- (n) => {
311
+ function V(e, n) {
312
+ M.set(e, {
313
+ product: n,
314
+ created: Date.now()
315
+ });
316
+ }
317
+ function L(e) {
318
+ return e && !Number.isNaN(e) ? e : 0;
319
+ }
320
+ function le(e, n) {
321
+ const { from: t, size: s, total: r } = S((o) => ({
322
+ from: L(o.query.products?.from ?? 0),
323
+ size: L(o.response?.products?.size ?? n),
324
+ total: L(o.response?.products?.total ?? 0)
325
+ })), { updateSearch: c } = b(), i = t + s, l = y(() => [...e].reverse().filter((o) => o < r), [e, r]), d = h(
326
+ (o) => {
265
327
  c({
266
328
  products: {
267
- size: x(n)
329
+ size: R(o)
268
330
  }
269
331
  });
270
332
  },
@@ -272,31 +334,31 @@ function oe(t, r) {
272
334
  );
273
335
  return {
274
336
  /** from value */
275
- from: e,
337
+ from: t,
276
338
  /** to value */
277
339
  to: i,
278
340
  /** total value */
279
- total: s,
341
+ total: r,
280
342
  /** size value */
281
- size: o,
343
+ size: s,
282
344
  /** Array of size options */
283
345
  sizeOptions: l,
284
346
  /** Should be called when size is changed */
285
347
  handleSizeChange: d
286
348
  };
287
349
  }
288
- function C(t, r) {
289
- return t.length !== r.length ? !1 : t.every((e) => r.find((o) => e.field === o.field && e.order === o.order));
350
+ function $(e, n) {
351
+ return e.length !== n.length ? !1 : e.every((t) => n.find((s) => t.field === s.field && t.order === s.order));
290
352
  }
291
- function se(t) {
292
- const r = v((c) => c.query), { updateSearch: e } = b();
353
+ function de(e) {
354
+ const n = S((c) => c.query), { updateSearch: t } = b();
293
355
  return {
294
356
  /** Active sort */
295
- activeSort: t.find((c) => C(c.value.sort, r.products?.sort || []))?.id ?? t[0]?.id,
357
+ activeSort: e.find((c) => $(c.value.sort, n.products?.sort || []))?.id ?? e[0]?.id,
296
358
  /** Set sort function */
297
359
  setSort: (c) => {
298
- const i = t.find((l) => l.id === c);
299
- i && e({
360
+ const i = e.find((l) => l.id === c);
361
+ i && t({
300
362
  products: {
301
363
  sort: i.value.sort
302
364
  }
@@ -304,8 +366,8 @@ function se(t) {
304
366
  }
305
367
  };
306
368
  }
307
- const M = window.SpeechRecognition || window.webkitSpeechRecognition, j = !!(M && typeof M == "function");
308
- function V() {
369
+ const P = window.SpeechRecognition || window.webkitSpeechRecognition, B = !!(P && typeof P == "function");
370
+ function U() {
309
371
  return {
310
372
  listening: !1,
311
373
  startListening: () => {
@@ -314,39 +376,39 @@ function V() {
314
376
  }
315
377
  };
316
378
  }
317
- function B({
318
- language: t = "en-US",
319
- interimResults: r = !1,
320
- onResult: e,
321
- onError: o
379
+ function _({
380
+ language: e = "en-US",
381
+ interimResults: n = !1,
382
+ onResult: t,
383
+ onError: s
322
384
  } = {}) {
323
- const [s, c] = R(!1), i = N(null), l = h(() => {
324
- const n = new M();
325
- n.lang = t, n.interimResults = r, n.onstart = () => c(!0), e && (n.onresult = (a) => {
326
- const { transcript: u } = a.results?.[0]?.[0];
327
- e(u);
328
- }), o && (n.onerror = (a) => o(a.error)), n.onend = () => c(!1), i.current = n, n.start();
329
- }, [t, r, o, e]), d = h(() => {
385
+ const [r, c] = x(!1), i = A(null), l = h(() => {
386
+ const o = new P();
387
+ o.lang = e, o.interimResults = n, o.onstart = () => c(!0), t && (o.onresult = (u) => {
388
+ const { transcript: a } = u.results?.[0]?.[0];
389
+ t(a);
390
+ }), s && (o.onerror = (u) => s(u.error)), o.onend = () => c(!1), i.current = o, o.start();
391
+ }, [e, n, s, t]), d = h(() => {
330
392
  i.current?.stop();
331
393
  }, [i]);
332
394
  return {
333
- listening: s,
395
+ listening: r,
334
396
  startListening: l,
335
397
  stopListening: d
336
398
  };
337
399
  }
338
- const ie = j ? B : V;
339
- function D(t, r) {
340
- if (!t.length || !r.length) return [];
341
- const e = r.reduce((o, s) => (o[s] = {}, o), {});
342
- return t.forEach((o) => {
343
- o.customFields?.forEach(({ key: s, value: c }) => {
344
- const i = s.toLowerCase();
345
- r.includes(i) && (e[i][c] = e[i][c] || [], e[i][c].push(o));
400
+ const fe = B ? _ : U;
401
+ function I(e, n) {
402
+ if (!e.length || !n.length) return [];
403
+ const t = n.reduce((s, r) => (s[r] = {}, s), {});
404
+ return e.forEach((s) => {
405
+ s.customFields?.forEach(({ key: r, value: c }) => {
406
+ const i = r.toLowerCase();
407
+ n.includes(i) && (t[i][c] = t[i][c] || [], t[i][c].push(s));
346
408
  });
347
- }), Object.entries(e).filter((o) => Object.keys(o[1]).length).map(([o, s]) => ({
348
- field: o,
349
- options: Object.entries(s).map(([c, i]) => ({
409
+ }), Object.entries(t).filter((s) => Object.keys(s[1]).length).map(([s, r]) => ({
410
+ field: s,
411
+ options: Object.entries(r).map(([c, i]) => ({
350
412
  value: c,
351
413
  skus: i,
352
414
  unavailable: !1,
@@ -354,64 +416,66 @@ function D(t, r) {
354
416
  }))
355
417
  }));
356
418
  }
357
- function E(t, r) {
358
- return t.length ? t.map(({ field: e, options: o }) => ({
359
- field: e,
360
- options: o.map((s) => {
361
- const c = !s.skus?.some((l) => Object.entries(r).every(([d, n]) => d === e ? !0 : l.customFields?.find((u) => u.key.toLowerCase() === d)?.value === n)), i = r[e] === s.value;
419
+ function H(e, n) {
420
+ return e.length ? e.map(({ field: t, options: s }) => ({
421
+ field: t,
422
+ options: s.map((r) => {
423
+ const c = !r.skus?.some((l) => Object.entries(n).every(([d, o]) => d === t ? !0 : l.customFields?.find((a) => a.key.toLowerCase() === d)?.value === o)), i = n[t] === r.value;
362
424
  return {
363
- ...s,
425
+ ...r,
364
426
  unavailable: c,
365
427
  selected: i
366
428
  };
367
429
  })
368
430
  })) : [];
369
431
  }
370
- const X = ["4XS", "3XS", "2XS", "XXS", "XS", "S", "M", "L", "XL", "XXL", "2XL", "XXXL", "3XL", "4XL"];
371
- function U(t) {
372
- if (X.includes(t))
373
- return 1e3 + X.indexOf(t);
374
- const r = parseFloat(t);
375
- return isNaN(r) ? t : r;
432
+ const T = ["4XS", "3XS", "2XS", "XXS", "XS", "S", "M", "L", "XL", "XXL", "2XL", "XXXL", "3XL", "4XL"];
433
+ function Z(e) {
434
+ if (T.includes(e))
435
+ return 1e3 + T.indexOf(e);
436
+ const n = parseFloat(e);
437
+ return isNaN(n) ? e : n;
376
438
  }
377
- function _(t, r) {
378
- return [...r].sort((e, o) => {
379
- const [s, c] = [e.value, o.value].map(U);
380
- return s < c ? -1 : 1;
439
+ function G(e, n) {
440
+ return [...n].sort((t, s) => {
441
+ const [r, c] = [t.value, s.value].map(Z);
442
+ return r < c ? -1 : 1;
381
443
  });
382
444
  }
383
- function ce(t = [], r = []) {
384
- const [e, o] = R({}), s = y(() => D(t, r).map(({ field: n, options: a }) => ({
385
- field: n,
386
- options: _(n, a)
387
- })), [t, r]), c = y(() => E(s, e), [s, e]), i = h((d, n) => {
388
- o((a) => {
389
- const u = { ...a };
390
- return u[d] === n ? delete u[d] : u[d] = n, u;
445
+ function ge(e = [], n = []) {
446
+ const [t, s] = x({}), r = y(() => I(e, n).map(({ field: o, options: u }) => ({
447
+ field: o,
448
+ options: G(o, u)
449
+ })), [e, n]), c = y(() => H(r, t), [r, t]), i = h((d, o) => {
450
+ s((u) => {
451
+ const a = { ...u };
452
+ return a[d] === o ? delete a[d] : a[d] = o, a;
391
453
  });
392
- }, []), l = y(() => Object.keys(e).filter((a) => e[a]).length === 0 ? [] : c.filter(({ field: a }) => e[a]).map(({ field: a, options: u }) => {
393
- const f = e[a];
394
- return u.find((p) => p.value === f)?.skus ?? [];
395
- }).reduce((a, u) => a.filter((f) => u.includes(f))), [c, e]);
454
+ }, []), l = y(() => Object.keys(t).filter((u) => t[u]).length === 0 ? [] : c.filter(({ field: u }) => t[u]).map(({ field: u, options: a }) => {
455
+ const f = t[u];
456
+ return a.find((p) => p.value === f)?.skus ?? [];
457
+ }).reduce((u, a) => u.filter((f) => a.includes(f))), [c, t]);
396
458
  return { swatches: c, toggleOption: i, matchedSkus: l };
397
459
  }
398
460
  export {
399
- j as speechToTextSupported,
461
+ B as speechToTextSupported,
400
462
  b as useActions,
401
- K as useDecoratedSearchResults,
402
- Q as useFacet,
403
- W as useFacets,
404
- le as useLoadMore,
405
- v as useNostoAppState,
406
- Y as usePagination,
407
- ee as usePersonalization,
463
+ te as useDecoratedSearchResults,
464
+ ne as useFacet,
465
+ re as useFacets,
466
+ ve as useHistory,
467
+ he as useLoadMore,
468
+ S as useNostoAppState,
469
+ oe as usePagination,
470
+ se as usePersonalization,
408
471
  k as useProductFilters,
409
472
  q as useRange,
410
- te as useRangeSelector,
411
- ne as useResponse,
412
- re as useSelectedFiltersCount,
413
- oe as useSizeOptions,
414
- se as useSort,
415
- ie as useSpeechToText,
416
- ce as useSwatches
473
+ ie as useRangeSelector,
474
+ ce as useResponse,
475
+ ue as useSelectedFiltersCount,
476
+ ae as useShopifyProduct,
477
+ le as useSizeOptions,
478
+ de as useSort,
479
+ fe as useSpeechToText,
480
+ ge as useSwatches
417
481
  };