@indxsearch/intrface 3.0.1 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,13 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Restore AND as the default for several selected values on one field. 3.1.0 switched this to OR, which broke narrowing on multi-valued fields (a movie tagged both "horror" and "comedy" must match both ticks). The OR behaviour is now opt-in per panel with `<ValueFilterPanel match="any" />` for scalar fields.
8
+
9
+ Also fixes react-range's "`values` property is in conflict with the current `step`, `min`, and `max`" warning: `RangeFilterPanel` derives its slider `step` from the precision of the field's values (new `step` prop to override) and snaps thumbs onto the grid, and the Minimum Score slider in `SearchSettingsPanel` uses step 1. Requires `@indxsearch/systm` ^2.6.1.
10
+
11
+ 3.1.0 is deprecated on npm because of the OR default; upgrade to 3.1.1.
12
+
3
13
  All notable changes to `@indxsearch/intrface` will be documented in this file.
4
14
 
5
15
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
16
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
17
 
18
+ ## 3.1.0
19
+
20
+ ### Minor Changes
21
+
22
+ - 04afd27: Filter, settings and error-handling fixes across the components.
23
+
24
+ - 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.
25
+ - 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.
26
+ - `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.
27
+ - `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.
28
+ - `SearchSettingsPanel` changes now trigger a new search. A `maxNumberOfRecordsToReturn` set through `setSearchSettings` survives query changes; the "load more" expansion still resets.
29
+ - Filter and sort changes refresh results when `enableFacets={false}`.
30
+ - **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.
31
+ - `SearchErrorBoundary` documents that it catches render errors only and uses the systm `Button`.
32
+
8
33
  ## [3.0.1] - 2026-08-27
9
34
 
10
35
  ### Fixed
36
+
11
37
  - `authError` was missing from the published type declarations (`SearchContextType` and
12
38
  `IndxAuthResult`) — the property existed at runtime in 3.0.0 but TypeScript consumers
13
39
  could not access it without a compile error. Types only; no runtime change.
@@ -20,6 +46,7 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
20
46
  (Supersedes `3.0.0-alpha.20260617`, previously published under the `next` tag.)
21
47
 
22
48
  ### Changed
49
+
23
50
  - **BREAKING**: All dataset operations use the team-scoped IndxCloudApi v2 routes
24
51
  (`/api/teams/{team}/datasets/{dataset}/…`). `SearchProvider` takes a required
25
52
  `team` prop alongside `dataset`.
@@ -31,11 +58,13 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
31
58
  creating an empty dataset on the server.
32
59
 
33
60
  ### Added
61
+
34
62
  - `authError` on the search context — set when initialization fails (bad token,
35
63
  unknown dataset, unreachable server). Previously such failures surfaced only as
36
64
  an unhandled promise rejection in the console.
37
65
 
38
66
  ### Compatibility
67
+
39
68
  - Requires IndxCloudApi v2
40
69
  - `@indxsearch/indx-types` ^2.0.0 · `@indxsearch/systm` ^2.2.0
41
70
  - React ^19.0.0 · React DOM ^19.0.0
@@ -45,6 +74,7 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
45
74
  ## [2.1.1] - 2026-01-21
46
75
 
47
76
  ### Fixed
77
+
48
78
  - **CRITICAL**: Fixed missing TypeScript declaration files (.d.ts) in published package
49
79
  - v2.1.0 was published without declaration files, causing TypeScript compilation errors
50
80
  - All type definitions are now properly included in the npm package
@@ -52,12 +82,14 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
52
82
  ## [2.1.0] - 2026-01-21
53
83
 
54
84
  ### Added
85
+
55
86
  - Added dependency on `@indxsearch/indx-types` for centralized API type definitions
56
87
  - Added `RequiredCoverageSetup` type for internal use (all properties guaranteed present)
57
88
  - Added new CoverageSetup properties: `truncateWordHitLimit`, `truncateWordHitTolerance`, `includePatternMatches`
58
89
  - Added "Include Pattern Matches" toggle to SearchSettingsPanel
59
90
 
60
91
  ### Fixed
92
+
61
93
  - **BREAKING FIX**: Fixed `SystemStatus.state` → `systemStatus.systemState` to match actual API response
62
94
  - **BREAKING FIX**: Fixed `SearchResult.documentKey` type from `string` to `number` (Int32) to match API
63
95
  - Fixed SystemState enum usage with proper numeric comparisons
