@indxsearch/intrface 3.7.2 → 3.8.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.8.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d5e93d4: A selected value on a numeric field is sent as a range filter with equal limits instead of a value filter. A value filter compares text, so on a number it was slow and missed `129.0` when asked for `129`; a range with equal limits is numeric equality through the field's index. The field types come from `GET fields/configuration`, fetched once at start beside the three field lists, and are exposed as `fieldTypes` on the search state. Against an older server that still answers 403 to a Search key on that call, nothing changes: every selection stays a value filter.
8
+
3
9
  ## 3.7.2
4
10
 
5
11
  ### Patch Changes
@@ -29,6 +29,7 @@ export interface SearchState {
29
29
  filterableFields: string[];
30
30
  facetableFields: string[];
31
31
  sortableFields: string[];
32
+ fieldTypes: Record<string, string>;
32
33
  filters: Record<string, string[]>;
33
34
  valueMatch: Record<string, ValueMatch>;
34
35
  rangeFilters: Record<string, {
@@ -16,6 +16,14 @@ export interface NumericRange {
16
16
  * always ORed. The per-field results are then ANDed with each other and with
17
17
  * every range filter. Any failed filter call throws — the caller must not fall
18
18
  * back to an unfiltered search.
19
+ *
20
+ * A selected value on a field whose type is 'Number' (per `fieldTypes`, from
21
+ * fields/configuration) is sent as a range filter with equal limits, not a
22
+ * value filter. A value filter compares text, so on a number it is slow and
23
+ * misses 129.0 when asked for 129; a range with equal limits is numeric
24
+ * equality through the field's index. A value that is not a number on such a
25
+ * field, or a field of unknown type, goes as a value filter and the server
26
+ * answers.
19
27
  */
20
- export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, NumericRange>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>, bucketFilters?: Record<string, NumericRange[]>): Promise<any>;
28
+ export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, NumericRange>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>, bucketFilters?: Record<string, NumericRange[]>, fieldTypes?: Record<string, string>): Promise<any>;
21
29
  export {};
@@ -11,6 +11,14 @@ export interface IndxAuthResult {
11
11
  filterableFields: string[];
12
12
  facetableFields: string[];
13
13
  sortableFields: string[];
14
+ /**
15
+ * Each field's JSON type as the server reports it ('String', 'Number', 'True', 'False', ...),
16
+ * from GET fields/configuration. A selected value on a 'Number' field is sent as a range with
17
+ * equal limits rather than a value filter: a value filter compares text, so on a number it is
18
+ * slow and misses 129.0 when asked for 129. Empty when the server refused the call (older
19
+ * servers answer 403 to a Search key), in which case every selection is a value filter as before.
20
+ */
21
+ fieldTypes: Record<string, string>;
14
22
  totalDocumentCount: number;
15
23
  }
16
24
  interface UseIndxAuthOptions {
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
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");function p({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)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)(0),[C,w]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{w(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`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`),Error(`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`),Error(`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){if(c.status===401)throw 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`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw 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`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}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[p,h,_]=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`)]);if(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[y,x,C]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(y||[]),m(x||[]),g(C||[]),S(d);let w={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?w=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 T={};if(w.facets){for(let[e,t]of Object.entries(w.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(T[e]={min:Math.min(...n),max:Math.max(...n)})}}let E={};if(w.facets)for(let[e,t]of Object.entries(w.facets))Array.isArray(t)&&(E[e]=t.map(e=>e.key));v(T),b(E),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.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`)),w(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:C,initialFacetStats:_,initialFacetKeys:y,filterableFields:d,facetableFields:p,sortableFields:h,totalDocumentCount:x}}var m=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)}};async function h(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 m.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 g(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 h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(e,t,n,r,i,a,o={},s={}){let c=Object.entries(e??{}).filter(([,e])=>e.length>0),l=Object.entries(t??{}),u=Object.entries(s??{}).filter(([,e])=>e.length>0),d=(e,{min:t,max:o})=>h(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),[f,p,m]=await Promise.all([Promise.all(c.map(async([e,t])=>g(await Promise.all(t.map(t=>h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(l.map(([e,t])=>d(e,t))),Promise.all(u.map(async([e,t])=>g(await Promise.all(t.map(t=>d(e,t))),`or`,n,r,i,a)))]);return g([...f,...p,...m],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d}){let f=(0,c.useRef)(0),p=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[g,y]=(0,c.useState)({}),[b,x]=(0,c.useState)(``),[S,C]=(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,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let w=e.searchSettings.maxNumberOfRecordsToReturn,T=e.searchSettings.enableCoverage,E=e.searchSettings.removeDuplicates,D=e.searchSettings.coverageDepth,O=e.searchSettings.minimumScore,k=e.searchSettings.coverageSetup,A=e.sortBy,j=e.sortAscending,M=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++f.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)])):[],[p,...h]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]}))]),v=s||e.query.trim()!==``,M={text:e.query,enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k},N={...M,maxNumberOfRecordsToReturn:v?w:0,enableFacets:c,...p?{filter:p}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j}};u&&console.log(`[performSearch] request body:`,JSON.stringify(N,null,2));let P=e=>n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[F,...I]=await Promise.all([P(N),...h.map(e=>P({...M,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!F.ok)throw await m.fromResponse(`Search`,F);let L=await F.json(),R=L.truncationIndex??-1,z={};for(let e=0;e<d.length;e++){let t=d[e];if(!I[e].ok)throw await m.fromResponse(`Facets for '${t}'`,I[e]);let n=await I[e].json();n.facets?.[t]!==void 0&&(z[t]=n.facets[t])}let B=L.records||[],V=B.map(e=>e.documentKey),H=B.map(e=>e.score),U=[];if(v&&V.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(V)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);U=(await e.json()).map((e,t)=>({document:e,documentKey:V[t],score:H[t]}))}let W={};if(c&&L.facets){for(let[e,t]of Object.entries(L.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(W[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==f.current)return;let G=e.query!==b,K=e.query!==S,q=e.facetStats??{};if(G?(q={...r.initialFacetStats,...W},y(q),x(e.query)):q={...g,...W},K&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(W))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let J=Object.keys(z).length>0?{...L.facets??{},...z}:L.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 Y=U.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:Y,error:void 0,resultsSuppressed:!v,...c?{facets:J,facetStats:q}:{},isLoading:!1,truncationIndex:R}))}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!==f.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,g,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{p.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),p.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&p.current?.({enableFacets:l}),h.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!h.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(N.current?.cancel(),p.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),p.current?.({enableFacets:!1}),N.current?.()):p.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!h.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[A,j]);let P=(0,c.useRef)(!0),F=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(P.current){P.current=!1;return}if(F.current!==e.query||!h.current||!r.token)return;if(d.current){d.current=!1,p.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var b=(0,c.createContext)(void 0),x=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),v=(0,c.useRef)(a),[x,S]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],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:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{S(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[C]=(0,c.useState)(s),w=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),T=(0,c.useCallback)((e,t={})=>{if(!w.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${w.token}`}})},[w.token]);y({state:x,setState:S,authenticatedFetch:T,auth:w,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:C,enableDebugLogs:h,shouldFetchMore:_});let E=(0,c.useCallback)(e=>{S(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:v.current}}})},[]),D=(0,c.useCallback)(e=>{S(t=>({...t,facetDebounceDelayMillis:e}))},[]),O=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(v.current=e.maxNumberOfRecordsToReturn),S(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),k=(0,c.useCallback)(e=>{_.current=!0,S(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),A=(0,c.useCallback)((e,t,n=!1)=>{S(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}})},[]),j=(0,c.useCallback)((e,t)=>{S(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),M=(0,c.useCallback)((e,t,n)=>{S(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),N=(0,c.useCallback)(()=>{S(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),P=(0,c.useCallback)((e,t,n=!0)=>{S(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}})},[]),F=(0,c.useCallback)((e,t=!0)=>{S(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),I=(e,t)=>e.min===t.min&&e.max===t.max,L=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>I(e,t))?i.filter(e=>!I(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}})},[]),R=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!I(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),z=(0,c.useCallback)((e,t)=>{S(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(b.Provider,{value:{state:x,isFetchingInitial:w.isFetchingInitial||!x.fieldsSeeded,authError:w.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:T,setQuery:E,toggleFilter:A,setValueMatch:j,setRangeFilter:M,resetFilters:N,resetSingleFilter:P,resetRangeFilter:F,toggleBucketFilter:L,resetBucketFilter:R,setSort:z,setDebounceDelay:D,setSearchSettings:O,fetchMoreResults:k},children:e})},S=()=>{let e=(0,c.useContext)(b);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},C=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,...a})=>{let{state:{query:o,filters:s,rangeFilters:c,searchSettings:l},setQuery:f}=S();Object.keys(s).length>0||Object.keys(c).length;let p=o.length>0;return(0,u.jsx)(d.SearchField,{type:`text`,value:o,onChange:e=>f(e.target.value),placeholder:l.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...a,children:r&&p&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>f(``),"aria-label":`Clear search`,children:`Clear`})})},w={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},T={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`},E=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:T.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:T.indexNumber,children:t}),(0,u.jsx)(`div`,{className:T.content,children:e?(0,u.jsxs)(`div`,{className:T.skeletonBars,children:[(0,u.jsx)(`div`,{className:T.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:T.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:T.scoreNumber,children:n})]}),D={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},O=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],k=({rows:e=6})=>(0,u.jsx)(`div`,{className:D.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(E,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:O[t%O.length]},t))}),A=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function j(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(!A.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var M=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p},isFetchingInitial:m,authError:h,allowEmptySearch:g,fetchMoreResults:_}=S(),v=t??30,[y,b]=(0,c.useState)(v),x=(0,c.useRef)(0),C=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==C.current;(!i||i.length<x.current||e)&&b(v),x.current=i?.length??0,C.current=l},[i,v,l]);let T=i&&i.length>y,D=()=>{let e=y+v;b(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+v)};if(m)return g?(0,u.jsx)(k,{rows:v}):(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let O=h??p;return O?(0,u.jsx)(`div`,{className:w.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:O})}):a||i===null?(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,y).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:w.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=j(t);n&&(l[e]=n)}}return(0,u.jsx)(E,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),T&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:D,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${y+1}-${Math.min(y+v,i.length,s)} of ${s}`:`Load more`})})]})},N={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},P=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[N.row,e===`title`?N.title:``].filter(Boolean).join(` `),children:t}),F={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`},I=[65,80,55,72,60,75,50,68],L=({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:F.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:F.histogramRow}),(0,u.jsx)(`div`,{className:F.sliderTrack}),(0,u.jsxs)(`div`,{className:F.inputRow,children:[(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:F.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:F.bar,style:{width:`${I[t%I.length]}%`,animationDelay:`${t*.05}s`}},t))})}),R={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`},z=({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:C,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=S(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(L,{rows:1,collapsible:!1}):(0,u.jsx)(L,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!C?.includes(e)){let t=[];return x?.includes(e)||t.push(`filterable`),C?.includes(e)||t.push(`facetable`),(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing `,t.join(` and `),`.`]})})}let F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let z=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{z.set(e,0)}),F.forEach(e=>{z.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(z.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&z.has(`null`)){let e=z.get(`null`)??0,t=z.get(`false`)??0;z.set(`false`,t+e),z.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:R.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=z.get(`true`),r=typeof n==`number`?n:null,i=I.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:R.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(z.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...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=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,K=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:t,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:R.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:R.count,children:[n,(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:R.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&&I.length>0?R.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?R.grid:R.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:K(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:R.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},B={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 V(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 H(e){let t=0;for(let n of e)t=Math.max(t,V(n));return t===0?1:Number((10**-t).toFixed(t))}function U(e,t){return Number(e.toFixed(V(t)))}function W(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(V(n)))}var G=({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:C,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=S(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(M),V(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,V(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,H=z?n:M,G=z?r:N,K=g?.[e],q=o&&K!==void 0?B.active:void 0,J=K?K.min:M,Y=K?K.max:N,ee=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([J,Y]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(J)),[$,se]=c.default.useState(String(Y)),ce=c.default.useMemo(()=>{let e=V(R);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[R,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([J,Y]),re(!1),ae(!1)},[J,Y,e]);let pe=c.default.useCallback(e=>{let t=U(Math.min(e[0],e[1]-R),R);return[t,U(Math.max(e[1]-R,t),R)]},[R]),me=c.default.useCallback(e=>{if(z)return;let[t,n]=pe(e);Z([Math.max(M,Math.min(I,t)),Math.max(F,Math.min(N,n))])},[z,pe,M,N,F,I]),he=c.default.useCallback(t=>{if(z)return;let[n,r]=pe(t),i=Math.max(M,Math.min(I,n)),a=Math.max(F,Math.min(N,r));i===M&&a===N?(Z([M,N]),E(e,!0)):Z([i,a])},[z,pe,M,N,F,I,e,E]),ge=c.default.useRef(null),_e=c.default.useCallback((t,n)=>{if(z)return;let r=ge.current;if(K&&r&&r.start===t&&r.last===n){ge.current=null,Z([M,N]),E(e,!0);return}let i=W(Math.max(M,F,t),M,R),a=Math.max(i,W(Math.min(N,I,n),M,R));ge.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,R,e,E]),ve=c.default.useCallback(()=>{if(z)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[0]));return}let n=Math.max(M,Math.min(I,t));n<X[1]?Z([n,X[1]]):Z([M,X[1]]),oe(String(n<X[1]?n:M))},[z,Q,X,M,I]),ye=c.default.useCallback(()=>{if(z)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){se(String(X[1]));return}let n=Math.max(F,Math.min(N,t));n>X[0]?Z([X[0],n]):Z([X[0],N]),se(String(n>X[0]?n:N))},[z,$,X,F,N]),be=e=>t=>{t.key===`Enter`&&e()},[xe,Se]=c.default.useState(null),Ce=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Ce.current&&Ce.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&&(Ce.current=t,Se(r))},[M,N,y,e,f]);let we=c.default.useMemo(()=>{if(!f||!xe||xe.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=xe.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:U(a-R,R);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:U(c+R,R)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:e.barEnd)-e.bucketStart}))},[f,xe,M,N,p,R]),Te=c.default.useMemo(()=>Math.max(...we.map(e=>e.count),1),[we]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!C?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&we.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&we.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[H,G],n=Math.max(le,e),r=Math.min(ue,t),i=G+R,a=i-H||1,o=e=>Math.max(0,Math.min(1,(e-H)/a)),s=e=>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=we.slice(1).map(e=>d((e.bucketStart-H)/a)),g=we.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Te*20))}));return(0,u.jsxs)(`div`,{className:B.histogram,children:[(0,u.jsx)(`div`,{className:B.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:B.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:()=>_e(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:B.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:H,max:U(G+R,R),step:R,stepMarks:h,value:z?[H,U(G+R,R)]:[W(le,H,R),W(ue+R,H,R)],isRange:!0,onChange:e=>me(e),onFinalChange:e=>he(e),disabled:z,activeMin:F,activeMax:U(I+R,R),isFaceted:te,highlightFaceted:ee,"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:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},K={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function q(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 J=({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:C},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=S(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return H(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.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],U(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=U(r+n,N))e.push(i(U(r,N),U(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(L,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!C)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:K.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),R=P.map(e=>({bucket:e,count:F?q(e,O):null}));if(l||(R=R.filter(e=>e.count!==0||I(e.bucket))),R.length===0)return null;let z=R.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`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:K.count,children:[n,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:K.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[e,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:K.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&&k.length>0?K.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?K.grid:K.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:()=>j(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(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:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),te=(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:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),X=(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:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Z(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=S(),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:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(X,{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`},re=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=S();if(l)return(0,u.jsx)(L,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:ne.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=S(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`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=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var Q=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 oe(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[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 m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.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 $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[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 m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.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=Z,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=Q,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=$,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=oe;
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");function p({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)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)({}),[C,w]=(0,c.useState)(0),[T,E]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{E(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`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`),Error(`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`),Error(`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){if(c.status===401)throw 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`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw 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`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}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[p,h,_,y]=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(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,T]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(T||[]),w(d);let E={};if(y?.ok){let e=await y.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(E[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,y?.status,`- every selected value will be sent as a value filter`);v(E);let D={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?D=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 O={};if(D.facets){for(let[e,t]of Object.entries(D.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(O[e]={min:Math.min(...n),max:Math.max(...n)})}}let k={};if(D.facets)for(let[e,t]of Object.entries(D.facets))Array.isArray(t)&&(k[e]=t.map(e=>e.key));b(O),S(k),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.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`)),E(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:T,initialFacetStats:y,initialFacetKeys:x,filterableFields:d,facetableFields:p,sortableFields:h,fieldTypes:_,totalDocumentCount:C}}var m=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)}};async function h(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 m.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 g(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 h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(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})=>h(`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}):h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,_,v]=await Promise.all([Promise.all(l.map(async([e,t])=>g(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])=>g(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return g([...m,..._,...v],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d}){let f=(0,c.useRef)(0),p=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[g,y]=(0,c.useState)({}),[b,x]=(0,c.useState)(``),[S,C]=(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 w=e.searchSettings.maxNumberOfRecordsToReturn,T=e.searchSettings.enableCoverage,E=e.searchSettings.removeDuplicates,D=e.searchSettings.coverageDepth,O=e.searchSettings.minimumScore,k=e.searchSettings.coverageSetup,A=e.sortBy,j=e.sortAscending,M=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++f.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)])):[],[p,...h]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),v=s||e.query.trim()!==``,M={text:e.query,enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k},N={...M,maxNumberOfRecordsToReturn:v?w:0,enableFacets:c,...p?{filter:p}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j}};u&&console.log(`[performSearch] request body:`,JSON.stringify(N,null,2));let P=e=>n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[F,...I]=await Promise.all([P(N),...h.map(e=>P({...M,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!F.ok)throw await m.fromResponse(`Search`,F);let L=await F.json(),R=L.truncationIndex??-1,z={};for(let e=0;e<d.length;e++){let t=d[e];if(!I[e].ok)throw await m.fromResponse(`Facets for '${t}'`,I[e]);let n=await I[e].json();n.facets?.[t]!==void 0&&(z[t]=n.facets[t])}let B=L.records||[],V=B.map(e=>e.documentKey),H=B.map(e=>e.score),U=[];if(v&&V.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(V)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);U=(await e.json()).map((e,t)=>({document:e,documentKey:V[t],score:H[t]}))}let W={};if(c&&L.facets){for(let[e,t]of Object.entries(L.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(W[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==f.current)return;let G=e.query!==b,K=e.query!==S,q=e.facetStats??{};if(G?(q={...r.initialFacetStats,...W},y(q),x(e.query)):q={...g,...W},K&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(W))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let J=Object.keys(z).length>0?{...L.facets??{},...z}:L.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 Y=U.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:Y,error:void 0,resultsSuppressed:!v,...c?{facets:J,facetStats:q}:{},isLoading:!1,truncationIndex:R}))}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!==f.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,g,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{p.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),p.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&p.current?.({enableFacets:l}),h.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!h.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(N.current?.cancel(),p.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),p.current?.({enableFacets:!1}),N.current?.()):p.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!h.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[A,j]);let P=(0,c.useRef)(!0),F=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(P.current){P.current=!1;return}if(F.current!==e.query||!h.current||!r.token)return;if(d.current){d.current=!1,p.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var b=(0,c.createContext)(void 0),x=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),v=(0,c.useRef)(a),[x,S]=(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:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{S(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[C]=(0,c.useState)(s),w=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),T=(0,c.useCallback)((e,t={})=>{if(!w.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${w.token}`}})},[w.token]);y({state:x,setState:S,authenticatedFetch:T,auth:w,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:C,enableDebugLogs:h,shouldFetchMore:_});let E=(0,c.useCallback)(e=>{S(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:v.current}}})},[]),D=(0,c.useCallback)(e=>{S(t=>({...t,facetDebounceDelayMillis:e}))},[]),O=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(v.current=e.maxNumberOfRecordsToReturn),S(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),k=(0,c.useCallback)(e=>{_.current=!0,S(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),A=(0,c.useCallback)((e,t,n=!1)=>{S(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}})},[]),j=(0,c.useCallback)((e,t)=>{S(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),M=(0,c.useCallback)((e,t,n)=>{S(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),N=(0,c.useCallback)(()=>{S(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),P=(0,c.useCallback)((e,t,n=!0)=>{S(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}})},[]),F=(0,c.useCallback)((e,t=!0)=>{S(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),I=(e,t)=>e.min===t.min&&e.max===t.max,L=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>I(e,t))?i.filter(e=>!I(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}})},[]),R=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!I(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),z=(0,c.useCallback)((e,t)=>{S(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(b.Provider,{value:{state:x,isFetchingInitial:w.isFetchingInitial||!x.fieldsSeeded,authError:w.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:T,setQuery:E,toggleFilter:A,setValueMatch:j,setRangeFilter:M,resetFilters:N,resetSingleFilter:P,resetRangeFilter:F,toggleBucketFilter:L,resetBucketFilter:R,setSort:z,setDebounceDelay:D,setSearchSettings:O,fetchMoreResults:k},children:e})},S=()=>{let e=(0,c.useContext)(b);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},C=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,...a})=>{let{state:{query:o,filters:s,rangeFilters:c,searchSettings:l},setQuery:f}=S();Object.keys(s).length>0||Object.keys(c).length;let p=o.length>0;return(0,u.jsx)(d.SearchField,{type:`text`,value:o,onChange:e=>f(e.target.value),placeholder:l.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...a,children:r&&p&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>f(``),"aria-label":`Clear search`,children:`Clear`})})},w={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},T={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`},E=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:T.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:T.indexNumber,children:t}),(0,u.jsx)(`div`,{className:T.content,children:e?(0,u.jsxs)(`div`,{className:T.skeletonBars,children:[(0,u.jsx)(`div`,{className:T.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:T.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:T.scoreNumber,children:n})]}),D={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},O=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],k=({rows:e=6})=>(0,u.jsx)(`div`,{className:D.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(E,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:O[t%O.length]},t))}),A=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function j(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(!A.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var M=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p},isFetchingInitial:m,authError:h,allowEmptySearch:g,fetchMoreResults:_}=S(),v=t??30,[y,b]=(0,c.useState)(v),x=(0,c.useRef)(0),C=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==C.current;(!i||i.length<x.current||e)&&b(v),x.current=i?.length??0,C.current=l},[i,v,l]);let T=i&&i.length>y,D=()=>{let e=y+v;b(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+v)};if(m)return g?(0,u.jsx)(k,{rows:v}):(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let O=h??p;return O?(0,u.jsx)(`div`,{className:w.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:O})}):a||i===null?(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,y).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:w.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=j(t);n&&(l[e]=n)}}return(0,u.jsx)(E,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),T&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:D,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${y+1}-${Math.min(y+v,i.length,s)} of ${s}`:`Load more`})})]})},N={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},P=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[N.row,e===`title`?N.title:``].filter(Boolean).join(` `),children:t}),F={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`},I=[65,80,55,72,60,75,50,68],L=({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:F.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:F.histogramRow}),(0,u.jsx)(`div`,{className:F.sliderTrack}),(0,u.jsxs)(`div`,{className:F.inputRow,children:[(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:F.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:F.bar,style:{width:`${I[t%I.length]}%`,animationDelay:`${t*.05}s`}},t))})}),R={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`},z=({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:C,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=S(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(L,{rows:1,collapsible:!1}):(0,u.jsx)(L,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!C?.includes(e)){let t=[];return x?.includes(e)||t.push(`filterable`),C?.includes(e)||t.push(`facetable`),(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing `,t.join(` and `),`.`]})})}let F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let z=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{z.set(e,0)}),F.forEach(e=>{z.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(z.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&z.has(`null`)){let e=z.get(`null`)??0,t=z.get(`false`)??0;z.set(`false`,t+e),z.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:R.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=z.get(`true`),r=typeof n==`number`?n:null,i=I.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:R.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(z.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...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=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,K=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:t,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:R.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:R.count,children:[n,(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:R.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&&I.length>0?R.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?R.grid:R.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:K(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:R.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},B={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 V(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 H(e){let t=0;for(let n of e)t=Math.max(t,V(n));return t===0?1:Number((10**-t).toFixed(t))}function U(e,t){return Number(e.toFixed(V(t)))}function W(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(V(n)))}var G=({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:C,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=S(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(M),V(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,V(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,H=z?n:M,G=z?r:N,K=g?.[e],q=o&&K!==void 0?B.active:void 0,J=K?K.min:M,Y=K?K.max:N,ee=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([J,Y]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(J)),[$,se]=c.default.useState(String(Y)),ce=c.default.useMemo(()=>{let e=V(R);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[R,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([J,Y]),re(!1),ae(!1)},[J,Y,e]);let pe=c.default.useCallback(e=>{let t=U(Math.min(e[0],e[1]-R),R);return[t,U(Math.max(e[1]-R,t),R)]},[R]),me=c.default.useCallback(e=>{if(z)return;let[t,n]=pe(e);Z([Math.max(M,Math.min(I,t)),Math.max(F,Math.min(N,n))])},[z,pe,M,N,F,I]),he=c.default.useCallback(t=>{if(z)return;let[n,r]=pe(t),i=Math.max(M,Math.min(I,n)),a=Math.max(F,Math.min(N,r));i===M&&a===N?(Z([M,N]),E(e,!0)):Z([i,a])},[z,pe,M,N,F,I,e,E]),ge=c.default.useRef(null),_e=c.default.useCallback((t,n)=>{if(z)return;let r=ge.current;if(K&&r&&r.start===t&&r.last===n){ge.current=null,Z([M,N]),E(e,!0);return}let i=W(Math.max(M,F,t),M,R),a=Math.max(i,W(Math.min(N,I,n),M,R));ge.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,R,e,E]),ve=c.default.useCallback(()=>{if(z)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[0]));return}let n=Math.max(M,Math.min(I,t));n<X[1]?Z([n,X[1]]):Z([M,X[1]]),oe(String(n<X[1]?n:M))},[z,Q,X,M,I]),ye=c.default.useCallback(()=>{if(z)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){se(String(X[1]));return}let n=Math.max(F,Math.min(N,t));n>X[0]?Z([X[0],n]):Z([X[0],N]),se(String(n>X[0]?n:N))},[z,$,X,F,N]),be=e=>t=>{t.key===`Enter`&&e()},[xe,Se]=c.default.useState(null),Ce=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Ce.current&&Ce.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&&(Ce.current=t,Se(r))},[M,N,y,e,f]);let we=c.default.useMemo(()=>{if(!f||!xe||xe.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=xe.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:U(a-R,R);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:U(c+R,R)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:e.barEnd)-e.bucketStart}))},[f,xe,M,N,p,R]),Te=c.default.useMemo(()=>Math.max(...we.map(e=>e.count),1),[we]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!C?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&we.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&we.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[H,G],n=Math.max(le,e),r=Math.min(ue,t),i=G+R,a=i-H||1,o=e=>Math.max(0,Math.min(1,(e-H)/a)),s=e=>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=we.slice(1).map(e=>d((e.bucketStart-H)/a)),g=we.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Te*20))}));return(0,u.jsxs)(`div`,{className:B.histogram,children:[(0,u.jsx)(`div`,{className:B.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:B.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:()=>_e(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:B.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:H,max:U(G+R,R),step:R,stepMarks:h,value:z?[H,U(G+R,R)]:[W(le,H,R),W(ue+R,H,R)],isRange:!0,onChange:e=>me(e),onFinalChange:e=>he(e),disabled:z,activeMin:F,activeMax:U(I+R,R),isFaceted:te,highlightFaceted:ee,"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:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},K={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function q(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 J=({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:C},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=S(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return H(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.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],U(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=U(r+n,N))e.push(i(U(r,N),U(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(L,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!C)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:K.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),R=P.map(e=>({bucket:e,count:F?q(e,O):null}));if(l||(R=R.filter(e=>e.count!==0||I(e.bucket))),R.length===0)return null;let z=R.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`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:K.count,children:[n,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:K.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[e,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:K.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&&k.length>0?K.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?K.grid:K.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:()=>j(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(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:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),te=(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:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),X=(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:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Z(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=S(),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:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(X,{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`},re=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=S();if(l)return(0,u.jsx)(L,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:ne.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=S(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`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=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var Q=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 oe(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[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 m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.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 $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[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 m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.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=Z,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=Q,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=$,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=oe;
package/dist/index.es.js CHANGED
@@ -6,10 +6,10 @@ import { Button as m, Checkbox as h, FilterPanelBase as g, InputField as _, Radi
6
6
  import { ArrowDown as C, ArrowRight as w, Indx as T, X_or_error as E } from "@indxsearch/pixl";
7
7
  //#region src/context/useIndxAuth.ts
8
8
  function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugLogs: i = !1 }) {
9
- let [a, s] = l(null), [c, d] = l(!0), [f, p] = l([]), [m, h] = l([]), [g, _] = l([]), [v, y] = l({}), [b, x] = l({}), [S, C] = l(0), [w, T] = l(null);
9
+ let [a, s] = l(null), [c, d] = l(!0), [f, p] = l([]), [m, h] = l([]), [g, _] = l([]), [v, y] = l({}), [b, x] = l({}), [S, C] = l({}), [w, T] = l(0), [E, D] = l(null);
10
10
  return o(() => {
11
11
  (async () => {
12
- T(null);
12
+ D(null);
13
13
  try {
14
14
  if (!r) throw console.error("[Auth] ❌ Missing bearer token"), console.error("[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)"), Error("A bearer token is required. Check console for instructions.");
15
15
  if (!e) throw console.error("[Auth] ❌ Missing INDX server URL"), console.error("[Auth] 💡 Pass a url to SearchProvider"), Error("INDX server URL is required. Check console for instructions.");
@@ -36,21 +36,28 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
36
36
  i && console.log("[Auth] 📊 Dataset status:", l), s(a), i && console.log("[Auth] ✅ Dataset session established"), l.systemState !== void 0 && l.systemState !== u.Ready && (console.warn("[Auth] ⚠️ Dataset is not ready yet. Current state:", u[l.systemState]), console.warn("[Auth] 💡 Wait for indexing to complete before searching"));
37
37
  let d = l.documentCount ?? l.numberOfRecords ?? 0;
38
38
  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");
39
- let [f, m, g] = await Promise.all([
39
+ let [f, m, g, v] = await Promise.all([
40
40
  o(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),
41
41
  o(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),
42
- o(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`)
42
+ o(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),
43
+ o(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(() => null)
43
44
  ]);
44
45
  if (!f.ok) throw console.error("[Auth] ❌ GetFilterableFields failed:", f.status, await f.text()), Error("Failed to get filterable fields. Check console for details.");
45
46
  if (!m.ok) throw console.error("[Auth] ❌ GetFacetableFields failed:", m.status, await m.text()), Error("Failed to get facetable fields. Check console for details.");
46
47
  if (!g.ok) throw console.error("[Auth] ❌ GetSortableFields failed:", g.status, await g.text()), Error("Failed to get sortable fields. Check console for details.");
47
- let [v, b, S] = await Promise.all([
48
+ let [b, S, w] = await Promise.all([
48
49
  f.json().catch((e) => (console.error("Failed to parse GetFilterableFields response:", e), [])),
49
50
  m.json().catch((e) => (console.error("Failed to parse GetFacetableFields response:", e), [])),
50
51
  g.json().catch((e) => (console.error("Failed to parse GetSortableFields response:", e), []))
51
52
  ]);
52
- p(v || []), h(b || []), _(S || []), C(d);
53
- let w = { facets: {} };
53
+ p(b || []), h(S || []), _(w || []), T(d);
54
+ let E = {};
55
+ if (v?.ok) {
56
+ let e = await v.json().catch((e) => (console.error("Failed to parse GetFieldConfiguration response:", e), []));
57
+ for (let t of e ?? []) t?.fieldName && t?.fieldType && (E[t.fieldName] = t.fieldType);
58
+ } else i && console.log("[Auth] fields/configuration not available", v?.status, "- every selected value will be sent as a value filter");
59
+ y(E);
60
+ let D = { facets: {} };
54
61
  try {
55
62
  let r = await fetch(`${e}/api/teams/${t}/datasets/${n}/search`, {
56
63
  method: "POST",
@@ -64,25 +71,25 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
64
71
  enableFacets: !0
65
72
  })
66
73
  });
67
- r.ok ? w = 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"));
74
+ r.ok ? D = 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"));
68
75
  } catch (e) {
69
76
  console.warn("Blank search error:", e), console.warn("Continuing without initial facet data - facets will be populated after first search");
70
77
  }
71
- let T = {};
72
- if (w.facets) {
73
- for (let [e, t] of Object.entries(w.facets)) if (Array.isArray(t) && t.length > 0) {
78
+ let O = {};
79
+ if (D.facets) {
80
+ for (let [e, t] of Object.entries(D.facets)) if (Array.isArray(t) && t.length > 0) {
74
81
  let n = t.map((e) => Number(e.key)).filter((e) => !isNaN(e));
75
- n.length > 0 && (T[e] = {
82
+ n.length > 0 && (O[e] = {
76
83
  min: Math.min(...n),
77
84
  max: Math.max(...n)
78
85
  });
79
86
  }
80
87
  }
81
- let E = {};
82
- if (w.facets) for (let [e, t] of Object.entries(w.facets)) Array.isArray(t) && (E[e] = t.map((e) => e.key));
83
- y(T), x(E), i && console.log("[Auth] ✅ Initialization complete");
88
+ let k = {};
89
+ if (D.facets) for (let [e, t] of Object.entries(D.facets)) Array.isArray(t) && (k[e] = t.map((e) => e.key));
90
+ x(O), C(k), i && console.log("[Auth] ✅ Initialization complete");
84
91
  } catch (t) {
85
- console.error("[Auth] ❌ Initialization failed:", t), (t instanceof Error || typeof t == "object" && t && "message" in t) && console.error("[Auth] 💡 Error:", t.message), t instanceof TypeError && t.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")), T(t instanceof Error ? t.message : String(t));
92
+ console.error("[Auth] ❌ Initialization failed:", t), (t instanceof Error || typeof t == "object" && t && "message" in t) && console.error("[Auth] 💡 Error:", t.message), t instanceof TypeError && t.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")), D(t instanceof Error ? t.message : String(t));
86
93
  } finally {
87
94
  d(!1);
88
95
  }
@@ -94,13 +101,14 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
94
101
  ]), {
95
102
  token: a,
96
103
  isFetchingInitial: c,
97
- authError: w,
98
- initialFacetStats: v,
99
- initialFacetKeys: b,
104
+ authError: E,
105
+ initialFacetStats: b,
106
+ initialFacetKeys: S,
100
107
  filterableFields: f,
101
108
  facetableFields: m,
102
109
  sortableFields: g,
103
- totalDocumentCount: S
110
+ fieldTypes: v,
111
+ totalDocumentCount: w
104
112
  };
105
113
  }
106
114
  //#endregion
@@ -154,23 +162,29 @@ async function A(e, t, n, r, i, a) {
154
162
  }, "CombineFilters", n, r, i, a);
155
163
  return o;
156
164
  }
157
- async function ee(e, t, n, r, i, a, o = {}, s = {}) {
158
- let c = Object.entries(e ?? {}).filter(([, e]) => e.length > 0), l = Object.entries(t ?? {}), u = Object.entries(s ?? {}).filter(([, e]) => e.length > 0), d = (e, { min: t, max: o }) => k("range", {
165
+ async function ee(e, t, n, r, i, a, o = {}, s = {}, c = {}) {
166
+ 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 }) => k("range", {
159
167
  fieldName: e,
160
168
  lowerLimit: t,
161
169
  upperLimit: o
162
- }, `Range filter '${e}'`, n, r, i, a), [f, p, m] = await Promise.all([
163
- Promise.all(c.map(async ([e, t]) => A(await Promise.all(t.map((t) => k("value", {
170
+ }, `Range filter '${e}'`, n, r, i, a), p = (e, t) => {
171
+ let o = c[e] === "Number" ? Number(t) : NaN;
172
+ return Number.isFinite(o) ? f(e, {
173
+ min: o,
174
+ max: o
175
+ }) : k("value", {
164
176
  fieldName: e,
165
177
  value: t
166
- }, `Value filter '${e}'`, n, r, i, a))), o[e] === "any" ? "or" : "and", n, r, i, a))),
167
- Promise.all(l.map(([e, t]) => d(e, t))),
168
- Promise.all(u.map(async ([e, t]) => A(await Promise.all(t.map((t) => d(e, t))), "or", n, r, i, a)))
178
+ }, `Value filter '${e}'`, n, r, i, a);
179
+ }, [m, h, g] = await Promise.all([
180
+ Promise.all(l.map(async ([e, t]) => A(await Promise.all(t.map((t) => p(e, t))), o[e] === "any" ? "or" : "and", n, r, i, a))),
181
+ Promise.all(u.map(([e, t]) => f(e, t))),
182
+ Promise.all(d.map(async ([e, t]) => A(await Promise.all(t.map((t) => f(e, t))), "or", n, r, i, a)))
169
183
  ]);
170
184
  return A([
171
- ...f,
172
- ...p,
173
- ...m
185
+ ...m,
186
+ ...h,
187
+ ...g
174
188
  ], "and", n, r, i, a);
175
189
  }
176
190
  //#endregion
@@ -192,6 +206,7 @@ function M({ state: e, setState: t, authenticatedFetch: n, auth: r, url: a, team
192
206
  filterableFields: r.filterableFields,
193
207
  facetableFields: r.facetableFields,
194
208
  sortableFields: r.sortableFields,
209
+ fieldTypes: r.fieldTypes,
195
210
  fieldsSeeded: !0
196
211
  }));
197
212
  }, [
@@ -214,13 +229,13 @@ function M({ state: e, setState: t, authenticatedFetch: n, auth: r, url: a, team
214
229
  i = !0;
215
230
  }
216
231
  try {
217
- let c = i ? 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)])) : [], [l, ...f] = await Promise.all([ee(e.filters, e.rangeFilters, a, s, u, n, e.valueMatch, e.bucketFilters), ...c.map((t) => ee({
232
+ let c = i ? 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)])) : [], [l, ...f] = await Promise.all([ee(e.filters, e.rangeFilters, a, s, u, n, e.valueMatch, e.bucketFilters, e.fieldTypes), ...c.map((t) => ee({
218
233
  ...e.filters,
219
234
  [t]: []
220
235
  }, e.rangeFilters, a, s, u, n, e.valueMatch, {
221
236
  ...e.bucketFilters,
222
237
  [t]: []
223
- }))]), m = d || e.query.trim() !== "", g = {
238
+ }, e.fieldTypes))]), m = d || e.query.trim() !== "", g = {
224
239
  text: e.query,
225
240
  enableCoverage: T,
226
241
  removeDuplicates: E,
@@ -437,6 +452,7 @@ var N = n(void 0), P = ({ children: e, url: t, team: n, dataset: r, allowEmptySe
437
452
  filterableFields: [],
438
453
  facetableFields: [],
439
454
  sortableFields: [],
455
+ fieldTypes: {},
440
456
  filters: {},
441
457
  valueMatch: {},
442
458
  rangeFilters: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indxsearch/intrface",
3
- "version": "3.7.2",
3
+ "version": "3.8.0",
4
4
  "description": "Indx Search interface components for React. Provides ready-to-use filter panels, search inputs, faceted navigation, and sorting components. Built on @indxsearch/systm.",
5
5
  "keywords": [
6
6
  "indx",