@indxsearch/intrface 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,12 +5,38 @@ All notable changes to `@indxsearch/intrface` will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 3.1.0
9
+
10
+ ### Minor Changes
11
+
12
+ - 04afd27: Filter, settings and error-handling fixes across the components.
13
+
14
+ - Several selected values on the **same** field are now ORed (a document matches any of them) before the per-field results are ANDed together with the range filters. Previously every value was ANDed, so ticking a second box in one panel returned nothing.
15
+ - A failed `/filters/*` call, search or document lookup now sets `state.error` instead of silently running an unfiltered search or showing an empty result. `SearchResults` renders `authError` / `state.error` in place of the idle placeholder.
16
+ - `ValueFilterPanel` with `displayType="toggle"` stays on and clickable after the filtered response narrows the facet to `{ true }` only (or removes it). The `null → false` merge now applies to boolean toggles only, so `showNull` works on checkbox and button panels and no `false` option is fabricated for non-boolean fields.
17
+ - `RangeFilterPanel` Min/Max inputs keep what you type and commit (clamp/revert) on blur or Enter instead of clamping every keystroke. The panel now reports a field that is not filterable instead of rendering a slider whose filter the server rejects.
18
+ - `SearchSettingsPanel` changes now trigger a new search. A `maxNumberOfRecordsToReturn` set through `setSearchSettings` survives query changes; the "load more" expansion still resets.
19
+ - Filter and sort changes refresh results when `enableFacets={false}`.
20
+ - **Breaking:** `SearchResults` no longer splits string values that start with `[` into arrays. Opt in with the new `parseArrayStrings` prop, which parses only proper JSON or Python-style list literals.
21
+ - `SearchErrorBoundary` documents that it catches render errors only and uses the systm `Button`.
22
+
23
+ ## [3.0.1] - 2026-08-27
24
+
25
+ ### Fixed
26
+
27
+ - `authError` was missing from the published type declarations (`SearchContextType` and
28
+ `IndxAuthResult`) — the property existed at runtime in 3.0.0 but TypeScript consumers
29
+ could not access it without a compile error. Types only; no runtime change.
30
+
31
+ ---
32
+
8
33
  ## [3.0.0] - 2026-08-25
9
34
 
10
35
  First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
11
36
  (Supersedes `3.0.0-alpha.20260617`, previously published under the `next` tag.)
12
37
 
13
38
  ### Changed
39
+
14
40
  - **BREAKING**: All dataset operations use the team-scoped IndxCloudApi v2 routes
15
41
  (`/api/teams/{team}/datasets/{dataset}/…`). `SearchProvider` takes a required
16
42
  `team` prop alongside `dataset`.
@@ -22,11 +48,13 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
22
48
  creating an empty dataset on the server.
23
49
 
24
50
  ### Added
51
+
25
52
  - `authError` on the search context — set when initialization fails (bad token,
26
53
  unknown dataset, unreachable server). Previously such failures surfaced only as
27
54
  an unhandled promise rejection in the console.
28
55
 
29
56
  ### Compatibility
57
+
30
58
  - Requires IndxCloudApi v2
31
59
  - `@indxsearch/indx-types` ^2.0.0 · `@indxsearch/systm` ^2.2.0
32
60
  - React ^19.0.0 · React DOM ^19.0.0
@@ -36,6 +64,7 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
36
64
  ## [2.1.1] - 2026-01-21
37
65
 
38
66
  ### Fixed
67
+
39
68
  - **CRITICAL**: Fixed missing TypeScript declaration files (.d.ts) in published package
40
69
  - v2.1.0 was published without declaration files, causing TypeScript compilation errors
41
70
  - All type definitions are now properly included in the npm package
@@ -43,12 +72,14 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
43
72
  ## [2.1.0] - 2026-01-21
44
73
 
45
74
  ### Added
75
+
46
76
  - Added dependency on `@indxsearch/indx-types` for centralized API type definitions
47
77
  - Added `RequiredCoverageSetup` type for internal use (all properties guaranteed present)
48
78
  - Added new CoverageSetup properties: `truncateWordHitLimit`, `truncateWordHitTolerance`, `includePatternMatches`
49
79
  - Added "Include Pattern Matches" toggle to SearchSettingsPanel
50
80
 
51
81
  ### Fixed
82
+
52
83
  - **BREAKING FIX**: Fixed `SystemStatus.state` → `systemStatus.systemState` to match actual API response
