@nosto/search-js 1.7.0 → 1.7.2

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("preact"),p=require("preact/hooks"),re=require("../search-BVJZK90N.cjs"),q=require("../index.es-DlUp67LT.cjs");var ne=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\btime/|\\||^<|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\(compatible;?(?:\\s\\w+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|adscanner/|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|cookiehubscan|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|exaleadcloudview|feed|firephp|functionize|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|infrawatch|insight|inspect|iplabel|ips-agent|java(?!;)|jsjcw_scanner|library|linkcheck|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scanner\\.|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|zgrab",oe=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function se(){if(z instanceof RegExp)return z;try{z=new RegExp(ne,"i")}catch{z=oe}return z}function ae(e){return!!e&&se().test(e)}function Q(){return ae(navigator.userAgent)}var ce=0;function w(e,r,t,n,o,c){r||(r={});var s,a,l=r;if("ref"in l)for(a in l={},r)a=="ref"?s=r[a]:l[a]=r[a];var i={type:e,props:l,key:t,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--ce,__i:-1,__u:0,__source:o,__self:c};if(typeof e=="function"&&(s=e.defaultProps))for(a in s)l[a]===void 0&&(l[a]=s[a]);return P.options.vnode&&P.options.vnode(i),i}const L=e=>String(e)==="[object Object]";function F(e){if(!L(e))return!1;const r=e.constructor;if(r===void 0)return!0;const t=r.prototype;return!(!L(t)||!t.hasOwnProperty("isPrototypeOf"))}function T(...e){return e.reduce((r,t)=>E(r,t))}function B(...e){return e.reduce((r,t)=>E(r,t))}function E(e,r){return F(e)&&F(r)?Object.entries(r).reduce((t,[n,o])=>(t[n]=E(t[n],o),t),{...e}):F(e)?e:r}function R(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)=>R(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])=>R(o,r[n]))}return!1}function K(e,r={}){const t=new Map;let n=B(e,r??{});const o=B(e,r);function c(u){n=u(n);for(const f of t.values())f(n)}function s(u){c(f=>({...f,...u}))}function a(){return n}function l(){return structuredClone(o)}function i(u,f){let m;t.set(f,g=>{const y=u(g);R(y,m)||(m=y,f(y))})}function d(u){t.delete(u)}return{updateState:s,getState:a,getInitialState:l,onChange:i,clearOnChange:d}}const H={loading:!0,query:{query:""},response:{query:""},initialized:!1};function A(e={}){return K(H,e)}const M=P.createContext(A());function v(e=ie){const r=p.useContext(M),[t,n]=p.useState(e(r.getState()));return r.onChange(e,n),p.useEffect(()=>()=>r.clearOnChange(n),[r]),t}const ie=e=>e;function W(e,...r){return r.reduce((t,n)=>(t[n]=e[n],t),{})}const I=P.createContext(null),G=()=>{const e=p.useContext(I);if(!e)throw new Error("useConfig must be used within a ConfigProvider");return e};function ue(e){return Array.from(new Set(e))}function le(e,r){return{...r,products:{facets:e==="autocomplete"?void 0:["*"],fields:de,...r.products},...r.keywords?{keywords:{...r.keywords,fields:ue([...fe,...r.keywords.fields??[]]),highlight:r.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const de=["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"],fe=["keyword","_redirect"];function pe(...e){if(!e.every(r=>r==null))return e.filter(r=>Array.isArray(r)).reduce((r,t)=>r.concat(t),[])}const J="nosto.search.";function ge(e){var t;const r=`${J}${e}`;(t=window.performance)==null||t.mark(`${r}.start`)}function he(e){var t,n;const r=`${J}${e}`;(t=window.performance)==null||t.mark(`${r}.end`),(n=window.performance)==null||n.measure(r,`${r}.start`,`${r}.end`)}function _(e){return ge(e),()=>he(e)}function me(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 ye(e,r){try{const t=r.getItem(e);if(t)return JSON.parse(t)}catch(t){console.warn(t)}}function ve(e,r){me(e,r,sessionStorage)}function Se(e){return ye(e,sessionStorage)}const Y="nosto:search:searchResult";function we(e,r,t){if(!e)return;ve(Y,{query:r,result:t})}function be(e,r){if(!e)return null;const t=Se(Y);if(!t||!ke(t))return null;const n=U(t.query);return R(U(r),n)?t.result:null}function U(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 ke(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function X(e,r,t){var i,d,u;const n=_("newSearch"),o=e.config.pageType,c=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:c,loading:!0,initialized:!0});const a=o!=="autocomplete"&&e.config.persistentSearchCache,l=e.config.queryModifications({...c,products:{...c.products,filter:pe((d=(i=e.store.getInitialState().query)==null?void 0:i.products)==null?void 0:d.filter,(u=r.products)==null?void 0:u.filter)}},o);try{let f;const m=be(a,l);if(m)f=m;else{const g=le(o,l);f=await re.search(g,s),we(a,l,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}n()}async function O(e,r,t){const n=_("updateSearch"),o=T(e.store.getState().query,{products:{from:0}},r);await X(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,c=t!==void 0?[{field:r,[typeof t=="object"?"range":"value"]:[t]}]:[];await O(e,{products:{filter:[...(o==null?void 0:o.filter(a=>a.field!==r))??[],...c]}}),n()}async function Pe(e,r,t,n){var l,i;const o=_("toggleProductFilter"),c=(l=e.store.getState().query.products)==null?void 0:l.filter,s=c==null?void 0:c.find(d=>d.value instanceof Array&&d.field===r),a=s!=null&&s.value?{...s,value:[...s.value.filter(d=>!R(d,t)),...n?[t]:[]]}:n?{field:r,value:[t]}:void 0;await O(e,{products:{filter:[...(c==null?void 0:c.filter(d=>d!==s))??[],...(i=a==null?void 0:a.value)!=null&&i.length?[a]:[]]}}),o()}function k(){const e=G(),r=p.useContext(M),t=p.useMemo(()=>({config:e,store:r}),[e,r]),n=p.useCallback((a,l)=>X(t,a,l),[t]),o=p.useCallback((a,l)=>O(t,a,l),[t]),c=p.useCallback((a,l,i)=>Pe(t,a,l,i),[t]),s=p.useCallback((a,l)=>Ce(t,a,l),[t]);return{newSearch:n,updateSearch:o,toggleProductFilter:c,replaceFilter:s}}function Fe({from:e,size:r,pageSize:t}){return Q()?{products:{from:e+t}}:{products:{size:r+t}}}function j(e=24){const{from:r,size:t}=v(c=>{var s,a;return{from:((s=c.query.products)==null?void 0:s.from)??0,size:((a=c.query.products)==null?void 0:a.size)??0}}),{updateSearch:n}=k();return{loadMore:p.useCallback(async()=>{await n(Fe({from:r,size:t,pageSize:e}))},[r,t,e,n])}}function Me({pageSize:e}){const{loadMore:r}=j(e);return w("button",{onClick:r,children:"More results"})}function Z(e,r){var c,s,a;const t=((c=r.products)==null?void 0:c.total)??0,n=((s=e.products)==null?void 0:s.from)??0,o=((a=e.products)==null?void 0:a.size)??0;return t>0&&t>n+o}function ze(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function Re({children:e,loadMoreComponent:r,pageSize:t}){const{loading:n,query:o,response:c}=v(a=>W(a,"loading","query","response")),s=!n&&Z(o,c);return w(P.Fragment,{children:[e,s&&(r?w(r,{pageSize:t}):w(Me,{pageSize:t}))]})}function Ae({children:e,pageSize:r}){const t=p.useRef(null),{query:n,response:o}=v(s=>W(s,"query","response")),{loadMore:c}=j(r);return p.useEffect(()=>{let s,a;return Z(n,o)&&(s=t.current,a=new IntersectionObserver(l=>{const i=l[0];i!=null&&i.isIntersecting&&c()}),s&&a.observe(s)),()=>{s&&a.unobserve(s)}},[o]),w(P.Fragment,{children:[e,w("div",{ref:t,style:{height:"1px"}})]})}const xe=!Q()&&ze()?Ae:Re;function Ie(e){return e.type==="input"}function _e(e){return!!e&&typeof e=="object"&&"type"in e&&"props"in e}function $(e,r={depth:0}){const{children:t}=e;return P.toChildArray(t).map(n=>{if(!_e(n))return n;const o=e.updateElement(n,r);return o===null?null:(o.props={...o.props,children:$({...e,children:o.props.children},{depth:r.depth+1})},o)})}function Ne({children:e,onSearchInput:r}){return $({children:e,updateElement:t=>(!Ie(t)||t.props.type!=="search"||(t.props={...t.props,onInput:n=>{n.target instanceof HTMLInputElement&&r(n.target)}}),t)})}const Te="nosto:search:scrollPos";function qe(){window.sessionStorage.setItem(Te,window.scrollY.toString())}function Ee({children:e,hit:r,onClick:t}){const{pageType:n}=G(),o=n==="autocomplete"?void 0:n;return $({children:e,updateElement:(c,s)=>(s.depth>0||(c.props={...c.props,onClick:a=>{r&&o&&q.s(l=>l.recordSearchClick(o,r)),qe(),typeof t=="function"&&t(a)}}),c)})}function V(){p.useEffect(()=>{const e=window.setTimeout(()=>{console.error("Nosto client script has not loaded after 3 seconds.")},3e3);q.s(()=>{window.clearTimeout(e)})},[])}const D={defaultCurrency:"EUR",queryModifications:e=>e},Oe={...D};function je(e){return{pageType:"autocomplete",...Oe,...e}}function $e({config:e,store:r,children:t}){const n=r??A();return V(),w(I,{value:je(e),children:w(M,{value:n,children:t})})}const Ve={...D,persistentSearchCache:!1,preservePageScroll:!1};function De(e){return{pageType:"category",...Ve,...e}}function Le({config:e,store:r,children:t}){const n=r??A();return V(),w(I,{value:De(e),children:w(M,{value:n,children:t})})}const Be={...D,persistentSearchCache:!1,preservePageScroll:!1};function Ue(e={}){return{pageType:"serp",...Be,...e}}function Qe({config:e,store:r,children:t}){const n=r??A();return V(),w(I,{value:Ue(e),children:w(M,{value:n,children:t})})}function Ke(e){const r=v(t=>t.response);return e&&Array.isArray(e)||e&&F(e)?e:r}function He(e){var s;const r=((s=e.data)==null?void 0:s.filter(a=>a.selected).length)??0,[t,n]=p.useState(r>0),{toggleProductFilter:o}=k();return{active:t,selectedFiltersCount:r,toggleActive:()=>{n(!t)},toggleProductFilter:o}}function We(){const{loading:e,facets:r}=v(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 Ge(e,r){const t=r-e;return!isNaN(t)&&t>0?new Array(r-e).fill(void 0).map((n,o)=>o+e):[]}function Je(e){const{query:r,products:t}=v(n=>({query:n.query,products:n.response.products}));return p.useMemo(()=>{var C;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const n=((C=r.products)==null?void 0:C.from)??0,o=(e==null?void 0:e.width)??1/0,c=Math.max(Math.floor(o-1)/2,1),s=t.size>0?Math.floor(n/t.size)+1:1,a=t.size>0?Math.ceil(t.total/t.size):0,l=b=>b>=s-c&&b<=s+c,i=n+1,d=Math.min(n+t.total,t.total),u={from:n,page:s,current:!0},f=b=>({from:(b-1)*t.size,page:b,current:b===s}),m=s>1?f(s-1):void 0,g=s<a?f(s+1):void 0,y=c===1/0||s-c-1>1?f(1):void 0,h=c===1/0||s+c+1<a?f(a):void 0,S=Ge(1,a+1).filter(l).map(f);return{totalPages:a,resultsFrom:i,resultsTo:d,current:u,prev:m,next:g,first:y,last:h,pages:S}},[r,t,e==null?void 0:e.width])}function Ye(){const[e,r]=p.useState([]),[t,n]=p.useState([]);return p.useEffect(()=>{q.s(async o=>{const{products:c,segments:s}=await o.getSearchSessionParams();r(s??[]),n((c==null?void 0:c.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function Xe(){const{facets:e}=v(i=>{var d;return{facets:((d=i.response.products)==null?void 0:d.facets)??[]}}),{replaceFilter:r,toggleProductFilter:t}=k(),n=p.useCallback(i=>{const d=e==null?void 0:e.find(u=>u.type==="stats"&&u.field===i);if(d&&"min"in d&&"max"in d)return d},[e]),o=p.useCallback(i=>{var d;return((d=e==null?void 0:e.find(u=>u.field===i))==null?void 0:d.name)??i},[e]),c=p.useCallback(i=>"field"in i&&(i.value instanceof Array||i.range instanceof Array),[]),s=p.useCallback(i=>{var d;return{...i,range:(d=i.range)==null?void 0:d.map(u=>({gt:u.gt?Number(u.gt):u.gt,gte:u.gte?Number(u.gte):u.gte,lt:u.lt?Number(u.lt):u.lt,lte:u.lte?Number(u.lte):u.lte}))}},[]),a=p.useCallback(i=>(i.value??[]).map(u=>({value:u,field:i.field,name:o(i.field),filter:s(i),remove:()=>{t(i.field,u,!1)}})),[s,o,t]),l=p.useCallback(i=>(i.range??[]).map(u=>{var g,y;const f=u.gte??u.gt??((g=n(i.field))==null?void 0:g.min),m=u.lte??u.lt??((y=n(i.field))==null?void 0:y.max);if(f!==void 0&&m!==void 0)return{value:`${f} - ${m}`,field:i.field,name:o(i.field),filter:s(i),remove:()=>{r(i.field,void 0)}}}).filter(Boolean),[s,n,o,r]);return{selectFilters:c,toValueFilter:a,toRangeFilter:l}}function ee(){const{filter:e}=v(a=>{var l;return{filter:((l=a.query.products)==null?void 0:l.filter)??[]}}),{updateSearch:r}=k(),{selectFilters:t,toValueFilter:n,toRangeFilter:o}=Xe(),c=p.useMemo(()=>e?e.filter(t).flatMap(a=>"value"in a?n(a):"range"in a?o(a):[]).filter(Boolean):[],[e,t,o,n]),s=p.useCallback(()=>{r({products:{filter:[]}})},[r]);return{filters:c,removeAll:s}}function x(e){if(typeof e=="number")return e;if(typeof e!="string")return;const r=Number(e);return isNaN(r)?void 0:r}function te(e){var u,f,m;const{replaceFilter:r}=k(),{query:t,products:n}=v(g=>({query:g.query,products:g.response.products})),o=(u=n==null?void 0:n.facets)==null?void 0:u.find(g=>g.id===e);if(!o)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const c=(m=(f=t.products)==null?void 0:f.filter)==null?void 0:m.find(g=>g.field===o.field),s=c!=null&&c.range?c.range[0]:void 0,a=typeof s=="object"&&("gte"in s||"lte"in s)?[x(s.gte),x(s.lte)]:[void 0,void 0],l="min"in o?Math.floor(o.min):0,i="max"in o?Math.ceil(o.max):0,d=([g,y])=>{const h=g!==void 0?Math.floor(g):void 0,S=y!==void 0?Math.ceil(y):void 0,C=h!==void 0,b=S!==void 0;(l===h||!C)&&(i===S||!b)?r(o.field,void 0):(l===h||!C)&&b?r(o.field,{lte:S.toString()}):(i===S||!b)&&C?r(o.field,{gte:h.toString()}):C&&b&&r(o.field,{gte:h.toString(),lte:S.toString()})};return{min:l,max:i,range:[a[0]??l,a[1]??i],updateRange:d}}function Ze(e,r){const{min:t,max:n,range:o,updateRange:c}=te(e),{filters:s}=ee(),a=p.useMemo(()=>{var y;const u=s.find(h=>{var S;return(S=h==null?void 0:h.filter)==null?void 0:S.range});let f=null;if(u){const h=(y=u.filter.range)==null?void 0:y[0];f=[x(h==null?void 0:h.gte),x(h==null?void 0:h.lte)]}const m=[];let g=Math.floor(t/r)*r;for(;g<n;){const h=g+r,S=f&&f[0]===g&&f[1]===h;m.push({min:g,max:h,selected:S}),g=h}return m},[s,t,n,r]),l=u=>{c([u,o[1]])},i=u=>{c([o[0],u])},d=t!==o[0]||n!==o[1];return{min:t,max:n,range:o,updateRange:c,ranges:a,handleMinChange:l,handleMaxChange:i,isSelected:d}}function et(){const{products:e,keywords:r}=v(t=>t.response);return{products:e??{hits:[],total:0},keywords:r??{hits:[],total:0}}}function tt(){const e=v(t=>{var n;return(n=t.query.products)==null?void 0:n.filter});return p.useMemo(()=>e?e.reduce((t,n)=>t+(Array.isArray(n.value)?n.value.length:1),0):0,[e])}function N(e){return e&&!Number.isNaN(e)?e:0}function rt(e,r){const{from:t,size:n,total:o}=v(i=>{var d,u,f,m,g;return{from:N(((d=i.query.products)==null?void 0:d.from)??0),size:N(((f=(u=i.response)==null?void 0:u.products)==null?void 0:f.size)??0),total:N(((g=(m=i.response)==null?void 0:m.products)==null?void 0:g.total)??0)}}),{updateSearch:c}=k(),s=t+n,a=[...e].reverse().filter(i=>i+r<o);return{from:t,to:s,total:o,size:n,sizeOptions:a,handleSizeChange:i=>{c({products:{size:i}})}}}function nt(e,r){return e.length!==r.length?!1:e.every(t=>r.find(n=>t.field===n.field&&t.order===n.order))}function ot(e){var c,s;const r=v(a=>a.query),{updateSearch:t}=k();return{activeSort:((c=e.find(a=>{var l;return nt(a.value.sort,((l=r.products)==null?void 0:l.sort)||[])}))==null?void 0:c.id)??((s=e[0])==null?void 0:s.id),setSort:a=>{const l=e.find(i=>i.id===a);l&&t({products:{sort:l.value.sort}})}}}exports.AutocompletePageProvider=$e;exports.CategoryPageProvider=Le;exports.InfiniteScroll=xe;exports.SearchInput=Ne;exports.SearchPageProvider=Qe;exports.SerpElement=Ee;exports.StoreContext=M;exports.createExtendableStore=K;exports.createStore=A;exports.defaultState=H;exports.useActions=k;exports.useDecoratedSearchResults=Ke;exports.useFacet=He;exports.useFacets=We;exports.useLoadMore=j;exports.useNostoAppState=v;exports.usePagination=Je;exports.usePersonalization=Ye;exports.useProductFilters=ee;exports.useRange=te;exports.useRangeSelector=Ze;exports.useResponse=et;exports.useSelectedFiltersCount=tt;exports.useSizeOptions=rt;exports.useSort=ot;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const P=require("preact"),g=require("preact/hooks"),oe=require("../search-BVJZK90N.cjs"),E=require("../index.es-DlUp67LT.cjs");var se=" daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\btime/|\\||^<|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\(compatible;?(?:\\s\\w+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|adscanner/|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|cookiehubscan|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|exaleadcloudview|feed|firephp|functionize|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|infrawatch|insight|inspect|iplabel|ips-agent|java(?!;)|jsjcw_scanner|library|linkcheck|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scanner\\.|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|zgrab",ae=/bot|crawl|http|lighthouse|scan|search|spider/i,z;function ce(){if(z instanceof RegExp)return z;try{z=new RegExp(se,"i")}catch{z=ae}return z}function ie(e){return!!e&&ce().test(e)}function U(){return ie(navigator.userAgent)}var ue=0;function w(e,r,t,n,o,c){r||(r={});var s,a,l=r;if("ref"in l)for(a in l={},r)a=="ref"?s=r[a]:l[a]=r[a];var i={type:e,props:l,key:t,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--ue,__i:-1,__u:0,__source:o,__self:c};if(typeof e=="function"&&(s=e.defaultProps))for(a in s)l[a]===void 0&&(l[a]=s[a]);return P.options.vnode&&P.options.vnode(i),i}const D=e=>String(e)==="[object Object]";function F(e){if(!D(e))return!1;const r=e.constructor;if(r===void 0)return!0;const t=r.prototype;return!(!D(t)||!t.hasOwnProperty("isPrototypeOf"))}function T(...e){return e.reduce((r,t)=>O(r,t))}function B(...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 R(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)=>R(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])=>R(o,r[n]))}return!1}function K(e,r={}){const t=new Map;let n=B(e,r??{});const o=B(e,r);function c(u){n=u(n);for(const f of t.values())f(n)}function s(u){c(f=>({...f,...u}))}function a(){return n}function l(){return structuredClone(o)}function i(u,f){let m;t.set(f,p=>{const y=u(p);R(y,m)||(m=y,f(y))})}function d(u){t.delete(u)}return{updateState:s,getState:a,getInitialState:l,onChange:i,clearOnChange:d}}const H={loading:!0,query:{},response:{},initialized:!1};function x(e={}){return K(H,e)}const M=P.createContext(x());function S(e=le){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 le=e=>e;function W(e,...r){return r.reduce((t,n)=>(t[n]=e[n],t),{})}const I=P.createContext(null),G=()=>{const e=g.useContext(I);if(!e)throw new Error("useConfig must be used within a ConfigProvider");return e};function de(e){return Array.from(new Set(e))}function fe(e,r){return{...r,products:{facets:e==="autocomplete"?void 0:["*"],fields:ge,...r.products},...r.keywords?{keywords:{...r.keywords,fields:de([...pe,...r.keywords.fields??[]]),highlight:r.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const ge=["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"],pe=["keyword","_redirect"];function he(...e){if(!e.every(r=>r==null))return e.filter(r=>Array.isArray(r)).reduce((r,t)=>r.concat(t),[])}const J="nosto.search.";function me(e){var t;const r=`${J}${e}`;(t=window.performance)==null||t.mark(`${r}.start`)}function ye(e){var t,n;const r=`${J}${e}`;(t=window.performance)==null||t.mark(`${r}.end`),(n=window.performance)==null||n.measure(r,`${r}.start`,`${r}.end`)}function _(e){return me(e),()=>ye(e)}function Se(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 ve(e,r){try{const t=r.getItem(e);if(t)return JSON.parse(t)}catch(t){console.warn(t)}}function we(e,r){Se(e,r,sessionStorage)}function be(e){return ve(e,sessionStorage)}const Y="nosto:search:searchResult";function ke(e,r,t){if(!e)return;we(Y,{query:r,result:t})}function Ce(e,r){if(!e)return null;const t=be(Y);if(!t||!Pe(t))return null;const n=Q(t.query);return R(Q(r),n)?t.result:null}function Q(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 Pe(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function X(e,r,t){var i,d,u;const n=_("newSearch"),o=e.config.pageType,c=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:c,loading:!0,initialized:!0});const a=o!=="autocomplete"&&e.config.persistentSearchCache,l=e.config.queryModifications({...c,products:{...c.products,filter:he((d=(i=e.store.getInitialState().query)==null?void 0:i.products)==null?void 0:d.filter,(u=r.products)==null?void 0:u.filter)}},o);try{let f;const m=Ce(a,l);if(m)f=m;else{const p=fe(o,l);f=await oe.search(p,s),ke(a,l,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}n()}async function q(e,r,t){const n=_("updateSearch"),o=T(e.store.getState().query,{products:{from:0}},r);await X(e,o,t),n()}async function Fe(e,r,t){var s;const n=_("replaceFilter"),o=(s=e.store.getState().query.products)==null?void 0:s.filter,c=t!==void 0?[{field:r,[typeof t=="object"?"range":"value"]:[t]}]:[];await q(e,{products:{filter:[...(o==null?void 0:o.filter(a=>a.field!==r))??[],...c]}}),n()}async function Me(e,r,t,n){var l,i;const o=_("toggleProductFilter"),c=(l=e.store.getState().query.products)==null?void 0:l.filter,s=c==null?void 0:c.find(d=>d.value instanceof Array&&d.field===r),a=s!=null&&s.value?{...s,value:[...s.value.filter(d=>!R(d,t)),...n?[t]:[]]}:n?{field:r,value:[t]}:void 0;await q(e,{products:{filter:[...(c==null?void 0:c.filter(d=>d!==s))??[],...(i=a==null?void 0:a.value)!=null&&i.length?[a]:[]]}}),o()}function k(){const e=G(),r=g.useContext(M),t=g.useMemo(()=>({config:e,store:r}),[e,r]),n=g.useCallback((a,l)=>X(t,a,l),[t]),o=g.useCallback((a,l)=>q(t,a,l),[t]),c=g.useCallback((a,l,i)=>Me(t,a,l,i),[t]),s=g.useCallback((a,l)=>Fe(t,a,l),[t]);return{newSearch:n,updateSearch:o,toggleProductFilter:c,replaceFilter:s}}function Z({from:e,size:r,pageSize:t}){return U()?{products:{from:e+t}}:{products:{size:r+t}}}function j(e=24){const{from:r,size:t}=S(c=>{var s,a;return{from:((s=c.query.products)==null?void 0:s.from)??0,size:((a=c.query.products)==null?void 0:a.size)??0}}),{updateSearch:n}=k();return{loadMore:g.useCallback(async()=>{await n(Z({from:r,size:t,pageSize:e}))},[r,t,e,n])}}function ze({pageSize:e}){const{loadMore:r}=j(e);return w("button",{onClick:r,children:"More results"})}function ee(e,r){var c,s,a;const t=((c=r.products)==null?void 0:c.total)??0,n=((s=e.products)==null?void 0:s.from)??0,o=((a=e.products)==null?void 0:a.size)??0;return t>0&&t>n+o}function Re(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function te({children:e,loadMoreComponent:r,pageSize:t}){const{loading:n,query:o,response:c}=S(a=>W(a,"loading","query","response")),s=!n&&ee(o,c);return w(P.Fragment,{children:[e,s&&(r?w(r,{pageSize:t}):w(ze,{pageSize:t}))]})}function xe({children:e,pageSize:r}){const t=g.useRef(null),{query:n,response:o}=S(s=>W(s,"query","response")),{loadMore:c}=j(r);return g.useEffect(()=>{let s,a;return ee(n,o)&&(s=t.current,a=new IntersectionObserver(l=>{const i=l[0];i!=null&&i.isIntersecting&&c()}),s&&a.observe(s)),()=>{s&&a.unobserve(s)}},[o]),w(P.Fragment,{children:[e,w("div",{ref:t,style:{height:"1px"}})]})}const Ae=!U()&&Re()?xe:te;function Ie(e){return e.type==="input"}function _e(e){return!!e&&typeof e=="object"&&"type"in e&&"props"in e}function $(e,r={depth:0}){const{children:t}=e;return P.toChildArray(t).map(n=>{if(!_e(n))return n;const o=e.updateElement(n,r);return o===null?null:(o.props={...o.props,children:$({...e,children:o.props.children},{depth:r.depth+1})},o)})}function Ne({children:e,onSearchInput:r}){return $({children:e,updateElement:t=>(!Ie(t)||t.props.type!=="search"||(t.props={...t.props,onInput:n=>{n.target instanceof HTMLInputElement&&r(n.target)}}),t)})}const Te="nosto:search:scrollPos";function Ee(){window.sessionStorage.setItem(Te,window.scrollY.toString())}function Oe({children:e,hit:r,onClick:t}){const{pageType:n}=G(),o=n==="autocomplete"?void 0:n;return $({children:e,updateElement:(c,s)=>(s.depth>0||(c.props={...c.props,onClick:a=>{r&&o&&E.s(l=>l.recordSearchClick(o,r)),Ee(),typeof t=="function"&&t(a)}}),c)})}function L(){g.useEffect(()=>{const e=window.setTimeout(()=>{console.error("Nosto client script has not loaded after 3 seconds.")},3e3);E.s(()=>{window.clearTimeout(e)})},[])}const V={defaultCurrency:"EUR",queryModifications:e=>e},qe={...V};function je(e){return{pageType:"autocomplete",...qe,...e}}function $e({config:e,store:r,children:t}){const n=r??x();return L(),w(I,{value:je(e),children:w(M,{value:n,children:t})})}const Le={...V,persistentSearchCache:!1,preservePageScroll:!1};function Ve(e){return{pageType:"category",...Le,...e}}function De({config:e,store:r,children:t}){const n=r??x();return L(),w(I,{value:Ve(e),children:w(M,{value:n,children:t})})}const Be={...V,persistentSearchCache:!1,preservePageScroll:!1};function Qe(e={}){return{pageType:"serp",...Be,...e}}function Ue({config:e,store:r,children:t}){const n=r??x();return L(),w(I,{value:Qe(e),children:w(M,{value:n,children:t})})}function Ke(e){const r=S(t=>t.response);return e&&Array.isArray(e)||e&&F(e)?e:r}function He(e){var s;const r=((s=e.data)==null?void 0:s.filter(a=>a.selected).length)??0,[t,n]=g.useState(r>0),{toggleProductFilter:o}=k();return{active:t,selectedFiltersCount:r,toggleActive:()=>{n(!t)},toggleProductFilter:o}}function We(){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 Ge(e,r){const t=r-e;return!isNaN(t)&&t>0?new Array(r-e).fill(void 0).map((n,o)=>o+e):[]}function Je(e){const{query:r,products:t}=S(n=>({query:n.query,products:n.response.products}));return g.useMemo(()=>{var C;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const n=((C=r.products)==null?void 0:C.from)??0,o=(e==null?void 0:e.width)??1/0,c=Math.max(Math.floor(o-1)/2,1),s=t.size>0?Math.floor(n/t.size)+1:1,a=t.size>0?Math.ceil(t.total/t.size):0,l=b=>b>=s-c&&b<=s+c,i=n+1,d=Math.min(n+t.total,t.total),u={from:n,page:s,current:!0},f=b=>({from:(b-1)*t.size,page:b,current:b===s}),m=s>1?f(s-1):void 0,p=s<a?f(s+1):void 0,y=c===1/0||s-c-1>1?f(1):void 0,h=c===1/0||s+c+1<a?f(a):void 0,v=Ge(1,a+1).filter(l).map(f);return{totalPages:a,resultsFrom:i,resultsTo:d,current:u,prev:m,next:p,first:y,last:h,pages:v}},[r,t,e==null?void 0:e.width])}function Ye(){const[e,r]=g.useState([]),[t,n]=g.useState([]);return g.useEffect(()=>{E.s(async o=>{const{products:c,segments:s}=await o.getSearchSessionParams();r(s??[]),n((c==null?void 0:c.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function Xe(){const{facets:e}=S(i=>{var d;return{facets:((d=i.response.products)==null?void 0:d.facets)??[]}}),{replaceFilter:r,toggleProductFilter:t}=k(),n=g.useCallback(i=>{const d=e==null?void 0:e.find(u=>u.type==="stats"&&u.field===i);if(d&&"min"in d&&"max"in d)return d},[e]),o=g.useCallback(i=>{var d;return((d=e==null?void 0:e.find(u=>u.field===i))==null?void 0:d.name)??i},[e]),c=g.useCallback(i=>"field"in i&&(i.value instanceof Array||i.range instanceof Array),[]),s=g.useCallback(i=>{var d;return{...i,range:(d=i.range)==null?void 0:d.map(u=>({gt:u.gt?Number(u.gt):u.gt,gte:u.gte?Number(u.gte):u.gte,lt:u.lt?Number(u.lt):u.lt,lte:u.lte?Number(u.lte):u.lte}))}},[]),a=g.useCallback(i=>(i.value??[]).map(u=>({value:u,field:i.field,name:o(i.field),filter:s(i),remove:()=>{t(i.field,u,!1)}})),[s,o,t]),l=g.useCallback(i=>(i.range??[]).map(u=>{var p,y;const f=u.gte??u.gt??((p=n(i.field))==null?void 0:p.min),m=u.lte??u.lt??((y=n(i.field))==null?void 0:y.max);if(f!==void 0&&m!==void 0)return{value:`${f} - ${m}`,field:i.field,name:o(i.field),filter:s(i),remove:()=>{r(i.field,void 0)}}}).filter(Boolean),[s,n,o,r]);return{selectFilters:c,toValueFilter:a,toRangeFilter:l}}function re(){const{filter:e}=S(a=>{var l;return{filter:((l=a.query.products)==null?void 0:l.filter)??[]}}),{updateSearch:r}=k(),{selectFilters:t,toValueFilter:n,toRangeFilter:o}=Xe(),c=g.useMemo(()=>e?e.filter(t).flatMap(a=>"value"in a?n(a):"range"in a?o(a):[]).filter(Boolean):[],[e,t,o,n]),s=g.useCallback(()=>{r({products:{filter:[]}})},[r]);return{filters:c,removeAll:s}}function A(e){if(typeof e=="number")return e;if(typeof e!="string")return;const r=Number(e);return isNaN(r)?void 0:r}function ne(e){var u,f,m;const{replaceFilter:r}=k(),{query:t,products:n}=S(p=>({query:p.query,products:p.response.products})),o=(u=n==null?void 0:n.facets)==null?void 0:u.find(p=>p.id===e);if(!o)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const c=(m=(f=t.products)==null?void 0:f.filter)==null?void 0:m.find(p=>p.field===o.field),s=c!=null&&c.range?c.range[0]:void 0,a=typeof s=="object"&&("gte"in s||"lte"in s)?[A(s.gte),A(s.lte)]:[void 0,void 0],l="min"in o?Math.floor(o.min):0,i="max"in o?Math.ceil(o.max):0,d=([p,y])=>{const h=p!==void 0?Math.floor(p):void 0,v=y!==void 0?Math.ceil(y):void 0,C=h!==void 0,b=v!==void 0;(l===h||!C)&&(i===v||!b)?r(o.field,void 0):(l===h||!C)&&b?r(o.field,{lte:v.toString()}):(i===v||!b)&&C?r(o.field,{gte:h.toString()}):C&&b&&r(o.field,{gte:h.toString(),lte:v.toString()})};return{min:l,max:i,range:[a[0]??l,a[1]??i],updateRange:d}}function Ze(e,r){const{min:t,max:n,range:o,updateRange:c}=ne(e),{filters:s}=re(),a=g.useMemo(()=>{var y;const u=s.find(h=>{var v;return(v=h==null?void 0:h.filter)==null?void 0:v.range});let f=null;if(u){const h=(y=u.filter.range)==null?void 0:y[0];f=[A(h==null?void 0:h.gte),A(h==null?void 0:h.lte)]}const m=[];let p=Math.floor(t/r)*r;for(;p<n;){const h=p+r,v=f&&f[0]===p&&f[1]===h;m.push({min:p,max:h,selected:v}),p=h}return m},[s,t,n,r]),l=u=>{c([u,o[1]])},i=u=>{c([o[0],u])},d=t!==o[0]||n!==o[1];return{min:t,max:n,range:o,updateRange:c,ranges:a,handleMinChange:l,handleMaxChange:i,isSelected:d}}function et(){const{products:e,keywords:r}=S(t=>t.response);return{products:e??{hits:[],total:0},keywords:r??{hits:[],total:0}}}function tt(){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 N(e){return e&&!Number.isNaN(e)?e:0}function rt(e,r){const{from:t,size:n,total:o}=S(i=>{var d,u,f,m,p;return{from:N(((d=i.query.products)==null?void 0:d.from)??0),size:N(((f=(u=i.response)==null?void 0:u.products)==null?void 0:f.size)??0),total:N(((p=(m=i.response)==null?void 0:m.products)==null?void 0:p.total)??0)}}),{updateSearch:c}=k(),s=t+n,a=[...e].reverse().filter(i=>i+r<o);return{from:t,to:s,total:o,size:n,sizeOptions:a,handleSizeChange:i=>{c({products:{size:i}})}}}function nt(e,r){return e.length!==r.length?!1:e.every(t=>r.find(n=>t.field===n.field&&t.order===n.order))}function ot(e){var c,s;const r=S(a=>a.query),{updateSearch:t}=k();return{activeSort:((c=e.find(a=>{var l;return nt(a.value.sort,((l=r.products)==null?void 0:l.sort)||[])}))==null?void 0:c.id)??((s=e[0])==null?void 0:s.id),setSort:a=>{const l=e.find(i=>i.id===a);l&&t({products:{sort:l.value.sort}})}}}exports.AutocompletePageProvider=$e;exports.CategoryPageProvider=De;exports.InfiniteScroll=Ae;exports.InfiniteScrollWithLink=te;exports.SearchInput=Ne;exports.SearchPageProvider=Ue;exports.SerpElement=Oe;exports.StoreContext=M;exports.createExtendableStore=K;exports.createStore=x;exports.defaultState=H;exports.getNextPageQuery=Z;exports.useActions=k;exports.useDecoratedSearchResults=Ke;exports.useFacet=He;exports.useFacets=We;exports.useLoadMore=j;exports.useNostoAppState=S;exports.usePagination=Je;exports.usePersonalization=Ye;exports.useProductFilters=re;exports.useRange=ne;exports.useRangeSelector=Ze;exports.useResponse=et;exports.useSelectedFiltersCount=tt;exports.useSizeOptions=rt;exports.useSort=ot;
@@ -1,5 +1,6 @@
1
1
  /** @module preact */
2
- export { InfiniteScroll } from './src/components/InfiniteScroll/InfiniteScroll';
2
+ export { InfiniteScroll, type InfiniteScrollProps } from './src/components/InfiniteScroll/InfiniteScroll';
3
+ export { InfiniteScrollWithLink } from './src/components/InfiniteScroll/InfiniteScrollWithLink';
3
4
  export { SearchInput } from './src/components/SearchInput';
4
5
  export { SerpElement } from './src/components/SerpElement';
5
6
  export type { PublicAutocompleteConfig as AutocompleteConfig } from './src/config/pages/autocomplete/config';
@@ -12,6 +13,7 @@ export { useActions } from './src/hooks/useActions';
12
13
  export { useDecoratedSearchResults } from './src/hooks/useDecoratedSearchResults';
13
14
  export { useFacet } from './src/hooks/useFacet';
14
15
  export { useFacets } from './src/hooks/useFacets';
16
+ export { getNextPageQuery } from './src/hooks/useLoadMore/getNextPageQuery';
15
17
  export { useLoadMore } from './src/hooks/useLoadMore/useLoadMore';
16
18
  export { useNostoAppState } from './src/hooks/useNostoAppState';
17
19
  export { type Page, usePagination } from './src/hooks/usePagination';
@@ -1,7 +1,7 @@
1
1
  import { options as U, createContext as W, Fragment as G, toChildArray as oe } from "preact";
2
- import { useContext as q, useState as I, useEffect as x, useMemo as z, useCallback as w, useRef as se } from "preact/hooks";
2
+ import { useContext as E, useState as I, useEffect as x, useMemo as z, useCallback as w, useRef as se } from "preact/hooks";
3
3
  import { s as ie } from "../search-B0-bVNMy.js";
4
- import { s as E } from "../index.es-B8mbAxS4.js";
4
+ import { s as q } from "../index.es-B8mbAxS4.js";
5
5
  var ce = " daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\btime/|\\||^<|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\(compatible;?(?:\\s\\w+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|adscanner/|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|cookiehubscan|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|exaleadcloudview|feed|firephp|functionize|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|infrawatch|insight|inspect|iplabel|ips-agent|java(?!;)|jsjcw_scanner|library|linkcheck|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scanner\\.|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|zgrab", ae = /bot|crawl|http|lighthouse|scan|search|spider/i, F;
6
6
  function ue() {
7
7
  if (F instanceof RegExp)
@@ -101,12 +101,8 @@ function fe(e, r = {}) {
101
101
  }
102
102
  const pe = {
103
103
  loading: !0,
104
- query: {
105
- query: ""
106
- },
107
- response: {
108
- query: ""
109
- },
104
+ query: {},
105
+ response: {},
110
106
  initialized: !1
111
107
  };
112
108
  function _(e = {}) {
@@ -114,7 +110,7 @@ function _(e = {}) {
114
110
  }
115
111
  const A = W(_());
116
112
  function y(e = ge) {
117
- const r = q(A), [t, n] = I(e(r.getState()));
113
+ const r = E(A), [t, n] = I(e(r.getState()));
118
114
  return r.onChange(e, n), x(() => () => r.clearOnChange(n), [r]), t;
119
115
  }
120
116
  const ge = (e) => e;
@@ -125,7 +121,7 @@ function Y(e, ...r) {
125
121
  );
126
122
  }
127
123
  const N = W(null), X = () => {
128
- const e = q(N);
124
+ const e = E(N);
129
125
  if (!e)
130
126
  throw new Error("useConfig must be used within a ConfigProvider");
131
127
  return e;
@@ -349,7 +345,7 @@ async function Re(e, r, t, n) {
349
345
  }), o();
350
346
  }
351
347
  function C() {
352
- const e = X(), r = q(A), t = z(
348
+ const e = X(), r = E(A), t = z(
353
349
  () => ({
354
350
  config: e,
355
351
  store: r
@@ -434,13 +430,13 @@ const tt = !J() && Ne() ? Oe : Te;
434
430
  function je(e) {
435
431
  return e.type === "input";
436
432
  }
437
- function qe(e) {
433
+ function Ee(e) {
438
434
  return !!e && typeof e == "object" && "type" in e && "props" in e;
439
435
  }
440
436
  function B(e, r = { depth: 0 }) {
441
437
  const { children: t } = e;
442
438
  return oe(t).map((n) => {
443
- if (!qe(n))
439
+ if (!Ee(n))
444
440
  return n;
445
441
  const o = e.updateElement(n, r);
446
442
  return o === null ? null : (o.props = {
@@ -460,9 +456,9 @@ function rt({ children: e, onSearchInput: r }) {
460
456
  }), t)
461
457
  });
462
458
  }
463
- const Ee = "nosto:search:scrollPos";
459
+ const qe = "nosto:search:scrollPos";
464
460
  function $e() {
465
- window.sessionStorage.setItem(Ee, window.scrollY.toString());
461
+ window.sessionStorage.setItem(qe, window.scrollY.toString());
466
462
  }
467
463
  function nt({ children: e, hit: r, onClick: t }) {
468
464
  const { pageType: n } = X(), o = n === "autocomplete" ? void 0 : n;
@@ -471,7 +467,7 @@ function nt({ children: e, hit: r, onClick: t }) {
471
467
  updateElement: (c, s) => (s.depth > 0 || (c.props = {
472
468
  ...c.props,
473
469
  onClick: (i) => {
474
- r && o && E((l) => l.recordSearchClick(o, r)), $e(), typeof t == "function" && t(i);
470
+ r && o && q((l) => l.recordSearchClick(o, r)), $e(), typeof t == "function" && t(i);
475
471
  }
476
472
  }), c)
477
473
  });
@@ -481,7 +477,7 @@ function D() {
481
477
  const e = window.setTimeout(() => {
482
478
  console.error("Nosto client script has not loaded after 3 seconds.");
483
479
  }, 3e3);
484
- E(() => {
480
+ q(() => {
485
481
  window.clearTimeout(e);
486
482
  });
487
483
  }, []);
@@ -613,7 +609,7 @@ function lt(e) {
613
609
  function dt() {
614
610
  const [e, r] = I([]), [t, n] = I([]);
615
611
  return x(() => {
616
- E(async (o) => {
612
+ q(async (o) => {
617
613
  const { products: c, segments: s } = await o.getSearchSessionParams();
618
614
  r(s ?? []), n((c == null ? void 0 : c.personalizationBoost) ?? []);
619
615
  });
@@ -873,6 +869,7 @@ export {
873
869
  ot as AutocompletePageProvider,
874
870
  st as CategoryPageProvider,
875
871
  tt as InfiniteScroll,
872
+ Te as InfiniteScrollWithLink,
876
873
  rt as SearchInput,
877
874
  it as SearchPageProvider,
878
875
  nt as SerpElement,
@@ -880,6 +877,7 @@ export {
880
877
  fe as createExtendableStore,
881
878
  _ as createStore,
882
879
  pe as defaultState,
880
+ xe as getNextPageQuery,
883
881
  C as useActions,
884
882
  ct as useDecoratedSearchResults,
885
883
  at as useFacet,
@@ -1,6 +1,27 @@
1
1
  import { InfiniteScrollProps } from './InfiniteScroll';
2
2
  /**
3
3
  * Infinite scroll component that loads more results when user clicks a link.
4
+ * * @example
5
+ * ```jsx
6
+ * import { InfiniteScrollWithLink } from "@nosto/search-js/preact"
7
+ *
8
+ * // With custom load more button
9
+ * function LoadMoreButton({ pageSize }) {
10
+ * const { loadMore } = useLoadMore(pageSize)
11
+ *
12
+ * return (
13
+ * <button
14
+ * onClick={loadMore}
15
+ * >
16
+ * More results
17
+ * </button>
18
+ * )
19
+ * }
20
+ *
21
+ * <InfiniteScrollWithLink loadMoreComponent={LoadMoreButton} pageSize={defaultConfig.pageSize}>
22
+ * {products?.hits?.map(hit => <Product hit={hit} />)}
23
+ * </InfiniteScrollWithLink>
24
+ * ```
4
25
  * @group Components
5
26
  */
6
27
  export declare function InfiniteScrollWithLink({ children, loadMoreComponent: LoadMore, pageSize }: InfiniteScrollProps): import("preact").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nosto/search-js",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "files": [
@@ -56,13 +56,13 @@
56
56
  "@nosto/nosto-js": "^1.7.0",
57
57
  "@testing-library/dom": "^10.4.0",
58
58
  "@types/eslint-config-prettier": "^6.11.3",
59
- "@types/node": "^22.13.13",
59
+ "@types/node": "^22.13.14",
60
60
  "concurrently": "^9.1.2",
61
61
  "copyfiles": "^2.4.1",
62
62
  "eslint": "^9.23.0",
63
63
  "eslint-config-prettier": "^10.1.1",
64
64
  "eslint-plugin-barrel-files": "^3.0.1",
65
- "eslint-plugin-prettier": "^5.2.4",
65
+ "eslint-plugin-prettier": "^5.2.5",
66
66
  "eslint-plugin-react": "^7.37.4",
67
67
  "eslint-plugin-react-hooks": "^5.2.0",
68
68
  "eslint-plugin-simple-import-sort": "^12.1.1",
@@ -73,9 +73,9 @@
73
73
  "typedoc": "^0.27.9",
74
74
  "typescript": "^5.8.2",
75
75
  "typescript-eslint": "^8.28.0",
76
- "vite": "^6.2.3",
76
+ "vite": "^6.2.4",
77
77
  "vite-plugin-dts": "^4.5.3",
78
- "vitest": "^3.0.9"
78
+ "vitest": "^3.1.1"
79
79
  },
80
80
  "publishConfig": {
81
81
  "access": "public"