@indxsearch/intrface 3.12.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -1 +1,8 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");var p=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}},m=class extends Error{constructor(e){super(e),this.name=`SearchSetupError`}};function h(e,t){let n=e instanceof Error?e.message:String(e);if(e instanceof m)return{kind:`setup`,message:n,technical:n,retryable:!1};if(e instanceof TypeError)return{kind:`unreachable`,message:n,technical:`Network error: no response from the server. Check that it is running and that the url is right.`,retryable:!0};if(e instanceof p){let r={message:n,status:e.status,code:e.code,retryAfterSeconds:e.retryAfterSeconds},i=e.problem?.detail??e.problem?.title,a=t=>`${e.status}${e.code?` ${e.code}`:``}: ${t}`;switch(!0){case e.status===401:return{...r,kind:`unauthorized`,retryable:!1,technical:a(`the key is invalid or has expired. Create a new one in the web console.`)};case e.status===403:return{...r,kind:`forbidden`,retryable:!1,technical:a(`the key does not reach dataset "${t.dataset}" in team "${t.team}".`)};case e.status===404:return{...r,kind:`notFound`,retryable:!1,technical:a(i??`no dataset "${t.dataset}" in team "${t.team}".`)};case e.retryable:return{...r,kind:`notReady`,retryable:!0,technical:a(`the dataset is ${e.problem?.currentState?.toString().toLowerCase()??`not ready`}.`)};case e.status===409:return{...r,kind:`unavailable`,retryable:!1,technical:a(i??`the dataset cannot be searched now.`)};case e.status===429:return{...r,kind:`rateLimited`,retryable:!0,technical:a(i??`too many requests for this key.`)};case e.status>=500:return{...r,kind:`server`,retryable:!0,technical:a(i??`the server ran into a problem.`)};default:return{...r,kind:`unknown`,retryable:!0,technical:a(i??`the request failed.`)}}}return{kind:`unknown`,message:n,technical:n,retryable:!0}}function g({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[g,_]=(0,c.useState)([]),[v,y]=(0,c.useState)([]),[b,x]=(0,c.useState)({}),[S,C]=(0,c.useState)({}),[w,T]=(0,c.useState)({}),[E,D]=(0,c.useState)(0),[O,k]=(0,c.useState)(null),[A,j]=(0,c.useState)(null),[M,N]=(0,c.useState)(0);return(0,c.useEffect)(()=>{(async()=>{k(null),j(null),u(!0);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),new m(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),new m(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),new m(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok)throw c.status===401?(console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),await p.fromResponse(`Dataset status`,c)):c.status===404?(console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),await p.fromResponse(`Dataset status`,c)):(console.error(`[Auth] ❌ Failed to get dataset status:`,c.status),await p.fromResponse(`Dataset status`,c));let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[h,g,v,b]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(()=>null)]);if(!h.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,h.status),await p.fromResponse(`Filterable fields`,h);if(!g.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,g.status),await p.fromResponse(`Facetable fields`,g);if(!v.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,v.status),await p.fromResponse(`Sortable fields`,v);let[S,w,E]=await Promise.all([h.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),g.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),v.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(S||[]),_(w||[]),y(E||[]),D(d);let O={};if(b?.ok){let e=await b.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(O[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,b?.status,`- every selected value will be sent as a value filter`);x(O);let k={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?k=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let A={};if(k.facets){for(let[e,t]of Object.entries(k.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(A[e]={min:Math.min(...n),max:Math.max(...n)})}}let j={};if(k.facets)for(let[e,t]of Object.entries(k.facets))Array.isArray(t)&&(j[e]=t.map(e=>e.key));C(A),T(j),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(r){console.error(`[Auth] ❌ Initialization failed:`,r),(r instanceof Error||typeof r==`object`&&r&&`message`in r)&&console.error(`[Auth] 💡 Error:`,r.message),r instanceof TypeError&&r.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),k(r instanceof Error?r.message:String(r)),j(h(r,{team:t,dataset:n}))}finally{u(!1)}})()},[e,t,n,M]),{token:a,isFetchingInitial:s,authError:O,authErrorInfo:A,retry:()=>N(e=>e+1),initialFacetStats:S,initialFacetKeys:w,filterableFields:d,facetableFields:g,sortableFields:v,fieldTypes:b,totalDocumentCount:E}}async function _(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await p.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function v(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await _(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function y(e,t,n,r,i,a,o={},s={},c={}){let l=Object.entries(e??{}).filter(([,e])=>e.length>0),u=Object.entries(t??{}),d=Object.entries(s??{}).filter(([,e])=>e.length>0),f=(e,{min:t,max:o})=>_(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),p=(e,t)=>{let o=c[e]===`Number`?Number(t):NaN;return Number.isFinite(o)?f(e,{min:o,max:o}):_(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,h,g]=await Promise.all([Promise.all(l.map(async([e,t])=>v(await Promise.all(t.map(t=>p(e,t))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(u.map(([e,t])=>f(e,t))),Promise.all(d.map(async([e,t])=>v(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return v([...m,...h,...g],`and`,n,r,i,a)}function b(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function x({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d,sessionId:f,source:m,count:g}){let _=(0,c.useRef)(0),v=(0,c.useRef)(void 0),x=(0,c.useRef)(!1),[S,C]=(0,c.useState)({}),[w,T]=(0,c.useState)(``),[E,D]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldTypes:r.fieldTypes,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let O=e.searchSettings.maxNumberOfRecordsToReturn,k=e.searchSettings.enableCoverage,A=e.searchSettings.removeDuplicates,j=e.searchSettings.coverageDepth,M=e.searchSettings.minimumScore,N=e.searchSettings.coverageSetup,P=e.sortBy,F=e.sortAscending,I=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++_.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[h,...v]=await Promise.all([y(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>y({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),b=s||e.query.trim()!==``,x={text:e.query,enableCoverage:k,removeDuplicates:A,coverageDepth:j,coverageSetup:N},I={...x,maxNumberOfRecordsToReturn:b?O:0,enableFacets:c,...h?{filter:h}:{},...P?{sortBy:P}:{},...F===void 0?{}:{sortAscending:F}};u&&console.log(`[performSearch] request body:`,JSON.stringify(I,null,2));let L=new URLSearchParams({session:f});m&&L.set(`source`,m),g||L.set(`count`,`false`);let R=e=>n(`${i}/api/teams/${a}/datasets/${o}/search?${L}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[z,...B]=await Promise.all([R(I),...v.map(e=>R({...x,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!z.ok)throw await p.fromResponse(`Search`,z);let V=await z.json(),H=z.headers.get(`Indx-Query-Id`)??void 0,U=V.truncationIndex??-1,W={};for(let e=0;e<d.length;e++){let t=d[e];if(!B[e].ok)throw await p.fromResponse(`Facets for '${t}'`,B[e]);let n=await B[e].json();n.facets?.[t]!==void 0&&(W[t]=n.facets[t])}let G=V.records||[],K=G.map(e=>e.documentKey),ee=G.map(e=>e.score),q=[];if(b&&K.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(K)});if(!e.ok)throw await p.fromResponse(`Document lookup`,e);q=(await e.json()).map((e,t)=>({document:e,documentKey:K[t],score:ee[t]}))}let J={};if(c&&V.facets){for(let[e,t]of Object.entries(V.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(J[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==_.current)return;let te=e.query!==w,Y=e.query!==E,X=e.facetStats??{};if(te?(X={...r.initialFacetStats,...J},C(X),T(e.query)):X={...S,...J},Y&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(J))n[e]=t;t(e=>({...e,rangeBounds:n})),D(e.query)}let ne=Object.keys(W).length>0?{...V.facets??{},...W}:V.facets;if(c&&(!ne||Object.keys(ne).length===0)){ne={};for(let[e,t]of Object.entries(r.initialFacetKeys))ne[e]=t.map(e=>({key:e,value:null}))}let re=q.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=M}).map((e,t)=>({...e,position:t+1}));t(e=>({...e,results:re,error:void 0,errorInfo:void 0,resultsSuppressed:!b,...c?{facets:ne,facetStats:X}:{},isLoading:!1,truncationIndex:U,queryId:H}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==_.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`,errorInfo:h(e,{team:a,dataset:o})}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,P,F,O,k,A,j,N,M,n,r.initialFacetStats,r.initialFacetKeys,r.token,S,w,E,e.rangeBounds,i,a,o,s,u,t,f,m,g]);(0,c.useEffect)(()=>{v.current=I},[I]);let L=(0,c.useRef)(null);(0,c.useEffect)(()=>(L.current?.cancel(),L.current=b(()=>{u&&console.log(`Debounced searchWithFacets fired`),v.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{L.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!x.current&&(s&&v.current?.({enableFacets:l}),x.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!x.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(L.current?.cancel(),v.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),v.current?.({enableFacets:!1}),L.current?.()):v.current?.({enableFacets:!1}),()=>{L.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!x.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||v.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!x.current||!r.token)return;let t=e.query.trim();!s&&t===``||v.current?.({enableFacets:l})},[P,F]);let R=(0,c.useRef)(!0),z=(0,c.useRef)(e.query);return(0,c.useEffect)(()=>{if(R.current){R.current=!1;return}if(z.current!==e.query||!x.current||!r.token)return;if(d.current){d.current=!1,v.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||v.current?.({enableFacets:l})},[O,k,A,j,N,M]),(0,c.useEffect)(()=>{z.current=e.query},[e.query]),{retrySearch:(0,c.useCallback)(()=>{v.current?.({enableFacets:l})},[l])}}function S(){let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}var C=(0,c.createContext)(void 0),w=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:p={},enableDebugLogs:m=!1,preAuthenticatedToken:h,source:_,count:v=!0})=>{let y=(0,c.useRef)(!1),b=(0,c.useRef)(S()).current,w=(0,c.useRef)(a),[T,E]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],fieldTypes:{},filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{...p}}});(0,c.useEffect)(()=>{m&&console.log(`SearchContext mounted on client`)},[m]),(0,c.useEffect)(()=>{E(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[D]=(0,c.useState)(s),O=g({url:t,team:n,dataset:r,preAuthenticatedToken:h,enableDebugLogs:m}),k=(0,c.useCallback)((e,t={})=>{if(!O.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${O.token}`}})},[O.token]),{retrySearch:A}=x({state:T,setState:E,authenticatedFetch:k,auth:O,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:D,enableDebugLogs:m,shouldFetchMore:y,sessionId:b,source:_,count:v}),j=(0,c.useRef)(void 0);j.current=T.queryId;let M=(0,c.useCallback)(async e=>{if(O.token)try{let i=await k(`${t}/api/teams/${n}/datasets/${r}/events/select`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({queryId:j.current,documentKey:e.documentKey,position:e.position,...v?{}:{count:!1}})});m&&(i.ok?console.log(`[select] document ${e.documentKey} at position ${e.position}`):console.warn(`[select] not recorded: ${i.status}`))}catch(e){m&&console.warn(`[select] failed:`,e)}},[O.token,k,t,n,r,m,v]),N=(0,c.useCallback)(e=>{E(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:w.current}}})},[]),P=(0,c.useCallback)(e=>{E(t=>({...t,facetDebounceDelayMillis:e}))},[]),F=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(w.current=e.maxNumberOfRecordsToReturn),E(t=>{let n={...t.searchSettings,...e};return`coverageSetup`in e?e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup={}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),I=(0,c.useCallback)(e=>{y.current=!0,E(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),L=(0,c.useCallback)((e,t,n=!1)=>{E(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),R=(0,c.useCallback)((e,t)=>{E(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),z=(0,c.useCallback)((e,t,n)=>{E(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),B=(0,c.useCallback)(()=>{E(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),V=(0,c.useCallback)((e,t,n=!0)=>{E(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),H=(0,c.useCallback)((e,t=!0)=>{E(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),U=(e,t)=>e.min===t.min&&e.max===t.max,W=(0,c.useCallback)((e,t,n=!1)=>{E(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>U(e,t))?i.filter(e=>!U(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),G=(0,c.useCallback)((e,t,n=!0)=>{E(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!U(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),K=(0,c.useCallback)((e,t)=>{E(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(C.Provider,{value:{state:T,isFetchingInitial:O.isFetchingInitial||!T.fieldsSeeded,authError:O.authError??void 0,authErrorInfo:O.authErrorInfo??void 0,retry:O.authError?O.retry:A,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:k,setQuery:N,toggleFilter:L,setValueMatch:R,setRangeFilter:z,resetFilters:B,resetSingleFilter:V,resetRangeFilter:H,toggleBucketFilter:W,resetBucketFilter:G,setSort:K,setDebounceDelay:P,setSearchSettings:F,fetchMoreResults:I,selectResult:M,sessionId:b},children:e})},T=()=>{let e=(0,c.useContext)(C);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},E=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,showStatus:a=!0,...o})=>{let{state:{query:s,filters:c,rangeFilters:l,bucketFilters:p,results:m,truncationIndex:h,searchSettings:g},setQuery:_,resetFilters:v}=T(),y=Object.values(c).reduce((e,t)=>e+t.length,0)+Object.keys(l).length+Object.values(p??{}).reduce((e,t)=>e+t.length,0),b=s.length>0,x=b&&m!==null&&m.length===0,S=b&&g.enableCoverage&&m!==null&&m.length>0&&h===-1,C=()=>{_(``),y>0&&v()};return(0,u.jsxs)(d.SearchField,{type:`text`,value:s,onChange:e=>_(e.target.value),placeholder:g.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...o,children:[a&&x&&(0,u.jsx)(d.Chip,{children:`No results`}),a&&S&&(0,u.jsx)(d.Tooltip,{content:`No direct match. Showing the nearest results.`,children:(0,u.jsx)(`span`,{children:(0,u.jsx)(d.Chip,{icon:(0,u.jsx)(f.Fuzzy_search,{}),children:`Nearest`})})}),a&&y>0&&(0,u.jsx)(d.Tooltip,{content:`${y} filter${y===1?``:`s`} active`,children:(0,u.jsx)(`span`,{children:(0,u.jsx)(d.Chip,{icon:(0,u.jsx)(f.Filter,{}),color:`var(--CLightBlue)`,textColor:`#080809`,children:y})})}),r&&(b||y>0)&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:C,"aria-label":y>0?`Clear search and filters`:`Clear search`,children:`Clear`})]})},D={message:`_message_1mgfk_1`,icon:`_icon_1mgfk_10`,title:`_title_1mgfk_15`,detail:`_detail_1mgfk_20`,technical:`_technical_1mgfk_25`,button:`_button_1mgfk_33`},O={unreachable:{icon:f.Cloud,title:`Search is unavailable`,detail:`The search server can’t be reached right now.`},unauthorized:{icon:f.Key,title:`Search is unavailable`,detail:`The search key was not accepted.`},forbidden:{icon:f.Lock,title:`Search is unavailable`,detail:`This search key doesn’t have access to these results.`},notFound:{icon:f.Search,title:`Nothing to search here`,detail:`The collection this page searches doesn’t exist.`},notReady:{icon:f.Hour_glass,title:`Search is getting ready`,detail:`Results will appear in a moment.`},unavailable:{icon:f.Warning,title:`Search is unavailable`,detail:`The collection can’t be searched right now.`},rateLimited:{icon:f.Speedometer,title:`Too many searches`,detail:`Wait a moment, then try again.`},server:{icon:f.Warning,title:`Something went wrong`,detail:`The search server ran into a problem.`},setup:{icon:f.Warning,title:`Search isn’t set up`,detail:`This page is missing part of its search setup.`},unknown:{icon:f.Warning,title:`Something went wrong`,detail:`The search couldn’t be completed.`}},k=({error:e,onRetry:t,hideTechnical:n=!1})=>{let{icon:r,title:i,detail:a}=O[e.kind];(0,c.useEffect)(()=>{if(e.kind!==`notReady`||!t)return;let n=setTimeout(t,(e.retryAfterSeconds??2)*1e3);return()=>clearTimeout(n)},[e,t]);let o=e.retryable&&e.kind!==`notReady`&&t;return(0,u.jsxs)(`div`,{className:D.message,role:`alert`,children:[(0,u.jsx)(`span`,{className:D.icon,children:(0,u.jsx)(r,{size:70,color:`var(--lv4)`})}),(0,u.jsx)(`div`,{className:D.title,children:i}),(0,u.jsx)(`div`,{className:D.detail,children:a}),!n&&(0,u.jsx)(`code`,{className:D.technical,children:e.technical}),o&&(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,className:D.button,onClick:t,children:`Try again`})]})},A={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},j={row:`_row_1i201_1`,content:`_content_1i201_19`,indexNumber:`_indexNumber_1i201_31`,scoreNumber:`_scoreNumber_1i201_39`,skeletonBars:`_skeletonBars_1i201_53`,skeletonBarLg:`_skeletonBarLg_1i201_59`,fade:`_fade_1i201_1`,skeletonBarSm:`_skeletonBarSm_1i201_66`},M=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:j.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:j.indexNumber,children:t}),(0,u.jsx)(`div`,{className:j.content,children:e?(0,u.jsxs)(`div`,{className:j.skeletonBars,children:[(0,u.jsx)(`div`,{className:j.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:j.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:j.scoreNumber,children:n})]}),N={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},P=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],F=({rows:e=6})=>(0,u.jsx)(`div`,{className:N.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(M,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:P[t%P.length]},t))}),I=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function L(e){let t=e.trim();if(!t.startsWith(`[`)||!t.endsWith(`]`))return;try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e))}catch{}if(!I.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var R=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p,errorInfo:m},isFetchingInitial:h,authError:g,authErrorInfo:_,retry:v,allowEmptySearch:y,fetchMoreResults:b,selectResult:x}=T(),S=t??30,[C,w]=(0,c.useState)(S),E=(0,c.useRef)(0),D=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==D.current;(!i||i.length<E.current||e)&&w(S),E.current=i?.length??0,D.current=l},[i,S,l]);let O=i&&i.length>C,j=()=>{let e=C+S;w(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&b(i.length+S)};if(h)return y?(0,u.jsx)(F,{rows:S}):(0,u.jsx)(`div`,{className:A.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let N=g??p;return N?(0,u.jsx)(k,{error:(g?_:m)??{kind:`unknown`,message:N,technical:N,retryable:!1},onRetry:v}):a||i===null?(0,u.jsx)(`div`,{className:A.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?null:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,C).map((t,i)=>{let a=t.document,s=t.score,c;try{c=typeof a==`string`?JSON.parse(a):a}catch{return(0,u.jsx)(`div`,{className:A.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},i)}let l;if(e&&e.length>0){l={};for(let t of e)t in c&&(l[t]=c[t])}else l={...c};if(n)for(let e in l){let t=l[e];if(typeof t==`string`){let n=L(t);n&&(l[e]=n)}}return(0,u.jsx)(M,{index:i,score:s,showScore:o.showScore,children:r(l,{result:t,select:()=>x?.(t)??Promise.resolve()})},i)})}),O&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:j,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${C+1}-${Math.min(C+S,i.length,s)} of ${s}`:`Load more`})})]})},z={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},B=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[z.row,e===`title`?z.title:``].filter(Boolean).join(` `),children:t}),V={bar:`_bar_4nxla_12`,skeletonAppear:`_skeletonAppear_4nxla_1`,fade:`_fade_4nxla_1`,listRows:`_listRows_4nxla_19`,sliderArea:`_sliderArea_4nxla_25`,sliderTrack:`_sliderTrack_4nxla_32`,inputRow:`_inputRow_4nxla_40`,inputBar:`_inputBar_4nxla_45`,histogramRow:`_histogramRow_4nxla_55`},H=[65,80,55,72,60,75,50,68],U=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:V.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:V.histogramRow}),(0,u.jsx)(`div`,{className:V.sliderTrack}),(0,u.jsxs)(`div`,{className:V.inputRow,children:[(0,u.jsx)(`div`,{className:V.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:V.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:V.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:V.bar,style:{width:`${H[t%H.length]}%`,animationDelay:`${t*.05}s`}},t))})}),W={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},G={notice:`_notice_4sel0_1`,technical:`_technical_4sel0_9`},K=({label:e,field:t,missing:n})=>{let r=n.map(e=>e[0].toUpperCase()+e.slice(1)).join(` and `);return(0,c.useEffect)(()=>{console.warn(`[intrface] The panel for "${t}" is hidden: the field is not ${r}. Mark it ${r} in the dataset's field configuration (web console → Fields).`)},[t,r]),(0,u.jsx)(d.FilterPanelBase,{title:e??t,collapsible:!1,children:(0,u.jsxs)(`div`,{className:G.notice,children:[(0,u.jsx)(`span`,{children:`Not available`}),(0,u.jsxs)(`code`,{className:G.technical,children:[t,`: not `,r]})]})})},ee=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:S,filters:C,query:w},toggleFilter:E,setValueMatch:D,authError:O,isFetchingInitial:k,allowEmptySearch:A}=T(),j=l??f??`checkbox`,M=j===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,M)},[e,M,D]);let N=(0,c.useRef)(null),[P,F]=(0,c.useState)(a);if((0,c.useEffect)(()=>{F(a)},[b?.[e],a]),!A&&!w||O)return null;if(k||!b)return j===`toggle`?(0,u.jsx)(U,{rows:1,collapsible:!1}):(0,u.jsx)(U,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:w??``,filters:C,facets:b})||!v&&!w&&Object.keys(C).length<1)return null;if(!x?.includes(e)||!S?.includes(e)){let n=[];return x?.includes(e)||n.push(`filterable`),S?.includes(e)||n.push(`facetable`),(0,u.jsx)(K,{label:t,field:e,missing:n})}let I=b?.[e]??(j===`toggle`?[]:void 0);if(!I||!Array.isArray(I))return null;let L=C?.[e]??[];n&&!N.current&&I.length>0&&(N.current=I.reduce((e,t)=>(e[t.key]=t.value,e),{}));let R=new Map;n&&N.current&&Object.keys(N.current).forEach(e=>{R.set(e,0)}),I.forEach(e=>{R.set(e.key,e.value)});let z=new Set([`true`,`false`,`null`]),B=Array.from(R.keys()),V=j===`toggle`&&(B.length>0&&B.every(e=>z.has(e))||B.length===0&&L.length>0);if(V&&R.has(`null`)){let e=R.get(`null`)??0,t=R.get(`false`)??0;R.set(`false`,t+e),R.delete(`null`)}if(j===`toggle`&&!V)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:W.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(V){let n=R.get(`true`),r=typeof n==`number`?n:null,i=L.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:W.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let H=Array.from(R.entries());if(g||(H=H.filter(([e])=>e!==`null`)),H.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=H.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=H.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));H=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=H.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=H.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));H=[...t,...n]}else{let e=H.filter(([,e])=>typeof e==`number`&&e>0),t=H.filter(([,e])=>e===0||e===null);H=[...e,...t]}let G=typeof a==`number`&&H.length>a,ee=G?H.slice(0,P):H,q=(t,n)=>{let r=L.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,j===`radio`);switch(j){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:W.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:W.chip,title:t,children:(0,u.jsx)(`span`,{className:W.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:W.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:W.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:W.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:W.count,children:[n,(0,u.jsx)(`span`,{className:W.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:W.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:W.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&L.length>0?W.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?W.grid:W.list,style:{listStyle:`none`,padding:0,margin:0},children:[ee.map(([e,t])=>(0,u.jsx)(`li`,{children:q(e,t)},e)),G&&P<H.length&&(()=>{let e=H.length-P,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:W.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>F(e=>e+50),children:`Show ${t} more of ${H.length} total`})})})()]})})},q={disabledMessage:`_disabledMessage_adany_1`,histogram:`_histogram_adany_6`,histogramLayer:`_histogramLayer_adany_14`,histogramLive:`_histogramLive_adany_22`,histogramLit:`_histogramLit_adany_23`,histogramFill:`_histogramFill_adany_30`,histogramBar:`_histogramBar_adany_43`,histogramSeparators:`_histogramSeparators_adany_61`,histogramSeparator:`_histogramSeparator_adany_48`,active:`_active_adany_76`};function J(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function te(e){let t=0;for(let n of e)t=Math.max(t,J(n));return t===0?1:Number((10**-t).toFixed(t))}function Y(e,t){return Number(e.toFixed(J(t)))}function X(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(J(n)))}function ne(e,t,n){let r=Math.ceil(Number(((e-t)/n).toFixed(6)));return Number((t+r*n).toFixed(J(n)))}var re=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:S,facetDebounceDelayMillis:C},setRangeFilter:w,resetRangeFilter:E,allowEmptySearch:D,authError:O,isFetchingInitial:k}=T(),A=i??a??`input`,j=_?.[e]!==void 0,M=_?.[e]??{min:n,max:r},N=M.min,P=M.max,F=v?.[e]??M,I=Math.max(N,Math.min(P,F.min)),L=Math.max(N,Math.min(P,F.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(J(N),J(P)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,J(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,N,P,y,e]),z=j&&N===P,B=z?n:N,V=z?r:P,H=ne(V+R,B,R),W=e=>Math.min(H,Math.max(B,e)),G=g?.[e],ee=o&&G!==void 0?q.active:void 0,te=G?G.min:N,re=G?G.max:P,Z=G!==void 0,ie=I!==N||L!==P,[Q,$]=c.default.useState([te,re]),[ae,oe]=c.default.useState(!1),[se,ce]=c.default.useState(!1),[le,ue]=c.default.useState(String(te)),[de,fe]=c.default.useState(String(re)),pe=c.default.useMemo(()=>{let e=J(R);return{width:`calc(${Math.max(3,N.toFixed(e).length,P.toFixed(e).length,le.length,de.length)+1}ch + 20px)`}},[R,N,P,le,de]);c.default.useEffect(()=>{ue(String(Q[0])),fe(String(Q[1]))},[Q]);let{finalMin:me,finalMax:he,isValidMin:ge,isValidMax:_e}=c.default.useMemo(()=>{let[e,t]=Q,n=Math.max(N,Math.min(P,e)),r=Math.max(N,Math.min(P,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=N&&i<=a,isValidMax:a<=P&&a>=i}},[Q,N,P]);c.default.useEffect(()=>{if(z)return;if(Q[0]===N&&Q[1]===P){oe(!1),ce(!1);return}let t=C??500,n=setTimeout(()=>{oe(!ge),ce(!_e)},300),r=setTimeout(()=>{ge&&_e&&(me===N&&he===P?E(e,!1):w(e,me,he))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[me,he,ge,_e,N,P,e,E,w,C,z]),c.default.useEffect(()=>{$([te,re]),oe(!1),ce(!1)},[te,re,e]);let ve=c.default.useCallback(e=>{let t=Y(Math.min(e[0],e[1]-R),R);return[t,Y(Math.max(e[1]-R,t),R)]},[R]),ye=c.default.useCallback(e=>{if(z)return;let[t,n]=ve(e);$([Math.max(N,Math.min(L,t)),Math.max(I,Math.min(P,n))])},[z,ve,N,P,I,L]),be=c.default.useCallback(t=>{if(z)return;let[n,r]=ve(t),i=Math.max(N,Math.min(L,n)),a=Math.max(I,Math.min(P,r));i===N&&a===P?($([N,P]),E(e,!0)):$([i,a])},[z,ve,N,P,I,L,e,E]),xe=c.default.useRef(null),Se=c.default.useCallback((t,n)=>{if(z)return;let r=xe.current;if(G&&r&&r.start===t&&r.last===n){xe.current=null,$([N,P]),E(e,!0);return}let i=X(Math.max(N,I,t),N,R),a=Math.max(i,X(Math.min(P,L,n),N,R));xe.current={start:t,last:n},$([i,a])},[z,G,N,P,I,L,R,e,E]),Ce=c.default.useCallback(()=>{if(z)return;let e=le.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ue(String(Q[0]));return}let n=Math.max(N,Math.min(L,t));n<Q[1]?$([n,Q[1]]):$([N,Q[1]]),ue(String(n<Q[1]?n:N))},[z,le,Q,N,L]),we=c.default.useCallback(()=>{if(z)return;let e=de.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){fe(String(Q[1]));return}let n=Math.max(I,Math.min(P,t));n>Q[0]?$([Q[0],n]):$([Q[0],P]),fe(String(n>Q[0]?n:P))},[z,de,Q,I,P]),Te=e=>t=>{t.key===`Enter`&&e()},[Ee,De]=c.default.useState(null),Oe=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${N}:${P}`;if(t===Oe.current&&Oe.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(Oe.current=t,De(r))},[N,P,y,e,f]);let ke=c.default.useMemo(()=>{if(!f||!Ee||Ee.length===0)return[];let e=P-N;if(e<=0)return[];let t=p??Math.max(R,Y(Math.ceil(e/20/R)*R,R)),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=N+r*t,a=N+(r+1)*t,o=r===n-1,s=Ee.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=P)}).reduce((e,t)=>e+t.value,0),c=o?P:Y(a-R,R);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:Y(c+R,R)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:Math.max(e.barEnd,H))-e.bucketStart}))},[f,Ee,N,P,p,R,H]),Ae=c.default.useMemo(()=>Math.max(...ke.map(e=>e.count),1),[ke]);return f&&!k&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?null:k?(0,u.jsx)(U,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!S?null:b?.includes(e)?A===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:ee,children:[z&&(0,u.jsxs)(`div`,{className:q.disabledMessage,children:[`No adjustable range (all results have the same value: `,N,`).`]}),f&&ke.length===0&&(0,u.jsx)(`div`,{className:q.histogram}),f&&ke.length>0&&(()=>{let[e,t]=L>I&&(I>N||L<P)?[I,L]:[B,V],n=Math.max(me,e),r=Math.min(he,t),i=H,a=i-B||1,o=e=>Math.max(0,Math.min(1,(e-B)/a)),s=e=>e>=V?0:Math.max(0,Math.min(1,(i-(e+R))/a)),c=o(n),l=r<n?1-c:s(r),d=e=>`calc(10px + (100% - 20px) * ${e})`,f=`inset(0 ${d(l)} 0 ${d(c)})`,p=`inset(0 ${d(s(t))} 0 ${d(o(e))})`,m=n=>n.last<e||n.bucketStart>t,h=ke.slice(1).map(e=>d((e.bucketStart-B)/a)),g=ke.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Ae*20))}));return(0,u.jsxs)(`div`,{className:q.histogram,children:[(0,u.jsx)(`div`,{className:q.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:q.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>Se(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:q.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${q.histogramLayer} ${q.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:q.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:q.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${q.histogramLayer} ${q.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:q.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:q.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:q.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:q.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:B,max:H,step:R,stepMarks:h,value:z?[B,H]:[W(X(me,B,R)),W(X(he+R,B,R))],isRange:!0,onChange:e=>ye(e),onFinalChange:e=>be(e),disabled:z,activeMin:I,activeMax:W(Y(L+R,R)),isFaceted:ie,highlightFaceted:Z,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:pe,value:z?String(N):le,min:N,max:Y(Math.min(L,Q[1]-R),R),onChange:e=>ue(e.target.value),onBlur:Ce,onKeyDown:Te(Ce),disabled:z,isValid:z||!ae}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:pe,value:z?String(P):de,min:Y(Math.max(I,Q[0]+R),R),max:P,onChange:e=>fe(e.target.value),onBlur:we,onKeyDown:Te(we),disabled:z,isValid:z||!se})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:ee,children:[z&&(0,u.jsxs)(`div`,{className:q.disabledMessage,children:[`No adjustable range (all results have the same value: `,N,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:pe,value:z?String(N):le,min:N,max:Y(Math.min(L,Q[1]-R),R),onChange:e=>ue(e.target.value),onBlur:Ce,onKeyDown:Te(Ce),disabled:z,isValid:z||!ae}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:pe,value:z?String(P):de,min:Y(Math.max(I,Q[0]+R),R),max:P,onChange:e=>fe(e.target.value),onBlur:we,onKeyDown:Te(we),disabled:z,isValid:z||!se})]})]}):(0,u.jsx)(K,{label:t,field:e,missing:[`filterable`]})},Z={list:`_list_9je85_2`,grid:`_grid_9je85_9`,count:`_count_9je85_22`,countValue:`_countValue_9je85_31`,chip:`_chip_9je85_35`,active:`_active_9je85_41`};function ie(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var Q=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:S},toggleBucketFilter:C,authError:w,isFetchingInitial:E,allowEmptySearch:D}=T(),O=i??a??`checkbox`,k=g?.[e],A=y[e]??[],[j,M]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{M(f??1/0)},[f,k]);let N=b?.[e]??x?.[e],P=(0,c.useMemo)(()=>{let e=[];if(N&&e.push(N.min,N.max),Array.isArray(k))for(let t of k)e.push(Number(t.key));return te(e.filter(Number.isFinite))},[N,k]),F=(0,c.useMemo)(()=>{let e=N?.min??-Number.MAX_VALUE,t=N?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],Y(e[n+1]-P,P)));return t}if(typeof n==`number`&&n>0&&N){let e=[],t=Math.floor(N.min/n)*n;for(let r=t;r<=N.max;r=Y(r+n,P))e.push(i(Y(r,P),Y(r+n-P,P)));return e}return[]},[r,n,N,P]);if(w)return null;if(E||!g)return(0,u.jsx)(U,{title:t,rows:Math.max(1,Math.min(F.length||5,8)),collapsible:m,startCollapsed:h});if(!D&&!S)return null;if(!_?.includes(e))return(0,u.jsx)(K,{label:t,field:e,missing:[`filterable`]});let I=v?.includes(e)&&Array.isArray(k),L=e=>A.some(t=>t.min===e.range.min&&t.max===e.range.max),R=F.map(e=>({bucket:e,count:I?ie(e,k):null}));if(l||(R=R.filter(e=>e.count!==0||L(e.bucket))),R.length===0)return null;let z=R.slice(0,j),B=(t,n)=>{let r=L(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>C(e,t.range,O===`radio`);if(O===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:Z.count,children:[n,(0,u.jsx)(`span`,{className:Z.countValue,children:a})]}):n}if(O===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:Z.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:Z.count,children:[e,(0,u.jsx)(`span`,{className:Z.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:Z.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:Z.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&A.length>0?Z.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?Z.grid:Z.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<R.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>M(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},$={grid:`_grid_1xjna_2`,chip:`_chip_1xjna_21`,chipLabel:`_chipLabel_1xjna_32`},ae=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:$.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:$.chipLabel,children:[e,`: `,t]})})})),oe=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:$.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:$.chipLabel,children:[e,`: `,t,` – `,n]})})})),se=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:$.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:$.chipLabel,children:[e,`: `,t]})})}));function ce(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=T(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:$.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ae,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(oe,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(se,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var le={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},ue=({options:e,noneLabel:t=`None`,control:n,displayType:r,collapsible:i=!0,startCollapsed:a=!1})=>{let o=n??(r===`radio`?`radio`:`select`),{state:{sortableFields:s,sortBy:c,sortAscending:l},setSort:f,isFetchingInitial:p}=T();if(p)return(0,u.jsx)(U,{title:`Sort by`,rows:o===`radio`?3:1,collapsible:i,startCollapsed:a});if(!s||s.length===0)return null;let m=c?`${c}:${l?`asc`:`desc`}`:`none`,h=e?e.filter(e=>s.includes(e.field)?!0:(console.warn(`[SortByPanel] '${e.field}' is not sortable, so "${e.label}" is left out. Mark the field Sortable in the dataset's field configuration.`),!1)).map(e=>({label:e.label,value:`${e.field}:${e.ascending?`asc`:`desc`}`})):s.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}]),g=t===null?h:[{label:t,value:`none`},...h],_=e=>{if(e===`none`||e===``)f(null,!0);else{let[t,n]=e.split(`:`);f(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:i,collapsed:i?a:!1,children:o===`select`?(0,u.jsx)(d.Select,{value:m,onValueChange:_,options:g,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:le.radioGroup,children:g.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:m===e.value,onChange:e=>_(e.target.value)},e.value))})})},de={list:`_list_1y4fk_1`},fe={coverageDepth:500,coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024};function pe(){let{state:{searchSettings:e},setSearchSettings:t,url:n,team:r,dataset:i,authenticatedFetch:a}=T(),[o,s]=(0,c.useState)(!1),[l,p]=(0,c.useState)(null);(0,c.useEffect)(()=>{let e=!0;try{a(`${n}/api/teams/${r}/datasets/${i}/query-parameters`).then(e=>e.ok?e.json():null).then(t=>{e&&t?.effective&&p(t.effective)}).catch(()=>{})}catch{}return()=>{e=!1}},[n,r,i,a]);let m=e.coverageSetup,h=e=>m[e]!==void 0&&m[e]!==null,g=e=>m[e]??l?.coverageSetup?.[e]??fe[e],_=e.coverageDepth??l?.coverageDepth??fe.coverageDepth,v=l?`dataset`:`default`,y=(e,t)=>t?e:`${e} (${v})`,b=e.coverageDepth!==void 0||Object.keys(m).some(e=>h(e)),x=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},S=(e,n)=>{t({[e]:n})},C=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},w=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:de.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>x(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Coverage Depth`,e.coverageDepth!==void 0),type:`number`,value:_.toString(),onChange:e=>x(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>S(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>S(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>S(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:o?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>s(e=>!e),children:o?`Hide Coverage Setup`:`Show Coverage Setup`})}),o&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Whole Query`,h(`coverWholeQuery`)),checked:g(`coverWholeQuery`),onChange:e=>w(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Whole Words`,h(`coverWholeWords`)),checked:g(`coverWholeWords`),onChange:e=>w(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Fuzzy Words`,h(`coverFuzzyWords`)),checked:g(`coverFuzzyWords`),onChange:e=>w(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Joined Words`,h(`coverJoinedWords`)),checked:g(`coverJoinedWords`),onChange:e=>w(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Prefix Suffix`,h(`coverPrefixSuffix`)),checked:g(`coverPrefixSuffix`),onChange:e=>w(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Truncate`,h(`truncate`)),checked:g(`truncate`),onChange:e=>w(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Include Pattern Matches`,h(`includePatternMatches`)),checked:g(`includePatternMatches`),onChange:e=>w(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Levenshtein Max Word Size`,h(`levenshteinMaxWordSize`)),type:`number`,value:g(`levenshteinMaxWordSize`).toString(),onChange:e=>C(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Min Word Size`,h(`minWordSize`)),type:`number`,value:g(`minWordSize`).toString(),onChange:e=>C(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Truncate Word Hit Limit`,h(`truncateWordHitLimit`)),type:`number`,value:g(`truncateWordHitLimit`).toString(),onChange:e=>C(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Truncate Word Hit Tolerance`,h(`truncateWordHitTolerance`)),type:`number`,value:g(`truncateWordHitTolerance`).toString(),onChange:e=>C(`truncateWordHitTolerance`,e.target.value)})}),b&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>t({coverageSetup:void 0,coverageDepth:void 0}),children:`Use the dataset's values`})})]})]})})}var me=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function he(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=T(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await p.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),m=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!m.ok)throw await p.fromResponse(`GetJson`,m);s((await m.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function ge(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=T(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await p.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),m=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!m.ok)throw await p.fromResponse(`GetJson`,m);s((await m.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=ce,exports.BucketFilterPanel=Q,exports.FilterPanelSkeleton=U,exports.IndxApiError=p,exports.RangeFilterPanel=re,exports.SearchContext=C,exports.SearchErrorBoundary=me,exports.SearchInput=E,exports.SearchProvider=w,exports.SearchResult=M,exports.SearchResultRow=B,exports.SearchResults=R,exports.SearchResultsMessage=k,exports.SearchResultsSkeleton=F,exports.SearchSettingsPanel=pe,exports.SearchSetupError=m,exports.SortByPanel=ue,exports.ValueFilterPanel=ee,exports.describeSearchError=h,exports.useHybridSearch=ge,exports.useSearch=T,exports.useSearchContext=T,exports.useVectorSearch=he;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");var p=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}},m=class extends Error{constructor(e){super(e),this.name=`SearchSetupError`}};function h(e,t){let n=e instanceof Error?e.message:String(e);if(e instanceof m)return{kind:`setup`,message:n,technical:n,retryable:!1};if(e instanceof TypeError)return{kind:`unreachable`,message:n,technical:`Network error: no response from the server. Check that it is running and that the url is right.`,retryable:!0};if(e instanceof p){let r={message:n,status:e.status,code:e.code,retryAfterSeconds:e.retryAfterSeconds},i=e.problem?.detail??e.problem?.title,a=t=>`${e.status}${e.code?` ${e.code}`:``}: ${t}`;switch(!0){case e.status===401:return{...r,kind:`unauthorized`,retryable:!1,technical:a(`the key is invalid or has expired. Create a new one in the web console.`)};case e.status===403:return{...r,kind:`forbidden`,retryable:!1,technical:a(`the key does not reach dataset "${t.dataset}" in team "${t.team}".`)};case e.status===404:return{...r,kind:`notFound`,retryable:!1,technical:a(i??`no dataset "${t.dataset}" in team "${t.team}".`)};case e.retryable:return{...r,kind:`notReady`,retryable:!0,technical:a(`the dataset is ${e.problem?.currentState?.toString().toLowerCase()??`not ready`}.`)};case e.status===409:return{...r,kind:`unavailable`,retryable:!1,technical:a(i??`the dataset cannot be searched now.`)};case e.status===429:return{...r,kind:`rateLimited`,retryable:!0,technical:a(i??`too many requests for this key.`)};case e.status>=500:return{...r,kind:`server`,retryable:!0,technical:a(i??`the server ran into a problem.`)};default:return{...r,kind:`unknown`,retryable:!0,technical:a(i??`the request failed.`)}}}return{kind:`unknown`,message:n,technical:n,retryable:!0}}function g({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[g,_]=(0,c.useState)([]),[v,y]=(0,c.useState)([]),[b,x]=(0,c.useState)({}),[S,C]=(0,c.useState)({}),[w,T]=(0,c.useState)({}),[E,D]=(0,c.useState)(0),[O,k]=(0,c.useState)(null),[A,j]=(0,c.useState)(null),[M,N]=(0,c.useState)(0);return(0,c.useEffect)(()=>{(async()=>{k(null),j(null),u(!0);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),new m(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),new m(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),new m(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok)throw c.status===401?(console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),await p.fromResponse(`Dataset status`,c)):c.status===404?(console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),await p.fromResponse(`Dataset status`,c)):(console.error(`[Auth] ❌ Failed to get dataset status:`,c.status),await p.fromResponse(`Dataset status`,c));let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[h,g,v,b]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(()=>null)]);if(!h.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,h.status),await p.fromResponse(`Filterable fields`,h);if(!g.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,g.status),await p.fromResponse(`Facetable fields`,g);if(!v.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,v.status),await p.fromResponse(`Sortable fields`,v);let[S,w,E]=await Promise.all([h.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),g.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),v.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(S||[]),_(w||[]),y(E||[]),D(d);let O={};if(b?.ok){let e=await b.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(O[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,b?.status,`- every selected value will be sent as a value filter`);x(O);let k={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?k=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let A={};if(k.facets){for(let[e,t]of Object.entries(k.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(A[e]={min:Math.min(...n),max:Math.max(...n)})}}let j={};if(k.facets)for(let[e,t]of Object.entries(k.facets))Array.isArray(t)&&(j[e]=t.map(e=>e.key));C(A),T(j),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(r){console.error(`[Auth] ❌ Initialization failed:`,r),(r instanceof Error||typeof r==`object`&&r&&`message`in r)&&console.error(`[Auth] 💡 Error:`,r.message),r instanceof TypeError&&r.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),k(r instanceof Error?r.message:String(r)),j(h(r,{team:t,dataset:n}))}finally{u(!1)}})()},[e,t,n,M]),{token:a,isFetchingInitial:s,authError:O,authErrorInfo:A,retry:()=>N(e=>e+1),initialFacetStats:S,initialFacetKeys:w,filterableFields:d,facetableFields:g,sortableFields:v,fieldTypes:b,totalDocumentCount:E}}async function _(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await p.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function v(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await _(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function y(e,t,n,r,i,a,o={},s={},c={}){let l=Object.entries(e??{}).filter(([,e])=>e.length>0),u=Object.entries(t??{}),d=Object.entries(s??{}).filter(([,e])=>e.length>0),f=(e,{min:t,max:o})=>_(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),p=(e,t)=>{let o=c[e]===`Number`?Number(t):NaN;return Number.isFinite(o)?f(e,{min:o,max:o}):_(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,h,g]=await Promise.all([Promise.all(l.map(async([e,t])=>v(await Promise.all(t.map(t=>p(e,t))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(u.map(([e,t])=>f(e,t))),Promise.all(d.map(async([e,t])=>v(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return v([...m,...h,...g],`and`,n,r,i,a)}function b(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function x({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d,sessionId:f,source:m,count:g,searchTextOf:_}){let v=_?_(e.query):e.query,x=(0,c.useRef)(0),S=(0,c.useRef)(void 0),C=(0,c.useRef)(!1),[w,T]=(0,c.useState)({}),[E,D]=(0,c.useState)(``),[O,k]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldTypes:r.fieldTypes,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let A=e.searchSettings.maxNumberOfRecordsToReturn,j=e.searchSettings.enableCoverage,M=e.searchSettings.removeDuplicates,N=e.searchSettings.coverageDepth,P=e.searchSettings.minimumScore,F=e.searchSettings.coverageSetup,I=e.sortBy,L=e.sortAscending,R=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++x.current;if(t(e=>({...e,isLoading:!0})),v.trim()===``){if(!s)return;c=!0}try{let d=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[h,..._]=await Promise.all([y(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>y({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),b=s||v.trim()!==``,S={text:v,enableCoverage:j,removeDuplicates:M,coverageDepth:N,coverageSetup:F},C={...S,maxNumberOfRecordsToReturn:b?A:0,enableFacets:c,...h?{filter:h}:{},...I?{sortBy:I}:{},...L===void 0?{}:{sortAscending:L}};u&&console.log(`[performSearch] request body:`,JSON.stringify(C,null,2));let R=new URLSearchParams({session:f});m&&R.set(`source`,m),g||R.set(`count`,`false`);let z=e=>n(`${i}/api/teams/${a}/datasets/${o}/search?${R}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[B,...V]=await Promise.all([z(C),..._.map(e=>z({...S,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!B.ok)throw await p.fromResponse(`Search`,B);let H=await B.json(),ee=B.headers.get(`Indx-Query-Id`)??void 0,U=H.truncationIndex??-1,te={};for(let e=0;e<d.length;e++){let t=d[e];if(!V[e].ok)throw await p.fromResponse(`Facets for '${t}'`,V[e]);let n=await V[e].json();n.facets?.[t]!==void 0&&(te[t]=n.facets[t])}let W=H.records||[],ne=W.map(e=>e.documentKey),re=W.map(e=>e.score),ie=[];if(b&&ne.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(ne)});if(!e.ok)throw await p.fromResponse(`Document lookup`,e);ie=(await e.json()).map((e,t)=>({document:e,documentKey:ne[t],score:re[t]}))}let G={};if(c&&H.facets){for(let[e,t]of Object.entries(H.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(G[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==x.current)return;let K=v!==E,ae=v!==O,q=e.facetStats??{};if(K?(q={...r.initialFacetStats,...G},T(q),D(v)):q={...w,...G},ae&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(G))n[e]=t;t(e=>({...e,rangeBounds:n})),k(v)}let J=Object.keys(te).length>0?{...H.facets??{},...te}:H.facets;if(c&&(!J||Object.keys(J).length===0)){J={};for(let[e,t]of Object.entries(r.initialFacetKeys))J[e]=t.map(e=>({key:e,value:null}))}let oe=ie.filter(e=>{let t=v.trim();return t===``||t.length===1?!0:e.score>=P}).map((e,t)=>({...e,position:t+1}));t(e=>({...e,results:oe,error:void 0,errorInfo:void 0,resultsSuppressed:!b,...c?{facets:J,facetStats:q}:{},isLoading:!1,truncationIndex:U,queryId:ee}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==x.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`,errorInfo:h(e,{team:a,dataset:o})}))}},[v,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,I,L,A,j,M,N,F,P,n,r.initialFacetStats,r.initialFacetKeys,r.token,w,E,O,e.rangeBounds,i,a,o,s,u,t,f,m,g]);(0,c.useEffect)(()=>{S.current=R},[R]);let z=(0,c.useRef)(null);(0,c.useEffect)(()=>(z.current?.cancel(),z.current=b(()=>{u&&console.log(`Debounced searchWithFacets fired`),S.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{z.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!C.current&&(s&&S.current?.({enableFacets:l}),C.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!C.current)return;let n=v.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(z.current?.cancel(),S.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),S.current?.({enableFacets:!1}),z.current?.()):S.current?.({enableFacets:!1}),()=>{z.current?.cancel()}},[v,s,l]),(0,c.useEffect)(()=>{if(!C.current||!r.token||e.filterRevision===0)return;let t=v.trim();!s&&t===``||S.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!C.current||!r.token)return;let e=v.trim();!s&&e===``||S.current?.({enableFacets:l})},[I,L]);let B=(0,c.useRef)(!0),V=(0,c.useRef)(v);return(0,c.useEffect)(()=>{if(B.current){B.current=!1;return}if(V.current!==v||!C.current||!r.token)return;if(d.current){d.current=!1,S.current?.({enableFacets:!1});return}let e=v.trim();!s&&e===``||S.current?.({enableFacets:l})},[A,j,M,N,F,P]),(0,c.useEffect)(()=>{V.current=v},[v]),{retrySearch:(0,c.useCallback)(()=>{S.current?.({enableFacets:l})},[l])}}function S(){let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}var C=`Type to search`,w=(0,c.createContext)(void 0),T=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:p={},enableDebugLogs:m=!1,preAuthenticatedToken:h,source:_,count:v=!0,searchTextOf:y})=>{let b=(0,c.useRef)(!1),T=(0,c.useRef)(S()).current,[E,D]=(0,c.useState)({fn:null}),[O,k]=(0,c.useState)(null),A=(0,c.useCallback)(e=>{let t=y??E.fn;return!t||e===O?e:t(e)},[y,E,O]),j=(0,c.useCallback)(e=>D({fn:e}),[]),M=(0,c.useRef)(a),[N,P]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],fieldTypes:{},filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:C,coverageSetup:{...p}}});(0,c.useEffect)(()=>{m&&console.log(`SearchContext mounted on client`)},[m]),(0,c.useEffect)(()=>{P(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[F]=(0,c.useState)(s),I=g({url:t,team:n,dataset:r,preAuthenticatedToken:h,enableDebugLogs:m}),L=(0,c.useCallback)((e,t={})=>{if(!I.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${I.token}`}})},[I.token]),{retrySearch:R}=x({state:N,setState:P,authenticatedFetch:L,auth:I,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:F,enableDebugLogs:m,shouldFetchMore:b,sessionId:T,source:_,count:v,searchTextOf:A}),z=(0,c.useRef)(void 0);z.current=N.queryId;let B=(0,c.useCallback)(async e=>{if(I.token)try{let i=await L(`${t}/api/teams/${n}/datasets/${r}/events/select`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({queryId:z.current,documentKey:e.documentKey,position:e.position,...v?{}:{count:!1}})});m&&(i.ok?console.log(`[select] document ${e.documentKey} at position ${e.position}`):console.warn(`[select] not recorded: ${i.status}`))}catch(e){m&&console.warn(`[select] failed:`,e)}},[I.token,L,t,n,r,m,v]),V=(0,c.useCallback)(e=>{P(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:M.current}}})},[]),H=(0,c.useCallback)(e=>{P(t=>({...t,facetDebounceDelayMillis:e}))},[]),ee=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(M.current=e.maxNumberOfRecordsToReturn),P(t=>{let n={...t.searchSettings,...e};return`coverageSetup`in e?e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup={}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),U=(0,c.useCallback)(e=>{b.current=!0,P(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),te=(0,c.useCallback)((e,t,n=!1)=>{P(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),W=(0,c.useCallback)((e,t)=>{P(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),ne=(0,c.useCallback)((e,t,n)=>{P(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),re=(0,c.useCallback)(()=>{P(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),ie=(0,c.useCallback)((e,t,n=!0)=>{P(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),G=(0,c.useCallback)((e,t=!0)=>{P(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),K=(e,t)=>e.min===t.min&&e.max===t.max,ae=(0,c.useCallback)((e,t,n=!1)=>{P(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>K(e,t))?i.filter(e=>!K(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),q=(0,c.useCallback)((e,t,n=!0)=>{P(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!K(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),J=(0,c.useCallback)((e,t)=>{P(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(w.Provider,{value:{state:N,isFetchingInitial:I.isFetchingInitial||!N.fieldsSeeded,authError:I.authError??void 0,authErrorInfo:I.authErrorInfo??void 0,retry:I.authError?I.retry:R,allowEmptySearch:i,facetsEnabled:F,datasetBounds:I.initialFacetStats,url:t,team:n,dataset:r,authenticatedFetch:L,setQuery:V,toggleFilter:te,setValueMatch:W,setRangeFilter:ne,resetFilters:re,resetSingleFilter:ie,resetRangeFilter:G,toggleBucketFilter:ae,resetBucketFilter:q,setSort:J,setDebounceDelay:H,setSearchSettings:ee,fetchMoreResults:U,selectResult:B,sessionId:T,source:_,count:v,searchText:A(N.query),searchAsTyped:()=>k(N.query),setSearchRewrite:j},children:e})},E=()=>{let e=(0,c.useContext)(w);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},D={strong:.65,strongHide:.45,invite:.4,inviteHide:.3},O=new Set(`hvordan.hva.hvorfor.hvor.hvilken.hvilke.hvilket.hvem.når.kan.skal.må.bør.er.går.finnes.trenger.how.what.why.where.which.who.when.can.should.does.do.is.are.will.could.would`.split(`.`)),k=/^[\d\s\-_.:/]+$|^\w+\.\w+|^[A-Za-z]*[a-z][A-Z]\w*$|^[A-Za-z]+[-_]?\d[\w-]*$/;function A(e){let t=e.trim();return t.length>0&&!t.includes(` `)&&k.test(t)}function j(e){let t=e.trim();if(!t||A(t))return!1;let n=t.split(/\s+/);return t.endsWith(`?`)||n.length>1&&O.has(n[0].toLowerCase())||n.length>=3?!0:t.length>=4}function M(e,t,n=D){return t>=n.strong||e===`strong`&&t>=n.strongHide?`strong`:t>=n.invite||e!==`none`&&t>=n.inviteHide?`invite`:`none`}var N={shareOfTop:.5,topFloor:.2},P={coverFuzzyWords:!1,coverPrefixSuffix:!1,coverJoinedWords:!1,minWordSize:3},F=65535;function I(e,t,n,r=N){if(!n||e.length===0)return e;let i=e[0].score;if(i<r.topFloor*65535)return[];let a=t==null?e:t<0?[]:e.slice(0,t+1),o=r.shareOfTop*i,s=a.findIndex(e=>e.score<o);return s<0?a:a.slice(0,s)}function L(e){let t=e.trim();return t.includes(` `)||t.endsWith(`?`)}async function*R(e){let t=e.getReader(),n=new TextDecoder,r=``;try{for(;;){let{value:e,done:i}=await t.read();if(i)break;r+=n.decode(e,{stream:!0});let a;for(;(a=r.indexOf(`
2
+
3
+ `))>=0;){let e=r.slice(0,a);r=r.slice(a+2);let t=`message`,n=[];for(let r of e.split(`
4
+ `))r.startsWith(`event:`)?t=r.slice(6).trim():r.startsWith(`data:`)&&n.push(r.slice(5).trimStart());n.length&&(yield{event:t,data:JSON.parse(n.join(`
5
+ `))})}}}finally{t.releaseLock()}}function z(e){let t=new URLSearchParams;e.state.queryId&&t.set(`queryId`,e.state.queryId),e.sessionId&&t.set(`session`,e.sessionId),e.source&&t.set(`source`,e.source),e.count===!1&&t.set(`count`,`false`);let n=t.toString();return n?`?${n}`:``}var B=e=>e.toLowerCase().replace(/’/g,`'`).split(/\s+/).filter(Boolean),V=/[?!.,]+$/,H=2;function ee(e,t){let n=0;for(let r of t){let t=B(r);t.length>n&&t.length<=e.length&&t.every((n,r)=>e[e.length-t.length+r].replace(V,``)===n)&&(n=t.length)}return n}function U(e,t,n){let r=0;for(let i of n){let n=B(i);n.length>r&&t+n.length<=e.length&&n.every((n,r)=>e[t+r].replace(V,``)===n)&&(r=n.length)}return r}function te(e,t){let n=e.trim().split(/\s+/).filter(Boolean),r=B(e),i=0,a=[],o=e=>{let t=U(r,i,e);return t&&(a.push(n.slice(i,i+t).join(` `)),i+=t),t>0},s=U(r,0,t.leadIns),c=o(t.leadIns),l=o(t.frames),u=o(t.links);if(!(c&&(s>1||l)||l&&u))return{text:e,taken:[]};o(t.articles);let d=n.slice(i).join(` `).replace(/[?!.]+$/,``).trim();if(!/\p{L}{3,}/u.test(d))return{text:e,taken:[]};let f=d.split(/\s+/).filter(Boolean),p=ee(B(d),t.frames);if(p>0&&f.length-p>=H){let e=f.slice(0,f.length-p).join(` `);if(/\p{L}{3,}/u.test(e))return{text:e,taken:[...a,f.slice(-p).join(` `)]}}return{text:d,taken:a}}var W={available:!1,offer:`none`,p:null,answerable:null,text:``,criteria:null,describes:!1,cutResults:!1,cutRule:N,strictCoverage:!1,filtersWhileTyping:`off`,stands:!1};function ne(e={}){let{enabled:t=!0,pauseMs:n=300}=e,r=E(),{url:i,team:a,dataset:o,authenticatedFetch:s,isFetchingInitial:l,authError:u,state:d}=r,f=(0,c.useRef)(r);f.current=r;let p=(e.text??d.query).trim(),[m,h]=(0,c.useState)(!1),[g,_]=(0,c.useState)(W),v=(0,c.useRef)(D),y=(0,c.useRef)(!0),b=(0,c.useRef)(N),x=(0,c.useRef)(!0),S=(0,c.useRef)(`off`),C=(0,c.useRef)(null),w=(0,c.useRef)(!0),T=(0,c.useRef)(!0),O=(0,c.useRef)(null),k=(0,c.useRef)(`none`),F=(0,c.useRef)(``),I=(0,c.useRef)(0),R=(0,c.useRef)(0);k.current=g.offer;let B=`${i}/api/teams/${a}/datasets/${o}/search-or-ask`,V=t&&!l&&!u;(0,c.useEffect)(()=>{if(h(!1),!V)return;let e=!1;return(async()=>{try{let t=await s(B);if(!t.ok)return;let n=await t.json();if(e||!n.available||!n.settings?.enabled)return;C.current=n.effective?.askPhrases??null,w.current=n.settings.refocusWhileTyping??!0,T.current=n.settings.inviteOnAskPhrase??!0,S.current=n.settings.filtersWhileTyping??`off`,v.current={...D,...n.settings.thresholds},y.current=n.settings.cutWhileAsking??!0,x.current=n.settings.strictCoverageWhileAsking??!0,b.current={shareOfTop:n.settings.cutShareOfTop??N.shareOfTop,topFloor:n.settings.cutTopFloor??N.topFloor},h(!0)}catch{}})(),()=>{e=!0}},[V,B,s]),(0,c.useEffect)(()=>{let{setSearchRewrite:e}=f.current,t=C.current;if(!(!m||!t||!w.current||!e))return e(e=>te(e,t).text),()=>e(null)},[m]),(0,c.useEffect)(()=>{if(!m){_(W);return}if(!p){F.current=``,_({...W,available:m});return}if(!j(p)){A(p)&&_(e=>({...e,available:m,offer:`none`,text:p}));return}T.current&&C.current&&te(p,C.current).taken.length>0&&_(e=>e.offer===`none`?{...e,available:m,offer:`invite`,text:p}:e);let e=setTimeout(async()=>{if(k.current===`strong`&&F.current&&p.startsWith(F.current)){_(e=>({...e,text:p}));return}if(Date.now()<R.current)return;let e=++I.current;F.current=p;try{let t=await s(`${B}/intent${z(f.current)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:p})});if(t.status===429){let e=Number(t.headers.get(`Retry-After`));R.current=Date.now()+(Number.isFinite(e)&&e>0?e:60)*1e3;return}if(t.status===409){h(!1);return}if(!t.ok)return;let{p:n,answerable:r,criteria:i,cutWhileAsking:a,cutShareOfTop:o,cutTopFloor:c,strictCoverageWhileAsking:l,filtersWhileTyping:u}=await t.json();if(u!=null&&(S.current=u),e!==I.current)return;a!=null&&(y.current=a),l!=null&&(x.current=l),o!=null&&c!=null&&(b.current={shareOfTop:o,topFloor:c}),_(e=>{let t=M(e.offer,n,v.current),a=i??null,o=a!=null&&a>=v.current.strong,s=t===`strong`&&!L(p)?`invite`:t,c=o?`strong`:s,l=c===`strong`&&!(o&&a>n);return{available:!0,offer:c,p:n,answerable:r??null,text:p,criteria:a,describes:o,cutResults:y.current&&l,cutRule:b.current,strictCoverage:x.current&&l,filtersWhileTyping:S.current,stands:!0}})}catch{}},n);return()=>clearTimeout(e)},[p,m,B,s,n]);let H=m&&g.strictCoverage;return(0,c.useEffect)(()=>{let{setSearchSettings:e,state:t}=f.current;if(H){if(O.current)return;let n=t.searchSettings.coverageSetup??{};O.current=Object.fromEntries(Object.keys(P).map(e=>[e,n[e]])),e({coverageSetup:{...P}})}else O.current&&=(e({coverageSetup:{...O.current}}),null)},[H]),m?{...g,stands:!!g.text&&p.startsWith(g.text)}:W}var re={withOffer:`_withOffer_15olh_2`,offerRow:`_offerRow_15olh_10`,offerHint:`_offerHint_15olh_18`,kbd:`_kbd_15olh_27`},ie=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,showStatus:a=!0,onAsk:o,searchOrAsk:s,askOffer:c=`chip`,onKeyDown:l,...p})=>{let{state:{query:m,filters:h,rangeFilters:g,bucketFilters:_,results:v,truncationIndex:y,searchSettings:b},setQuery:x,resetFilters:S}=E(),C=Object.values(h).reduce((e,t)=>e+t.length,0)+Object.keys(g).length+Object.values(_??{}).reduce((e,t)=>e+t.length,0),w=m.length>0,T=w&&v!==null&&v.length===0,D=w&&b.enableCoverage&&v!==null&&v.length>0&&y===-1,O=ne({enabled:!!o&&!s}),k=s??O,A=!!o&&w&&k.offer!==`none`&&k.stands,j=k.available&&b.placeholderText===`Type to search`?`Search or ask`:b.placeholderText,M=e=>{l?.(e),!(e.defaultPrevented||e.key!==`Enter`||!o||k.offer!==`strong`||!k.stands||!m.trim())&&(e.preventDefault(),o(m.trim()))},N=()=>{x(``),C>0&&S()},P=()=>o(m.trim()),F=(0,u.jsxs)(d.SearchField,{type:`text`,value:m,onChange:e=>x(e.target.value),placeholder:j,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,clearable:!1,onKeyDown:M,...p,children:[A&&c===`chip`&&(0,u.jsx)(d.Button,{variant:k.offer===`strong`?`primary`:`ghost`,size:`micro`,iconLeft:(0,u.jsx)(f.Ai_agent,{}),iconRight:k.offer===`strong`?(0,u.jsx)(f.Enter_key,{}):void 0,onClick:P,title:k.offer===`strong`?`Enter asks`:void 0,children:k.offer===`strong`?`Ask`:`Ask about this`}),a&&T&&(0,u.jsx)(d.Chip,{children:`No results`}),a&&D&&(0,u.jsx)(d.Tooltip,{content:`No direct match. Showing the nearest results.`,children:(0,u.jsx)(`span`,{children:(0,u.jsx)(d.Chip,{icon:(0,u.jsx)(f.Fuzzy_search,{}),children:`Nearest`})})}),a&&C>0&&(0,u.jsx)(d.Tooltip,{content:`${C} filter${C===1?``:`s`} active`,children:(0,u.jsx)(`span`,{children:(0,u.jsx)(d.Chip,{icon:(0,u.jsx)(f.Filter,{}),color:`var(--CLightBlue)`,textColor:`#080809`,children:C})})}),r&&(w||C>0)&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:N,"aria-label":C>0?`Clear search and filters`:`Clear search`,children:`Clear`})]});if(c!==`below`||!o||!k.available)return F;let I=k.offer===`strong`;return(0,u.jsxs)(`div`,{className:re.withOffer,children:[F,(0,u.jsx)(`div`,{className:re.offerRow,"aria-live":`polite`,children:A&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(d.Button,{variant:I?`primary`:`ghost`,iconLeft:(0,u.jsx)(f.Ai_agent,{}),onClick:P,children:I?`Ask the assistant`:`Ask about this`}),I&&(0,u.jsxs)(`span`,{className:re.offerHint,children:[(0,u.jsx)(`kbd`,{className:re.kbd,children:`↵`}),` to ask`]})]})})]})},G={message:`_message_1mgfk_1`,icon:`_icon_1mgfk_10`,title:`_title_1mgfk_15`,detail:`_detail_1mgfk_20`,technical:`_technical_1mgfk_25`,button:`_button_1mgfk_33`},K={unreachable:{icon:f.Cloud,title:`Search is unavailable`,detail:`The search server can’t be reached right now.`},unauthorized:{icon:f.Key,title:`Search is unavailable`,detail:`The search key was not accepted.`},forbidden:{icon:f.Lock,title:`Search is unavailable`,detail:`This search key doesn’t have access to these results.`},notFound:{icon:f.Search,title:`Nothing to search here`,detail:`The collection this page searches doesn’t exist.`},notReady:{icon:f.Hour_glass,title:`Search is getting ready`,detail:`Results will appear in a moment.`},unavailable:{icon:f.Warning,title:`Search is unavailable`,detail:`The collection can’t be searched right now.`},rateLimited:{icon:f.Speedometer,title:`Too many searches`,detail:`Wait a moment, then try again.`},server:{icon:f.Warning,title:`Something went wrong`,detail:`The search server ran into a problem.`},setup:{icon:f.Warning,title:`Search isn’t set up`,detail:`This page is missing part of its search setup.`},unknown:{icon:f.Warning,title:`Something went wrong`,detail:`The search couldn’t be completed.`}},ae=({error:e,onRetry:t,hideTechnical:n=!1})=>{let{icon:r,title:i,detail:a}=K[e.kind];(0,c.useEffect)(()=>{if(e.kind!==`notReady`||!t)return;let n=setTimeout(t,(e.retryAfterSeconds??2)*1e3);return()=>clearTimeout(n)},[e,t]);let o=e.retryable&&e.kind!==`notReady`&&t;return(0,u.jsxs)(`div`,{className:G.message,role:`alert`,children:[(0,u.jsx)(`span`,{className:G.icon,children:(0,u.jsx)(r,{size:70,color:`var(--lv4)`})}),(0,u.jsx)(`div`,{className:G.title,children:i}),(0,u.jsx)(`div`,{className:G.detail,children:a}),!n&&(0,u.jsx)(`code`,{className:G.technical,children:e.technical}),o&&(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,className:G.button,onClick:t,children:`Try again`})]})},q={placeholder:`_placeholder_1qr5o_1`,invalid:`_invalid_1qr5o_11`,searchedFor:`_searchedFor_1qr5o_17`},J={row:`_row_11svi_1`,content:`_content_11svi_22`,indexNumber:`_indexNumber_11svi_36`,scoreNumber:`_scoreNumber_11svi_44`,skeletonBars:`_skeletonBars_11svi_53`},oe=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:J.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:J.indexNumber,children:t}),(0,u.jsx)(`div`,{className:J.content,children:e?(0,u.jsxs)(`div`,{className:J.skeletonBars,children:[(0,u.jsx)(d.Skeleton,{level:3,height:12,width:`${o[0]}%`,delay:a,appear:!1}),(0,u.jsx)(d.Skeleton,{level:3,height:8,width:`${o[1]}%`,delay:a+.05,appear:!1})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:J.scoreNumber,children:n})]}),se={wrapper:`_wrapper_f970z_6`,skeletonAppear:`_skeletonAppear_f970z_1`},ce=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],le=({rows:e=6})=>(0,u.jsx)(`div`,{className:se.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(oe,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:ce[t%ce.length]},t))}),ue=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function de(e){let t=e.trim();if(!t.startsWith(`[`)||!t.endsWith(`]`))return;try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e))}catch{}if(!ue.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var fe=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,searchOrAsk:r,showScore:i,children:a})=>{let{state:{results:o,resultsSuppressed:s,searchSettings:l,truncationIndex:p,query:m,error:h,errorInfo:g},isFetchingInitial:_,authError:v,authErrorInfo:y,retry:b,allowEmptySearch:x,fetchMoreResults:S,selectResult:C,searchText:w,searchAsTyped:T}=E(),D=t??30,[O,k]=(0,c.useState)(D),A=(0,c.useRef)(0),j=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=m!==j.current;(!o||o.length<A.current||e)&&k(D),A.current=o?.length??0,j.current=m},[o,D,m]);let M=o?I(o,p,!!r?.cutResults,r?.cutRule):[],N=w!=null&&w.trim()!==m.trim()?w:null,P=o&&M.length>O,F=()=>{let e=O+D;k(e),o&&e>=o.length&&(!p||p===-1||p>o.length)&&S(o.length+D)};if(_)return x?(0,u.jsx)(le,{rows:D}):(0,u.jsx)(`div`,{className:q.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let L=v??h;return L?(0,u.jsx)(ae,{error:(v?y:g)??{kind:`unknown`,message:L,technical:L,retryable:!1},onRetry:b}):s||o===null?(0,u.jsx)(`div`,{className:q.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):M.length===0?null:(0,u.jsxs)(u.Fragment,{children:[N&&(0,u.jsxs)(`div`,{className:q.searchedFor,"aria-live":`polite`,children:[(0,u.jsxs)(`span`,{children:[`Searching for `,(0,u.jsx)(`strong`,{children:N})]}),T&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:T,children:`Search for your exact words`})]}),(0,u.jsx)(`div`,{children:M.slice(0,O).map((t,r)=>{let o=t.document,s=t.score,c;try{c=typeof o==`string`?JSON.parse(o):o}catch{return(0,u.jsx)(`div`,{className:q.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},r)}let d;if(e&&e.length>0){d={};for(let t of e)t in c&&(d[t]=c[t])}else d={...c};if(n)for(let e in d){let t=d[e];if(typeof t==`string`){let n=de(t);n&&(d[e]=n)}}return(0,u.jsx)(oe,{index:r,score:s,showScore:i??l.showScore,children:a(d,{result:t,select:()=>C?.(t)??Promise.resolve()})},r)})}),P&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:F,children:m.trim()===``?`Load more`:p!==-1&&p!==void 0&&p>0?`Load results ${O+1}-${Math.min(O+D,o.length,p)} of ${p}`:`Load more`})})]})},pe={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},me=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[pe.row,e===`title`?pe.title:``].filter(Boolean).join(` `),children:t}),he={listRows:`_listRows_13obt_2`,sliderArea:`_sliderArea_13obt_8`,inputRow:`_inputRow_13obt_15`,histogramRow:`_histogramRow_13obt_22`},ge=[65,80,55,72,60,75,50,68],_e=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:he.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:he.histogramRow}),(0,u.jsx)(d.Skeleton,{height:6}),(0,u.jsxs)(`div`,{className:he.inputRow,children:[(0,u.jsx)(d.Skeleton,{width:40,height:20,delay:.1}),(0,u.jsx)(d.Skeleton,{width:40,height:20,delay:.15})]})]}):(0,u.jsx)(`div`,{className:he.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(d.Skeleton,{width:`${ge[t%ge.length]}%`,delay:t*.05},t))})}),Y={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},ve={notice:`_notice_4sel0_1`,technical:`_technical_4sel0_9`},ye=({label:e,field:t,missing:n})=>{let r=n.map(e=>e[0].toUpperCase()+e.slice(1)).join(` and `);return(0,c.useEffect)(()=>{console.warn(`[intrface] The panel for "${t}" is hidden: the field is not ${r}. Mark it ${r} in the dataset's field configuration (web console → Fields).`)},[t,r]),(0,u.jsx)(d.FilterPanelBase,{title:e??t,collapsible:!1,children:(0,u.jsxs)(`div`,{className:ve.notice,children:[(0,u.jsx)(`span`,{children:`Not available`}),(0,u.jsxs)(`code`,{className:ve.technical,children:[t,`: not `,r]})]})})},be=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:S,filters:C,query:w},toggleFilter:T,setValueMatch:D,authError:O,isFetchingInitial:k,allowEmptySearch:A}=E(),j=l??f??`checkbox`,M=j===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,M)},[e,M,D]);let N=(0,c.useRef)(null),[P,F]=(0,c.useState)(a);if((0,c.useEffect)(()=>{F(a)},[b?.[e],a]),!A&&!w||O)return null;if(k||!b)return j===`toggle`?(0,u.jsx)(_e,{rows:1,collapsible:!1}):(0,u.jsx)(_e,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:w??``,filters:C,facets:b})||!v&&!w&&Object.keys(C).length<1)return null;if(!x?.includes(e)||!S?.includes(e)){let n=[];return x?.includes(e)||n.push(`filterable`),S?.includes(e)||n.push(`facetable`),(0,u.jsx)(ye,{label:t,field:e,missing:n})}let I=b?.[e]??(j===`toggle`?[]:void 0);if(!I||!Array.isArray(I))return null;let L=C?.[e]??[];n&&!N.current&&I.length>0&&(N.current=I.reduce((e,t)=>(e[t.key]=t.value,e),{}));let R=new Map;n&&N.current&&Object.keys(N.current).forEach(e=>{R.set(e,0)}),I.forEach(e=>{R.set(e.key,e.value)});let z=new Set([`true`,`false`,`null`]),B=Array.from(R.keys()),V=j===`toggle`&&(B.length>0&&B.every(e=>z.has(e))||B.length===0&&L.length>0);if(V&&R.has(`null`)){let e=R.get(`null`)??0,t=R.get(`false`)??0;R.set(`false`,t+e),R.delete(`null`)}if(j===`toggle`&&!V)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:Y.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(V){let n=R.get(`true`),r=typeof n==`number`?n:null,i=L.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:Y.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>T(e,`true`),disabled:a}),` `,o]})})}let H=Array.from(R.entries());if(g||(H=H.filter(([e])=>e!==`null`)),H.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=H.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=H.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));H=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=H.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=H.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));H=[...t,...n]}else{let e=H.filter(([,e])=>typeof e==`number`&&e>0),t=H.filter(([,e])=>e===0||e===null);H=[...e,...t]}let ee=typeof a==`number`&&H.length>a,U=ee?H.slice(0,P):H,te=(t,n)=>{let r=L.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>T(e,t,j===`radio`);switch(j){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:Y.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:Y.chip,title:t,children:(0,u.jsx)(`span`,{className:Y.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:Y.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:Y.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:Y.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:Y.count,children:[n,(0,u.jsx)(`span`,{className:Y.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:Y.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:Y.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&L.length>0?Y.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?Y.grid:Y.list,style:{listStyle:`none`,padding:0,margin:0},children:[U.map(([e,t])=>(0,u.jsx)(`li`,{children:te(e,t)},e)),ee&&P<H.length&&(()=>{let e=H.length-P,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:Y.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>F(e=>e+50),children:`Show ${t} more of ${H.length} total`})})})()]})})},X={disabledMessage:`_disabledMessage_adany_1`,histogram:`_histogram_adany_6`,histogramLayer:`_histogramLayer_adany_14`,histogramLive:`_histogramLive_adany_22`,histogramLit:`_histogramLit_adany_23`,histogramFill:`_histogramFill_adany_30`,histogramBar:`_histogramBar_adany_43`,histogramSeparators:`_histogramSeparators_adany_61`,histogramSeparator:`_histogramSeparator_adany_48`,active:`_active_adany_76`};function xe(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function Se(e){let t=0;for(let n of e)t=Math.max(t,xe(n));return t===0?1:Number((10**-t).toFixed(t))}function Z(e,t){return Number(e.toFixed(xe(t)))}function Ce(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(xe(n)))}function we(e,t,n){let r=Math.ceil(Number(((e-t)/n).toFixed(6)));return Number((t+r*n).toFixed(xe(n)))}var Te=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:S,facetDebounceDelayMillis:C},setRangeFilter:w,resetRangeFilter:T,allowEmptySearch:D,authError:O,isFetchingInitial:k}=E(),A=i??a??`input`,j=_?.[e]!==void 0,M=_?.[e]??{min:n,max:r},N=M.min,P=M.max,F=v?.[e]??M,I=Math.max(N,Math.min(P,F.min)),L=Math.max(N,Math.min(P,F.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(xe(N),xe(P)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,xe(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,N,P,y,e]),z=j&&N===P,B=z?n:N,V=z?r:P,H=we(V+R,B,R),ee=e=>Math.min(H,Math.max(B,e)),U=g?.[e],te=o&&U!==void 0?X.active:void 0,W=U?U.min:N,ne=U?U.max:P,re=U!==void 0,ie=I!==N||L!==P,[G,K]=c.default.useState([W,ne]),[ae,q]=c.default.useState(!1),[J,oe]=c.default.useState(!1),[se,ce]=c.default.useState(String(W)),[le,ue]=c.default.useState(String(ne)),de=c.default.useMemo(()=>{let e=xe(R);return{width:`calc(${Math.max(3,N.toFixed(e).length,P.toFixed(e).length,se.length,le.length)+1}ch + 20px)`}},[R,N,P,se,le]);c.default.useEffect(()=>{ce(String(G[0])),ue(String(G[1]))},[G]);let{finalMin:fe,finalMax:pe,isValidMin:me,isValidMax:he}=c.default.useMemo(()=>{let[e,t]=G,n=Math.max(N,Math.min(P,e)),r=Math.max(N,Math.min(P,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=N&&i<=a,isValidMax:a<=P&&a>=i}},[G,N,P]);c.default.useEffect(()=>{if(z)return;if(G[0]===N&&G[1]===P){q(!1),oe(!1);return}let t=C??500,n=setTimeout(()=>{q(!me),oe(!he)},300),r=setTimeout(()=>{me&&he&&(fe===N&&pe===P?T(e,!1):w(e,fe,pe))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[fe,pe,me,he,N,P,e,T,w,C,z]),c.default.useEffect(()=>{K([W,ne]),q(!1),oe(!1)},[W,ne,e]);let ge=c.default.useCallback(e=>{let t=Z(Math.min(e[0],e[1]-R),R);return[t,Z(Math.max(e[1]-R,t),R)]},[R]),Y=c.default.useCallback(e=>{if(z)return;let[t,n]=ge(e);K([Math.max(N,Math.min(L,t)),Math.max(I,Math.min(P,n))])},[z,ge,N,P,I,L]),ve=c.default.useCallback(t=>{if(z)return;let[n,r]=ge(t),i=Math.max(N,Math.min(L,n)),a=Math.max(I,Math.min(P,r));i===N&&a===P?(K([N,P]),T(e,!0)):K([i,a])},[z,ge,N,P,I,L,e,T]),be=c.default.useRef(null),Se=c.default.useCallback((t,n)=>{if(z)return;let r=be.current;if(U&&r&&r.start===t&&r.last===n){be.current=null,K([N,P]),T(e,!0);return}let i=Ce(Math.max(N,I,t),N,R),a=Math.max(i,Ce(Math.min(P,L,n),N,R));be.current={start:t,last:n},K([i,a])},[z,U,N,P,I,L,R,e,T]),Te=c.default.useCallback(()=>{if(z)return;let e=se.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ce(String(G[0]));return}let n=Math.max(N,Math.min(L,t));n<G[1]?K([n,G[1]]):K([N,G[1]]),ce(String(n<G[1]?n:N))},[z,se,G,N,L]),Q=c.default.useCallback(()=>{if(z)return;let e=le.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ue(String(G[1]));return}let n=Math.max(I,Math.min(P,t));n>G[0]?K([G[0],n]):K([G[0],P]),ue(String(n>G[0]?n:P))},[z,le,G,I,P]),Ee=e=>t=>{t.key===`Enter`&&e()},[De,Oe]=c.default.useState(null),ke=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${N}:${P}`;if(t===ke.current&&ke.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(ke.current=t,Oe(r))},[N,P,y,e,f]);let Ae=c.default.useMemo(()=>{if(!f||!De||De.length===0)return[];let e=P-N;if(e<=0)return[];let t=p??Math.max(R,Z(Math.ceil(e/20/R)*R,R)),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=N+r*t,a=N+(r+1)*t,o=r===n-1,s=De.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=P)}).reduce((e,t)=>e+t.value,0),c=o?P:Z(a-R,R);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:Z(c+R,R)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:Math.max(e.barEnd,H))-e.bucketStart}))},[f,De,N,P,p,R,H]),je=c.default.useMemo(()=>Math.max(...Ae.map(e=>e.count),1),[Ae]);return f&&!k&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?null:k?(0,u.jsx)(_e,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!S?null:b?.includes(e)?A===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:te,children:[z&&(0,u.jsxs)(`div`,{className:X.disabledMessage,children:[`No adjustable range (all results have the same value: `,N,`).`]}),f&&Ae.length===0&&(0,u.jsx)(`div`,{className:X.histogram}),f&&Ae.length>0&&(()=>{let[e,t]=L>I&&(I>N||L<P)?[I,L]:[B,V],n=Math.max(fe,e),r=Math.min(pe,t),i=H,a=i-B||1,o=e=>Math.max(0,Math.min(1,(e-B)/a)),s=e=>e>=V?0:Math.max(0,Math.min(1,(i-(e+R))/a)),c=o(n),l=r<n?1-c:s(r),d=e=>`calc(10px + (100% - 20px) * ${e})`,f=`inset(0 ${d(l)} 0 ${d(c)})`,p=`inset(0 ${d(s(t))} 0 ${d(o(e))})`,m=n=>n.last<e||n.bucketStart>t,h=Ae.slice(1).map(e=>d((e.bucketStart-B)/a)),g=Ae.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/je*20))}));return(0,u.jsxs)(`div`,{className:X.histogram,children:[(0,u.jsx)(`div`,{className:X.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:X.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>Se(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:X.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${X.histogramLayer} ${X.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:X.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:X.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${X.histogramLayer} ${X.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:X.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:X.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:X.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:X.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:B,max:H,step:R,stepMarks:h,value:z?[B,H]:[ee(Ce(fe,B,R)),ee(Ce(pe+R,B,R))],isRange:!0,onChange:e=>Y(e),onFinalChange:e=>ve(e),disabled:z,activeMin:I,activeMax:ee(Z(L+R,R)),isFaceted:ie,highlightFaceted:re,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:de,value:z?String(N):se,min:N,max:Z(Math.min(L,G[1]-R),R),onChange:e=>ce(e.target.value),onBlur:Te,onKeyDown:Ee(Te),disabled:z,isValid:z||!ae}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:de,value:z?String(P):le,min:Z(Math.max(I,G[0]+R),R),max:P,onChange:e=>ue(e.target.value),onBlur:Q,onKeyDown:Ee(Q),disabled:z,isValid:z||!J})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:te,children:[z&&(0,u.jsxs)(`div`,{className:X.disabledMessage,children:[`No adjustable range (all results have the same value: `,N,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:de,value:z?String(N):se,min:N,max:Z(Math.min(L,G[1]-R),R),onChange:e=>ce(e.target.value),onBlur:Te,onKeyDown:Ee(Te),disabled:z,isValid:z||!ae}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:de,value:z?String(P):le,min:Z(Math.max(I,G[0]+R),R),max:P,onChange:e=>ue(e.target.value),onBlur:Q,onKeyDown:Ee(Q),disabled:z,isValid:z||!J})]})]}):(0,u.jsx)(ye,{label:t,field:e,missing:[`filterable`]})},Q={list:`_list_9je85_2`,grid:`_grid_9je85_9`,count:`_count_9je85_22`,countValue:`_countValue_9je85_31`,chip:`_chip_9je85_35`,active:`_active_9je85_41`};function Ee(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var De=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:S},toggleBucketFilter:C,authError:w,isFetchingInitial:T,allowEmptySearch:D}=E(),O=i??a??`checkbox`,k=g?.[e],A=y[e]??[],[j,M]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{M(f??1/0)},[f,k]);let N=b?.[e]??x?.[e],P=(0,c.useMemo)(()=>{let e=[];if(N&&e.push(N.min,N.max),Array.isArray(k))for(let t of k)e.push(Number(t.key));return Se(e.filter(Number.isFinite))},[N,k]),F=(0,c.useMemo)(()=>{let e=N?.min??-Number.MAX_VALUE,t=N?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],Z(e[n+1]-P,P)));return t}if(typeof n==`number`&&n>0&&N){let e=[],t=Math.floor(N.min/n)*n;for(let r=t;r<=N.max;r=Z(r+n,P))e.push(i(Z(r,P),Z(r+n-P,P)));return e}return[]},[r,n,N,P]);if(w)return null;if(T||!g)return(0,u.jsx)(_e,{title:t,rows:Math.max(1,Math.min(F.length||5,8)),collapsible:m,startCollapsed:h});if(!D&&!S)return null;if(!_?.includes(e))return(0,u.jsx)(ye,{label:t,field:e,missing:[`filterable`]});let I=v?.includes(e)&&Array.isArray(k),L=e=>A.some(t=>t.min===e.range.min&&t.max===e.range.max),R=F.map(e=>({bucket:e,count:I?Ee(e,k):null}));if(l||(R=R.filter(e=>e.count!==0||L(e.bucket))),R.length===0)return null;let z=R.slice(0,j),B=(t,n)=>{let r=L(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>C(e,t.range,O===`radio`);if(O===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:Q.count,children:[n,(0,u.jsx)(`span`,{className:Q.countValue,children:a})]}):n}if(O===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:Q.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:Q.count,children:[e,(0,u.jsx)(`span`,{className:Q.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:Q.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:Q.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&A.length>0?Q.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?Q.grid:Q.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<R.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>M(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Oe={grid:`_grid_1xjna_2`,chip:`_chip_1xjna_21`,chipLabel:`_chipLabel_1xjna_32`},ke=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Oe.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Oe.chipLabel,children:[e,`: `,t]})})})),Ae=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Oe.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Oe.chipLabel,children:[e,`: `,t,` – `,n]})})})),je=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Oe.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Oe.chipLabel,children:[e,`: `,t]})})}));function Me(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=E(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Oe.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ke,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(Ae,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(je,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var Ne={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},Pe=({options:e,noneLabel:t=`None`,control:n,displayType:r,collapsible:i=!0,startCollapsed:a=!1})=>{let o=n??(r===`radio`?`radio`:`select`),{state:{sortableFields:s,sortBy:c,sortAscending:l},setSort:f,isFetchingInitial:p}=E();if(p)return(0,u.jsx)(_e,{title:`Sort by`,rows:o===`radio`?3:1,collapsible:i,startCollapsed:a});if(!s||s.length===0)return null;let m=c?`${c}:${l?`asc`:`desc`}`:`none`,h=e?e.filter(e=>s.includes(e.field)?!0:(console.warn(`[SortByPanel] '${e.field}' is not sortable, so "${e.label}" is left out. Mark the field Sortable in the dataset's field configuration.`),!1)).map(e=>({label:e.label,value:`${e.field}:${e.ascending?`asc`:`desc`}`})):s.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}]),g=t===null?h:[{label:t,value:`none`},...h],_=e=>{if(e===`none`||e===``)f(null,!0);else{let[t,n]=e.split(`:`);f(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:i,collapsed:i?a:!1,children:o===`select`?(0,u.jsx)(d.Select,{value:m,onValueChange:_,options:g,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:Ne.radioGroup,children:g.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:m===e.value,onChange:e=>_(e.target.value)},e.value))})})},Fe={list:`_list_1y4fk_1`},Ie={coverageDepth:500,coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024};function Le(){let{state:{searchSettings:e},setSearchSettings:t,url:n,team:r,dataset:i,authenticatedFetch:a}=E(),[o,s]=(0,c.useState)(!1),[l,p]=(0,c.useState)(null);(0,c.useEffect)(()=>{let e=!0;try{a(`${n}/api/teams/${r}/datasets/${i}/query-parameters`).then(e=>e.ok?e.json():null).then(t=>{e&&t?.effective&&p(t.effective)}).catch(()=>{})}catch{}return()=>{e=!1}},[n,r,i,a]);let m=e.coverageSetup,h=e=>m[e]!==void 0&&m[e]!==null,g=e=>m[e]??l?.coverageSetup?.[e]??Ie[e],_=e.coverageDepth??l?.coverageDepth??Ie.coverageDepth,v=l?`dataset`:`default`,y=(e,t)=>t?e:`${e} (${v})`,b=e.coverageDepth!==void 0||Object.keys(m).some(e=>h(e)),x=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},S=(e,n)=>{t({[e]:n})},C=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},w=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:Fe.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>x(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Coverage Depth`,e.coverageDepth!==void 0),type:`number`,value:_.toString(),onChange:e=>x(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>S(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>S(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>S(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:o?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>s(e=>!e),children:o?`Hide Coverage Setup`:`Show Coverage Setup`})}),o&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Whole Query`,h(`coverWholeQuery`)),checked:g(`coverWholeQuery`),onChange:e=>w(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Whole Words`,h(`coverWholeWords`)),checked:g(`coverWholeWords`),onChange:e=>w(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Fuzzy Words`,h(`coverFuzzyWords`)),checked:g(`coverFuzzyWords`),onChange:e=>w(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Joined Words`,h(`coverJoinedWords`)),checked:g(`coverJoinedWords`),onChange:e=>w(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Cover Prefix Suffix`,h(`coverPrefixSuffix`)),checked:g(`coverPrefixSuffix`),onChange:e=>w(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Truncate`,h(`truncate`)),checked:g(`truncate`),onChange:e=>w(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:y(`Include Pattern Matches`,h(`includePatternMatches`)),checked:g(`includePatternMatches`),onChange:e=>w(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Levenshtein Max Word Size`,h(`levenshteinMaxWordSize`)),type:`number`,value:g(`levenshteinMaxWordSize`).toString(),onChange:e=>C(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Min Word Size`,h(`minWordSize`)),type:`number`,value:g(`minWordSize`).toString(),onChange:e=>C(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Truncate Word Hit Limit`,h(`truncateWordHitLimit`)),type:`number`,value:g(`truncateWordHitLimit`).toString(),onChange:e=>C(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:y(`Truncate Word Hit Tolerance`,h(`truncateWordHitTolerance`)),type:`number`,value:g(`truncateWordHitTolerance`).toString(),onChange:e=>C(`truncateWordHitTolerance`,e.target.value)})}),b&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>t({coverageSetup:void 0,coverageDepth:void 0}),children:`Use the dataset's values`})})]})]})})}var Re=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function ze(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=E(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await p.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),m=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!m.ok)throw await p.fromResponse(`GetJson`,m);s((await m.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function Be(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=E(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await p.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),m=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!m.ok)throw await p.fromResponse(`GetJson`,m);s((await m.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}function Ve(e){let t=e.trim().toLowerCase();return t===`true`||t===`false`||t!==``&&!Number.isNaN(Number(t))}function He(e,t){if(!t)return null;let n=[];for(let[e,r]of Object.entries(t))for(let t of r??[])t?.key&&t.key.trim().length>=2&&!Ve(t.key)&&n.push({field:e,value:t.key});n.sort((e,t)=>t.value.length-e.value.length);let r=` `+e.toLowerCase()+` `,i=[];for(let e of n){let t=` `+e.value.toLowerCase().trim()+` `,n=r.indexOf(t);n<0||(i.push({field:e.field,value:e.value}),r=r.slice(0,n)+` `+r.slice(n+t.length))}return i.length===0?null:{filters:i,text:r.replace(/[?!.,]+\s*$/,``).replace(/\s+/g,` `).trim(),sort:null}}function Ue(e={}){let t=E(),{url:n,team:r,dataset:i,authenticatedFetch:a,setQuery:o,toggleFilter:s,setRangeFilter:l,setSort:u}=t,{auto:d}=e,f=(0,c.useRef)(t);f.current=t;let[p,m]=(0,c.useState)(null),[h,g]=(0,c.useState)(``),[_,v]=(0,c.useState)(!1),y=(0,c.useRef)(0),b=(0,c.useCallback)(async e=>{let t=++y.current;v(!0);try{let o=await a(`${n}/api/teams/${r}/datasets/${i}/search-or-ask/filters${z(f.current)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e})});if(t!==y.current)return;let s=o.ok?await o.json():null;m(s&&s.filters.length>0?s:null),g(e)}catch{t===y.current&&m(null)}finally{t===y.current&&v(!1)}},[n,r,i,a]),x=(0,c.useCallback)(e=>{o(e.text);let t={...f.current.state.rangeBounds,...f.current.datasetBounds};for(let n of e.filters)n.value==null?l(n.field,n.min??t[n.field]?.min??0,n.max??t[n.field]?.max??2**53-1):s(n.field,n.value);e.sort&&u(e.sort.field,!e.sort.descending),m(null)},[o,s,l,u]),S=(0,c.useCallback)(()=>{y.current++,m(null),v(!1)},[]),C=(0,c.useRef)(new Set),[w,T]=(0,c.useState)(null),D=d?.filtersWhileTyping??`off`,O=!!d&&d.available&&d.describes&&d.offer===`strong`&&D!==`off`,k=d?.text??``,A=(0,c.useRef)(k);A.current=k;let j=t.state.facets,M=t.state.isLoading||t.facetsEnabled&&j==null;return(0,c.useEffect)(()=>{if(!O||!k||M||C.current.has(k))return;C.current.add(k);let e=He(k,j);if(e&&(C.current.add(e.text),x(e),T(k)),D!==`model`)return;let t=e?e.text:k;if(!t)return;let o=()=>A.current===k||A.current===t;(async()=>{let s=++y.current;v(!0);try{let c=await a(`${n}/api/teams/${r}/datasets/${i}/search-or-ask/filters${z(f.current)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:t})});if(s!==y.current||!o())return;let l=c.ok?await c.json():null;l&&l.filters.length>0&&(C.current.add(l.text),x({filters:[...e?.filters??[],...l.filters],text:l.text,sort:l.sort}),T(k))}catch{}finally{s===y.current&&v(!1)}})()},[O,k,D,M,j,x,n,r,i,a]),{suggestion:p,forText:h,loading:_,suggest:b,apply:x,clear:S,appliedText:w}}var We={question:``,status:`idle`,answer:``,sources:[],steps:[]};function Ge(){let e=E(),{url:t,team:n,dataset:r,authenticatedFetch:i}=e,a=(0,c.useRef)(e);a.current=e;let[o,s]=(0,c.useState)(We),l=(0,c.useRef)(o);l.current=o;let u=(0,c.useRef)(null),d=(0,c.useCallback)(async(e,o=[])=>{let c=e.trim();if(!c)return;u.current?.abort();let l=new AbortController;u.current=l,s({question:c,status:`searching`,answer:``,sources:[],steps:[]});let d=``,f=null,p=()=>{f=null;let e=d;s(t=>t.answer===e?t:{...t,answer:e})},m=()=>{f!==null&&(cancelAnimationFrame(f),f=null),p()},h=(e,t)=>s(n=>({...n,status:`error`,error:{code:e,message:t}}));try{let e=await i(`${t}/api/teams/${n}/datasets/${r}/search-or-ask/ask${z(a.current)}`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify(o.length?{question:c,history:o}:{question:c}),signal:l.signal});if(e.status===429){let t=await e.json().catch(()=>({})),n=Number(e.headers.get(`Retry-After`));s(e=>({...e,status:`limited`,retryAfterSeconds:t.retryAfterSeconds??(Number.isFinite(n)?n:void 0)}));return}let u=e.headers.get(`Indx-Ask-Id`)??void 0;if(u&&s(e=>({...e,askId:u})),!e.ok||!e.body){let t=await e.json().catch(()=>({}));h(t.code??`http${e.status}`,t.detail??`The question could not be asked.`);return}for await(let{event:t,data:n}of R(e.body))switch(t){case`status`:{let e=n.step;e&&s(t=>({...t,steps:[...t.steps,e]}));break}case`filters`:s(e=>({...e,filters:n}));break;case`sources`:s(e=>({...e,status:`writing`,sources:n}));break;case`text`:d+=n.delta,f??=requestAnimationFrame(p);break;case`done`:m(),s(e=>({...e,status:`answered`}));return;case`error`:{m();let e=n;h(e.code,e.message);return}}m(),l.signal.aborted||h(`dropped`,`The connection dropped while the answer was being written.`)}catch(e){if(u.current!==l)return;m(),e.name===`AbortError`?s(e=>e.answer?{...e,status:`answered`}:{...e,status:`idle`}):h(`dropped`,`The connection dropped while the answer was being written.`)}finally{u.current===l&&(u.current=null)}},[t,n,r,i]),f=(0,c.useCallback)(async(e,o)=>{let s=o??l.current.askId;if(s)try{await i(`${t}/api/teams/${n}/datasets/${r}/events/select`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({queryId:s,documentKey:e.documentKey,position:e.n,...a.current.count===!1?{count:!1}:{}})})}catch{}},[t,n,r,i]),p=(0,c.useCallback)(()=>u.current?.abort(),[]),m=(0,c.useCallback)(()=>{u.current?.abort(),s(We)},[]);return(0,c.useEffect)(()=>()=>u.current?.abort(),[]),{...o,ask:d,stop:p,reset:m,openSource:f,busy:o.status===`searching`||o.status===`writing`}}var $={panel:`_panel_gjc13_1`,thread:`_thread_gjc13_4`,fill:`_fill_gjc13_5`,answer:`_answer_gjc13_8`,paragraph:`_paragraph_gjc13_9`,action:`_action_gjc13_10`,turn:`_turn_gjc13_11`,heading:`_heading_gjc13_14`,list:`_list_gjc13_15`,inlineCode:`_inlineCode_gjc13_16`,codeBlock:`_codeBlock_gjc13_17`,searched:`_searched_gjc13_22`,searchedLabel:`_searchedLabel_gjc13_23`,steps:`_steps_gjc13_26`,stepDone:`_stepDone_gjc13_27`},Ke=/(`[^`\n]+`)|(\*\*[^*\n]+\*\*)|(\*[^*\n]+\*|_[^_\n]+_)|(\[[^\]\n]+\]\(https?:\/\/[^)\s]+\))|(\[\d+\])/g;function qe(e,t,n){let r=[],i=0,a=0;for(let o of e.matchAll(Ke)){o.index>i&&r.push(e.slice(i,o.index));let s=`${n}-${a++}`,[l,d,f,p,m,h]=o;if(d)r.push((0,u.jsx)(`code`,{className:$.inlineCode,children:d.slice(1,-1)},s));else if(f)r.push((0,u.jsx)(`strong`,{children:qe(f.slice(2,-2),t,s)},s));else if(p)r.push((0,u.jsx)(`em`,{children:qe(p.slice(1,-1),t,s)},s));else if(m){let[,e,t]=/^\[([^\]]+)\]\(([^)]+)\)$/.exec(m);r.push((0,u.jsx)(`a`,{href:t,target:`_blank`,rel:`noopener noreferrer`,children:e},s))}else h?r.push((0,u.jsx)(c.default.Fragment,{children:t(Number(h.slice(1,-1)))},s)):r.push(l);i=o.index+l.length}return i<e.length&&r.push(e.slice(i)),r}function Je(e){let t=e.replace(/\r\n/g,`
6
+ `).split(`
7
+ `),n=[],r=[],i=()=>{r.length&&(n.push({kind:`paragraph`,text:r.join(` `)}),r=[])};for(let e=0;e<t.length;e++){let a=t[e],o=/^\s*```\s*([\w+#-]*)\s*$/.exec(a);if(o){i();let r=[];for(e++;e<t.length&&!/^\s*```\s*$/.test(t[e]);e++)r.push(t[e]);n.push({kind:`code`,lang:o[1]??``,text:r.join(`
8
+ `)});continue}let s=/^(#{1,4})\s+(.*)$/.exec(a);if(s){i(),n.push({kind:`heading`,level:s[1].length,text:s[2]});continue}let c=/^\s*(?:([-*+])|(\d+)[.)])\s+(.*)$/.exec(a);if(c){i();let e=!!c[2],t=n[n.length-1];t?.kind===`list`&&t.ordered===e?t.items.push(c[3]):n.push({kind:`list`,ordered:e,items:[c[3]]});continue}if(a.trim()===``){i();continue}let l=n[n.length-1];if(r.length===0&&l?.kind===`list`&&/^\s{2,}\S/.test(a)){l.items[l.items.length-1]+=` `+a.trim();continue}r.push(a.trim())}return i(),n}function Ye(e,t){return Je(e).map((e,n)=>{let r=`b${n}`;switch(e.kind){case`code`:return(0,u.jsx)(`pre`,{className:$.codeBlock,"data-lang":e.lang||void 0,children:(0,u.jsx)(`code`,{children:e.text})},r);case`heading`:return(0,u.jsx)(`p`,{className:$.heading,children:qe(e.text,t,r)},r);case`list`:return(0,u.jsx)(e.ordered?`ol`:`ul`,{className:$.list,children:e.items.map((e,n)=>(0,u.jsx)(`li`,{children:qe(e,t,`${r}-${n}`)},n))},r);default:return(0,u.jsx)(`p`,{className:$.paragraph,children:qe(e.text,t,r)},r)}})}var Xe=/\[(\d+)\]/g;function Ze(e){let t=e.field.split(`.`)[0];return e.value===`true`?t:e.value===`false`?`not ${t}`:e.value==null?e.min!=null&&e.max!=null?e.min===e.max?`${t} ${e.min}`:`${t} ${e.min}–${e.max}`:e.min==null?`${t} ≤ ${e.max}`:`${t} ≥ ${e.min}`:e.value}var Qe=({question:e,followUps:t=!1,onSourceClick:n,label:r=`Answer`,renderAnswer:i=Ye,onFollowUp:a,onStatusChange:o,onFilters:s,filterLabel:l=Ze,fill:p=!1,className:m=``})=>{let h=Ge(),{ask:g,reset:_,stop:v,status:y,openSource:b}=h,[x,S]=(0,c.useState)(!1),[C,w]=(0,c.useState)([]),[T,E]=(0,c.useState)(``),D=(0,c.useRef)([]),O=(0,c.useRef)(null),k=(0,c.useRef)(null),A=(0,c.useRef)(!0);(0,c.useEffect)(()=>{w([]),D.current=[],e?.trim()?g(e):_()},[e,g,_]),(0,c.useEffect)(()=>{o?.(y)},[y,o]);let j=(0,c.useRef)(void 0);(0,c.useEffect)(()=>{h.filters&&h.filters!==j.current&&(j.current=h.filters,s?.(h.filters))},[h.filters,s]),(0,c.useEffect)(()=>{let e=k.current;p&&e&&A.current&&(e.scrollTop=e.scrollHeight)},[p,h.answer,h.steps.length,y,C.length]);let M=()=>{let e=k.current;e&&(A.current=e.scrollHeight-e.scrollTop-e.clientHeight<40)},N=e=>e&&(0,u.jsxs)(`div`,{className:$.searched,children:[(0,u.jsxs)(`span`,{className:$.searchedLabel,children:[e.more?`${e.found}+`:e.found,` found`]}),e.filters.map((e,t)=>(0,u.jsx)(d.Chip,{children:l(e)},t)),e.text&&(0,u.jsxs)(`span`,{className:$.searchedLabel,children:[`“`,e.text,`”`]}),e.sort&&(0,u.jsxs)(`span`,{className:$.searchedLabel,children:[`sorted by `,e.sort.field.split(`.`)[0],`, `,e.sort.descending?`largest`:`smallest`,` first`]})]});if(y===`idle`&&C.length===0)return null;let P=(e,t)=>r=>{r.preventDefault(),b(e,t),n?.(e)},F=(e,t)=>r=>{let i=e.find(e=>e.n===r);return(0,u.jsx)(d.CitationRef,{n:r,title:i?.title,onClick:i&&n?P(i,t):void 0})},I=(e,t,n)=>{let r=new Set([...e.matchAll(Xe)].map(e=>Number(e[1])));return n&&r.size>0?t.filter(e=>r.has(e.n)):t.slice(0,3)},L=(e,t,r,i)=>{let a=I(e,t,r);return a.length>0&&(0,u.jsx)(d.CitationList,{items:a.map(e=>({n:e.n,title:e.title,onClick:n?P(e,i):void 0}))})},R=()=>{navigator.clipboard?.writeText(h.answer.replace(Xe,``)).catch(()=>{}),S(!0),setTimeout(()=>S(!1),2e3)},z=e=>{if(!(h.busy||!e.trim())){if(y===`answered`&&h.answer){let e={question:h.question,answer:h.answer,sources:h.sources,askId:h.askId,filters:h.filters};w(t=>[...t,e]),D.current=[...D.current,{question:e.question,answer:e.answer,...e.filters?{shown:{filters:e.filters.filters,text:e.filters.text,sort:e.filters.sort??null}}:{}}]}E(``),g(e,D.current)}},B=t?()=>O.current?.focus():a;return(0,u.jsxs)(`div`,{className:`${$.panel} ${p?$.fill:``} ${m}`,"aria-live":`polite`,"aria-busy":h.busy,children:[(0,u.jsxs)(`div`,{ref:k,className:$.thread,onScroll:p?M:void 0,children:[C.map((e,t)=>(0,u.jsxs)(`div`,{className:$.turn,children:[(0,u.jsx)(d.UserMessage,{children:e.question}),(0,u.jsxs)(d.AssistantMessage,{label:r,children:[N(e.filters),(0,u.jsx)(`div`,{className:$.answer,children:i(e.answer,F(e.sources,e.askId))}),L(e.answer,e.sources,!0,e.askId)]})]},t)),y!==`idle`&&(0,u.jsxs)(`div`,{className:$.turn,children:[(0,u.jsx)(d.UserMessage,{children:h.question}),(0,u.jsxs)(d.AssistantMessage,{label:r,children:[N(h.filters),h.answer&&(0,u.jsx)(`div`,{className:$.answer,children:i(h.answer,F(h.sources))}),y===`searching`&&h.steps.length>0&&(0,u.jsxs)(`div`,{className:$.steps,children:[h.steps.slice(0,-1).map((e,t)=>(0,u.jsx)(`span`,{className:$.stepDone,children:e},t)),(0,u.jsxs)(d.StreamStatus,{children:[h.steps[h.steps.length-1],`…`]})]}),y===`searching`&&h.steps.length===0&&(0,u.jsx)(d.StreamStatus,{children:`Searching…`}),y===`writing`&&(0,u.jsx)(d.StreamStatus,{spinner:`grow`,children:`Writing…`}),y===`error`&&(0,u.jsxs)(d.Alert,{variant:`default`,icon:null,children:[(0,u.jsx)(d.AlertTitle,{children:h.error?.code===`nothingFound`?`Nothing to answer from`:`The answer did not come through`}),(0,u.jsx)(d.AlertDescription,{children:h.error?.code===`nothingFound`?`The search found no records about this. Try other words, or search instead.`:h.error?.message}),h.error?.code!==`nothingFound`&&(0,u.jsx)(`div`,{className:$.action,children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,iconLeft:(0,u.jsx)(f.Refresh,{}),onClick:()=>g(h.question,D.current),children:`Try again`})})]}),y===`limited`&&(0,u.jsxs)(d.Alert,{variant:`default`,icon:null,children:[(0,u.jsx)(d.AlertTitle,{children:`Too many questions for now`}),(0,u.jsxs)(d.AlertDescription,{children:[`You can ask again in about `,h.retryAfterSeconds&&h.retryAfterSeconds>90?`${Math.ceil(h.retryAfterSeconds/60)} minutes`:`a minute`,`. Search still works in the meantime.`]})]}),y!==`error`&&y!==`limited`&&L(h.answer,h.sources,y===`answered`),y===`answered`&&(0,u.jsx)(d.AnswerActions,{onCopy:R,copied:x,onFollowUp:B})]})]})]}),t&&(0,u.jsx)(d.Composer,{ref:O,value:T,onChange:E,onSend:z,onStop:v,streaming:h.busy,placeholder:`Ask a follow-up…`,"aria-label":`Ask a follow-up`})]})};exports.ActiveFiltersPanel=Me,exports.AskPanel=Qe,exports.BucketFilterPanel=De,exports.DEFAULT_CUT=N,exports.DEFAULT_THRESHOLDS=D,exports.FilterPanelSkeleton=_e,exports.IndxApiError=p,exports.RangeFilterPanel=Te,exports.SCORE_SCALE=F,exports.STRICT_COVERAGE=P,exports.SearchContext=w,exports.SearchErrorBoundary=Re,exports.SearchInput=ie,exports.SearchProvider=T,exports.SearchResult=oe,exports.SearchResultRow=me,exports.SearchResults=fe,exports.SearchResultsMessage=ae,exports.SearchResultsSkeleton=le,exports.SearchSettingsPanel=Le,exports.SearchSetupError=m,exports.SortByPanel=Pe,exports.ValueFilterPanel=be,exports.describeSearchError=h,exports.isIdentifier=A,exports.localFilters=He,exports.nextOffer=M,exports.stripAskPhrases=te,exports.triggers=j,exports.useAsk=Ge,exports.useFilterSuggestion=Ue,exports.useHybridSearch=Be,exports.useSearch=E,exports.useSearchContext=E,exports.useSearchOrAsk=ne,exports.useVectorSearch=ze,exports.visibleResults=I;
package/dist/index.d.ts CHANGED
@@ -31,3 +31,17 @@ export { useVectorSearch } from './hooks/useVectorSearch';
31
31
  export type { EmbeddingResult, UseVectorSearchOptions } from './hooks/useVectorSearch';
32
32
  export { useHybridSearch } from './hooks/useHybridSearch';
33
33
  export type { UseHybridSearchOptions } from './hooks/useHybridSearch';
34
+ export { useSearchOrAsk } from './hooks/useSearchOrAsk';
35
+ export { localFilters } from './hooks/useFilterSuggestion';
36
+ export type { UseFilterSuggestionOptions } from './hooks/useFilterSuggestion';
37
+ export type { UseSearchOrAskOptions, SearchOrAskState } from './hooks/useSearchOrAsk';
38
+ export { useFilterSuggestion } from './hooks/useFilterSuggestion';
39
+ export type { FilterSuggestion, FilterSuggestionResult } from './hooks/useFilterSuggestion';
40
+ export { useAsk } from './hooks/useAsk';
41
+ export type { AskSource, AskStatus, AskState, AskTurn, AskFilters } from './hooks/useAsk';
42
+ export { AskPanel } from './components/AskPanel';
43
+ export type { AskPanelProps } from './components/AskPanel';
44
+ export { nextOffer, triggers, isIdentifier, visibleResults, DEFAULT_THRESHOLDS, DEFAULT_CUT, SCORE_SCALE, STRICT_COVERAGE } from './utils/searchOrAsk';
45
+ export type { Offer, OfferThresholds, CutRule } from './utils/searchOrAsk';
46
+ export { stripAskPhrases } from './utils/askPhrases';
47
+ export type { AskPhrases } from './utils/askPhrases';