@indxsearch/intrface 3.1.0 → 3.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +3 -1
- package/dist/components/RangeFilterPanel.d.ts +1 -0
- package/dist/components/ValueFilterPanel.d.ts +8 -0
- package/dist/context/SearchContext.d.ts +4 -0
- package/dist/context/buildFilterProxy.d.ts +9 -5
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +282 -239
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.1.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- A superseded search response can no longer overwrite range slider bounds or the per-query facet layer. The request-id guard in `performSearch` now runs before any state write, so when an older, slower response lands after a newer one, nothing from it reaches the UI. Previously its results were discarded but its bounds were not, leaving sliders and histograms scaled to an earlier query. No timing or request changes.
|
|
8
|
+
|
|
9
|
+
## 3.1.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Restore AND as the default for several selected values on one field. 3.1.0 switched this to OR, which broke narrowing on multi-valued fields (a movie tagged both "horror" and "comedy" must match both ticks). The OR behaviour is now opt-in per panel with `<ValueFilterPanel match="any" />` for scalar fields.
|
|
14
|
+
|
|
15
|
+
Also fixes react-range's "`values` property is in conflict with the current `step`, `min`, and `max`" warning: `RangeFilterPanel` derives its slider `step` from the precision of the field's values (new `step` prop to override) and snaps thumbs onto the grid, and the Minimum Score slider in `SearchSettingsPanel` uses step 1. Requires `@indxsearch/systm` ^2.6.1.
|
|
16
|
+
|
|
17
|
+
3.1.0 is deprecated on npm because of the OR default; upgrade to 3.1.1.
|
|
18
|
+
|
|
3
19
|
All notable changes to `@indxsearch/intrface` will be documented in this file.
|
|
4
20
|
|
|
5
21
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
package/README.md
CHANGED
|
@@ -367,8 +367,9 @@ Initialisation failures (bad token, unknown dataset, unreachable server) and fai
|
|
|
367
367
|
| `startCollapsed` | `boolean` | `false` | Start collapsed |
|
|
368
368
|
| `showCount` | `boolean` | `true` | Show facet counts |
|
|
369
369
|
| `showNull` | `boolean` | `false` | List the `null` facet bucket (documents without the field) as an option |
|
|
370
|
+
| `match` | `'all' \| 'any'` | `'all'` | How several selected values combine. `'all'` requires every selected value (right for multi-valued fields such as genres: each click narrows). `'any'` matches at least one (use on scalar fields, where a document holds a single value). |
|
|
370
371
|
|
|
371
|
-
|
|
372
|
+
Different fields and range filters always narrow the result set (ANDed). With `displayType="toggle"` the field is treated as boolean whenever its facet keys are `true` / `false` / `null`, and the `null` bucket counts as `false`.
|
|
372
373
|
|
|
373
374
|
### RangeFilterPanel Props
|
|
374
375
|
|
|
@@ -379,6 +380,7 @@ Selecting several values on one field widens the result set (they are ORed); dif
|
|
|
379
380
|
| `displayType` | `'slider' \| 'input'` | ❌ | Filter UI style (default `'input'`) |
|
|
380
381
|
| `expectedMin` | `number` | ❌ | Expected lower bound (default `0`) |
|
|
381
382
|
| `expectedMax` | `number` | ❌ | Expected upper bound (default `1000`) |
|
|
383
|
+
| `step` | `number` | ❌ | Slider step. Derived from the precision of the field's values if omitted (1 for integers, 0.1 for one decimal, …) |
|
|
382
384
|
| `showHistogram` | `boolean` | ❌ | Show a histogram above the slider (requires the field to be facetable; default `false`) |
|
|
383
385
|
| `resolution` | `number` | ❌ | Value-range per histogram bucket (e.g. `200` → 5 bars over 0–1000). Auto-derived (~20 bars) if omitted |
|
|
384
386
|
| `collapsible` | `boolean` | ❌ | Whether the panel can collapse (default `true`) |
|
|
@@ -13,6 +13,14 @@ export interface ValueFilterPanelProps {
|
|
|
13
13
|
showActivePanel?: boolean;
|
|
14
14
|
showCount?: boolean;
|
|
15
15
|
showNull?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* How several selected values combine. `'all'` (default) requires a document to
|
|
18
|
+
* carry every selected value — right for multi-valued fields such as genres,
|
|
19
|
+
* where each click narrows the results. `'any'` matches documents with at least
|
|
20
|
+
* one of them — use it on scalar fields, where a document can only hold one value
|
|
21
|
+
* and AND would always return nothing.
|
|
22
|
+
*/
|
|
23
|
+
match?: 'all' | 'any';
|
|
16
24
|
displayIfEmptyQuery?: boolean;
|
|
17
25
|
displayCondition?: (context: {
|
|
18
26
|
query: string;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { CoverageSetup } from '@indxsearch/indx-types';
|
|
3
|
+
import { ValueMatch } from './buildFilterProxy';
|
|
4
|
+
export type { ValueMatch };
|
|
3
5
|
export type RequiredCoverageSetup = Required<CoverageSetup>;
|
|
4
6
|
export interface SearchSettings {
|
|
5
7
|
maxNumberOfRecordsToReturn: number;
|
|
@@ -28,6 +30,7 @@ export interface SearchState {
|
|
|
28
30
|
facetableFields: string[];
|
|
29
31
|
sortableFields: string[];
|
|
30
32
|
filters: Record<string, string[]>;
|
|
33
|
+
valueMatch: Record<string, ValueMatch>;
|
|
31
34
|
rangeFilters: Record<string, {
|
|
32
35
|
min: number;
|
|
33
36
|
max: number;
|
|
@@ -57,6 +60,7 @@ export interface SearchContextType {
|
|
|
57
60
|
authenticatedFetch: (url: string, options?: RequestInit) => Promise<Response>;
|
|
58
61
|
setQuery: (query: string) => void;
|
|
59
62
|
toggleFilter: (field: string, value: string) => void;
|
|
63
|
+
setValueMatch: (field: string, match: ValueMatch) => void;
|
|
60
64
|
setRangeFilter: (field: string, min: number, max: number) => void;
|
|
61
65
|
resetFilters: () => void;
|
|
62
66
|
resetSingleFilter: (field: string, value: string, isUserAction?: boolean) => void;
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
type AuthenticatedFetch = (url: string, options?: RequestInit) => Promise<Response>;
|
|
2
|
+
export type ValueMatch = 'all' | 'any';
|
|
2
3
|
/**
|
|
3
4
|
* Builds the server-side filter token for the current selection.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Several selected values on the *same* field are combined per that field's
|
|
7
|
+
* match mode: `'all'` (default) ANDs them — a document must carry every value,
|
|
8
|
+
* which is the natural reading for multi-valued fields such as genres and
|
|
9
|
+
* narrows the result set with each click; `'any'` ORs them, for scalar fields
|
|
10
|
+
* where a document can only ever hold one of the values. The per-field results
|
|
11
|
+
* are then ANDed with each other and with every range filter. Any failed
|
|
12
|
+
* filter call throws — the caller must not fall back to an unfiltered search.
|
|
9
13
|
*/
|
|
10
14
|
export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, {
|
|
11
15
|
min: number;
|
|
12
16
|
max: number;
|
|
13
|
-
}>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch): Promise<any>;
|
|
17
|
+
}>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>): Promise<any>;
|
|
14
18
|
export {};
|
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 IndxCloudApi website)`),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 IndxCloudApi website`),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),i&&console.log(`[Auth] 🔓 Opening dataset session...`);let d=await fetch(`${e}/api/teams/${t}/datasets/${n}?configuration=400`,{method:`PUT`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:`""`});if(!d.ok)throw console.error(`[Auth] ❌ CreateOrOpen failed:`,d.status,await d.text()),Error(`Failed to open dataset session.`);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 p=u.documentCount??u.numberOfRecords??0;p===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`,p,`records`);let[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`)]);if(!h.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,h.status,await h.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,_.status,await _.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!y.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,y.status,await y.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,w]=await Promise.all([h.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),y.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(w||[]),S(p);let T={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?T=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 E={};if(T.facets){for(let[e,t]of Object.entries(T.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(E[e]={min:Math.min(...n),max:Math.max(...n)})}}let D={};if(T.facets)for(let[e,t]of Object.entries(T.facets))Array.isArray(t)&&(D[e]=t.map(e=>e.key));v(E),b(D),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}}async function m(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){let e=``;try{let t=await s.json();e=t?.detail??t?.title??``}catch{}throw Error(`${n} failed: HTTP ${s.status}${e?` — ${e}`:``}`)}let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function h(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 m(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function g(e,t,n,r,i,a){let o=Object.entries(e??{}).filter(([,e])=>e.length>0),s=Object.entries(t??{}),[c,l]=await Promise.all([Promise.all(o.map(async([e,t])=>h(await Promise.all(t.map(t=>m(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a))),`or`,n,r,i,a))),Promise.all(s.map(([e,{min:t,max:o}])=>m(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a)))]);return h([...c,...l],`and`,n,r,i,a)}function _(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function v({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,filtersChangedByUser:d,shouldFetchMore:f}){let p=(0,c.useRef)(0),m=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[v,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}))},[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=++p.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=await g(e.filters,e.rangeFilters,i,a,o,n),f=s||e.query.trim()!==``,m={text:e.query,maxNumberOfRecordsToReturn:f?w:0,enableFacets:c,...d?{filter:d}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j},enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k};u&&console.log(`[performSearch] request body:`,JSON.stringify(m,null,2));let h=await n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(m)});if(!h.ok)throw Error(`Search failed: HTTP ${h.status}`);let _=await h.json(),M=_.truncationIndex??-1,N=_.records||[],P=N.map(e=>e.documentKey),F=N.map(e=>e.score),I=[];if(f&&P.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(P)});if(!e.ok)throw Error(`Document lookup failed: HTTP ${e.status}`);I=(await e.json()).map((e,t)=>({document:e,documentKey:P[t],score:F[t]}))}let L={};if(c&&_.facets){for(let[e,t]of Object.entries(_.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(L[e]={min:Math.min(...n),max:Math.max(...n)})}}let R=e.query!==b,z=e.query!==S,B=e.facetStats??{};if(R?(B={...r.initialFacetStats,...L},y(B),x(e.query)):B={...v,...L},z&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(L))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let V=_.facets;if(c&&(!V||Object.keys(V).length===0)){V={};for(let[e,t]of Object.entries(r.initialFacetKeys))V[e]=t.map(e=>({key:e,value:null}))}if(l!==p.current)return;let H=I.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:H,error:void 0,resultsSuppressed:!f,...c?{facets:V,facetStats:B}:{},isLoading:!1,truncationIndex:M}))}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 IndxCloudApi website.`)):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!==p.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.rangeFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,v,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{m.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=_(()=>{u&&console.log(`Debounced searchWithFacets fired`),m.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&m.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(),m.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),m.current?.({enableFacets:!1}),N.current?.()):m.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{let t=d.current;if(d.current=!1,!h.current||!r.token||!t)return;let n=e.query.trim();!s&&n===``||m.current?.({enableFacets:l})},[e.filters,e.rangeFilters]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||m.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(f.current){f.current=!1,m.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||m.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var y=(0,c.createContext)(void 0),b=({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),b=(0,c.useRef)(!1),x=(0,c.useRef)(a),[S,C]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],filters:{},rangeFilters:{},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)(()=>{C(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[w]=(0,c.useState)(s),T=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),E=(0,c.useCallback)((e,t={})=>{if(!T.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${T.token}`}})},[T.token]);v({state:S,setState:C,authenticatedFetch:E,auth:T,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:w,enableDebugLogs:h,filtersChangedByUser:_,shouldFetchMore:b});let D=(0,c.useCallback)(e=>{_.current=!1,C(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:x.current}}})},[]),O=(0,c.useCallback)(e=>{C(t=>({...t,facetDebounceDelayMillis:e}))},[]),k=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(x.current=e.maxNumberOfRecordsToReturn),C(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),A=(0,c.useCallback)(e=>{b.current=!0,C(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),j=(0,c.useCallback)((e,t)=>{_.current=!0,C(n=>{let r={...n.filters},i=r[e]||[],a=i.includes(t)?i.filter(e=>e!==t):[...i,t];return a.length?r[e]=a:delete r[e],{...n,filters:r}})},[]),M=(0,c.useCallback)((e,t,n)=>{_.current=!0,C(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}}}))},[]),N=(0,c.useCallback)(()=>{_.current=!0,C(e=>({...e,filters:{},rangeFilters:{}}))},[]),P=(0,c.useCallback)((e,t,n=!0)=>{n&&(_.current=!0),C(n=>{let r={...n.filters},i=(r[e]||[]).filter(e=>e!==t);return i.length>0?r[e]=i:delete r[e],{...n,filters:r}})},[]),F=(0,c.useCallback)((e,t=!0)=>{t&&(_.current=!0),C(t=>{let n={...t.rangeFilters};return delete n[e],{...t,rangeFilters:n}})},[]),I=(0,c.useCallback)((e,t)=>{C(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(y.Provider,{value:{state:S,isFetchingInitial:T.isFetchingInitial,authError:T.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:E,setQuery:D,toggleFilter:j,setRangeFilter:M,resetFilters:N,resetSingleFilter:P,resetRangeFilter:F,setSort:I,setDebounceDelay:O,setSearchSettings:k,fetchMoreResults:A},children:e})},x=()=>{let e=(0,c.useContext)(y);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},S=({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}=x();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`})})},C={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},w={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`},T=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:w.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:w.indexNumber,children:t}),(0,u.jsx)(`div`,{className:w.content,children:e?(0,u.jsxs)(`div`,{className:w.skeletonBars,children:[(0,u.jsx)(`div`,{className:w.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:w.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:w.scoreNumber,children:n})]}),E={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},D=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],O=({rows:e=6})=>(0,u.jsx)(`div`,{className:E.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(T,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:D[t%D.length]},t))}),k=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function A(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(!k.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var j=({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:_}=x(),v=t??30,[y,b]=(0,c.useState)(v),S=(0,c.useRef)(0),w=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==w.current;(!i||i.length<S.current||e)&&b(v),S.current=i?.length??0,w.current=l},[i,v,l]);let E=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)(O,{rows:v}):(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let k=h??p;return k?(0,u.jsx)(`div`,{className:C.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:k})}):a||i===null?(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:C.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:C.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=A(t);n&&(l[e]=n)}}return(0,u.jsx)(T,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),E&&(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`})})]})},M={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},N=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[M.row,e===`title`?M.title:``].filter(Boolean).join(` `),children:t}),P={bar:`_bar_145f5_12`,skeletonAppear:`_skeletonAppear_145f5_1`,fade:`_fade_145f5_1`,listRows:`_listRows_145f5_19`,sliderArea:`_sliderArea_145f5_25`,sliderTrack:`_sliderTrack_145f5_32`,inputRow:`_inputRow_145f5_40`,inputBar:`_inputBar_145f5_45`},F=[65,80,55,72,60,75,50,68],I=({title:e,rows:t=5,variant:n=`list`,collapsible:r=!0,startCollapsed:i=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:r,collapsed:i,children:n===`slider`?(0,u.jsxs)(`div`,{className:P.sliderArea,children:[(0,u.jsx)(`div`,{className:P.sliderTrack}),(0,u.jsxs)(`div`,{className:P.inputRow,children:[(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:P.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:P.bar,style:{width:`${F[t%F.length]}%`,animationDelay:`${t*.05}s`}},t))})}),L={list:`_list_m82u6_2`,count:`_count_m82u6_7`,countValue:`_countValue_m82u6_17`,chip:`_chip_m82u6_22`,chipLabel:`_chipLabel_m82u6_32`,grid:`_grid_m82u6_40`},R=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,displayType:l=`checkbox`,layout:f=`list`,showActivePanel:p=!1,showCount:m=!0,showNull:h=!1,displayIfEmptyQuery:g=!0,displayCondition:_=e=>!0})=>{let{state:{facets:v,filterableFields:y,facetableFields:b,filters:S,query:C},toggleFilter:w,isFetchingInitial:T,allowEmptySearch:E}=x(),D=(0,c.useRef)(null),[O,k]=(0,c.useState)(a);if((0,c.useEffect)(()=>{k(a)},[v?.[e],a]),!E&&!C)return null;if(T||!v)return l===`toggle`?(0,u.jsx)(I,{rows:1,collapsible:!1}):(0,u.jsx)(I,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!_({query:C??``,filters:S,facets:v})||!g&&!C&&Object.keys(S).length<1)return null;if(!y?.includes(e)||!b?.includes(e)){let t=[];return y?.includes(e)||t.push(`filterable`),b?.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 A=v?.[e]??(l===`toggle`?[]:void 0);if(!A||!Array.isArray(A))return null;let j=S?.[e]??[];n&&!D.current&&A.length>0&&(D.current=A.reduce((e,t)=>(e[t.key]=t.value,e),{}));let M=new Map;n&&D.current&&Object.keys(D.current).forEach(e=>{M.set(e,0)}),A.forEach(e=>{M.set(e.key,e.value)});let N=new Set([`true`,`false`,`null`]),P=Array.from(M.keys()),F=l===`toggle`&&(P.length>0&&P.every(e=>N.has(e))||P.length===0&&j.length>0);if(F&&M.has(`null`)){let e=M.get(`null`)??0,t=M.get(`false`)??0;M.set(`false`,t+e),M.delete(`null`)}if(l===`toggle`&&!F)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:L.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(F){let n=M.get(`true`),r=typeof n==`number`?n:null,i=j.includes(`true`),a=r===0&&!i,o=m&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>w(e,`true`),disabled:a}),` `,o]})})}let R=Array.from(M.entries());if(h||(R=R.filter(([e])=>e!==`null`)),R.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=R.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=R.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));R=[...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=R.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=R.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));R=[...t,...n]}else{let e=R.filter(([,e])=>typeof e==`number`&&e>0),t=R.filter(([,e])=>e===0||e===null);R=[...e,...t]}let z=typeof a==`number`&&R.length>a,B=z?R.slice(0,O):R,V=(t,n)=>{let r=j.includes(t),i=n===0,a=m&&(n??0)>0?` (${n})`:``,o=m&&(n??0)>0?n:``;switch(l){case`button`:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>w(e,t),disabled:i,size:`micro`,className:L.chip,title:t,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:L.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>w(e,t),disabled:i,size:`micro`,className:L.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:()=>w(e,t),disabled:i});default:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:()=>w(e,t),disabled:i}),(0,u.jsx)(`span`,{children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:()=>w(e,t),disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,children:(0,u.jsxs)(`ul`,{className:f===`grid`?L.grid:L.list,style:{listStyle:`none`,padding:0,margin:0},children:[B.map(([e,t])=>(0,u.jsx)(`li`,{children:V(e,t)},e)),z&&O<R.length&&(()=>{let e=R.length-O,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:L.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>k(e=>e+50),children:`Show ${t} more of ${R.length} total`})})})()]})})},z={disabledMessage:`_disabledMessage_uci6n_1`,histogram:`_histogram_uci6n_6`,histogramBar:`_histogramBar_uci6n_15`},B=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,displayType:i=`input`,collapsible:a=!0,startCollapsed:o=!1,showHistogram:s=!1,resolution:l})=>{let{state:{rangeFilters:f,rangeBounds:p,facetStats:m,facets:h,filterableFields:g,facetableFields:_,query:v,facetDebounceDelayMillis:y},setRangeFilter:b,resetRangeFilter:S,allowEmptySearch:C,isFetchingInitial:w}=x(),T=p?.[e]!==void 0,E=p?.[e]??{min:n,max:r},D=E.min,O=E.max,k=m?.[e]??E,A=Math.max(D,Math.min(O,k.min)),j=Math.max(D,Math.min(O,k.max)),M=T&&D===O,N=M?n:D,P=M?r:O,F=f?.[e],L=F?F.min:D,R=F?F.max:O,B=F!==void 0,V=A!==D||j!==O,[H,U]=c.default.useState([L,R]),[ee,W]=c.default.useState(!1),[te,G]=c.default.useState(!1),[K,q]=c.default.useState(String(L)),[J,Y]=c.default.useState(String(R));c.default.useEffect(()=>{q(String(H[0])),Y(String(H[1]))},[H]);let{finalMin:X,finalMax:Z,isValidMin:ne,isValidMax:re}=c.default.useMemo(()=>{let[e,t]=H,n=Math.max(D,Math.min(O,e)),r=Math.max(D,Math.min(O,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=D&&i<a,isValidMax:a<=O&&a>i}},[H,D,O]);c.default.useEffect(()=>{if(M)return;if(H[0]===D&&H[1]===O){W(!1),G(!1);return}let t=y??500,n=setTimeout(()=>{W(!ne),G(!re)},300),r=setTimeout(()=>{ne&&re&&(X===D&&Z===O?S(e,!1):b(e,X,Z))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[X,Z,ne,re,D,O,e,S,b,y,M]),c.default.useEffect(()=>{U([L,R]),W(!1),G(!1)},[L,R,e]);let ie=c.default.useCallback(e=>{M||U([Math.max(D,Math.min(j,e[0])),Math.max(A,Math.min(O,e[1]))])},[M,D,O,A,j]),ae=c.default.useCallback(t=>{if(M)return;let n=Math.max(D,Math.min(j,t[0])),r=Math.max(A,Math.min(O,t[1]));n===D&&r===O?(U([D,O]),S(e,!0)):U([n,r])},[M,D,O,A,j,e,S]),Q=c.default.useCallback(()=>{if(M)return;let e=K.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){q(String(H[0]));return}let n=Math.max(D,Math.min(j,t));n<H[1]?U([n,H[1]]):U([D,H[1]]),q(String(n<H[1]?n:D))},[M,K,H,D,j]),$=c.default.useCallback(()=>{if(M)return;let e=J.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){Y(String(H[1]));return}let n=Math.max(A,Math.min(O,t));n>H[0]?U([H[0],n]):U([H[0],O]),Y(String(n>H[0]?n:O))},[M,J,H,A,O]),oe=e=>t=>{t.key===`Enter`&&e()},[se,ce]=c.default.useState(null),le=c.default.useRef(null);c.default.useEffect(()=>{if(!s)return;let t=`${D}:${O}`;if(t===le.current&&le.current!==null)return;let n=h?.[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&&(le.current=t,ce(r))},[D,O,h,e,s]);let ue=c.default.useMemo(()=>{if(!s||!se||se.length===0)return[];let e=O-D;if(e<=0)return[];let t=l??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,n)=>{let r=D+n*t,i=D+(n+1)*t;return{bucketStart:r,bucketEnd:i,count:se.filter(e=>{let t=Number(e.key);return t>=r&&t<i}).reduce((e,t)=>e+t.value,0)}})},[s,se,D,O,l]),de=c.default.useMemo(()=>Math.max(...ue.map(e=>e.count),1),[ue]);return s&&!w&&!_?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),w?(0,u.jsx)(I,{title:t,variant:`slider`,collapsible:a,startCollapsed:o}):!C&&!v?null:g?.includes(e)?i===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:o,collapsible:a,children:[M&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,D,`).`]}),s&&ue.length>0&&(0,u.jsx)(`div`,{className:z.histogram,children:(()=>{let e=typeof A==`number`&&typeof j==`number`&&j>A&&(A>D||j<O);return ue.map((t,n)=>{let r=Math.max(1,Math.ceil(t.count/de*20)),i=e?t.bucketEnd>A&&t.bucketStart<j:t.bucketEnd>X&&t.bucketStart<Z;return(0,u.jsx)(`div`,{className:z.histogramBar,"data-testid":`histogram-bar`,"data-active":i,style:{height:`${r}px`,background:i?`var(--lv5)`:`var(--lv3)`}},n)})})()}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:N,max:P,value:M?[N,P]:[X,Z],isRange:!0,onChange:e=>ie(e),onFinalChange:e=>ae(e),disabled:M,activeMin:A,activeMax:j,isFaceted:V,highlightFaceted:B,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,flex:`flex-grow`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:M?String(D):K,min:D,max:Math.min(j,H[1]-1),onChange:e=>q(e.target.value),onBlur:Q,onKeyDown:oe(Q),disabled:M,isValid:M||!ee}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:M?String(O):J,min:Math.max(A,H[0]+1),max:O,onChange:e=>Y(e.target.value),onBlur:$,onKeyDown:oe($),disabled:M,isValid:M||!te})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,children:[M&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,D,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:M?String(D):K,min:D,max:Math.min(j,H[1]-1),onChange:e=>q(e.target.value),onBlur:Q,onKeyDown:oe(Q),disabled:M,isValid:M||!ee}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:M?String(O):J,min:Math.max(A,H[0]+1),max:O,onChange:e=>Y(e.target.value),onBlur:$,onKeyDown:oe($),disabled:M,isValid:M||!te})]})]}):(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.`]})})},V={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},H=(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:V.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:V.chipLabel,children:[e,`: `,t]})})})),U=(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:V.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:V.chipLabel,children:[e,`: `,t,` – `,n]})})}));function ee(){let{state:{filters:e,rangeFilters:t},resetFilters:n,resetSingleFilter:r,resetRangeFilter:i}=x(),a=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),o=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0,[e,t])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:V.grid,children:[a.map(({field:e,value:t})=>(0,u.jsx)(H,{field:e,value:t,onReset:()=>r(e,t)},`${e}-${t}`)),o.map(({field:e,min:t,max:n})=>(0,u.jsx)(U,{field:e,min:t,max:n,onReset:()=>i(e)},e)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var W={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},te=({displayType:e=`dropdown`,collapsible:t=!0,startCollapsed:n=!1})=>{let{state:{sortableFields:r,sortBy:i,sortAscending:a},setSort:o,isFetchingInitial:s}=x();if(s)return(0,u.jsx)(I,{title:`Sort by`,rows:e===`radio`?3:1,collapsible:t,startCollapsed:n});if(!r||r.length===0)return null;let c=i?`${i}:${a?`asc`:`desc`}`:`none`,l=[{label:`None`,value:`none`},...r.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],f=e=>{if(e===`none`||e===``)o(null,!0);else{let[t,n]=e.split(`:`);o(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:t,collapsed:t?n:!1,children:e===`dropdown`?(0,u.jsx)(d.Select,{value:c,onValueChange:f,options:l,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:W.radioGroup,children:l.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:c===e.value,onChange:e=>f(e.target.value)},e.value))})})},G={list:`_list_1y4fk_1`};function K(){let{state:{searchSettings:e},setSearchSettings:t}=x(),[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:G.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:5e3,value: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 IndxCloudApi website)`}),(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 J(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[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 Error(`VectorSearch failed: ${u.status}`);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 Error(`GetJson failed: ${p.status}`);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 Y(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[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 Error(`HybridSearch failed: ${u.status}`);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 Error(`GetJson failed: ${p.status}`);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=ee,exports.FilterPanelSkeleton=I,exports.RangeFilterPanel=B,exports.SearchContext=y,exports.SearchErrorBoundary=q,exports.SearchInput=S,exports.SearchProvider=b,exports.SearchResult=T,exports.SearchResultRow=N,exports.SearchResults=j,exports.SearchResultsSkeleton=O,exports.SearchSettingsPanel=K,exports.SortByPanel=te,exports.ValueFilterPanel=R,exports.useHybridSearch=Y,exports.useSearch=x,exports.useSearchContext=x,exports.useVectorSearch=J;
|
|
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 IndxCloudApi website)`),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 IndxCloudApi website`),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),i&&console.log(`[Auth] 🔓 Opening dataset session...`);let d=await fetch(`${e}/api/teams/${t}/datasets/${n}?configuration=400`,{method:`PUT`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:`""`});if(!d.ok)throw console.error(`[Auth] ❌ CreateOrOpen failed:`,d.status,await d.text()),Error(`Failed to open dataset session.`);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 p=u.documentCount??u.numberOfRecords??0;p===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`,p,`records`);let[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`)]);if(!h.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,h.status,await h.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,_.status,await _.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!y.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,y.status,await y.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,w]=await Promise.all([h.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),y.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(w||[]),S(p);let T={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?T=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 E={};if(T.facets){for(let[e,t]of Object.entries(T.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(E[e]={min:Math.min(...n),max:Math.max(...n)})}}let D={};if(T.facets)for(let[e,t]of Object.entries(T.facets))Array.isArray(t)&&(D[e]=t.map(e=>e.key));v(E),b(D),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}}async function m(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){let e=``;try{let t=await s.json();e=t?.detail??t?.title??``}catch{}throw Error(`${n} failed: HTTP ${s.status}${e?` — ${e}`:``}`)}let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function h(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 m(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function g(e,t,n,r,i,a,o={}){let s=Object.entries(e??{}).filter(([,e])=>e.length>0),c=Object.entries(t??{}),[l,u]=await Promise.all([Promise.all(s.map(async([e,t])=>h(await Promise.all(t.map(t=>m(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(c.map(([e,{min:t,max:o}])=>m(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a)))]);return h([...l,...u],`and`,n,r,i,a)}function _(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function v({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,filtersChangedByUser:d,shouldFetchMore:f}){let p=(0,c.useRef)(0),m=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[v,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}))},[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=++p.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=await g(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch),f=s||e.query.trim()!==``,m={text:e.query,maxNumberOfRecordsToReturn:f?w:0,enableFacets:c,...d?{filter:d}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j},enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k};u&&console.log(`[performSearch] request body:`,JSON.stringify(m,null,2));let h=await n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(m)});if(!h.ok)throw Error(`Search failed: HTTP ${h.status}`);let _=await h.json(),M=_.truncationIndex??-1,N=_.records||[],P=N.map(e=>e.documentKey),F=N.map(e=>e.score),I=[];if(f&&P.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(P)});if(!e.ok)throw Error(`Document lookup failed: HTTP ${e.status}`);I=(await e.json()).map((e,t)=>({document:e,documentKey:P[t],score:F[t]}))}let L={};if(c&&_.facets){for(let[e,t]of Object.entries(_.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(L[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==p.current)return;let R=e.query!==b,z=e.query!==S,B=e.facetStats??{};if(R?(B={...r.initialFacetStats,...L},y(B),x(e.query)):B={...v,...L},z&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(L))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let V=_.facets;if(c&&(!V||Object.keys(V).length===0)){V={};for(let[e,t]of Object.entries(r.initialFacetKeys))V[e]=t.map(e=>({key:e,value:null}))}let H=I.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:H,error:void 0,resultsSuppressed:!f,...c?{facets:V,facetStats:B}:{},isLoading:!1,truncationIndex:M}))}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 IndxCloudApi website.`)):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!==p.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.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,v,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{m.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=_(()=>{u&&console.log(`Debounced searchWithFacets fired`),m.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&m.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(),m.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),m.current?.({enableFacets:!1}),N.current?.()):m.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{let t=d.current;if(d.current=!1,!h.current||!r.token||!t)return;let n=e.query.trim();!s&&n===``||m.current?.({enableFacets:l})},[e.filters,e.rangeFilters]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||m.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(f.current){f.current=!1,m.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||m.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var y=(0,c.createContext)(void 0),b=({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),b=(0,c.useRef)(!1),x=(0,c.useRef)(a),[S,C]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],filters:{},valueMatch:{},rangeFilters:{},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)(()=>{C(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[w]=(0,c.useState)(s),T=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),E=(0,c.useCallback)((e,t={})=>{if(!T.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${T.token}`}})},[T.token]);v({state:S,setState:C,authenticatedFetch:E,auth:T,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:w,enableDebugLogs:h,filtersChangedByUser:_,shouldFetchMore:b});let D=(0,c.useCallback)(e=>{_.current=!1,C(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:x.current}}})},[]),O=(0,c.useCallback)(e=>{C(t=>({...t,facetDebounceDelayMillis:e}))},[]),k=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(x.current=e.maxNumberOfRecordsToReturn),C(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),A=(0,c.useCallback)(e=>{b.current=!0,C(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),j=(0,c.useCallback)((e,t)=>{_.current=!0,C(n=>{let r={...n.filters},i=r[e]||[],a=i.includes(t)?i.filter(e=>e!==t):[...i,t];return a.length?r[e]=a:delete r[e],{...n,filters:r}})},[]),M=(0,c.useCallback)((e,t)=>{C(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),N=(0,c.useCallback)((e,t,n)=>{_.current=!0,C(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}}}))},[]),P=(0,c.useCallback)(()=>{_.current=!0,C(e=>({...e,filters:{},rangeFilters:{}}))},[]),F=(0,c.useCallback)((e,t,n=!0)=>{n&&(_.current=!0),C(n=>{let r={...n.filters},i=(r[e]||[]).filter(e=>e!==t);return i.length>0?r[e]=i:delete r[e],{...n,filters:r}})},[]),I=(0,c.useCallback)((e,t=!0)=>{t&&(_.current=!0),C(t=>{let n={...t.rangeFilters};return delete n[e],{...t,rangeFilters:n}})},[]),L=(0,c.useCallback)((e,t)=>{C(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(y.Provider,{value:{state:S,isFetchingInitial:T.isFetchingInitial,authError:T.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:E,setQuery:D,toggleFilter:j,setValueMatch:M,setRangeFilter:N,resetFilters:P,resetSingleFilter:F,resetRangeFilter:I,setSort:L,setDebounceDelay:O,setSearchSettings:k,fetchMoreResults:A},children:e})},x=()=>{let e=(0,c.useContext)(y);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},S=({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}=x();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`})})},C={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},w={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`},T=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:w.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:w.indexNumber,children:t}),(0,u.jsx)(`div`,{className:w.content,children:e?(0,u.jsxs)(`div`,{className:w.skeletonBars,children:[(0,u.jsx)(`div`,{className:w.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:w.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:w.scoreNumber,children:n})]}),E={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},D=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],O=({rows:e=6})=>(0,u.jsx)(`div`,{className:E.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(T,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:D[t%D.length]},t))}),k=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function A(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(!k.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var j=({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:_}=x(),v=t??30,[y,b]=(0,c.useState)(v),S=(0,c.useRef)(0),w=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==w.current;(!i||i.length<S.current||e)&&b(v),S.current=i?.length??0,w.current=l},[i,v,l]);let E=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)(O,{rows:v}):(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let k=h??p;return k?(0,u.jsx)(`div`,{className:C.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:k})}):a||i===null?(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:C.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:C.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=A(t);n&&(l[e]=n)}}return(0,u.jsx)(T,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),E&&(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`})})]})},M={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},N=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[M.row,e===`title`?M.title:``].filter(Boolean).join(` `),children:t}),P={bar:`_bar_145f5_12`,skeletonAppear:`_skeletonAppear_145f5_1`,fade:`_fade_145f5_1`,listRows:`_listRows_145f5_19`,sliderArea:`_sliderArea_145f5_25`,sliderTrack:`_sliderTrack_145f5_32`,inputRow:`_inputRow_145f5_40`,inputBar:`_inputBar_145f5_45`},F=[65,80,55,72,60,75,50,68],I=({title:e,rows:t=5,variant:n=`list`,collapsible:r=!0,startCollapsed:i=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:r,collapsed:i,children:n===`slider`?(0,u.jsxs)(`div`,{className:P.sliderArea,children:[(0,u.jsx)(`div`,{className:P.sliderTrack}),(0,u.jsxs)(`div`,{className:P.inputRow,children:[(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:P.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:P.bar,style:{width:`${F[t%F.length]}%`,animationDelay:`${t*.05}s`}},t))})}),L={list:`_list_m82u6_2`,count:`_count_m82u6_7`,countValue:`_countValue_m82u6_17`,chip:`_chip_m82u6_22`,chipLabel:`_chipLabel_m82u6_32`,grid:`_grid_m82u6_40`},R=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,displayType:l=`checkbox`,layout:f=`list`,showActivePanel:p=!1,showCount:m=!0,showNull:h=!1,match:g=`all`,displayIfEmptyQuery:_=!0,displayCondition:v=e=>!0})=>{let{state:{facets:y,filterableFields:b,facetableFields:S,filters:C,query:w},toggleFilter:T,setValueMatch:E,isFetchingInitial:D,allowEmptySearch:O}=x();(0,c.useEffect)(()=>{E(e,g)},[e,g,E]);let k=(0,c.useRef)(null),[A,j]=(0,c.useState)(a);if((0,c.useEffect)(()=>{j(a)},[y?.[e],a]),!O&&!w)return null;if(D||!y)return l===`toggle`?(0,u.jsx)(I,{rows:1,collapsible:!1}):(0,u.jsx)(I,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!v({query:w??``,filters:C,facets:y})||!_&&!w&&Object.keys(C).length<1)return null;if(!b?.includes(e)||!S?.includes(e)){let t=[];return b?.includes(e)||t.push(`filterable`),S?.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 M=y?.[e]??(l===`toggle`?[]:void 0);if(!M||!Array.isArray(M))return null;let N=C?.[e]??[];n&&!k.current&&M.length>0&&(k.current=M.reduce((e,t)=>(e[t.key]=t.value,e),{}));let P=new Map;n&&k.current&&Object.keys(k.current).forEach(e=>{P.set(e,0)}),M.forEach(e=>{P.set(e.key,e.value)});let F=new Set([`true`,`false`,`null`]),R=Array.from(P.keys()),z=l===`toggle`&&(R.length>0&&R.every(e=>F.has(e))||R.length===0&&N.length>0);if(z&&P.has(`null`)){let e=P.get(`null`)??0,t=P.get(`false`)??0;P.set(`false`,t+e),P.delete(`null`)}if(l===`toggle`&&!z)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:L.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(z){let n=P.get(`true`),r=typeof n==`number`?n:null,i=N.includes(`true`),a=r===0&&!i,o=m&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>T(e,`true`),disabled:a}),` `,o]})})}let B=Array.from(P.entries());if(h||(B=B.filter(([e])=>e!==`null`)),B.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=B.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=B.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));B=[...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=B.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=B.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));B=[...t,...n]}else{let e=B.filter(([,e])=>typeof e==`number`&&e>0),t=B.filter(([,e])=>e===0||e===null);B=[...e,...t]}let V=typeof a==`number`&&B.length>a,H=V?B.slice(0,A):B,U=(t,n)=>{let r=N.includes(t),i=n===0,a=m&&(n??0)>0?` (${n})`:``,o=m&&(n??0)>0?n:``;switch(l){case`button`:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>T(e,t),disabled:i,size:`micro`,className:L.chip,title:t,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:L.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>T(e,t),disabled:i,size:`micro`,className:L.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:()=>T(e,t),disabled:i});default:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:()=>T(e,t),disabled:i}),(0,u.jsx)(`span`,{children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:()=>T(e,t),disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,children:(0,u.jsxs)(`ul`,{className:f===`grid`?L.grid:L.list,style:{listStyle:`none`,padding:0,margin:0},children:[H.map(([e,t])=>(0,u.jsx)(`li`,{children:U(e,t)},e)),V&&A<B.length&&(()=>{let e=B.length-A,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:L.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(e=>e+50),children:`Show ${t} more of ${B.length} total`})})})()]})})},z={disabledMessage:`_disabledMessage_uci6n_1`,histogram:`_histogram_uci6n_6`,histogramBar:`_histogramBar_uci6n_15`};function B(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 V(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(B(n)))}var H=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,displayType:i=`input`,collapsible:a=!0,startCollapsed:o=!1,showHistogram:s=!1,resolution:l,step:f})=>{let{state:{rangeFilters:p,rangeBounds:m,facetStats:h,facets:g,filterableFields:_,facetableFields:v,query:y,facetDebounceDelayMillis:b},setRangeFilter:S,resetRangeFilter:C,allowEmptySearch:w,isFetchingInitial:T}=x(),E=m?.[e]!==void 0,D=m?.[e]??{min:n,max:r},O=D.min,k=D.max,A=h?.[e]??D,j=Math.max(O,Math.min(k,A.min)),M=Math.max(O,Math.min(k,A.max)),N=c.default.useMemo(()=>{if(f)return f;let t=Math.max(B(O),B(k)),n=g?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,B(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[f,O,k,g,e]),P=E&&O===k,F=P?n:O,L=P?r:k,R=p?.[e],H=R?R.min:O,U=R?R.max:k,ee=R!==void 0,te=j!==O||M!==k,[W,G]=c.default.useState([H,U]),[ne,K]=c.default.useState(!1),[re,q]=c.default.useState(!1),[J,Y]=c.default.useState(String(H)),[X,Z]=c.default.useState(String(U));c.default.useEffect(()=>{Y(String(W[0])),Z(String(W[1]))},[W]);let{finalMin:Q,finalMax:$,isValidMin:ie,isValidMax:ae}=c.default.useMemo(()=>{let[e,t]=W,n=Math.max(O,Math.min(k,e)),r=Math.max(O,Math.min(k,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=O&&i<a,isValidMax:a<=k&&a>i}},[W,O,k]);c.default.useEffect(()=>{if(P)return;if(W[0]===O&&W[1]===k){K(!1),q(!1);return}let t=b??500,n=setTimeout(()=>{K(!ie),q(!ae)},300),r=setTimeout(()=>{ie&&ae&&(Q===O&&$===k?C(e,!1):S(e,Q,$))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[Q,$,ie,ae,O,k,e,C,S,b,P]),c.default.useEffect(()=>{G([H,U]),K(!1),q(!1)},[H,U,e]);let oe=c.default.useCallback(e=>{P||G([Math.max(O,Math.min(M,e[0])),Math.max(j,Math.min(k,e[1]))])},[P,O,k,j,M]),se=c.default.useCallback(t=>{if(P)return;let n=Math.max(O,Math.min(M,t[0])),r=Math.max(j,Math.min(k,t[1]));n===O&&r===k?(G([O,k]),C(e,!0)):G([n,r])},[P,O,k,j,M,e,C]),ce=c.default.useCallback(()=>{if(P)return;let e=J.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){Y(String(W[0]));return}let n=Math.max(O,Math.min(M,t));n<W[1]?G([n,W[1]]):G([O,W[1]]),Y(String(n<W[1]?n:O))},[P,J,W,O,M]),le=c.default.useCallback(()=>{if(P)return;let e=X.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){Z(String(W[1]));return}let n=Math.max(j,Math.min(k,t));n>W[0]?G([W[0],n]):G([W[0],k]),Z(String(n>W[0]?n:k))},[P,X,W,j,k]),ue=e=>t=>{t.key===`Enter`&&e()},[de,fe]=c.default.useState(null),pe=c.default.useRef(null);c.default.useEffect(()=>{if(!s)return;let t=`${O}:${k}`;if(t===pe.current&&pe.current!==null)return;let n=g?.[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&&(pe.current=t,fe(r))},[O,k,g,e,s]);let me=c.default.useMemo(()=>{if(!s||!de||de.length===0)return[];let e=k-O;if(e<=0)return[];let t=l??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,n)=>{let r=O+n*t,i=O+(n+1)*t;return{bucketStart:r,bucketEnd:i,count:de.filter(e=>{let t=Number(e.key);return t>=r&&t<i}).reduce((e,t)=>e+t.value,0)}})},[s,de,O,k,l]),he=c.default.useMemo(()=>Math.max(...me.map(e=>e.count),1),[me]);return s&&!T&&!v?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),T?(0,u.jsx)(I,{title:t,variant:`slider`,collapsible:a,startCollapsed:o}):!w&&!y?null:_?.includes(e)?i===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:o,collapsible:a,children:[P&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,O,`).`]}),s&&me.length>0&&(0,u.jsx)(`div`,{className:z.histogram,children:(()=>{let e=typeof j==`number`&&typeof M==`number`&&M>j&&(j>O||M<k);return me.map((t,n)=>{let r=Math.max(1,Math.ceil(t.count/he*20)),i=e?t.bucketEnd>j&&t.bucketStart<M:t.bucketEnd>Q&&t.bucketStart<$;return(0,u.jsx)(`div`,{className:z.histogramBar,"data-testid":`histogram-bar`,"data-active":i,style:{height:`${r}px`,background:i?`var(--lv5)`:`var(--lv3)`}},n)})})()}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:F,max:L,step:N,value:P?[F,L]:[V(Q,F,N),V($,F,N)],isRange:!0,onChange:e=>oe(e),onFinalChange:e=>se(e),disabled:P,activeMin:j,activeMax:M,isFaceted:te,highlightFaceted:ee,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,flex:`flex-grow`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:P?String(O):J,min:O,max:Math.min(M,W[1]-1),onChange:e=>Y(e.target.value),onBlur:ce,onKeyDown:ue(ce),disabled:P,isValid:P||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:P?String(k):X,min:Math.max(j,W[0]+1),max:k,onChange:e=>Z(e.target.value),onBlur:le,onKeyDown:ue(le),disabled:P,isValid:P||!re})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,children:[P&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,O,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:P?String(O):J,min:O,max:Math.min(M,W[1]-1),onChange:e=>Y(e.target.value),onBlur:ce,onKeyDown:ue(ce),disabled:P,isValid:P||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:P?String(k):X,min:Math.max(j,W[0]+1),max:k,onChange:e=>Z(e.target.value),onBlur:le,onKeyDown:ue(le),disabled:P,isValid:P||!re})]})]}):(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.`]})})},U={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:U.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:U.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:U.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:U.chipLabel,children:[e,`: `,t,` – `,n]})})}));function W(){let{state:{filters:e,rangeFilters:t},resetFilters:n,resetSingleFilter:r,resetRangeFilter:i}=x(),a=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),o=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0,[e,t])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:U.grid,children:[a.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>r(e,t)},`${e}-${t}`)),o.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>i(e)},e)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var G={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},ne=({displayType:e=`dropdown`,collapsible:t=!0,startCollapsed:n=!1})=>{let{state:{sortableFields:r,sortBy:i,sortAscending:a},setSort:o,isFetchingInitial:s}=x();if(s)return(0,u.jsx)(I,{title:`Sort by`,rows:e===`radio`?3:1,collapsible:t,startCollapsed:n});if(!r||r.length===0)return null;let c=i?`${i}:${a?`asc`:`desc`}`:`none`,l=[{label:`None`,value:`none`},...r.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],f=e=>{if(e===`none`||e===``)o(null,!0);else{let[t,n]=e.split(`:`);o(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:t,collapsed:t?n:!1,children:e===`dropdown`?(0,u.jsx)(d.Select,{value:c,onValueChange:f,options:l,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:G.radioGroup,children:l.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:c===e.value,onChange:e=>f(e.target.value)},e.value))})})},K={list:`_list_1y4fk_1`};function re(){let{state:{searchSettings:e},setSearchSettings:t}=x(),[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:K.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 IndxCloudApi website)`}),(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 J(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[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 Error(`VectorSearch failed: ${u.status}`);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 Error(`GetJson failed: ${p.status}`);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 Y(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[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 Error(`HybridSearch failed: ${u.status}`);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 Error(`GetJson failed: ${p.status}`);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=W,exports.FilterPanelSkeleton=I,exports.RangeFilterPanel=H,exports.SearchContext=y,exports.SearchErrorBoundary=q,exports.SearchInput=S,exports.SearchProvider=b,exports.SearchResult=T,exports.SearchResultRow=N,exports.SearchResults=j,exports.SearchResultsSkeleton=O,exports.SearchSettingsPanel=re,exports.SortByPanel=ne,exports.ValueFilterPanel=R,exports.useHybridSearch=Y,exports.useSearch=x,exports.useSearchContext=x,exports.useVectorSearch=J;
|