53
84
  - **BREAKING FIX**: Fixed `SearchResult.documentKey` type from `string` to `number` (Int32) to match API
54
85
  - Fixed SystemState enum usage with proper numeric comparisons
@@ -56,6 +87,7 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
56
87
  - Fixed `truncationScore` default value: 254 → 255
57
88
 
58
89
  ### Changed
90
+
59
91
  - **BREAKING**: Updated CoverageSetup interface to match IndxCloudApi v1.0.2
60
92
  - Removed obsolete properties: `coverageMinWordHitsAbs`, `coverageMinWordHitsRelative`, `coverageLcsErrorToleranceRelativeq`, `coverageQLimitForErrorTolerance`
61
93
  - These properties no longer exist in the API specification
@@ -65,9 +97,11 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
65
97
  - Imports `SystemState` enum as value (not just type) for runtime comparisons
66
98
 
67
99
  ### Technical Details
100
+
68
101
  This release aligns `@indxsearch/intrface` with the official IndxCloudApi v1.0.2 Swagger specification. The breaking changes fix discrepancies between the package and the actual API that could cause runtime errors or unexpected behavior.
69
102
 
70
103
  ### Migration Guide
104
+
71
105
  If upgrading from 2.0.x:
72
106
 
73
107
  1. **SystemStatus access**: Change `statusData.state` to `statusData.systemState`
@@ -75,6 +109,7 @@ If upgrading from 2.0.x:
75
109
  3. **CoverageSetup**: Remove any usage of the deleted properties listed above
76
110
 
77
111
  ### Compatibility
112
+
78
113
  - Requires IndxCloudApi v1.0.2
79
114
  - Requires `@indxsearch/indx-types` ^1.0.0
80
115
  - React ^19.0.0
@@ -83,20 +118,24 @@ If upgrading from 2.0.x:
83
118
  ## [2.0.1] - 2026-01-16
84
119
 
85
120
  ### Fixed
121
+
86
122
  - Fixed search firing 3 times per keystroke instead of 2 (immediate + debounced)
87
123
  - Fixed reset filters not triggering new search when user clicks "Reset" button
88
124
  - Fixed filter effect race conditions with automatic range filter cleanups
89
125
  - Fixed range filter panel automatically triggering searches when cleaning up full-range filters
90
126
 
91
127
  ### Changed
128
+
92
129
  - Added optional `isUserAction` parameter to `resetSingleFilter` method to distinguish between user-initiated actions and automatic code cleanups
93
130
  - Optimized `coverageSetup` reference preservation in `setSearchSettings` to prevent unnecessary re-renders
94
131
  - Removed verbose `useMemo` dependencies for `coverageSetup` (replaced with stable reference approach)
95
132
 
96
133
  ### Technical Details
134
+
97
135
  The root cause of the 3-search bug was `RangeFilterPanel` automatically calling `resetSingleFilter` after every search to clean up full-range filters. This was setting the `filtersChangedByUser` flag, causing the filter effect to fire an extra search. The fix distinguishes between user-initiated resets (should trigger search) and automatic cleanups (should not trigger search).
98
136
 
99
137
  ### Compatibility
138
+
100
139
  - Requires IndxCloudApi 1.0.0
101
140
  - React ^19.0.0
102
141
  - React DOM ^19.0.0
@@ -104,6 +143,7 @@ The root cause of the 3-search bug was `RangeFilterPanel` automatically calling
104
143
  ## [2.0.0] - [Previous Date]
105
144
 
106
145
  ### Added
146
+
107
147
  - Initial public release with major architectural improvements
108
148
  - Full TypeScript support
109
149
  - Comprehensive authentication system (bearer token + email/password)
@@ -117,6 +157,7 @@ The root cause of the 3-search bug was `RangeFilterPanel` automatically calling
117
157
  - Mobile-responsive design
118
158
 
119
159
  ### Compatibility
160
+
120
161
  - Requires IndxCloudApi 1.0.0
121
162
  - React ^19.0.0
122
163
  - React DOM ^19.0.0