@@ -65,6 +97,7 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
65
97
  - Fixed `truncationScore` default value: 254 → 255
66
98
 
67
99
  ### Changed
100
+
68
101
  - **BREAKING**: Updated CoverageSetup interface to match IndxCloudApi v1.0.2
69
102
  - Removed obsolete properties: `coverageMinWordHitsAbs`, `coverageMinWordHitsRelative`, `coverageLcsErrorToleranceRelativeq`, `coverageQLimitForErrorTolerance`
70
103
  - These properties no longer exist in the API specification
@@ -74,9 +107,11 @@ First stable release of the v3 line, for IndxCloudApi v2 (IndxSearchLib v5).
74
107
  - Imports `SystemState` enum as value (not just type) for runtime comparisons
75
108
 
76
109
  ### Technical Details
110
+
77
111
  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.
78
112
 
79
113
  ### Migration Guide
114
+
80
115
  If upgrading from 2.0.x:
81
116
 
82
117
  1. **SystemStatus access**: Change `statusData.state` to `statusData.systemState`
@@ -84,6 +119,7 @@ If upgrading from 2.0.x:
84
119
  3. **CoverageSetup**: Remove any usage of the deleted properties listed above
85
120
 
86
121
  ### Compatibility
122
+
87
123
  - Requires IndxCloudApi v1.0.2
88
124
  - Requires `@indxsearch/indx-types` ^1.0.0
89
125
  - React ^19.0.0
@@ -92,20 +128,24 @@ If upgrading from 2.0.x:
92
128
  ## [2.0.1] - 2026-01-16
93
129
 
94
130
  ### Fixed
131
+
95
132
  - Fixed search firing 3 times per keystroke instead of 2 (immediate + debounced)
96
133
  - Fixed reset filters not triggering new search when user clicks "Reset" button
97
134
  - Fixed filter effect race conditions with automatic range filter cleanups
98
135
  - Fixed range filter panel automatically triggering searches when cleaning up full-range filters
99
136
 
100
137
  ### Changed
138
+
101
139
  - Added optional `isUserAction` parameter to `resetSingleFilter` method to distinguish between user-initiated actions and automatic code cleanups
102
140
  - Optimized `coverageSetup` reference preservation in `setSearchSettings` to prevent unnecessary re-renders
103
141
  - Removed verbose `useMemo` dependencies for `coverageSetup` (replaced with stable reference approach)
104
142
 
105
143
  ### Technical Details
144
+
106
145
  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).
107
146
 
108
147
  ### Compatibility
148
+
109
149
  - Requires IndxCloudApi 1.0.0
110
150
  - React ^19.0.0
111
151
  - React DOM ^19.0.0
@@ -113,6 +153,7 @@ The root cause of the 3-search bug was `RangeFilterPanel` automatically calling
113
153
  ## [2.0.0] - [Previous Date]
114
154
 
115
155
  ### Added
156
+
116
157
  - Initial public release with major architectural improvements
117
158
  - Full TypeScript support
118
159
  - Comprehensive authentication system (bearer token + email/password)
@@ -126,6 +167,7 @@ The root cause of the 3-search bug was `RangeFilterPanel` automatically calling
126
167
  - Mobile-responsive design
127
168
 
128
169
  ### Compatibility
170
+
129
171
  - Requires IndxCloudApi 1.0.0
130
172
  - React ^19.0.0
131
173
  - 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,10 @@ 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
+ | `match` | `'all' \| 'any'` | `'all'` | How several selected values combine. `'all'` requires every selected value (right for multi-valued fields such as genres: each click narrows). `'any'` matches at least one (use on scalar fields, where a document holds a single value). |
371
+
372
+ Different fields and range filters always narrow the result set (ANDed). With `displayType="toggle"` the field is treated as boolean whenever its facet keys are `true` / `false` / `null`, and the `null` bucket counts as `false`.
366
373
 
367
374
  ### RangeFilterPanel Props
368
375
 
