@nosto/search-js 1.7.5 → 1.7.6

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.
package/README.md CHANGED
@@ -19,4 +19,10 @@ npm install @nosto/search-js --save
19
19
 
20
20
  Read [Nosto Techdocs](https://docs.nosto.com/techdocs/apis/frontend/oss/search-js) for more information on how to use the library.
21
21
 
22
- [Library TypeDoc page](https://nosto.github.io/search-js/) includes detailed library helpers documentation and examples.
22
+ [Library TypeDoc page](https://nosto.github.io/search-js/) includes detailed library helpers documentation and examples.
23
+
24
+ ## Packages
25
+ ### `preact-legacy`
26
+ The `preact-legacy` package is designed to provide backward compatibility for existing Search Template implementations. It serves as a bridge to support legacy functionality.
27
+
28
+ > The components included in this package are intended solely for compatibility purposes. They are not recommended for use in new development or as active components in modern applications.
@@ -0,0 +1 @@
1
+ "use strict";const h=require("preact"),f=require("preact/hooks"),U=require("./search-BVJZK90N.cjs"),K=require("./utils/utils.cjs.js");var L=0;function C(e,t,r,n,c,i){t||(t={});var s,o,u=t;if("ref"in u)for(o in u={},t)o=="ref"?s=t[o]:u[o]=t[o];var a={type:e,props:u,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--L,__i:-1,__u:0,__source:c,__self:i};if(typeof e=="function"&&(s=e.defaultProps))for(o in s)u[o]===void 0&&(u[o]=s[o]);return h.options.vnode&&h.options.vnode(a),a}const I=e=>String(e)==="[object Object]";function p(e){if(!I(e))return!1;const t=e.constructor;if(t===void 0)return!0;const r=t.prototype;return!(!I(r)||!r.hasOwnProperty("isPrototypeOf"))}function v(...e){return e.reduce((t,r)=>b(t,r))}function A(...e){return e.reduce((t,r)=>b(t,r))}function b(e,t){return p(e)&&p(t)?Object.entries(t).reduce((r,[n,c])=>(r[n]=b(r[n],c),r),{...e}):p(e)?e:t}function S(e,t){if(e===t)return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t))return e.length!==t.length?!1:e.every((r,n)=>S(r,t[n]));if(p(e)&&p(t)){const r=Object.entries(e);return r.length!==Object.keys(t).length?!1:r.every(([n,c])=>S(c,t[n]))}return!1}function F(e,t={}){const r=new Map;let n=A(e,t??{});const c=A(e,t);function i(g){n=g(n);for(const l of r.values())l(n)}function s(g){i(l=>({...l,...g}))}function o(){return n}function u(){return structuredClone(c)}function a(g,l){let y;r.set(l,w=>{const k=g(w);S(k,y)||(y=k,l(k))})}function d(g){r.delete(g)}return{updateState:s,getState:o,getInitialState:u,onChange:a,clearOnChange:d}}const R={loading:!0,query:{},response:{},initialized:!1};function x(e={}){return F(R,e)}const P=h.createContext(x());function _(e=W){const t=f.useContext(P),[r,n]=f.useState(e(t.getState()));return t.onChange(e,n),f.useEffect(()=>()=>t.clearOnChange(n),[t]),r}const W=e=>e;function E(e,...t){return t.reduce((r,n)=>(r[n]=e[n],r),{})}const N=h.createContext(null),T=()=>{const e=f.useContext(N);if(!e)throw new Error("useConfig must be used within a ConfigProvider");return e};function B(e){return Array.from(new Set(e))}function G(e,t){return{...t,products:{facets:e==="autocomplete"?void 0:["*"],fields:J,...t.products},...t.keywords?{keywords:{...t.keywords,fields:B([...H,...t.keywords.fields??[]]),highlight:t.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const J=["productId","url","name","imageUrl","imageHash","thumbUrl","description","brand","variantId","availability","price","priceText","categoryIds","categories","customFields.key","customFields.value","priceCurrencyCode","datePublished","listPrice","unitPricingBaseMeasure","unitPricingUnit","unitPricingMeasure","googleCategory","gtin","ageGroup","gender","condition","alternateImageUrls","ratingValue","reviewCount","inventoryLevel","skus.id","skus.name","skus.price","skus.listPrice","skus.priceText","skus.url","skus.imageUrl","skus.inventoryLevel","skus.customFields.key","skus.customFields.value","skus.availability","pid","onDiscount","extra.key","extra.value","saleable","available","tags1","tags2","tags3"],H=["keyword","_redirect"];function Y(...e){if(!e.every(t=>t==null))return e.filter(t=>Array.isArray(t)).reduce((t,r)=>t.concat(r),[])}const j="nosto.search.";function X(e){var r;const t=`${j}${e}`;(r=window.performance)==null||r.mark(`${t}.start`)}function Z(e){var r,n;const t=`${j}${e}`;(r=window.performance)==null||r.mark(`${t}.end`),(n=window.performance)==null||n.measure(t,`${t}.start`,`${t}.end`)}function m(e){return X(e),()=>Z(e)}function ee(e,t,r){const n=JSON.stringify(t);try{console.info("Setting storage",e,n),r.setItem(e,n)}catch(c){console.warn(c)}}function te(e,t){try{const r=t.getItem(e);if(r)return JSON.parse(r)}catch(r){console.warn(r)}}function re(e,t){ee(e,t,sessionStorage)}function ne(e){return te(e,sessionStorage)}const $="nosto:search:searchResult";function oe(e,t,r){if(!e)return;re($,{query:t,result:r})}function se(e,t){if(!e)return null;const r=ne($);if(!r||!ce(r))return null;const n=M(r.query);return S(M(t),n)?r.result:null}function M(e){return{accountId:e.accountId,customRules:e.customRules,explain:e.explain,keywords:e.keywords,products:e.products,query:e.query,redirect:e.redirect,rules:e.rules,segments:e.segments,sessionParams:e.sessionParams}}function ce(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function q(e,t,r){var a,d,g;const n=m("newSearch"),c=e.config.pageType,i=v(e.store.getInitialState().query,t),s=v(e.config.search,r,{track:c,redirect:c!=="autocomplete",isKeyword:!!(r!=null&&r.isKeyword)});e.store.updateState({query:i,loading:!0,initialized:!0});const o=c!=="autocomplete"&&e.config.persistentSearchCache,u=e.config.queryModifications({...i,products:{...i.products,filter:Y((d=(a=e.store.getInitialState().query)==null?void 0:a.products)==null?void 0:d.filter,(g=t.products)==null?void 0:g.filter)}},c);try{let l;const y=se(o,u);if(y)l=y;else{const w=G(c,u);l=await U.search(w,s),oe(o,u,l)}e.store.updateState({response:l,loading:!1})}catch(l){console.error("Search action failed",l)}n()}async function O(e,t,r){const n=m("updateSearch"),c=v(e.store.getState().query,{products:{from:0}},t);await q(e,c,r),n()}async function ie(e,t,r){var s;const n=m("replaceFilter"),c=(s=e.store.getState().query.products)==null?void 0:s.filter,i=r!==void 0?[{field:t,[typeof r=="object"?"range":"value"]:[r]}]:[];await O(e,{products:{filter:[...(c==null?void 0:c.filter(o=>o.field!==t))??[],...i]}}),n()}async function ue(e,t,r,n){var u,a;const c=m("toggleProductFilter"),i=(u=e.store.getState().query.products)==null?void 0:u.filter,s=i==null?void 0:i.find(d=>d.value instanceof Array&&d.field===t),o=s!=null&&s.value?{...s,value:[...s.value.filter(d=>!S(d,r)),...n?[r]:[]]}:n?{field:t,value:[r]}:void 0;await O(e,{products:{filter:[...(i==null?void 0:i.filter(d=>d!==s))??[],...(a=o==null?void 0:o.value)!=null&&a.length?[o]:[]]}}),c()}function Q(){const e=T(),t=f.useContext(P),r=f.useMemo(()=>({config:e,store:t}),[e,t]),n=f.useCallback((o,u)=>q(r,o,u),[r]),c=f.useCallback((o,u)=>O(r,o,u),[r]),i=f.useCallback((o,u,a)=>ue(r,o,u,a),[r]),s=f.useCallback((o,u)=>ie(r,o,u),[r]);return{newSearch:n,updateSearch:c,toggleProductFilter:i,replaceFilter:s}}function z({from:e,size:t,pageSize:r}){return K.isBot()?{products:{from:e+r}}:{products:{size:t+r}}}function V(e=24){const{from:t,size:r}=_(i=>{var s,o;return{from:((s=i.query.products)==null?void 0:s.from)??0,size:((o=i.query.products)==null?void 0:o.size)??0}}),{updateSearch:n}=Q();return{loadMore:f.useCallback(async()=>{await n(z({from:t,size:r,pageSize:e}))},[t,r,e,n])}}function D(e,t){var i,s,o;const r=((i=t.products)==null?void 0:i.total)??0,n=((s=e.products)==null?void 0:s.from)??0,c=((o=e.products)==null?void 0:o.size)??0;return r>0&&r>n+c}function ae(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function le({children:e,pageSize:t}){const r=f.useRef(null),{query:n,response:c}=_(s=>E(s,"query","response")),{loadMore:i}=V(t);return f.useEffect(()=>{let s,o;return D(n,c)&&(s=r.current,o=new IntersectionObserver(u=>{const a=u[0];a!=null&&a.isIntersecting&&i()}),s&&o.observe(s)),()=>{s&&o.unobserve(s)}},[c]),C(h.Fragment,{children:[e,C("div",{ref:r,style:{height:"1px"}})]})}exports.ConfigContext=N;exports.InfiniteScrollWithObserver=le;exports.StoreContext=P;exports.createExtendableStore=F;exports.createStore=x;exports.defaultState=R;exports.getNextPageQuery=z;exports.hasMoreResults=D;exports.intersectionObserverSupported=ae;exports.isPlainObject=p;exports.pick=E;exports.u=C;exports.useActions=Q;exports.useConfig=T;exports.useLoadMore=V;exports.useNostoAppState=_;
@@ -0,0 +1,418 @@
1
+ import { options as _, createContext as F, Fragment as $ } from "preact";
2
+ import { useContext as v, useState as x, useEffect as M, useMemo as z, useCallback as p, useRef as Q } from "preact/hooks";
3
+ import { s as V } from "./search-B0-bVNMy.js";
4
+ import { isBot as D } from "./utils/utils.es.js";
5
+ var U = 0;
6
+ function I(e, t, r, n, i, c) {
7
+ t || (t = {});
8
+ var s, o, u = t;
9
+ if ("ref" in u) for (o in u = {}, t) o == "ref" ? s = t[o] : u[o] = t[o];
10
+ var a = { type: e, props: u, key: r, ref: s, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --U, __i: -1, __u: 0, __source: i, __self: c };
11
+ if (typeof e == "function" && (s = e.defaultProps)) for (o in s) u[o] === void 0 && (u[o] = s[o]);
12
+ return _.vnode && _.vnode(a), a;
13
+ }
14
+ const P = (e) => String(e) === "[object Object]";
15
+ function y(e) {
16
+ if (!P(e))
17
+ return !1;
18
+ const t = e.constructor;
19
+ if (t === void 0)
20
+ return !0;
21
+ const r = t.prototype;
22
+ return !(!P(r) || !r.hasOwnProperty("isPrototypeOf"));
23
+ }
24
+ function k(...e) {
25
+ return e.reduce((t, r) => C(t, r));
26
+ }
27
+ function O(...e) {
28
+ return e.reduce((t, r) => C(t, r));
29
+ }
30
+ function C(e, t) {
31
+ return y(e) && y(t) ? Object.entries(t).reduce(
32
+ (r, [n, i]) => (r[n] = C(r[n], i), r),
33
+ { ...e }
34
+ ) : y(e) ? e : t;
35
+ }
36
+ function h(e, t) {
37
+ if (e === t)
38
+ return !0;
39
+ if (e instanceof Date && t instanceof Date)
40
+ return e.getTime() === t.getTime();
41
+ if (Array.isArray(e) && Array.isArray(t))
42
+ return e.length !== t.length ? !1 : e.every((r, n) => h(r, t[n]));
43
+ if (y(e) && y(t)) {
44
+ const r = Object.entries(e);
45
+ return r.length !== Object.keys(t).length ? !1 : r.every(([n, i]) => h(i, t[n]));
46
+ }
47
+ return !1;
48
+ }
49
+ function K(e, t = {}) {
50
+ const r = /* @__PURE__ */ new Map();
51
+ let n = O(e, t ?? {});
52
+ const i = O(e, t);
53
+ function c(d) {
54
+ n = d(n);
55
+ for (const l of r.values())
56
+ l(n);
57
+ }
58
+ function s(d) {
59
+ c((l) => ({ ...l, ...d }));
60
+ }
61
+ function o() {
62
+ return n;
63
+ }
64
+ function u() {
65
+ return structuredClone(i);
66
+ }
67
+ function a(d, l) {
68
+ let g;
69
+ r.set(l, (S) => {
70
+ const w = d(S);
71
+ h(w, g) || (g = w, l(w));
72
+ });
73
+ }
74
+ function f(d) {
75
+ r.delete(d);
76
+ }
77
+ return {
78
+ updateState: s,
79
+ getState: o,
80
+ getInitialState: u,
81
+ onChange: a,
82
+ clearOnChange: f
83
+ };
84
+ }
85
+ const q = {
86
+ loading: !0,
87
+ query: {},
88
+ response: {},
89
+ initialized: !1
90
+ };
91
+ function L(e = {}) {
92
+ return K(q, e);
93
+ }
94
+ const R = F(L());
95
+ function T(e = B) {
96
+ const t = v(R), [r, n] = x(e(t.getState()));
97
+ return t.onChange(e, n), M(() => () => t.clearOnChange(n), [t]), r;
98
+ }
99
+ const B = (e) => e;
100
+ function G(e, ...t) {
101
+ return t.reduce(
102
+ (r, n) => (r[n] = e[n], r),
103
+ {}
104
+ );
105
+ }
106
+ const J = F(null), W = () => {
107
+ const e = v(J);
108
+ if (!e)
109
+ throw new Error("useConfig must be used within a ConfigProvider");
110
+ return e;
111
+ };
112
+ function H(e) {
113
+ return Array.from(new Set(e));
114
+ }
115
+ function Y(e, t) {
116
+ return {
117
+ ...t,
118
+ products: {
119
+ facets: e === "autocomplete" ? void 0 : ["*"],
120
+ fields: X,
121
+ ...t.products
122
+ },
123
+ ...t.keywords ? {
124
+ keywords: {
125
+ ...t.keywords,
126
+ fields: H([...Z, ...t.keywords.fields ?? []]),
127
+ highlight: t.keywords.highlight ?? {
128
+ preTag: "<strong>",
129
+ postTag: "</strong>"
130
+ }
131
+ }
132
+ } : {}
133
+ };
134
+ }
135
+ const X = [
136
+ "productId",
137
+ "url",
138
+ "name",
139
+ "imageUrl",
140
+ "imageHash",
141
+ "thumbUrl",
142
+ "description",
143
+ "brand",
144
+ "variantId",
145
+ "availability",
146
+ "price",
147
+ "priceText",
148
+ "categoryIds",
149
+ "categories",
150
+ "customFields.key",
151
+ "customFields.value",
152
+ "priceCurrencyCode",
153
+ "datePublished",
154
+ "listPrice",
155
+ "unitPricingBaseMeasure",
156
+ "unitPricingUnit",
157
+ "unitPricingMeasure",
158
+ "googleCategory",
159
+ "gtin",
160
+ "ageGroup",
161
+ "gender",
162
+ "condition",
163
+ "alternateImageUrls",
164
+ "ratingValue",
165
+ "reviewCount",
166
+ "inventoryLevel",
167
+ "skus.id",
168
+ "skus.name",
169
+ "skus.price",
170
+ "skus.listPrice",
171
+ "skus.priceText",
172
+ "skus.url",
173
+ "skus.imageUrl",
174
+ "skus.inventoryLevel",
175
+ "skus.customFields.key",
176
+ "skus.customFields.value",
177
+ "skus.availability",
178
+ "pid",
179
+ "onDiscount",
180
+ "extra.key",
181
+ "extra.value",
182
+ "saleable",
183
+ "available",
184
+ "tags1",
185
+ "tags2",
186
+ "tags3"
187
+ ], Z = ["keyword", "_redirect"];
188
+ function ee(...e) {
189
+ if (!e.every((t) => t == null))
190
+ return e.filter((t) => Array.isArray(t)).reduce((t, r) => t.concat(r), []);
191
+ }
192
+ const E = "nosto.search.";
193
+ function te(e) {
194
+ var r;
195
+ const t = `${E}${e}`;
196
+ (r = window.performance) == null || r.mark(`${t}.start`);
197
+ }
198
+ function re(e) {
199
+ var r, n;
200
+ const t = `${E}${e}`;
201
+ (r = window.performance) == null || r.mark(`${t}.end`), (n = window.performance) == null || n.measure(t, `${t}.start`, `${t}.end`);
202
+ }
203
+ function m(e) {
204
+ return te(e), () => re(e);
205
+ }
206
+ function ne(e, t, r) {
207
+ const n = JSON.stringify(t);
208
+ try {
209
+ console.info("Setting storage", e, n), r.setItem(e, n);
210
+ } catch (i) {
211
+ console.warn(i);
212
+ }
213
+ }
214
+ function oe(e, t) {
215
+ try {
216
+ const r = t.getItem(e);
217
+ if (r)
218
+ return JSON.parse(r);
219
+ } catch (r) {
220
+ console.warn(r);
221
+ }
222
+ }
223
+ function se(e, t) {
224
+ ne(e, t, sessionStorage);
225
+ }
226
+ function ie(e) {
227
+ return oe(e, sessionStorage);
228
+ }
229
+ const j = "nosto:search:searchResult";
230
+ function ce(e, t, r) {
231
+ if (!e)
232
+ return;
233
+ se(j, { query: t, result: r });
234
+ }
235
+ function ue(e, t) {
236
+ if (!e)
237
+ return null;
238
+ const r = ie(j);
239
+ if (!r || !ae(r))
240
+ return null;
241
+ const n = A(r.query);
242
+ return h(A(t), n) ? r.result : null;
243
+ }
244
+ function A(e) {
245
+ return {
246
+ accountId: e.accountId,
247
+ customRules: e.customRules,
248
+ explain: e.explain,
249
+ keywords: e.keywords,
250
+ products: e.products,
251
+ query: e.query,
252
+ redirect: e.redirect,
253
+ rules: e.rules,
254
+ segments: e.segments,
255
+ sessionParams: e.sessionParams
256
+ };
257
+ }
258
+ function ae(e) {
259
+ return typeof e == "object" && e !== null && "query" in e && "result" in e;
260
+ }
261
+ async function N(e, t, r) {
262
+ var a, f, d;
263
+ const n = m("newSearch"), i = e.config.pageType, c = k(e.store.getInitialState().query, t), s = k(e.config.search, r, {
264
+ track: i,
265
+ redirect: i !== "autocomplete",
266
+ isKeyword: !!(r != null && r.isKeyword)
267
+ });
268
+ e.store.updateState({
269
+ query: c,
270
+ loading: !0,
271
+ initialized: !0
272
+ });
273
+ const o = i !== "autocomplete" && e.config.persistentSearchCache, u = e.config.queryModifications(
274
+ {
275
+ ...c,
276
+ products: {
277
+ ...c.products,
278
+ // Apply filter merging to avoid overwriting base filters
279
+ filter: ee((f = (a = e.store.getInitialState().query) == null ? void 0 : a.products) == null ? void 0 : f.filter, (d = t.products) == null ? void 0 : d.filter)
280
+ }
281
+ },
282
+ i
283
+ );
284
+ try {
285
+ let l;
286
+ const g = ue(o, u);
287
+ if (g)
288
+ l = g;
289
+ else {
290
+ const S = Y(i, u);
291
+ l = await V(S, s), ce(o, u, l);
292
+ }
293
+ e.store.updateState({
294
+ response: l,
295
+ loading: !1
296
+ });
297
+ } catch (l) {
298
+ console.error("Search action failed", l);
299
+ }
300
+ n();
301
+ }
302
+ async function b(e, t, r) {
303
+ const n = m("updateSearch"), i = k(e.store.getState().query, { products: { from: 0 } }, t);
304
+ await N(e, i, r), n();
305
+ }
306
+ async function le(e, t, r) {
307
+ var s;
308
+ const n = m("replaceFilter"), i = (s = e.store.getState().query.products) == null ? void 0 : s.filter, c = r !== void 0 ? [{ field: t, [typeof r == "object" ? "range" : "value"]: [r] }] : [];
309
+ await b(e, {
310
+ products: {
311
+ filter: [...(i == null ? void 0 : i.filter((o) => o.field !== t)) ?? [], ...c]
312
+ }
313
+ }), n();
314
+ }
315
+ async function fe(e, t, r, n) {
316
+ var u, a;
317
+ const i = m("toggleProductFilter"), c = (u = e.store.getState().query.products) == null ? void 0 : u.filter, s = c == null ? void 0 : c.find((f) => f.value instanceof Array && f.field === t), o = s != null && s.value ? {
318
+ ...s,
319
+ value: [...s.value.filter((f) => !h(f, r)), ...n ? [r] : []]
320
+ } : n ? {
321
+ field: t,
322
+ value: [r]
323
+ } : void 0;
324
+ await b(e, {
325
+ products: {
326
+ filter: [...(c == null ? void 0 : c.filter((f) => f !== s)) ?? [], ...(a = o == null ? void 0 : o.value) != null && a.length ? [o] : []]
327
+ }
328
+ }), i();
329
+ }
330
+ function de() {
331
+ const e = W(), t = v(R), r = z(
332
+ () => ({
333
+ config: e,
334
+ store: t
335
+ }),
336
+ [e, t]
337
+ ), n = p(
338
+ (o, u) => N(r, o, u),
339
+ [r]
340
+ ), i = p(
341
+ (o, u) => b(r, o, u),
342
+ [r]
343
+ ), c = p(
344
+ (o, u, a) => fe(r, o, u, a),
345
+ [r]
346
+ ), s = p(
347
+ (o, u) => le(r, o, u),
348
+ [r]
349
+ );
350
+ return {
351
+ newSearch: n,
352
+ updateSearch: i,
353
+ toggleProductFilter: c,
354
+ replaceFilter: s
355
+ };
356
+ }
357
+ function ge({ from: e, size: t, pageSize: r }) {
358
+ return D() ? {
359
+ products: { from: e + r }
360
+ } : {
361
+ products: { size: t + r }
362
+ };
363
+ }
364
+ function pe(e = 24) {
365
+ const { from: t, size: r } = T((c) => {
366
+ var s, o;
367
+ return {
368
+ from: ((s = c.query.products) == null ? void 0 : s.from) ?? 0,
369
+ size: ((o = c.query.products) == null ? void 0 : o.size) ?? 0
370
+ };
371
+ }), { updateSearch: n } = de();
372
+ return {
373
+ loadMore: p(async () => {
374
+ await n(ge({ from: t, size: r, pageSize: e }));
375
+ }, [t, r, e, n])
376
+ };
377
+ }
378
+ function ye(e, t) {
379
+ var c, s, o;
380
+ const r = ((c = t.products) == null ? void 0 : c.total) ?? 0, n = ((s = e.products) == null ? void 0 : s.from) ?? 0, i = ((o = e.products) == null ? void 0 : o.size) ?? 0;
381
+ return r > 0 && r > n + i;
382
+ }
383
+ function ke() {
384
+ return !!(window.IntersectionObserver && window.IntersectionObserverEntry && "intersectionRatio" in window.IntersectionObserverEntry.prototype);
385
+ }
386
+ function ve({ children: e, pageSize: t }) {
387
+ const r = Q(null), { query: n, response: i } = T((s) => G(s, "query", "response")), { loadMore: c } = pe(t);
388
+ return M(() => {
389
+ let s, o;
390
+ return ye(n, i) && (s = r.current, o = new IntersectionObserver((u) => {
391
+ const a = u[0];
392
+ a != null && a.isIntersecting && c();
393
+ }), s && o.observe(s)), () => {
394
+ s && o.unobserve(s);
395
+ };
396
+ }, [i]), /* @__PURE__ */ I($, { children: [
397
+ e,
398
+ /* @__PURE__ */ I("div", { ref: r, style: { height: "1px" } })
399
+ ] });
400
+ }
401
+ export {
402
+ J as C,
403
+ ve as I,
404
+ R as S,
405
+ I as a,
406
+ T as b,
407
+ W as c,
408
+ L as d,
409
+ y as e,
410
+ de as f,
411
+ ge as g,
412
+ ye as h,
413
+ ke as i,
414
+ q as j,
415
+ K as k,
416
+ G as p,
417
+ pe as u
418
+ };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Q=require("../utils/utils.cjs.js"),b=require("preact"),g=require("preact/hooks"),ne=require("../search-BVJZK90N.cjs"),q=require("../index.es-DlUp67LT.cjs");var oe=0;function C(e,r,t,n,o,i){r||(r={});var s,c,l=r;if("ref"in l)for(c in l={},r)c=="ref"?s=r[c]:l[c]=r[c];var u={type:e,props:l,key:t,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--oe,__i:-1,__u:0,__source:o,__self:i};if(typeof e=="function"&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return b.options.vnode&&b.options.vnode(u),u}const $=e=>String(e)==="[object Object]";function F(e){if(!$(e))return!1;const r=e.constructor;if(r===void 0)return!0;const t=r.prototype;return!(!$(t)||!t.hasOwnProperty("isPrototypeOf"))}function T(...e){return e.reduce((r,t)=>O(r,t))}function D(...e){return e.reduce((r,t)=>O(r,t))}function O(e,r){return F(e)&&F(r)?Object.entries(r).reduce((t,[n,o])=>(t[n]=O(t[n],o),t),{...e}):F(e)?e:r}function A(e,r){if(e===r)return!0;if(e instanceof Date&&r instanceof Date)return e.getTime()===r.getTime();if(Array.isArray(e)&&Array.isArray(r))return e.length!==r.length?!1:e.every((t,n)=>A(t,r[n]));if(F(e)&&F(r)){const t=Object.entries(e);return t.length!==Object.keys(r).length?!1:t.every(([n,o])=>A(o,r[n]))}return!1}function U(e,r={}){const t=new Map;let n=D(e,r??{});const o=D(e,r);function i(a){n=a(n);for(const f of t.values())f(n)}function s(a){i(f=>({...f,...a}))}function c(){return n}function l(){return structuredClone(o)}function u(a,f){let h;t.set(f,p=>{const y=a(p);A(y,h)||(h=y,f(y))})}function d(a){t.delete(a)}return{updateState:s,getState:c,getInitialState:l,onChange:u,clearOnChange:d}}const K={loading:!0,query:{},response:{},initialized:!1};function I(e={}){return U(K,e)}const M=b.createContext(I());function S(e=se){const r=g.useContext(M),[t,n]=g.useState(e(r.getState()));return r.onChange(e,n),g.useEffect(()=>()=>r.clearOnChange(n),[r]),t}const se=e=>e;function H(e,...r){return r.reduce((t,n)=>(t[n]=e[n],t),{})}const N=b.createContext(null),W=()=>{const e=g.useContext(N);if(!e)throw new Error("useConfig must be used within a ConfigProvider");return e};function ce(e){return Array.from(new Set(e))}function ie(e,r){return{...r,products:{facets:e==="autocomplete"?void 0:["*"],fields:ue,...r.products},...r.keywords?{keywords:{...r.keywords,fields:ce([...ae,...r.keywords.fields??[]]),highlight:r.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const ue=["productId","url","name","imageUrl","imageHash","thumbUrl","description","brand","variantId","availability","price","priceText","categoryIds","categories","customFields.key","customFields.value","priceCurrencyCode","datePublished","listPrice","unitPricingBaseMeasure","unitPricingUnit","unitPricingMeasure","googleCategory","gtin","ageGroup","gender","condition","alternateImageUrls","ratingValue","reviewCount","inventoryLevel","skus.id","skus.name","skus.price","skus.listPrice","skus.priceText","skus.url","skus.imageUrl","skus.inventoryLevel","skus.customFields.key","skus.customFields.value","skus.availability","pid","onDiscount","extra.key","extra.value","saleable","available","tags1","tags2","tags3"],ae=["keyword","_redirect"];function le(...e){if(!e.every(r=>r==null))return e.filter(r=>Array.isArray(r)).reduce((r,t)=>r.concat(t),[])}const G="nosto.search.";function de(e){var t;const r=`${G}${e}`;(t=window.performance)==null||t.mark(`${r}.start`)}function fe(e){var t,n;const r=`${G}${e}`;(t=window.performance)==null||t.mark(`${r}.end`),(n=window.performance)==null||n.measure(r,`${r}.start`,`${r}.end`)}function _(e){return de(e),()=>fe(e)}function ge(e,r,t){const n=JSON.stringify(r);try{console.info("Setting storage",e,n),t.setItem(e,n)}catch(o){console.warn(o)}}function pe(e,r){try{const t=r.getItem(e);if(t)return JSON.parse(t)}catch(t){console.warn(t)}}function me(e,r){ge(e,r,sessionStorage)}function he(e){return pe(e,sessionStorage)}const J="nosto:search:searchResult";function ye(e,r,t){if(!e)return;me(J,{query:r,result:t})}function Se(e,r){if(!e)return null;const t=he(J);if(!t||!ve(t))return null;const n=B(t.query);return A(B(r),n)?t.result:null}function B(e){return{accountId:e.accountId,customRules:e.customRules,explain:e.explain,keywords:e.keywords,products:e.products,query:e.query,redirect:e.redirect,rules:e.rules,segments:e.segments,sessionParams:e.sessionParams}}function ve(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function Y(e,r,t){var u,d,a;const n=_("newSearch"),o=e.config.pageType,i=T(e.store.getInitialState().query,r),s=T(e.config.search,t,{track:o,redirect:o!=="autocomplete",isKeyword:!!(t!=null&&t.isKeyword)});e.store.updateState({query:i,loading:!0,initialized:!0});const c=o!=="autocomplete"&&e.config.persistentSearchCache,l=e.config.queryModifications({...i,products:{...i.products,filter:le((d=(u=e.store.getInitialState().query)==null?void 0:u.products)==null?void 0:d.filter,(a=r.products)==null?void 0:a.filter)}},o);try{let f;const h=Se(c,l);if(h)f=h;else{const p=ie(o,l);f=await ne.search(p,s),ye(c,l,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}n()}async function z(e,r,t){const n=_("updateSearch"),o=T(e.store.getState().query,{products:{from:0}},r);await Y(e,o,t),n()}async function Ce(e,r,t){var s;const n=_("replaceFilter"),o=(s=e.store.getState().query.products)==null?void 0:s.filter,i=t!==void 0?[{field:r,[typeof t=="object"?"range":"value"]:[t]}]:[];await z(e,{products:{filter:[...(o==null?void 0:o.filter(c=>c.field!==r))??[],...i]}}),n()}async function we(e,r,t,n){var l,u;const o=_("toggleProductFilter"),i=(l=e.store.getState().query.products)==null?void 0:l.filter,s=i==null?void 0:i.find(d=>d.value instanceof Array&&d.field===r),c=s!=null&&s.value?{...s,value:[...s.value.filter(d=>!A(d,t)),...n?[t]:[]]}:n?{field:r,value:[t]}:void 0;await z(e,{products:{filter:[...(i==null?void 0:i.filter(d=>d!==s))??[],...(u=c==null?void 0:c.value)!=null&&u.length?[c]:[]]}}),o()}function k(){const e=W(),r=g.useContext(M),t=g.useMemo(()=>({config:e,store:r}),[e,r]),n=g.useCallback((c,l)=>Y(t,c,l),[t]),o=g.useCallback((c,l)=>z(t,c,l),[t]),i=g.useCallback((c,l,u)=>we(t,c,l,u),[t]),s=g.useCallback((c,l)=>Ce(t,c,l),[t]);return{newSearch:n,updateSearch:o,toggleProductFilter:i,replaceFilter:s}}function X({from:e,size:r,pageSize:t}){return Q.isBot()?{products:{from:e+t}}:{products:{size:r+t}}}function E(e=24){const{from:r,size:t}=S(i=>{var s,c;return{from:((s=i.query.products)==null?void 0:s.from)??0,size:((c=i.query.products)==null?void 0:c.size)??0}}),{updateSearch:n}=k();return{loadMore:g.useCallback(async()=>{await n(X({from:r,size:t,pageSize:e}))},[r,t,e,n])}}function ke({pageSize:e}){const{loadMore:r}=E(e);return C("button",{onClick:r,children:"More results"})}function Z(e,r){var i,s,c;const t=((i=r.products)==null?void 0:i.total)??0,n=((s=e.products)==null?void 0:s.from)??0,o=((c=e.products)==null?void 0:c.size)??0;return t>0&&t>n+o}function Pe(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function ee({children:e,loadMoreComponent:r,pageSize:t}){const{loading:n,query:o,response:i}=S(c=>H(c,"loading","query","response")),s=!n&&Z(o,i);return C(b.Fragment,{children:[e,s&&(r?C(r,{pageSize:t}):C(ke,{pageSize:t}))]})}function be({children:e,pageSize:r}){const t=g.useRef(null),{query:n,response:o}=S(s=>H(s,"query","response")),{loadMore:i}=E(r);return g.useEffect(()=>{let s,c;return Z(n,o)&&(s=t.current,c=new IntersectionObserver(l=>{const u=l[0];u!=null&&u.isIntersecting&&i()}),s&&c.observe(s)),()=>{s&&c.unobserve(s)}},[o]),C(b.Fragment,{children:[e,C("div",{ref:t,style:{height:"1px"}})]})}const Fe=!Q.isBot()&&Pe()?be:ee;function Me(e){return e.type==="input"}function Ae(e){return!!e&&typeof e=="object"&&"type"in e&&"props"in e}function j(e,r={depth:0}){const{children:t}=e;return b.toChildArray(t).map(n=>{if(!Ae(n))return n;const o=e.updateElement(n,r);return o===null?null:(o.props={...o.props,children:j({...e,children:o.props.children},{depth:r.depth+1})},o)})}function Ie({children:e,onSearchInput:r}){return j({children:e,updateElement:t=>(!Me(t)||t.props.type!=="search"||(t.props={...t.props,onInput:n=>{n.target instanceof HTMLInputElement&&r(n.target)}}),t)})}const Re="nosto:search:scrollPos";function Ne(){window.sessionStorage.setItem(Re,window.scrollY.toString())}function _e({children:e,hit:r,onClick:t}){const{pageType:n}=W(),o=n==="autocomplete"?void 0:n;return j({children:e,updateElement:(i,s)=>(s.depth>0||(i.props={...i.props,onClick:c=>{r&&o&&q.s(l=>l.recordSearchClick(o,r)),Ne(),typeof t=="function"&&t(c)}}),i)})}function L(){g.useEffect(()=>{const e=window.setTimeout(()=>{console.error("Nosto client script has not loaded after 3 seconds.")},3e3);q.s(()=>{window.clearTimeout(e)})},[])}const V={defaultCurrency:"EUR",queryModifications:e=>e},xe={...V};function Te(e){return{pageType:"autocomplete",...xe,...e}}function qe({config:e,store:r,children:t}){const n=r??I();return L(),C(N,{value:Te(e),children:C(M,{value:n,children:t})})}const Oe={...V,persistentSearchCache:!1,preservePageScroll:!1};function ze(e){return{pageType:"category",...Oe,...e}}function Ee({config:e,store:r,children:t}){const n=r??I();return L(),C(N,{value:ze(e),children:C(M,{value:n,children:t})})}const je={...V,persistentSearchCache:!1,preservePageScroll:!1};function Le(e={}){return{pageType:"serp",...je,...e}}function Ve({config:e,store:r,children:t}){const n=r??I();return L(),C(N,{value:Le(e),children:C(M,{value:n,children:t})})}function $e(e){const r=S(t=>t.response);return e&&Array.isArray(e)||e&&F(e)?e:r}function De(e){var s;const r=((s=e.data)==null?void 0:s.filter(c=>c.selected).length)??0,[t,n]=g.useState(r>0),{toggleProductFilter:o}=k();return{active:t,selectedFiltersCount:r,toggleActive:()=>{n(!t)},toggleProductFilter:o}}function Be(){const{loading:e,facets:r}=S(t=>{var n,o;return{loading:t.loading,facets:((o=(n=t.response)==null?void 0:n.products)==null?void 0:o.facets)??[]}});return{loading:e,facets:r}}function Qe(e,r){const t=r-e;return!isNaN(t)&&t>0?new Array(r-e).fill(void 0).map((n,o)=>o+e):[]}function Ue(e){const{query:r,products:t}=S(n=>({query:n.query,products:n.response.products}));return g.useMemo(()=>{var P;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const n=((P=r.products)==null?void 0:P.from)??0,o=(e==null?void 0:e.width)??1/0,i=Math.max(Math.floor(o-1)/2,1),s=t.size>0?Math.floor(n/t.size)+1:1,c=t.size>0?Math.ceil(t.total/t.size):0,l=w=>w>=s-i&&w<=s+i,u=n+1,d=Math.min(n+t.total,t.total),a={from:n,page:s,current:!0},f=w=>({from:(w-1)*t.size,page:w,current:w===s}),h=s>1?f(s-1):void 0,p=s<c?f(s+1):void 0,y=i===1/0||s-i-1>1?f(1):void 0,m=i===1/0||s+i+1<c?f(c):void 0,v=Qe(1,c+1).filter(l).map(f);return{totalPages:c,resultsFrom:u,resultsTo:d,current:a,prev:h,next:p,first:y,last:m,pages:v}},[r,t,e==null?void 0:e.width])}function Ke(){const[e,r]=g.useState([]),[t,n]=g.useState([]);return g.useEffect(()=>{q.s(async o=>{const{products:i,segments:s}=await o.getSearchSessionParams();r(s??[]),n((i==null?void 0:i.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function He(){const{facets:e}=S(u=>{var d;return{facets:((d=u.response.products)==null?void 0:d.facets)??[]}}),{replaceFilter:r,toggleProductFilter:t}=k(),n=g.useCallback(u=>{const d=e==null?void 0:e.find(a=>a.type==="stats"&&a.field===u);if(d&&"min"in d&&"max"in d)return d},[e]),o=g.useCallback(u=>{var d;return((d=e==null?void 0:e.find(a=>a.field===u))==null?void 0:d.name)??u},[e]),i=g.useCallback(u=>"field"in u&&(u.value instanceof Array||u.range instanceof Array),[]),s=g.useCallback(u=>{var d;return{...u,range:(d=u.range)==null?void 0:d.map(a=>({gt:a.gt?Number(a.gt):a.gt,gte:a.gte?Number(a.gte):a.gte,lt:a.lt?Number(a.lt):a.lt,lte:a.lte?Number(a.lte):a.lte}))}},[]),c=g.useCallback(u=>(u.value??[]).map(a=>({value:a,field:u.field,name:o(u.field),filter:s(u),remove:()=>{t(u.field,a,!1)}})),[s,o,t]),l=g.useCallback(u=>(u.range??[]).map(a=>{var p,y;const f=a.gte??a.gt??((p=n(u.field))==null?void 0:p.min),h=a.lte??a.lt??((y=n(u.field))==null?void 0:y.max);if(f!==void 0&&h!==void 0)return{value:`${f} - ${h}`,field:u.field,name:o(u.field),filter:s(u),remove:()=>{r(u.field,void 0)}}}).filter(Boolean),[s,n,o,r]);return{selectFilters:i,toValueFilter:c,toRangeFilter:l}}function te(){const{filter:e}=S(c=>{var l;return{filter:((l=c.query.products)==null?void 0:l.filter)??[]}}),{updateSearch:r}=k(),{selectFilters:t,toValueFilter:n,toRangeFilter:o}=He(),i=g.useMemo(()=>e?e.filter(t).flatMap(c=>"value"in c?n(c):"range"in c?o(c):[]).filter(Boolean):[],[e,t,o,n]),s=g.useCallback(()=>{r({products:{filter:[]}})},[r]);return{filters:i,removeAll:s}}function R(e){if(typeof e=="number")return e;if(typeof e!="string")return;const r=Number(e);return isNaN(r)?void 0:r}function re(e){var a,f,h;const{replaceFilter:r}=k(),{query:t,products:n}=S(p=>({query:p.query,products:p.response.products})),o=(a=n==null?void 0:n.facets)==null?void 0:a.find(p=>p.id===e);if(!o)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const i=(h=(f=t.products)==null?void 0:f.filter)==null?void 0:h.find(p=>p.field===o.field),s=i!=null&&i.range?i.range[0]:void 0,c=typeof s=="object"&&("gte"in s||"lte"in s)?[R(s.gte),R(s.lte)]:[void 0,void 0],l="min"in o?Math.floor(o.min):0,u="max"in o?Math.ceil(o.max):0,d=([p,y])=>{const m=p!==void 0?Math.floor(p):void 0,v=y!==void 0?Math.ceil(y):void 0,P=m!==void 0,w=v!==void 0;(l===m||!P)&&(u===v||!w)?r(o.field,void 0):(l===m||!P)&&w?r(o.field,{lte:v.toString()}):(u===v||!w)&&P?r(o.field,{gte:m.toString()}):P&&w&&r(o.field,{gte:m.toString(),lte:v.toString()})};return{min:l,max:u,range:[c[0]??l,c[1]??u],updateRange:d}}function We(e,r){const{min:t,max:n,range:o,updateRange:i}=re(e),{filters:s}=te(),c=g.useMemo(()=>{var y;const a=s.find(m=>{var v;return(v=m==null?void 0:m.filter)==null?void 0:v.range});let f=null;if(a){const m=(y=a.filter.range)==null?void 0:y[0];f=[R(m==null?void 0:m.gte),R(m==null?void 0:m.lte)]}const h=[];let p=Math.floor(t/r)*r;for(;p<n;){const m=p+r,v=f&&f[0]===p&&f[1]===m;h.push({min:p,max:m,selected:v}),p=m}return h},[s,t,n,r]),l=a=>{i([a,o[1]])},u=a=>{i([o[0],a])},d=t!==o[0]||n!==o[1];return{min:t,max:n,range:o,updateRange:i,ranges:c,handleMinChange:l,handleMaxChange:u,isSelected:d}}function Ge(){const{products:e,keywords:r}=S(t=>t.response);return{products:e??{hits:[],total:0},keywords:r??{hits:[],total:0}}}function Je(){const e=S(t=>{var n;return(n=t.query.products)==null?void 0:n.filter});return g.useMemo(()=>e?e.reduce((t,n)=>t+(Array.isArray(n.value)?n.value.length:1),0):0,[e])}function x(e){return e&&!Number.isNaN(e)?e:0}function Ye(e,r){const{from:t,size:n,total:o}=S(u=>{var d,a,f,h,p;return{from:x(((d=u.query.products)==null?void 0:d.from)??0),size:x(((f=(a=u.response)==null?void 0:a.products)==null?void 0:f.size)??0),total:x(((p=(h=u.response)==null?void 0:h.products)==null?void 0:p.total)??0)}}),{updateSearch:i}=k(),s=t+n,c=[...e].reverse().filter(u=>u+r<o);return{from:t,to:s,total:o,size:n,sizeOptions:c,handleSizeChange:u=>{i({products:{size:u}})}}}function Xe(e,r){return e.length!==r.length?!1:e.every(t=>r.find(n=>t.field===n.field&&t.order===n.order))}function Ze(e){var i,s;const r=S(c=>c.query),{updateSearch:t}=k();return{activeSort:((i=e.find(c=>{var l;return Xe(c.value.sort,((l=r.products)==null?void 0:l.sort)||[])}))==null?void 0:i.id)??((s=e[0])==null?void 0:s.id),setSort:c=>{const l=e.find(u=>u.id===c);l&&t({products:{sort:l.value.sort}})}}}exports.AutocompletePageProvider=qe;exports.CategoryPageProvider=Ee;exports.InfiniteScroll=Fe;exports.InfiniteScrollWithLink=ee;exports.SearchInput=Ie;exports.SearchPageProvider=Ve;exports.SerpElement=_e;exports.StoreContext=M;exports.createExtendableStore=U;exports.createStore=I;exports.defaultState=K;exports.getNextPageQuery=X;exports.useActions=k;exports.useDecoratedSearchResults=$e;exports.useFacet=De;exports.useFacets=Be;exports.useLoadMore=E;exports.useNostoAppState=S;exports.usePagination=Ue;exports.usePersonalization=Ke;exports.useProductFilters=te;exports.useRange=re;exports.useRangeSelector=We;exports.useResponse=Ge;exports.useSelectedFiltersCount=Je;exports.useSizeOptions=Ye;exports.useSort=Ze;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("../utils/utils.cjs.js"),s=require("../InfiniteScrollWithObserver-DbErxedF.cjs"),x=require("preact"),F=require("../index.es-DlUp67LT.cjs"),m=require("preact/hooks");function z({pageSize:e}){const{loadMore:n}=s.useLoadMore(e);return s.u("button",{onClick:n,children:"More results"})}function R({children:e,loadMoreComponent:n,pageSize:t}){const{loading:o,query:r,response:a}=s.useNostoAppState(l=>s.pick(l,"loading","query","response")),i=!o&&s.hasMoreResults(r,a);return s.u(x.Fragment,{children:[e,i&&(n?s.u(n,{pageSize:t}):s.u(z,{pageSize:t}))]})}const T=!I.isBot()&&s.intersectionObserverSupported()?s.InfiniteScrollWithObserver:R;function E(e){return e.type==="input"}function L(e){return!!e&&typeof e=="object"&&"type"in e&&"props"in e}function N(e,n={depth:0}){const{children:t}=e;return x.toChildArray(t).map(o=>{if(!L(o))return o;const r=e.updateElement(o,n);return r===null?null:(r.props={...r.props,children:N({...e,children:r.props.children},{depth:n.depth+1})},r)})}function B({children:e,onSearchInput:n}){return N({children:e,updateElement:t=>(!E(t)||t.props.type!=="search"||(t.props={...t.props,onInput:o=>{o.target instanceof HTMLInputElement&&n(o.target)}}),t)})}const O="nosto:search:scrollPos";function j(){window.sessionStorage.setItem(O,window.scrollY.toString())}function D({children:e,hit:n,onClick:t}){const{pageType:o}=s.useConfig(),r=o==="autocomplete"?void 0:o;return N({children:e,updateElement:(a,i)=>(i.depth>0||(a.props={...a.props,onClick:l=>{n&&r&&F.s(p=>p.recordSearchClick(r,n)),j(),typeof t=="function"&&t(l)}}),a)})}function b(){m.useEffect(()=>{const e=window.setTimeout(()=>{console.error("Nosto client script has not loaded after 3 seconds.")},3e3);F.s(()=>{window.clearTimeout(e)})},[])}const k={defaultCurrency:"EUR",queryModifications:e=>e},V={...k};function W(e){return{pageType:"autocomplete",...V,...e}}function H({config:e,store:n,children:t}){const o=n??s.createStore();return b(),s.u(s.ConfigContext,{value:W(e),children:s.u(s.StoreContext,{value:o,children:t})})}const U={...k,persistentSearchCache:!1,preservePageScroll:!1};function _(e){return{pageType:"category",...U,...e}}function $({config:e,store:n,children:t}){const o=n??s.createStore();return b(),s.u(s.ConfigContext,{value:_(e),children:s.u(s.StoreContext,{value:o,children:t})})}const K={...k,persistentSearchCache:!1,preservePageScroll:!1};function Y(e={}){return{pageType:"serp",...K,...e}}function G({config:e,store:n,children:t}){const o=n??s.createStore();return b(),s.u(s.ConfigContext,{value:Y(e),children:s.u(s.StoreContext,{value:o,children:t})})}function J(e){const n=s.useNostoAppState(t=>t.response);return e&&Array.isArray(e)||e&&s.isPlainObject(e)?e:n}function Q(e){var i;const n=((i=e.data)==null?void 0:i.filter(l=>l.selected).length)??0,[t,o]=m.useState(n>0),{toggleProductFilter:r}=s.useActions();return{active:t,selectedFiltersCount:n,toggleActive:()=>{o(!t)},toggleProductFilter:r}}function X(){const{loading:e,facets:n}=s.useNostoAppState(t=>{var o,r;return{loading:t.loading,facets:((r=(o=t.response)==null?void 0:o.products)==null?void 0:r.facets)??[]}});return{loading:e,facets:n}}function Z(e,n){const t=n-e;return!isNaN(t)&&t>0?new Array(n-e).fill(void 0).map((o,r)=>r+e):[]}function ee(e){const{query:n,products:t}=s.useNostoAppState(o=>({query:o.query,products:o.response.products}));return m.useMemo(()=>{var A;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const o=((A=n.products)==null?void 0:A.from)??0,r=(e==null?void 0:e.width)??1/0,a=Math.max(Math.floor(r-1)/2,1),i=t.size>0?Math.floor(o/t.size)+1:1,l=t.size>0?Math.ceil(t.total/t.size):0,p=y=>y>=i-a&&y<=i+a,u=o+1,d=Math.min(o+t.total,t.total),c={from:o,page:i,current:!0},S=y=>({from:(y-1)*t.size,page:y,current:y===i}),h=i>1?S(i-1):void 0,f=i<l?S(i+1):void 0,C=a===1/0||i-a-1>1?S(1):void 0,g=a===1/0||i+a+1<l?S(l):void 0,v=Z(1,l+1).filter(p).map(S);return{totalPages:l,resultsFrom:u,resultsTo:d,current:c,prev:h,next:f,first:C,last:g,pages:v}},[n,t,e==null?void 0:e.width])}function te(){const[e,n]=m.useState([]),[t,o]=m.useState([]);return m.useEffect(()=>{F.s(async r=>{const{products:a,segments:i}=await r.getSearchSessionParams();n(i??[]),o((a==null?void 0:a.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function ne(){const{facets:e}=s.useNostoAppState(u=>{var d;return{facets:((d=u.response.products)==null?void 0:d.facets)??[]}}),{replaceFilter:n,toggleProductFilter:t}=s.useActions(),o=m.useCallback(u=>{const d=e==null?void 0:e.find(c=>c.type==="stats"&&c.field===u);if(d&&"min"in d&&"max"in d)return d},[e]),r=m.useCallback(u=>{var d;return((d=e==null?void 0:e.find(c=>c.field===u))==null?void 0:d.name)??u},[e]),a=m.useCallback(u=>"field"in u&&(u.value instanceof Array||u.range instanceof Array),[]),i=m.useCallback(u=>{var d;return{...u,range:(d=u.range)==null?void 0:d.map(c=>({gt:c.gt?Number(c.gt):c.gt,gte:c.gte?Number(c.gte):c.gte,lt:c.lt?Number(c.lt):c.lt,lte:c.lte?Number(c.lte):c.lte}))}},[]),l=m.useCallback(u=>(u.value??[]).map(c=>({value:c,field:u.field,name:r(u.field),filter:i(u),remove:()=>{t(u.field,c,!1)}})),[i,r,t]),p=m.useCallback(u=>(u.range??[]).map(c=>{var f,C;const S=c.gte??c.gt??((f=o(u.field))==null?void 0:f.min),h=c.lte??c.lt??((C=o(u.field))==null?void 0:C.max);if(S!==void 0&&h!==void 0)return{value:`${S} - ${h}`,field:u.field,name:r(u.field),filter:i(u),remove:()=>{n(u.field,void 0)}}}).filter(Boolean),[i,o,r,n]);return{selectFilters:a,toValueFilter:l,toRangeFilter:p}}function q(){const{filter:e}=s.useNostoAppState(l=>{var p;return{filter:((p=l.query.products)==null?void 0:p.filter)??[]}}),{updateSearch:n}=s.useActions(),{selectFilters:t,toValueFilter:o,toRangeFilter:r}=ne(),a=m.useMemo(()=>e?e.filter(t).flatMap(l=>"value"in l?o(l):"range"in l?r(l):[]).filter(Boolean):[],[e,t,r,o]),i=m.useCallback(()=>{n({products:{filter:[]}})},[n]);return{filters:a,removeAll:i}}function P(e){if(typeof e=="number")return e;if(typeof e!="string")return;const n=Number(e);return isNaN(n)?void 0:n}function w(e){var c,S,h;const{replaceFilter:n}=s.useActions(),{query:t,products:o}=s.useNostoAppState(f=>({query:f.query,products:f.response.products})),r=(c=o==null?void 0:o.facets)==null?void 0:c.find(f=>f.id===e);if(!r)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const a=(h=(S=t.products)==null?void 0:S.filter)==null?void 0:h.find(f=>f.field===r.field),i=a!=null&&a.range?a.range[0]:void 0,l=typeof i=="object"&&("gte"in i||"lte"in i)?[P(i.gte),P(i.lte)]:[void 0,void 0],p="min"in r?Math.floor(r.min):0,u="max"in r?Math.ceil(r.max):0,d=([f,C])=>{const g=f!==void 0?Math.floor(f):void 0,v=C!==void 0?Math.ceil(C):void 0,A=g!==void 0,y=v!==void 0;(p===g||!A)&&(u===v||!y)?n(r.field,void 0):(p===g||!A)&&y?n(r.field,{lte:v.toString()}):(u===v||!y)&&A?n(r.field,{gte:g.toString()}):A&&y&&n(r.field,{gte:g.toString(),lte:v.toString()})};return{min:p,max:u,range:[l[0]??p,l[1]??u],updateRange:d}}function oe(e,n){const{min:t,max:o,range:r,updateRange:a}=w(e),{filters:i}=q(),l=m.useMemo(()=>{var C;const c=i.find(g=>{var v;return(v=g==null?void 0:g.filter)==null?void 0:v.range});let S=null;if(c){const g=(C=c.filter.range)==null?void 0:C[0];S=[P(g==null?void 0:g.gte),P(g==null?void 0:g.lte)]}const h=[];let f=Math.floor(t/n)*n;for(;f<o;){const g=f+n,v=S&&S[0]===f&&S[1]===g;h.push({min:f,max:g,selected:v}),f=g}return h},[i,t,o,n]),p=c=>{a([c,r[1]])},u=c=>{a([r[0],c])},d=t!==r[0]||o!==r[1];return{min:t,max:o,range:r,updateRange:a,ranges:l,handleMinChange:p,handleMaxChange:u,isSelected:d}}function re(){const{products:e,keywords:n}=s.useNostoAppState(t=>t.response);return{products:e??{hits:[],total:0},keywords:n??{hits:[],total:0}}}function se(){const e=s.useNostoAppState(t=>{var o;return(o=t.query.products)==null?void 0:o.filter});return m.useMemo(()=>e?e.reduce((t,o)=>t+(Array.isArray(o.value)?o.value.length:1),0):0,[e])}function M(e){return e&&!Number.isNaN(e)?e:0}function ue(e,n){const{from:t,size:o,total:r}=s.useNostoAppState(u=>{var d,c,S,h,f;return{from:M(((d=u.query.products)==null?void 0:d.from)??0),size:M(((S=(c=u.response)==null?void 0:c.products)==null?void 0:S.size)??0),total:M(((f=(h=u.response)==null?void 0:h.products)==null?void 0:f.total)??0)}}),{updateSearch:a}=s.useActions(),i=t+o,l=[...e].reverse().filter(u=>u+n<r);return{from:t,to:i,total:r,size:o,sizeOptions:l,handleSizeChange:u=>{a({products:{size:u}})}}}function ie(e,n){return e.length!==n.length?!1:e.every(t=>n.find(o=>t.field===o.field&&t.order===o.order))}function ce(e){var a,i;const n=s.useNostoAppState(l=>l.query),{updateSearch:t}=s.useActions();return{activeSort:((a=e.find(l=>{var p;return ie(l.value.sort,((p=n.products)==null?void 0:p.sort)||[])}))==null?void 0:a.id)??((i=e[0])==null?void 0:i.id),setSort:l=>{const p=e.find(u=>u.id===l);p&&t({products:{sort:p.value.sort}})}}}exports.StoreContext=s.StoreContext;exports.createExtendableStore=s.createExtendableStore;exports.createStore=s.createStore;exports.defaultState=s.defaultState;exports.useActions=s.useActions;exports.useLoadMore=s.useLoadMore;exports.useNostoAppState=s.useNostoAppState;exports.AutocompletePageProvider=H;exports.CategoryPageProvider=$;exports.InfiniteScroll=T;exports.InfiniteScrollWithLink=R;exports.SearchInput=B;exports.SearchPageProvider=G;exports.SerpElement=D;exports.useDecoratedSearchResults=J;exports.useFacet=Q;exports.useFacets=X;exports.usePagination=ee;exports.usePersonalization=te;exports.useProductFilters=q;exports.useRange=w;exports.useRangeSelector=oe;exports.useResponse=re;exports.useSelectedFiltersCount=se;exports.useSizeOptions=ue;exports.useSort=ce;
@@ -13,7 +13,6 @@ export { useActions } from './src/hooks/useActions';
13
13
  export { useDecoratedSearchResults } from './src/hooks/useDecoratedSearchResults';
14
14
  export { useFacet } from './src/hooks/useFacet';
15
15
  export { useFacets } from './src/hooks/useFacets';
16
- export { getNextPageQuery } from './src/hooks/useLoadMore/getNextPageQuery';
17
16
  export { useLoadMore } from './src/hooks/useLoadMore/useLoadMore';
18
17
  export { useNostoAppState } from './src/hooks/useNostoAppState';
19
18
  export { type Page, usePagination } from './src/hooks/usePagination';