package/README.md CHANGED
@@ -350,8 +350,11 @@ export default function AdvancedSearch() {
350
350
  |------|------|----------|-------------|
351
351
  | `fields` | `string[]` | ✅ | Document fields to fetch |
352
352
  | `resultsPerPage` | `number` | ✅ | Results per page |
353
+ | `parseArrayStrings` | `boolean` | ❌ | Convert string fields holding a JSON (`["a","b"]`) or Python-style (`['a', 'b']`) list literal into a `string[]` before `children` sees them. Default `false`; other strings are never altered. |
353
354
  | `children` | `(item: any) => ReactNode` | ✅ | Render function for each result |
354
355
 
356
+ Initialisation failures (bad token, unknown dataset, unreachable server) and failed searches are stored in the context as `authError` / `state.error`, and `SearchResults` renders the message in place of the result list. `SearchErrorBoundary` only catches errors thrown while rendering.
357
+
355
358
  ### ValueFilterPanel Props
356
359
 
357
360
  | Prop | Type | Default | Description |
@@ -363,6 +366,9 @@ export default function AdvancedSearch() {
363
366
  | `limit` | `number` | `undefined` | Max filters to show |
364
367
  | `startCollapsed` | `boolean` | `false` | Start collapsed |
365
368
  | `showCount` | `boolean` | `true` | Show facet counts |
369
+ | `showNull` | `boolean` | `false` | List the `null` facet bucket (documents without the field) as an option |
370
+
371
+ Selecting several values on one field widens the result set (they are ORed); different fields and range filters narrow it (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`.
366
372
 
367
373
  ### RangeFilterPanel Props
368
374
 
@@ -8,10 +8,13 @@ interface State {
8
8
  error: Error | null;
9
9
  }
10
10
  /**
11
- * Error boundary component for graceful error handling in search components.
11
+ * Error boundary for the search components.
12
12
  *
13
- * Catches errors during initialization and search operations, displaying
14
- * user-friendly error messages with suggestions for fixing common issues.
13
+ * Catches errors thrown while *rendering* the tree below it (a render prop
14
+ * that throws, a misconfigured component). It does not see failed requests:
15
+ * initialisation failures (bad token, unknown dataset, unreachable server)
16
+ * and failed searches are stored in the search context as `authError` and
17
+ * `state.error`, and `SearchResults` renders them in place of the result list.
15
18
  *
16
19
  * @example
17
20
  * <SearchErrorBoundary>
@@ -2,6 +2,15 @@ import { default as React } from 'react';
2
2
  export interface SearchResultsProps {
3
3
  fields?: string[];
4
4
  resultsPerPage?: number;
5
+ /**
6
+ * Convert string fields that hold a serialised list — JSON (`["a","b"]`) or
7
+ * Python-style (`['a', 'b']`) — into a real string[] before they reach the
8
+ * render prop. Off by default: any other string, including ones that merely
9
+ * start with '[' such as "[Draft] Report", is passed through untouched.
10
+ */
11
+ parseArrayStrings?: boolean;
5
12
  children: (item: Record<string, any>) => React.ReactNode;
6
13
  }
14
+ /** Returns the list a string encodes, or undefined when it is not a list literal. */
15
+ export declare function parseArrayString(value: string): string[] | undefined;
7
16
  export declare const SearchResults: React.FC<SearchResultsProps>;
@@ -23,7 +23,6 @@ export interface SearchState {
23
23
  resultsSuppressed?: boolean;
24
24
  facetDebounceDelayMillis?: number;
25
25
  error?: string;
26
- authError?: string;
27
26
  facets?: any | null;
28
27
  filterableFields: string[];
29
28
  facetableFields: string[];
@@ -50,6 +49,7 @@ export interface SearchState {
50
49
  export interface SearchContextType {
51
50
  state: SearchState;
52
51
  isFetchingInitial: boolean;
52
+ authError?: string;
53
53
  allowEmptySearch: boolean;
54
54
  url: string;
55
55
  team: string;
@@ -1,4 +1,12 @@
1
1
  type AuthenticatedFetch = (url: string, options?: RequestInit) => Promise<Response>;
2
+ /**
3
+ * Builds the server-side filter token for the current selection.
4
+ *
5
+ * Semantics: several selected values on the *same* field are ORed (a document
6
+ * matches if it has any of them), and the per-field results are then ANDed with
7
+ * each other and with every range filter. Any failed filter call throws — the
8
+ * caller must not fall back to an unfiltered search.
9
+ */
2
10
  export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, {
3
11
  min: number;
4
12
  max: number;
@@ -1,6 +1,8 @@
1
1
  export interface IndxAuthResult {
2
2
  token: string | null;
3
3
  isFetchingInitial: boolean;
4
+ /** Set when initialization failed (bad token, unknown dataset, unreachable server). */
5
+ authError: string | null;
4
6
  initialFacetStats: Record<string, {
5
7
  min: number;
6
8
  max: number;
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){if(e.length===0)return null;if(e.length===1)return e[0];let a=e[0];for(let o=1;o<e.length;o++){let s=await i(`${t}/api/teams/${n}/datasets/${r}/filters/combine`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({a,b:e[o],useAndOperation:!0})});if(!s.ok){let e=await s.json();throw console.error(`CombineFilters failed:`,e),Error(`CombineFilters failed`)}a=await s.json()}return a}async function h(e,t,n,r,i,a){let o=Object.entries(e??{}),s=Object.entries(t??{}),[c,l]=await Promise.all([Promise.all(o.map(([e,t])=>Promise.all(t.map(t=>a(`${n}/api/teams/${r}/datasets/${i}/filters/value`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({fieldName:e,value:t})}).then(e=>e.json()))))),Promise.all(s.map(([e,{min:t,max:o}])=>a(`${n}/api/teams/${r}/datasets/${i}/filters/range`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({fieldName:e,lowerLimit:t,upperLimit:o})}).then(e=>e.json())))]);return m([...c.flat(),...l].filter(e=>e&&typeof e.hashString==`string`),n,r,i,a)}function g(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function _({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),_=(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 h(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 g=await(await n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(m)})).json(),_=g.truncationIndex??-1,M=g.records||[],N=M.map(e=>e.documentKey),P=M.map(e=>e.score),F=[];f&&N.length>0&&(F=(await(await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(N)})).json()).map((e,t)=>({document:e,documentKey:N[t],score:P[t]})));let I={};if(c&&g.facets){for(let[e,t]of Object.entries(g.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(I[e]={min:Math.min(...n),max:Math.max(...n)})}}let L=e.query!==b,R=e.query!==S,z=e.facetStats??{};if(L?(z={...r.initialFacetStats,...I},y(z),x(e.query)):z={...v,...I},R&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(I))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let B=g.facets;if(c&&(!B||Object.keys(B).length===0)){B={};for(let[e,t]of Object.entries(r.initialFacetKeys))B[e]=t.map(e=>({key:e,value:null}))}if(l!==p.current)return;let V=F.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:V,resultsSuppressed:!f,...c?{facets:B,facetStats:z}:{},isLoading:!1,truncationIndex:_}))}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=g(()=>{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&&!_.current&&(s&&m.current?.({enableFacets:l}),_.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!_.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,!_.current||!r.token||!t)return;let n=e.query.trim();l&&!(!s&&n===``)&&m.current?.({enableFacets:!0})},[e.filters,e.rangeFilters]),(0,c.useEffect)(()=>{if(!_.current||!r.token)return;let t=e.query.trim();l&&!(!s&&t===``)&&m.current?.({enableFacets:!0})},[A,j]),(0,c.useEffect)(()=>{!_.current||!r.token||f.current&&(f.current=!1,m.current?.({enableFacets:!1}))},[w,r.token])}var v=(0,c.createContext)(void 0),y=({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 y=(0,c.useRef)(!1),b=(0,c.useRef)(!1),[x,S]=(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)(()=>{S(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[C]=(0,c.useState)(s),w=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),T=(0,c.useCallback)((e,t={})=>{if(!w.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${w.token}`}})},[w.token]);_({state:x,setState:S,authenticatedFetch:T,auth:w,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:C,enableDebugLogs:h,filtersChangedByUser:y,shouldFetchMore:b});let E=(0,c.useCallback)(e=>{y.current=!1,S(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:a}}})},[a]),D=(0,c.useCallback)(e=>{S(t=>({...t,facetDebounceDelayMillis:e}))},[]),O=(0,c.useCallback)(e=>{S(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),k=(0,c.useCallback)(e=>{b.current=!0,S(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),A=(0,c.useCallback)((e,t)=>{y.current=!0,S(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}})},[]),j=(0,c.useCallback)((e,t,n)=>{y.current=!0,S(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}}}))},[]),M=(0,c.useCallback)(()=>{y.current=!0,S(e=>({...e,filters:{},rangeFilters:{}}))},[]),N=(0,c.useCallback)((e,t,n=!0)=>{n&&(y.current=!0),S(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}})},[]),P=(0,c.useCallback)((e,t=!0)=>{t&&(y.current=!0),S(t=>{let n={...t.rangeFilters};return delete n[e],{...t,rangeFilters:n}})},[]),F=(0,c.useCallback)((e,t)=>{S(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(v.Provider,{value:{state:x,isFetchingInitial:w.isFetchingInitial,authError:w.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:T,setQuery:E,toggleFilter:A,setRangeFilter:j,resetFilters:M,resetSingleFilter:N,resetRangeFilter:P,setSort:F,setDebounceDelay:D,setSearchSettings:O,fetchMoreResults:k},children:e})},b=()=>{let e=(0,c.useContext)(v);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},x=({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}=b();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`})})},S={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},C={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`},w=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:C.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:C.indexNumber,children:t}),(0,u.jsx)(`div`,{className:C.content,children:e?(0,u.jsxs)(`div`,{className:C.skeletonBars,children:[(0,u.jsx)(`div`,{className:C.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:C.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:C.scoreNumber,children:n})]}),T={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},E=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],D=({rows:e=6})=>(0,u.jsx)(`div`,{className:T.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(w,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:E[t%E.length]},t))}),O=({fields:e,resultsPerPage:t,children:n})=>{let{state:{results:r,resultsSuppressed:i,searchSettings:a,truncationIndex:o,query:s},isFetchingInitial:l,allowEmptySearch:p,fetchMoreResults:m}=b(),h=t??30,[g,_]=(0,c.useState)(h),v=(0,c.useRef)(0),y=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=s!==y.current;(!r||r.length<v.current||e)&&_(h),v.current=r?.length??0,y.current=s},[r,h,s]);let x=r&&r.length>g;return l?p?(0,u.jsx)(D,{rows:h}):(0,u.jsx)(`div`,{className:S.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i||r===null?(0,u.jsx)(`div`,{className:S.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):r.length===0?(0,u.jsx)(`div`,{className:S.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(r??[]).slice(0,g).map((t,r)=>{let i=t.document,o=t.score,s;try{s=typeof i==`string`?JSON.parse(i):i}catch{return(0,u.jsx)(`div`,{className:S.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},r)}let c;if(e&&e.length>0){c={};for(let t of e)t in s&&(c[t]=s[t])}else c={...s};for(let e in c){let t=c[e];if(typeof t==`string`&&t.startsWith(`[`)&&t.endsWith(`]`)){let n=t.replace(/^\[|\]$/g,``);c[e]=n.split(`,`).map(e=>e.trim().replace(/^'|'$/g,``)).filter(e=>e.length>0)}}return(0,u.jsx)(w,{index:r,score:o,showScore:a.showScore,children:n(c)},r)})}),x&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:()=>{let e=g+h;_(e),r&&e>=r.length&&(!o||o===-1||o>r.length)&&m(r.length+h)},children:s.trim()===``?`Load more`:o!==-1&&o!==void 0&&o>0?`Load results ${g+1}-${Math.min(g+h,r.length,o)} of ${o}`:`Load more`})})]})},k={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},A=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[k.row,e===`title`?k.title:``].filter(Boolean).join(` `),children:t}),j={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`},M=[65,80,55,72,60,75,50,68],N=({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:j.sliderArea,children:[(0,u.jsx)(`div`,{className:j.sliderTrack}),(0,u.jsxs)(`div`,{className:j.inputRow,children:[(0,u.jsx)(`div`,{className:j.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:j.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:j.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:j.bar,style:{width:`${M[t%M.length]}%`,animationDelay:`${t*.05}s`}},t))})}),P={list:`_list_m82u6_2`,count:`_count_m82u6_7`,countValue:`_countValue_m82u6_17`,chip:`_chip_m82u6_22`,chipLabel:`_chipLabel_m82u6_32`,grid:`_grid_m82u6_40`},F=({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:x,filters:S,query:C},toggleFilter:w,isFetchingInitial:T,allowEmptySearch:E}=b(),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)(N,{rows:1,collapsible:!1}):(0,u.jsx)(N,{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)||!x?.includes(e)){let t=[];return y?.includes(e)||t.push(`filterable`),x?.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];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 F=l===`toggle`&&M.size===2&&M.has(`true`)&&(M.has(`false`)||M.has(`null`));if(M.has(`null`)){let e=M.get(`null`)??0,t=M.get(`false`)??0;M.set(`false`,(t??0)+e),M.delete(`null`)}if(l===`toggle`&&!F)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:P.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,o=m&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:P.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>w(e,`true`),disabled:a}),` `,o]})})}let I=Array.from(M.entries());if(h||(I=I.filter(([e])=>e!==`null`)),I.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=I.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=I.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));I=[...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=I.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=I.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));I=[...t,...n]}else{let e=I.filter(([,e])=>typeof e==`number`&&e>0),t=I.filter(([,e])=>e===0||e===null);I=[...e,...t]}let L=typeof a==`number`&&I.length>a,R=L?I.slice(0,O):I,z=(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:P.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>w(e,t),disabled:i,size:`micro`,className:P.chip,title:t,children:(0,u.jsx)(`span`,{className:P.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:P.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>w(e,t),disabled:i,size:`micro`,className:P.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:P.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:P.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`?P.grid:P.list,style:{listStyle:`none`,padding:0,margin:0},children:[R.map(([e,t])=>(0,u.jsx)(`li`,{children:z(e,t)},e)),L&&O<I.length&&(()=>{let e=I.length-O,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:P.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>k(e=>e+50),children:`Show ${t} more of ${I.length} total`})})})()]})})},I={disabledMessage:`_disabledMessage_uci6n_1`,histogram:`_histogram_uci6n_6`,histogramBar:`_histogramBar_uci6n_15`},L=({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,facetableFields:g,query:_,facetDebounceDelayMillis:v},setRangeFilter:y,resetRangeFilter:x,allowEmptySearch:S,isFetchingInitial:C}=b(),w=p?.[e]!==void 0,T=p?.[e]??{min:n,max:r},E=T.min,D=T.max,O=m?.[e]??T,k=Math.max(E,Math.min(D,O.min)),A=Math.max(E,Math.min(D,O.max)),j=w&&E===D,M=j?n:E,P=j?r:D,F=f?.[e],L=F?F.min:E,R=F?F.max:D,z=F!==void 0,B=k!==E||A!==D,[V,H]=c.default.useState([L,R]),[U,W]=c.default.useState(!1),[G,K]=c.default.useState(!1),{finalMin:q,finalMax:J,isValidMin:Y,isValidMax:X}=c.default.useMemo(()=>{let[e,t]=V,n=Math.max(E,Math.min(D,e)),r=Math.max(E,Math.min(D,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=E&&i<a,isValidMax:a<=D&&a>i}},[V,E,D]);c.default.useEffect(()=>{if(j)return;if(V[0]===E&&V[1]===D){W(!1),K(!1);return}let t=v??500,n=setTimeout(()=>{W(!Y),K(!X)},300),r=setTimeout(()=>{Y&&X&&(q===E&&J===D?x(e,!1):y(e,q,J))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[q,J,Y,X,E,D,e,x,y,v,j]),c.default.useEffect(()=>{H([L,R]),W(!1),K(!1)},[L,R,e]);let ee=c.default.useCallback(e=>{j||H([Math.max(E,Math.min(A,e[0])),Math.max(k,Math.min(D,e[1]))])},[j,E,D,k,A]),te=c.default.useCallback(t=>{if(j)return;let n=Math.max(E,Math.min(A,t[0])),r=Math.max(k,Math.min(D,t[1]));n===E&&r===D?(H([E,D]),x(e,!0)):H([n,r])},[j,E,D,k,A,e,x]),ne=c.default.useCallback(e=>{if(j)return;let t=Number(e.target.value);isNaN(t)||H([Math.max(E,Math.min(A,t)),V[1]])},[j,V,E,A]),re=c.default.useCallback(e=>{if(j)return;let t=Number(e.target.value);if(!isNaN(t)){let e=Math.max(k,Math.min(D,t));H([V[0],e])}},[j,V,k,D]),ie=c.default.useCallback(()=>{let e=V[0],t=Math.max(E,Math.min(A,e));t<V[1]?H([t,V[1]]):H([E,V[1]])},[V,E,A]),ae=c.default.useCallback(()=>{let e=V[1],t=Math.max(k,Math.min(D,e));t>V[0]?H([V[0],t]):H([V[0],D])},[V,k,D]),[Z,oe]=c.default.useState(null),Q=c.default.useRef(null);c.default.useEffect(()=>{if(!s)return;let t=`${E}:${D}`;if(t===Q.current&&Q.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&&(Q.current=t,oe(r))},[E,D,h,e,s]);let $=c.default.useMemo(()=>{if(!s||!Z||Z.length===0)return[];let e=D-E;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=E+n*t,i=E+(n+1)*t;return{bucketStart:r,bucketEnd:i,count:Z.filter(e=>{let t=Number(e.key);return t>=r&&t<i}).reduce((e,t)=>e+t.value,0)}})},[s,Z,E,D,l]),se=c.default.useMemo(()=>Math.max(...$.map(e=>e.count),1),[$]);return s&&!C&&!g?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),C?(0,u.jsx)(N,{title:t,variant:`slider`,collapsible:a,startCollapsed:o}):!S&&!_?null:i===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:o,collapsible:a,children:[j&&(0,u.jsxs)(`div`,{className:I.disabledMessage,children:[`No adjustable range (all results have the same value: `,E,`).`]}),s&&$.length>0&&(0,u.jsx)(`div`,{className:I.histogram,children:(()=>{let e=typeof k==`number`&&typeof A==`number`&&A>k&&(k>E||A<D);return $.map((t,n)=>{let r=Math.max(1,Math.ceil(t.count/se*20)),i=e?t.bucketEnd>k&&t.bucketStart<A:t.bucketEnd>q&&t.bucketStart<J;return(0,u.jsx)(`div`,{className:I.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:M,max:P,value:j?[M,P]:[q,J],isRange:!0,onChange:e=>ee(e),onFinalChange:e=>te(e),disabled:j,activeMin:k,activeMax:A,isFaceted:B,highlightFaceted:z,"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:j?E:V[0],min:E,max:Math.min(A,V[1]-1),onChange:ne,onBlur:ie,disabled:j,isValid:j||!U}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:j?D:V[1],min:Math.max(k,V[0]+1),max:D,onChange:re,onBlur:ae,disabled:j,isValid:j||!G})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,children:[j&&(0,u.jsxs)(`div`,{className:I.disabledMessage,children:[`No adjustable range (all results have the same value: `,E,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:j?E:V[0],min:E,max:Math.min(A,V[1]-1),onChange:ne,onBlur:ie,disabled:j,isValid:j||!U}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:j?D:V[1],min:Math.max(k,V[0]+1),max:D,onChange:re,onBlur:ae,disabled:j,isValid:j||!G})]})]})},R={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},z=(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:R.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:R.chipLabel,children:[e,`: `,t]})})})),B=(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:R.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:R.chipLabel,children:[e,`: `,t,` – `,n]})})}));function V(){let{state:{filters:e,rangeFilters:t},resetFilters:n,resetSingleFilter:r,resetRangeFilter:i}=b(),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:R.grid,children:[a.map(({field:e,value:t})=>(0,u.jsx)(z,{field:e,value:t,onReset:()=>r(e,t)},`${e}-${t}`)),o.map(({field:e,min:t,max:n})=>(0,u.jsx)(B,{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 H={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},U=({displayType:e=`dropdown`,collapsible:t=!0,startCollapsed:n=!1})=>{let{state:{sortableFields:r,sortBy:i,sortAscending:a},setSort:o,isFetchingInitial:s}=b();if(s)return(0,u.jsx)(N,{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:H.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))})})},W={list:`_list_1y4fk_1`};function G(){let{state:{searchSettings:e},setSearchSettings:t}=b(),[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:W.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 K=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)(`button`,{onClick:this.reset,style:{padding:`0.5rem 1rem`,backgroundColor:`#c33`,color:`white`,border:`none`,borderRadius:`4px`,cursor:`pointer`,fontWeight:`bold`},children:`Try Again`})]}):this.props.children}};function q(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=b(),[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 J(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=b(),[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=V,exports.FilterPanelSkeleton=N,exports.RangeFilterPanel=L,exports.SearchContext=v,exports.SearchErrorBoundary=K,exports.SearchInput=x,exports.SearchProvider=y,exports.SearchResult=w,exports.SearchResultRow=A,exports.SearchResults=O,exports.SearchResultsSkeleton=D,exports.SearchSettingsPanel=G,exports.SortByPanel=U,exports.ValueFilterPanel=F,exports.useHybridSearch=J,exports.useSearch=b,exports.useSearchContext=b,exports.useVectorSearch=q;
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;