@@ -373,6 +380,7 @@ export default function AdvancedSearch() {
373
380
  | `displayType` | `'slider' \| 'input'` | ❌ | Filter UI style (default `'input'`) |
374
381
  | `expectedMin` | `number` | ❌ | Expected lower bound (default `0`) |
375
382
  | `expectedMax` | `number` | ❌ | Expected upper bound (default `1000`) |
383
+ | `step` | `number` | ❌ | Slider step. Derived from the precision of the field's values if omitted (1 for integers, 0.1 for one decimal, …) |
376
384
  | `showHistogram` | `boolean` | ❌ | Show a histogram above the slider (requires the field to be facetable; default `false`) |
377
385
  | `resolution` | `number` | ❌ | Value-range per histogram bucket (e.g. `200` → 5 bars over 0–1000). Auto-derived (~20 bars) if omitted |
378
386
  | `collapsible` | `boolean` | ❌ | Whether the panel can collapse (default `true`) |
@@ -9,5 +9,6 @@ export interface RangeFilterPanelProps {
9
9
  startCollapsed?: boolean;
10
10
  showHistogram?: boolean;
11
11
  resolution?: number;
12
+ step?: number;
12
13
  }
13
14
  export declare const RangeFilterPanel: React.FC<RangeFilterPanelProps>;
@@ -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>;
@@ -13,6 +13,14 @@ export interface ValueFilterPanelProps {
13
13
  showActivePanel?: boolean;
14
14
  showCount?: boolean;
15
15
  showNull?: boolean;
16
+ /**
17
+ * How several selected values combine. `'all'` (default) requires a document to
18
+ * carry every selected value — right for multi-valued fields such as genres,
19
+ * where each click narrows the results. `'any'` matches documents with at least
20
+ * one of them — use it on scalar fields, where a document can only hold one value
21
+ * and AND would always return nothing.
22
+ */
23
+ match?: 'all' | 'any';
16
24
  displayIfEmptyQuery?: boolean;
17
25
  displayCondition?: (context: {
18
26
  query: string;
@@ -1,5 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  import { CoverageSetup } from '@indxsearch/indx-types';
3
+ import { ValueMatch } from './buildFilterProxy';
4
+ export type { ValueMatch };
3
5
  export type RequiredCoverageSetup = Required<CoverageSetup>;
4
6
  export interface SearchSettings {
5
7
  maxNumberOfRecordsToReturn: number;
@@ -28,6 +30,7 @@ export interface SearchState {
28
30
  facetableFields: string[];
29
31
  sortableFields: string[];
30
32
  filters: Record<string, string[]>;
33
+ valueMatch: Record<string, ValueMatch>;
31
34
  rangeFilters: Record<string, {
32
35
  min: number;
33
36
  max: number;
@@ -57,6 +60,7 @@ export interface SearchContextType {
57
60
  authenticatedFetch: (url: string, options?: RequestInit) => Promise<Response>;
58
61
  setQuery: (query: string) => void;
59
62
  toggleFilter: (field: string, value: string) => void;
63
+ setValueMatch: (field: string, match: ValueMatch) => void;
60
64
  setRangeFilter: (field: string, min: number, max: number) => void;
61
65
  resetFilters: () => void;
62
66
  resetSingleFilter: (field: string, value: string, isUserAction?: boolean) => void;
@@ -1,6 +1,18 @@
1
1
  type AuthenticatedFetch = (url: string, options?: RequestInit) => Promise<Response>;
2
+ export type ValueMatch = 'all' | 'any';
3
+ /**
4
+ * Builds the server-side filter token for the current selection.
5
+ *
6
+ * Several selected values on the *same* field are combined per that field's
7
+ * match mode: `'all'` (default) ANDs them — a document must carry every value,
8
+ * which is the natural reading for multi-valued fields such as genres and
9
+ * narrows the result set with each click; `'any'` ORs them, for scalar fields
10
+ * where a document can only ever hold one of the values. The per-field results
11
+ * are then ANDed with each other and with every range filter. Any failed
12
+ * filter call throws — the caller must not fall back to an unfiltered search.
13
+ */
2
14
  export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, {
3
15
  min: number;
4
16
  max: number;
5
- }>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch): Promise<any>;
17
+ }>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>): Promise<any>;
6
18
  export {};
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");function p({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)(0),[C,w]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{w(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the IndxCloudApi website)`),Error(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),Error(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),Error(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok){if(c.status===401)throw console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the IndxCloudApi website`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),i&&console.log(`[Auth] 🔓 Opening dataset session...`);let d=await fetch(`${e}/api/teams/${t}/datasets/${n}?configuration=400`,{method:`PUT`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:`""`});if(!d.ok)throw console.error(`[Auth] ❌ CreateOrOpen failed:`,d.status,await d.text()),Error(`Failed to open dataset session.`);o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let p=u.documentCount??u.numberOfRecords??0;p===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,p,`records`);let[h,_,y]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`)]);if(!h.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,h.status,await h.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,_.status,await _.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!y.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,y.status,await y.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,w]=await Promise.all([h.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),y.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(w||[]),S(p);let T={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?T=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let E={};if(T.facets){for(let[e,t]of Object.entries(T.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(E[e]={min:Math.min(...n),max:Math.max(...n)})}}let D={};if(T.facets)for(let[e,t]of Object.entries(T.facets))Array.isArray(t)&&(D[e]=t.map(e=>e.key));v(E),b(D),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),w(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:C,initialFacetStats:_,initialFacetKeys:y,filterableFields:d,facetableFields:p,sortableFields:h,totalDocumentCount:x}}async function m(e,t,n,r,i){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,o={}){let s=Object.entries(e??{}).filter(([,e])=>e.length>0),c=Object.entries(t??{}),[l,u]=await Promise.all([Promise.all(s.map(async([e,t])=>h(await Promise.all(t.map(t=>m(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(c.map(([e,{min:t,max:o}])=>m(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a)))]);return h([...l,...u],`and`,n,r,i,a)}function _(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function v({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,filtersChangedByUser:d,shouldFetchMore:f}){let p=(0,c.useRef)(0),m=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[v,y]=(0,c.useState)({}),[b,x]=(0,c.useState)(``),[S,C]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let w=e.searchSettings.maxNumberOfRecordsToReturn,T=e.searchSettings.enableCoverage,E=e.searchSettings.removeDuplicates,D=e.searchSettings.coverageDepth,O=e.searchSettings.minimumScore,k=e.searchSettings.coverageSetup,A=e.sortBy,j=e.sortAscending,M=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++p.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=await g(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch),f=s||e.query.trim()!==``,m={text:e.query,maxNumberOfRecordsToReturn:f?w:0,enableFacets:c,...d?{filter:d}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j},enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k};u&&console.log(`[performSearch] request body:`,JSON.stringify(m,null,2));let h=await n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(m)});if(!h.ok)throw Error(`Search failed: HTTP ${h.status}`);let _=await h.json(),M=_.truncationIndex??-1,N=_.records||[],P=N.map(e=>e.documentKey),F=N.map(e=>e.score),I=[];if(f&&P.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(P)});if(!e.ok)throw Error(`Document lookup failed: HTTP ${e.status}`);I=(await e.json()).map((e,t)=>({document:e,documentKey:P[t],score:F[t]}))}let L={};if(c&&_.facets){for(let[e,t]of Object.entries(_.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(L[e]={min:Math.min(...n),max:Math.max(...n)})}}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.valueMatch,e.rangeFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,v,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{m.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=_(()=>{u&&console.log(`Debounced searchWithFacets fired`),m.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&m.current?.({enableFacets:l}),h.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!h.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(N.current?.cancel(),m.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),m.current?.({enableFacets:!1}),N.current?.()):m.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{let t=d.current;if(d.current=!1,!h.current||!r.token||!t)return;let n=e.query.trim();!s&&n===``||m.current?.({enableFacets:l})},[e.filters,e.rangeFilters]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||m.current?.({enableFacets:l})},[A,j]);let P=(0,c.useRef)(!0),F=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(P.current){P.current=!1;return}if(F.current!==e.query||!h.current||!r.token)return;if(f.current){f.current=!1,m.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||m.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var y=(0,c.createContext)(void 0),b=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),b=(0,c.useRef)(!1),x=(0,c.useRef)(a),[S,C]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],filters:{},valueMatch:{},rangeFilters:{},facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{C(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[w]=(0,c.useState)(s),T=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),E=(0,c.useCallback)((e,t={})=>{if(!T.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${T.token}`}})},[T.token]);v({state:S,setState:C,authenticatedFetch:E,auth:T,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:w,enableDebugLogs:h,filtersChangedByUser:_,shouldFetchMore:b});let D=(0,c.useCallback)(e=>{_.current=!1,C(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:x.current}}})},[]),O=(0,c.useCallback)(e=>{C(t=>({...t,facetDebounceDelayMillis:e}))},[]),k=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(x.current=e.maxNumberOfRecordsToReturn),C(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),A=(0,c.useCallback)(e=>{b.current=!0,C(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),j=(0,c.useCallback)((e,t)=>{_.current=!0,C(n=>{let r={...n.filters},i=r[e]||[],a=i.includes(t)?i.filter(e=>e!==t):[...i,t];return a.length?r[e]=a:delete r[e],{...n,filters:r}})},[]),M=(0,c.useCallback)((e,t)=>{C(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),N=(0,c.useCallback)((e,t,n)=>{_.current=!0,C(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}}}))},[]),P=(0,c.useCallback)(()=>{_.current=!0,C(e=>({...e,filters:{},rangeFilters:{}}))},[]),F=(0,c.useCallback)((e,t,n=!0)=>{n&&(_.current=!0),C(n=>{let r={...n.filters},i=(r[e]||[]).filter(e=>e!==t);return i.length>0?r[e]=i:delete r[e],{...n,filters:r}})},[]),I=(0,c.useCallback)((e,t=!0)=>{t&&(_.current=!0),C(t=>{let n={...t.rangeFilters};return delete n[e],{...t,rangeFilters:n}})},[]),L=(0,c.useCallback)((e,t)=>{C(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(y.Provider,{value:{state:S,isFetchingInitial:T.isFetchingInitial,authError:T.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:E,setQuery:D,toggleFilter:j,setValueMatch:M,setRangeFilter:N,resetFilters:P,resetSingleFilter:F,resetRangeFilter:I,setSort:L,setDebounceDelay:O,setSearchSettings:k,fetchMoreResults:A},children:e})},x=()=>{let e=(0,c.useContext)(y);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},S=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,...a})=>{let{state:{query:o,filters:s,rangeFilters:c,searchSettings:l},setQuery:f}=x();Object.keys(s).length>0||Object.keys(c).length;let p=o.length>0;return(0,u.jsx)(d.SearchField,{type:`text`,value:o,onChange:e=>f(e.target.value),placeholder:l.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...a,children:r&&p&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>f(``),"aria-label":`Clear search`,children:`Clear`})})},C={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},w={row:`_row_1i201_1`,content:`_content_1i201_19`,indexNumber:`_indexNumber_1i201_31`,scoreNumber:`_scoreNumber_1i201_39`,skeletonBars:`_skeletonBars_1i201_53`,skeletonBarLg:`_skeletonBarLg_1i201_59`,fade:`_fade_1i201_1`,skeletonBarSm:`_skeletonBarSm_1i201_66`},T=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:w.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:w.indexNumber,children:t}),(0,u.jsx)(`div`,{className:w.content,children:e?(0,u.jsxs)(`div`,{className:w.skeletonBars,children:[(0,u.jsx)(`div`,{className:w.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:w.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:w.scoreNumber,children:n})]}),E={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},D=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],O=({rows:e=6})=>(0,u.jsx)(`div`,{className:E.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(T,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:D[t%D.length]},t))}),k=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function A(e){let t=e.trim();if(!t.startsWith(`[`)||!t.endsWith(`]`))return;try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e))}catch{}if(!k.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var j=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p},isFetchingInitial:m,authError:h,allowEmptySearch:g,fetchMoreResults:_}=x(),v=t??30,[y,b]=(0,c.useState)(v),S=(0,c.useRef)(0),w=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==w.current;(!i||i.length<S.current||e)&&b(v),S.current=i?.length??0,w.current=l},[i,v,l]);let E=i&&i.length>y,D=()=>{let e=y+v;b(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+v)};if(m)return g?(0,u.jsx)(O,{rows:v}):(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let k=h??p;return k?(0,u.jsx)(`div`,{className:C.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:k})}):a||i===null?(0,u.jsx)(`div`,{className:C.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:C.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,y).map((t,i)=>{let a=t.document,s=t.score,c;try{c=typeof a==`string`?JSON.parse(a):a}catch{return(0,u.jsx)(`div`,{className:C.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},i)}let l;if(e&&e.length>0){l={};for(let t of e)t in c&&(l[t]=c[t])}else l={...c};if(n)for(let e in l){let t=l[e];if(typeof t==`string`){let n=A(t);n&&(l[e]=n)}}return(0,u.jsx)(T,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),E&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:D,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${y+1}-${Math.min(y+v,i.length,s)} of ${s}`:`Load more`})})]})},M={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},N=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[M.row,e===`title`?M.title:``].filter(Boolean).join(` `),children:t}),P={bar:`_bar_145f5_12`,skeletonAppear:`_skeletonAppear_145f5_1`,fade:`_fade_145f5_1`,listRows:`_listRows_145f5_19`,sliderArea:`_sliderArea_145f5_25`,sliderTrack:`_sliderTrack_145f5_32`,inputRow:`_inputRow_145f5_40`,inputBar:`_inputBar_145f5_45`},F=[65,80,55,72,60,75,50,68],I=({title:e,rows:t=5,variant:n=`list`,collapsible:r=!0,startCollapsed:i=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:r,collapsed:i,children:n===`slider`?(0,u.jsxs)(`div`,{className:P.sliderArea,children:[(0,u.jsx)(`div`,{className:P.sliderTrack}),(0,u.jsxs)(`div`,{className:P.inputRow,children:[(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:P.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:P.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:P.bar,style:{width:`${F[t%F.length]}%`,animationDelay:`${t*.05}s`}},t))})}),L={list:`_list_m82u6_2`,count:`_count_m82u6_7`,countValue:`_countValue_m82u6_17`,chip:`_chip_m82u6_22`,chipLabel:`_chipLabel_m82u6_32`,grid:`_grid_m82u6_40`},R=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,displayType:l=`checkbox`,layout:f=`list`,showActivePanel:p=!1,showCount:m=!0,showNull:h=!1,match:g=`all`,displayIfEmptyQuery:_=!0,displayCondition:v=e=>!0})=>{let{state:{facets:y,filterableFields:b,facetableFields:S,filters:C,query:w},toggleFilter:T,setValueMatch:E,isFetchingInitial:D,allowEmptySearch:O}=x();(0,c.useEffect)(()=>{E(e,g)},[e,g,E]);let k=(0,c.useRef)(null),[A,j]=(0,c.useState)(a);if((0,c.useEffect)(()=>{j(a)},[y?.[e],a]),!O&&!w)return null;if(D||!y)return l===`toggle`?(0,u.jsx)(I,{rows:1,collapsible:!1}):(0,u.jsx)(I,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!v({query:w??``,filters:C,facets:y})||!_&&!w&&Object.keys(C).length<1)return null;if(!b?.includes(e)||!S?.includes(e)){let t=[];return b?.includes(e)||t.push(`filterable`),S?.includes(e)||t.push(`facetable`),(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing `,t.join(` and `),`.`]})})}let M=y?.[e]??(l===`toggle`?[]:void 0);if(!M||!Array.isArray(M))return null;let N=C?.[e]??[];n&&!k.current&&M.length>0&&(k.current=M.reduce((e,t)=>(e[t.key]=t.value,e),{}));let P=new Map;n&&k.current&&Object.keys(k.current).forEach(e=>{P.set(e,0)}),M.forEach(e=>{P.set(e.key,e.value)});let F=new Set([`true`,`false`,`null`]),R=Array.from(P.keys()),z=l===`toggle`&&(R.length>0&&R.every(e=>F.has(e))||R.length===0&&N.length>0);if(z&&P.has(`null`)){let e=P.get(`null`)??0,t=P.get(`false`)??0;P.set(`false`,t+e),P.delete(`null`)}if(l===`toggle`&&!z)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:L.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(z){let n=P.get(`true`),r=typeof n==`number`?n:null,i=N.includes(`true`),a=r===0&&!i,o=m&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>T(e,`true`),disabled:a}),` `,o]})})}let B=Array.from(P.entries());if(h||(B=B.filter(([e])=>e!==`null`)),B.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=B.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=B.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));B=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=B.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=B.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));B=[...t,...n]}else{let e=B.filter(([,e])=>typeof e==`number`&&e>0),t=B.filter(([,e])=>e===0||e===null);B=[...e,...t]}let V=typeof a==`number`&&B.length>a,H=V?B.slice(0,A):B,U=(t,n)=>{let r=N.includes(t),i=n===0,a=m&&(n??0)>0?` (${n})`:``,o=m&&(n??0)>0?n:``;switch(l){case`button`:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>T(e,t),disabled:i,size:`micro`,className:L.chip,title:t,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:L.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:()=>T(e,t),disabled:i,size:`micro`,className:L.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:L.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:()=>T(e,t),disabled:i});default:return f===`list`?(0,u.jsxs)(`div`,{className:L.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:()=>T(e,t),disabled:i}),(0,u.jsx)(`span`,{children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:()=>T(e,t),disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,children:(0,u.jsxs)(`ul`,{className:f===`grid`?L.grid:L.list,style:{listStyle:`none`,padding:0,margin:0},children:[H.map(([e,t])=>(0,u.jsx)(`li`,{children:U(e,t)},e)),V&&A<B.length&&(()=>{let e=B.length-A,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:L.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(e=>e+50),children:`Show ${t} more of ${B.length} total`})})})()]})})},z={disabledMessage:`_disabledMessage_uci6n_1`,histogram:`_histogram_uci6n_6`,histogramBar:`_histogramBar_uci6n_15`};function B(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function V(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(B(n)))}var H=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,displayType:i=`input`,collapsible:a=!0,startCollapsed:o=!1,showHistogram:s=!1,resolution:l,step:f})=>{let{state:{rangeFilters:p,rangeBounds:m,facetStats:h,facets:g,filterableFields:_,facetableFields:v,query:y,facetDebounceDelayMillis:b},setRangeFilter:S,resetRangeFilter:C,allowEmptySearch:w,isFetchingInitial:T}=x(),E=m?.[e]!==void 0,D=m?.[e]??{min:n,max:r},O=D.min,k=D.max,A=h?.[e]??D,j=Math.max(O,Math.min(k,A.min)),M=Math.max(O,Math.min(k,A.max)),N=c.default.useMemo(()=>{if(f)return f;let t=Math.max(B(O),B(k)),n=g?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,B(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[f,O,k,g,e]),P=E&&O===k,F=P?n:O,L=P?r:k,R=p?.[e],H=R?R.min:O,U=R?R.max:k,ee=R!==void 0,te=j!==O||M!==k,[W,G]=c.default.useState([H,U]),[ne,K]=c.default.useState(!1),[re,q]=c.default.useState(!1),[J,Y]=c.default.useState(String(H)),[X,Z]=c.default.useState(String(U));c.default.useEffect(()=>{Y(String(W[0])),Z(String(W[1]))},[W]);let{finalMin:Q,finalMax:$,isValidMin:ie,isValidMax:ae}=c.default.useMemo(()=>{let[e,t]=W,n=Math.max(O,Math.min(k,e)),r=Math.max(O,Math.min(k,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=O&&i<a,isValidMax:a<=k&&a>i}},[W,O,k]);c.default.useEffect(()=>{if(P)return;if(W[0]===O&&W[1]===k){K(!1),q(!1);return}let t=b??500,n=setTimeout(()=>{K(!ie),q(!ae)},300),r=setTimeout(()=>{ie&&ae&&(Q===O&&$===k?C(e,!1):S(e,Q,$))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[Q,$,ie,ae,O,k,e,C,S,b,P]),c.default.useEffect(()=>{G([H,U]),K(!1),q(!1)},[H,U,e]);let oe=c.default.useCallback(e=>{P||G([Math.max(O,Math.min(M,e[0])),Math.max(j,Math.min(k,e[1]))])},[P,O,k,j,M]),se=c.default.useCallback(t=>{if(P)return;let n=Math.max(O,Math.min(M,t[0])),r=Math.max(j,Math.min(k,t[1]));n===O&&r===k?(G([O,k]),C(e,!0)):G([n,r])},[P,O,k,j,M,e,C]),ce=c.default.useCallback(()=>{if(P)return;let e=J.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){Y(String(W[0]));return}let n=Math.max(O,Math.min(M,t));n<W[1]?G([n,W[1]]):G([O,W[1]]),Y(String(n<W[1]?n:O))},[P,J,W,O,M]),le=c.default.useCallback(()=>{if(P)return;let e=X.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){Z(String(W[1]));return}let n=Math.max(j,Math.min(k,t));n>W[0]?G([W[0],n]):G([W[0],k]),Z(String(n>W[0]?n:k))},[P,X,W,j,k]),ue=e=>t=>{t.key===`Enter`&&e()},[de,fe]=c.default.useState(null),pe=c.default.useRef(null);c.default.useEffect(()=>{if(!s)return;let t=`${O}:${k}`;if(t===pe.current&&pe.current!==null)return;let n=g?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(pe.current=t,fe(r))},[O,k,g,e,s]);let me=c.default.useMemo(()=>{if(!s||!de||de.length===0)return[];let e=k-O;if(e<=0)return[];let t=l??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,n)=>{let r=O+n*t,i=O+(n+1)*t;return{bucketStart:r,bucketEnd:i,count:de.filter(e=>{let t=Number(e.key);return t>=r&&t<i}).reduce((e,t)=>e+t.value,0)}})},[s,de,O,k,l]),he=c.default.useMemo(()=>Math.max(...me.map(e=>e.count),1),[me]);return s&&!T&&!v?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),T?(0,u.jsx)(I,{title:t,variant:`slider`,collapsible:a,startCollapsed:o}):!w&&!y?null:_?.includes(e)?i===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:o,collapsible:a,children:[P&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,O,`).`]}),s&&me.length>0&&(0,u.jsx)(`div`,{className:z.histogram,children:(()=>{let e=typeof j==`number`&&typeof M==`number`&&M>j&&(j>O||M<k);return me.map((t,n)=>{let r=Math.max(1,Math.ceil(t.count/he*20)),i=e?t.bucketEnd>j&&t.bucketStart<M:t.bucketEnd>Q&&t.bucketStart<$;return(0,u.jsx)(`div`,{className:z.histogramBar,"data-testid":`histogram-bar`,"data-active":i,style:{height:`${r}px`,background:i?`var(--lv5)`:`var(--lv3)`}},n)})})()}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:F,max:L,step:N,value:P?[F,L]:[V(Q,F,N),V($,F,N)],isRange:!0,onChange:e=>oe(e),onFinalChange:e=>se(e),disabled:P,activeMin:j,activeMax:M,isFaceted:te,highlightFaceted:ee,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,flex:`flex-grow`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:P?String(O):J,min:O,max:Math.min(M,W[1]-1),onChange:e=>Y(e.target.value),onBlur:ce,onKeyDown:ue(ce),disabled:P,isValid:P||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:P?String(k):X,min:Math.max(j,W[0]+1),max:k,onChange:e=>Z(e.target.value),onBlur:le,onKeyDown:ue(le),disabled:P,isValid:P||!re})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,children:[P&&(0,u.jsxs)(`div`,{className:z.disabledMessage,children:[`No adjustable range (all results have the same value: `,O,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,value:P?String(O):J,min:O,max:Math.min(M,W[1]-1),onChange:e=>Y(e.target.value),onBlur:ce,onKeyDown:ue(ce),disabled:P,isValid:P||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,value:P?String(k):X,min:Math.max(j,W[0]+1),max:k,onChange:e=>Z(e.target.value),onBlur:le,onKeyDown:ue(le),disabled:P,isValid:P||!re})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},U={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:U.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:U.chipLabel,children:[e,`: `,t]})})})),te=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:U.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:U.chipLabel,children:[e,`: `,t,` – `,n]})})}));function W(){let{state:{filters:e,rangeFilters:t},resetFilters:n,resetSingleFilter:r,resetRangeFilter:i}=x(),a=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),o=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0,[e,t])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:U.grid,children:[a.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>r(e,t)},`${e}-${t}`)),o.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>i(e)},e)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var G={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},ne=({displayType:e=`dropdown`,collapsible:t=!0,startCollapsed:n=!1})=>{let{state:{sortableFields:r,sortBy:i,sortAscending:a},setSort:o,isFetchingInitial:s}=x();if(s)return(0,u.jsx)(I,{title:`Sort by`,rows:e===`radio`?3:1,collapsible:t,startCollapsed:n});if(!r||r.length===0)return null;let c=i?`${i}:${a?`asc`:`desc`}`:`none`,l=[{label:`None`,value:`none`},...r.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],f=e=>{if(e===`none`||e===``)o(null,!0);else{let[t,n]=e.split(`:`);o(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:t,collapsed:t?n:!1,children:e===`dropdown`?(0,u.jsx)(d.Select,{value:c,onValueChange:f,options:l,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:G.radioGroup,children:l.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:c===e.value,onChange:e=>f(e.target.value)},e.value))})})},K={list:`_list_1y4fk_1`};function re(){let{state:{searchSettings:e},setSearchSettings:t}=x(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:K.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var q=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the IndxCloudApi website)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function J(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw Error(`VectorSearch failed: ${u.status}`);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw Error(`GetJson failed: ${p.status}`);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function Y(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=x(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw Error(`HybridSearch failed: ${u.status}`);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw Error(`GetJson failed: ${p.status}`);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=W,exports.FilterPanelSkeleton=I,exports.RangeFilterPanel=H,exports.SearchContext=y,exports.SearchErrorBoundary=q,exports.SearchInput=S,exports.SearchProvider=b,exports.SearchResult=T,exports.SearchResultRow=N,exports.SearchResults=j,exports.SearchResultsSkeleton=O,exports.SearchSettingsPanel=re,exports.SortByPanel=ne,exports.ValueFilterPanel=R,exports.useHybridSearch=Y,exports.useSearch=x,exports.useSearchContext=x,exports.useVectorSearch=J;