@indxsearch/intrface 3.9.0 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a0c776b: `SearchProvider` takes two optional props for the dataset's statistics. `source` names the search surface when a dataset has more than one (`source="header"`, `source="app"`): it is sent with every search, and those searches are counted as usual. `count={false}` keeps a page's searches and the results chosen from them out of the statistics while they are still stored, for a test page or an internal tool. Without either, nothing changes.
8
+ - 5b50d4e: SortByPanel: offer your own sort choices with readable labels. Pass `options`, such as `{ field: 'votes', ascending: false, label: 'Most voted' }`, and the panel shows those choices in that order instead of every sortable field by its field name. `noneLabel` renames the choice that turns sorting off ("Relevance"), or drops it with `null`. Without `options` the panel works as before.
9
+
10
+ ### Patch Changes
11
+
12
+ - 7cd07a7: RangeFilterPanel: a `step` that does not divide the field's range no longer breaks the page. Ratings from 5.3 to 8.7 with `step={0.5}` used to crash on load; now the slider works and still reaches the highest value. Histograms on narrow decimal ranges, such as ratings, now get about twenty bars without setting `resolution`, instead of three or four.
13
+ - Updated dependencies [257de84]
14
+ - @indxsearch/indx-types@3.0.0
15
+
16
+ ## 3.9.1
17
+
18
+ ### Patch Changes
19
+
20
+ - 1c09506: ActiveFiltersPanel: the chips line up with the panel heading on every page. The list no longer picks up the browser's default indent and margins when the page does not reset lists itself.
21
+ - Updated dependencies [34c676b]
22
+ - @indxsearch/systm@2.17.0
23
+
3
24
  ## 3.9.0
4
25
 
5
26
  ### Minor Changes
package/README.md CHANGED
@@ -353,6 +353,11 @@ The dataset's **Statistics** tab shows what people search for, what they find no
353
353
 
354
354
  The session id lives only in memory for the page load. It identifies no one and sets no cookie.
355
355
 
356
+ Two optional `SearchProvider` props shape what the statistics see:
357
+
358
+ - `source` names this search surface, when a dataset has more than one: `source="header"`, `source="app"`. The searches are counted as usual and stored with the name.
359
+ - `count={false}` keeps a page's searches and clicks out of the statistics - a test page, an internal tool. They are stored, not counted.
360
+
356
361
  ## API Reference
357
362
 
358
363
  ### SearchProvider Props
@@ -372,6 +377,8 @@ The session id lives only in memory for the page load. It identifies no one and
372
377
  | `removeDuplicates` | `boolean` | ❌ | `true` | Remove duplicate results |
373
378
  | `initialCoverageSetup` | `Partial<CoverageSetup>` | ❌ | `{}` | Override default coverage settings |
374
379
  | `enableDebugLogs` | `boolean` | ❌ | `false` | Enable detailed console logging |
380
+ | `source` | `string` | ❌ | - | Names this search surface in the statistics (`"header"`, `"app"`); counted as usual. See [Search statistics](#search-statistics) |
381
+ | `count` | `boolean` | ❌ | `true` | `false` keeps this page's searches and clicks out of the statistics (stored, not counted) |
375
382
 
376
383
  ### SearchInput Props
377
384
 
@@ -451,10 +458,23 @@ Selected buckets on a field are always ORed (they are disjoint ranges). Like `Va
451
458
 
452
459
  | Prop | Type | Default | Description |
453
460
  |------|------|---------|-------------|
461
+ | `options` | `SortOption[]` | every sortable field | The choices to offer, in order, each `{ field, ascending, label }`. Without it the panel lists each sortable field by name, ascending and descending |
462
+ | `noneLabel` | `string \| null` | `'None'` | The label of the choice that turns sorting off; `null` leaves it out |
454
463
  | `control` | `'select' \| 'radio'` | `'select'` | A select, or one radio per option (`displayType` still works, deprecated; `'dropdown'` maps to `'select'`) |
455
464
  | `collapsible` | `boolean` | `true` | Allow the panel to collapse |
456
465
  | `startCollapsed` | `boolean` | `false` | Start collapsed |
457
466
 
467
+ ```typescript
468
+ <SortByPanel
469
+ noneLabel="Relevance"
470
+ options={[
471
+ { field: 'votes', ascending: false, label: 'Most voted' },
472
+ { field: 'vote_average', ascending: false, label: 'Highest rated' },
473
+ { field: 'release_year', ascending: false, label: 'Newest first' },
474
+ ]}
475
+ />
476
+ ```
477
+
458
478
  ## Hooks
459
479
 
460
480
  All hooks must be used within a `SearchProvider`.
@@ -1,5 +1,19 @@
1
1
  import { default as React } from 'react';
2
+ /** One choice in the sort menu: a sortable field, a direction, and what the visitor reads. */
3
+ export type SortOption = {
4
+ field: string;
5
+ ascending: boolean;
6
+ label: string;
7
+ };
2
8
  type SortByPanelProps = {
9
+ /**
10
+ * The choices to offer, in this order, each with its own label: "Most voted", "Newest first".
11
+ * Without it the panel lists every sortable field twice, by its field name, ascending and
12
+ * descending. An option whose field is not sortable is left out, with a warning.
13
+ */
14
+ options?: SortOption[];
15
+ /** The label of the choice that turns sorting off (default "None"); `null` leaves it out. */
16
+ noneLabel?: string | null;
3
17
  /** A select, or one radio per option. */
4
18
  control?: 'select' | 'radio';
5
19
  /** @deprecated Use `control`. `'dropdown'` maps to `'select'`. */
@@ -96,5 +96,7 @@ export declare const SearchProvider: React.FC<{
96
96
  initialCoverageSetup?: Partial<CoverageSetup>;
97
97
  enableDebugLogs?: boolean;
98
98
  preAuthenticatedToken?: string;
99
+ source?: string;
100
+ count?: boolean;
99
101
  }>;
100
102
  export declare const useSearchContext: () => SearchContextType;
@@ -13,6 +13,8 @@ export interface UseSearchExecutionOptions {
13
13
  enableDebugLogs: boolean;
14
14
  shouldFetchMore: React.MutableRefObject<boolean>;
15
15
  sessionId: string;
16
+ source?: string;
17
+ count: boolean;
16
18
  }
17
19
  export type UseSearchExecutionResult = void;
18
- export declare function useSearchExecution({ state, setState, authenticatedFetch, auth, url, team, dataset, allowEmptySearch, facetsEnabled, enableDebugLogs, shouldFetchMore, sessionId, }: UseSearchExecutionOptions): UseSearchExecutionResult;
20
+ export declare function useSearchExecution({ state, setState, authenticatedFetch, auth, url, team, dataset, allowEmptySearch, facetsEnabled, enableDebugLogs, shouldFetchMore, sessionId, source, count, }: UseSearchExecutionOptions): UseSearchExecutionResult;
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)({}),[C,w]=(0,c.useState)(0),[T,E]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{E(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),Error(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),Error(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok){if(c.status===401)throw console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[p,h,_,y]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(()=>null)]);if(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,T]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(T||[]),w(d);let E={};if(y?.ok){let e=await y.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(E[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,y?.status,`- every selected value will be sent as a value filter`);v(E);let D={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?D=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let O={};if(D.facets){for(let[e,t]of Object.entries(D.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(O[e]={min:Math.min(...n),max:Math.max(...n)})}}let k={};if(D.facets)for(let[e,t]of Object.entries(D.facets))Array.isArray(t)&&(k[e]=t.map(e=>e.key));b(O),S(k),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),E(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:T,initialFacetStats:y,initialFacetKeys:x,filterableFields:d,facetableFields:p,sortableFields:h,fieldTypes:_,totalDocumentCount:C}}var m=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}};async function h(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await m.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function g(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(e,t,n,r,i,a,o={},s={},c={}){let l=Object.entries(e??{}).filter(([,e])=>e.length>0),u=Object.entries(t??{}),d=Object.entries(s??{}).filter(([,e])=>e.length>0),f=(e,{min:t,max:o})=>h(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),p=(e,t)=>{let o=c[e]===`Number`?Number(t):NaN;return Number.isFinite(o)?f(e,{min:o,max:o}):h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,_,v]=await Promise.all([Promise.all(l.map(async([e,t])=>g(await Promise.all(t.map(t=>p(e,t))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(u.map(([e,t])=>f(e,t))),Promise.all(d.map(async([e,t])=>g(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return g([...m,..._,...v],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d,sessionId:f}){let p=(0,c.useRef)(0),h=(0,c.useRef)(void 0),g=(0,c.useRef)(!1),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)(``),[C,w]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldTypes:r.fieldTypes,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let T=e.searchSettings.maxNumberOfRecordsToReturn,E=e.searchSettings.enableCoverage,D=e.searchSettings.removeDuplicates,O=e.searchSettings.coverageDepth,k=e.searchSettings.minimumScore,A=e.searchSettings.coverageSetup,j=e.sortBy,M=e.sortAscending,N=(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=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[h,...g]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),v=s||e.query.trim()!==``,N={text:e.query,enableCoverage:E,removeDuplicates:D,coverageDepth:O,coverageSetup:A},P={...N,maxNumberOfRecordsToReturn:v?T:0,enableFacets:c,...h?{filter:h}:{},...j?{sortBy:j}:{},...M===void 0?{}:{sortAscending:M}};u&&console.log(`[performSearch] request body:`,JSON.stringify(P,null,2));let F=e=>n(`${i}/api/teams/${a}/datasets/${o}/search?session=${encodeURIComponent(f)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[I,...L]=await Promise.all([F(P),...g.map(e=>F({...N,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!I.ok)throw await m.fromResponse(`Search`,I);let R=await I.json(),z=I.headers.get(`Indx-Query-Id`)??void 0,B=R.truncationIndex??-1,V={};for(let e=0;e<d.length;e++){let t=d[e];if(!L[e].ok)throw await m.fromResponse(`Facets for '${t}'`,L[e]);let n=await L[e].json();n.facets?.[t]!==void 0&&(V[t]=n.facets[t])}let H=R.records||[],U=H.map(e=>e.documentKey),W=H.map(e=>e.score),G=[];if(v&&U.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(U)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);G=(await e.json()).map((e,t)=>({document:e,documentKey:U[t],score:W[t]}))}let K={};if(c&&R.facets){for(let[e,t]of Object.entries(R.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(K[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==p.current)return;let q=e.query!==x,ee=e.query!==C,J=e.facetStats??{};if(q?(J={...r.initialFacetStats,...K},b(J),S(e.query)):J={...y,...K},ee&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(K))n[e]=t;t(e=>({...e,rangeBounds:n})),w(e.query)}let Y=Object.keys(V).length>0?{...R.facets??{},...V}:R.facets;if(c&&(!Y||Object.keys(Y).length===0)){Y={};for(let[e,t]of Object.entries(r.initialFacetKeys))Y[e]=t.map(e=>({key:e,value:null}))}let te=G.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=k}).map((e,t)=>({...e,position:t+1}));t(e=>({...e,results:te,error:void 0,resultsSuppressed:!v,...c?{facets:Y,facetStats:J}:{},isLoading:!1,truncationIndex:B,queryId:z}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==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.bucketFilters,e.facetStats,j,M,T,E,D,O,A,k,n,r.initialFacetStats,r.initialFacetKeys,r.token,y,x,C,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{h.current=N},[N]);let P=(0,c.useRef)(null);(0,c.useEffect)(()=>(P.current?.cancel(),P.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),h.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{P.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!g.current&&(s&&h.current?.({enableFacets:l}),g.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!g.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(P.current?.cancel(),h.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),h.current?.({enableFacets:!1}),P.current?.()):h.current?.({enableFacets:!1}),()=>{P.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!g.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||h.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!g.current||!r.token)return;let t=e.query.trim();!s&&t===``||h.current?.({enableFacets:l})},[j,M]);let F=(0,c.useRef)(!0),I=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(F.current){F.current=!1;return}if(I.current!==e.query||!g.current||!r.token)return;if(d.current){d.current=!1,h.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||h.current?.({enableFacets:l})},[T,E,D,O,A,k]),(0,c.useEffect)(()=>{I.current=e.query},[e.query])}function b(){let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}var x=(0,c.createContext)(void 0),S=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),v=(0,c.useRef)(b()).current,S=(0,c.useRef)(a),[C,w]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],fieldTypes:{},filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{w(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[T]=(0,c.useState)(s),E=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),D=(0,c.useCallback)((e,t={})=>{if(!E.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${E.token}`}})},[E.token]);y({state:C,setState:w,authenticatedFetch:D,auth:E,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:T,enableDebugLogs:h,shouldFetchMore:_,sessionId:v});let O=(0,c.useRef)(void 0);O.current=C.queryId;let k=(0,c.useCallback)(async e=>{if(E.token)try{let i=await D(`${t}/api/teams/${n}/datasets/${r}/events/select`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({queryId:O.current,documentKey:e.documentKey,position:e.position})});h&&(i.ok?console.log(`[select] document ${e.documentKey} at position ${e.position}`):console.warn(`[select] not recorded: ${i.status}`))}catch(e){h&&console.warn(`[select] failed:`,e)}},[E.token,D,t,n,r,h]),A=(0,c.useCallback)(e=>{w(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:S.current}}})},[]),j=(0,c.useCallback)(e=>{w(t=>({...t,facetDebounceDelayMillis:e}))},[]),M=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(S.current=e.maxNumberOfRecordsToReturn),w(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),N=(0,c.useCallback)(e=>{_.current=!0,w(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),P=(0,c.useCallback)((e,t,n=!1)=>{w(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),F=(0,c.useCallback)((e,t)=>{w(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),I=(0,c.useCallback)((e,t,n)=>{w(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),L=(0,c.useCallback)(()=>{w(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),R=(0,c.useCallback)((e,t,n=!0)=>{w(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),z=(0,c.useCallback)((e,t=!0)=>{w(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),B=(e,t)=>e.min===t.min&&e.max===t.max,V=(0,c.useCallback)((e,t,n=!1)=>{w(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>B(e,t))?i.filter(e=>!B(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),H=(0,c.useCallback)((e,t,n=!0)=>{w(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!B(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),U=(0,c.useCallback)((e,t)=>{w(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(x.Provider,{value:{state:C,isFetchingInitial:E.isFetchingInitial||!C.fieldsSeeded,authError:E.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:D,setQuery:A,toggleFilter:P,setValueMatch:F,setRangeFilter:I,resetFilters:L,resetSingleFilter:R,resetRangeFilter:z,toggleBucketFilter:V,resetBucketFilter:H,setSort:U,setDebounceDelay:j,setSearchSettings:M,fetchMoreResults:N,selectResult:k,sessionId:v},children:e})},C=()=>{let e=(0,c.useContext)(x);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},w=({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}=C();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`})})},T={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},E={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`},D=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:E.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:E.indexNumber,children:t}),(0,u.jsx)(`div`,{className:E.content,children:e?(0,u.jsxs)(`div`,{className:E.skeletonBars,children:[(0,u.jsx)(`div`,{className:E.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:E.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:E.scoreNumber,children:n})]}),O={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},k=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],A=({rows:e=6})=>(0,u.jsx)(`div`,{className:O.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(D,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:k[t%k.length]},t))}),j=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function M(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(!j.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var N=({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:_,selectResult:v}=C(),y=t??30,[b,x]=(0,c.useState)(y),S=(0,c.useRef)(0),w=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==w.current;(!i||i.length<S.current||e)&&x(y),S.current=i?.length??0,w.current=l},[i,y,l]);let E=i&&i.length>b,O=()=>{let e=b+y;x(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+y)};if(m)return g?(0,u.jsx)(A,{rows:y}):(0,u.jsx)(`div`,{className:T.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let k=h??p;return k?(0,u.jsx)(`div`,{className:T.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:k})}):a||i===null?(0,u.jsx)(`div`,{className:T.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:T.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,b).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:T.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=M(t);n&&(l[e]=n)}}return(0,u.jsx)(D,{index:i,score:s,showScore:o.showScore,children:r(l,{result:t,select:()=>v?.(t)??Promise.resolve()})},i)})}),E&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:O,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${b+1}-${Math.min(b+y,i.length,s)} of ${s}`:`Load more`})})]})},P={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},F=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[P.row,e===`title`?P.title:``].filter(Boolean).join(` `),children:t}),I={bar:`_bar_4nxla_12`,skeletonAppear:`_skeletonAppear_4nxla_1`,fade:`_fade_4nxla_1`,listRows:`_listRows_4nxla_19`,sliderArea:`_sliderArea_4nxla_25`,sliderTrack:`_sliderTrack_4nxla_32`,inputRow:`_inputRow_4nxla_40`,inputBar:`_inputBar_4nxla_45`,histogramRow:`_histogramRow_4nxla_55`},L=[65,80,55,72,60,75,50,68],R=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:I.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:I.histogramRow}),(0,u.jsx)(`div`,{className:I.sliderTrack}),(0,u.jsxs)(`div`,{className:I.inputRow,children:[(0,u.jsx)(`div`,{className:I.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:I.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:I.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:I.bar,style:{width:`${L[t%L.length]}%`,animationDelay:`${t*.05}s`}},t))})}),z={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},B=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:S,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=C(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(R,{rows:1,collapsible:!1}):(0,u.jsx)(R,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!S?.includes(e)){let t=[];return x?.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 F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let L=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{L.set(e,0)}),F.forEach(e=>{L.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(L.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&L.has(`null`)){let e=L.get(`null`)??0,t=L.get(`false`)??0;L.set(`false`,t+e),L.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:z.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=L.get(`true`),r=typeof n==`number`?n:null,i=I.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(L.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,K=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:z.chip,title:t,children:(0,u.jsx)(`span`,{className:z.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:z.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:z.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[n,(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&I.length>0?z.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?z.grid:z.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:K(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:z.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},V={disabledMessage:`_disabledMessage_adany_1`,histogram:`_histogram_adany_6`,histogramLayer:`_histogramLayer_adany_14`,histogramLive:`_histogramLive_adany_22`,histogramLit:`_histogramLit_adany_23`,histogramFill:`_histogramFill_adany_30`,histogramBar:`_histogramBar_adany_43`,histogramSeparators:`_histogramSeparators_adany_61`,histogramSeparator:`_histogramSeparator_adany_48`,active:`_active_adany_76`};function H(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 U(e){let t=0;for(let n of e)t=Math.max(t,H(n));return t===0?1:Number((10**-t).toFixed(t))}function W(e,t){return Number(e.toFixed(H(t)))}function G(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(H(n)))}var K=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:S,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=C(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),L=c.default.useMemo(()=>{if(m)return m;let t=Math.max(H(M),H(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,H(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,B=z?n:M,U=z?r:N,K=g?.[e],q=o&&K!==void 0?V.active:void 0,ee=K?K.min:M,J=K?K.max:N,Y=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([ee,J]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(ee)),[$,se]=c.default.useState(String(J)),ce=c.default.useMemo(()=>{let e=H(L);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[L,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([ee,J]),re(!1),ae(!1)},[ee,J,e]);let pe=c.default.useCallback(e=>{let t=W(Math.min(e[0],e[1]-L),L);return[t,W(Math.max(e[1]-L,t),L)]},[L]),me=c.default.useCallback(e=>{if(z)return;let[t,n]=pe(e);Z([Math.max(M,Math.min(I,t)),Math.max(F,Math.min(N,n))])},[z,pe,M,N,F,I]),he=c.default.useCallback(t=>{if(z)return;let[n,r]=pe(t),i=Math.max(M,Math.min(I,n)),a=Math.max(F,Math.min(N,r));i===M&&a===N?(Z([M,N]),E(e,!0)):Z([i,a])},[z,pe,M,N,F,I,e,E]),ge=c.default.useRef(null),_e=c.default.useCallback((t,n)=>{if(z)return;let r=ge.current;if(K&&r&&r.start===t&&r.last===n){ge.current=null,Z([M,N]),E(e,!0);return}let i=G(Math.max(M,F,t),M,L),a=Math.max(i,G(Math.min(N,I,n),M,L));ge.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,L,e,E]),ve=c.default.useCallback(()=>{if(z)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[0]));return}let n=Math.max(M,Math.min(I,t));n<X[1]?Z([n,X[1]]):Z([M,X[1]]),oe(String(n<X[1]?n:M))},[z,Q,X,M,I]),ye=c.default.useCallback(()=>{if(z)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){se(String(X[1]));return}let n=Math.max(F,Math.min(N,t));n>X[0]?Z([X[0],n]):Z([X[0],N]),se(String(n>X[0]?n:N))},[z,$,X,F,N]),be=e=>t=>{t.key===`Enter`&&e()},[xe,Se]=c.default.useState(null),Ce=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Ce.current&&Ce.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(Ce.current=t,Se(r))},[M,N,y,e,f]);let we=c.default.useMemo(()=>{if(!f||!xe||xe.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=xe.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:W(a-L,L);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:W(c+L,L)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:e.barEnd)-e.bucketStart}))},[f,xe,M,N,p,L]),Te=c.default.useMemo(()=>Math.max(...we.map(e=>e.count),1),[we]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(R,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!S?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:V.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&we.length===0&&(0,u.jsx)(`div`,{className:V.histogram}),f&&we.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[B,U],n=Math.max(le,e),r=Math.min(ue,t),i=U+L,a=i-B||1,o=e=>Math.max(0,Math.min(1,(e-B)/a)),s=e=>Math.max(0,Math.min(1,(i-(e+L))/a)),c=o(n),l=r<n?1-c:s(r),d=e=>`calc(10px + (100% - 20px) * ${e})`,f=`inset(0 ${d(l)} 0 ${d(c)})`,p=`inset(0 ${d(s(t))} 0 ${d(o(e))})`,m=n=>n.last<e||n.bucketStart>t,h=we.slice(1).map(e=>d((e.bucketStart-B)/a)),g=we.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Te*20))}));return(0,u.jsxs)(`div`,{className:V.histogram,children:[(0,u.jsx)(`div`,{className:V.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:V.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>_e(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${V.histogramLayer} ${V.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${V.histogramLayer} ${V.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:V.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:B,max:W(U+L,L),step:L,stepMarks:h,value:z?[B,W(U+L,L)]:[G(le,B,L),G(ue+L,B,L)],isRange:!0,onChange:e=>me(e),onFinalChange:e=>he(e),disabled:z,activeMin:F,activeMax:W(I+L,L),isFaceted:te,highlightFaceted:Y,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:W(Math.min(I,X[1]-L),L),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:W(Math.max(F,X[0]+L),L),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:V.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:W(Math.min(I,X[1]-L),L),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:W(Math.max(F,X[0]+L),L),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},q={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function ee(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var J=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:S},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=C(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return U(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],W(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=W(r+n,N))e.push(i(W(r,N),W(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(R,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!S)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:q.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),L=P.map(e=>({bucket:e,count:F?ee(e,O):null}));if(l||(L=L.filter(e=>e.count!==0||I(e.bucket))),L.length===0)return null;let z=L.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[n,(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:q.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[e,(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&k.length>0?q.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?q.grid:q.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<L.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(L.length),children:`Show ${L.length-z.length} more of ${L.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},te=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),X=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),Z=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function ne(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=C(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(te,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(X,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(Z,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var re={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},ie=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=C();if(l)return(0,u.jsx)(R,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:re.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ae={list:`_list_1y4fk_1`};function Q(){let{state:{searchSettings:e},setSearchSettings:t}=C(),[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:ae.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 oe=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=C(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function se(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=C(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=ne,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=R,exports.IndxApiError=m,exports.RangeFilterPanel=K,exports.SearchContext=x,exports.SearchErrorBoundary=oe,exports.SearchInput=w,exports.SearchProvider=S,exports.SearchResult=D,exports.SearchResultRow=F,exports.SearchResults=N,exports.SearchResultsSkeleton=A,exports.SearchSettingsPanel=Q,exports.SortByPanel=ie,exports.ValueFilterPanel=B,exports.useHybridSearch=se,exports.useSearch=C,exports.useSearchContext=C,exports.useVectorSearch=$;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");function p({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)({}),[C,w]=(0,c.useState)(0),[T,E]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{E(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),Error(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),Error(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok){if(c.status===401)throw console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[p,h,_,y]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(()=>null)]);if(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,T]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(T||[]),w(d);let E={};if(y?.ok){let e=await y.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(E[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,y?.status,`- every selected value will be sent as a value filter`);v(E);let D={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?D=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let O={};if(D.facets){for(let[e,t]of Object.entries(D.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(O[e]={min:Math.min(...n),max:Math.max(...n)})}}let k={};if(D.facets)for(let[e,t]of Object.entries(D.facets))Array.isArray(t)&&(k[e]=t.map(e=>e.key));b(O),S(k),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),E(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:T,initialFacetStats:y,initialFacetKeys:x,filterableFields:d,facetableFields:p,sortableFields:h,fieldTypes:_,totalDocumentCount:C}}var m=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}};async function h(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await m.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function g(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(e,t,n,r,i,a,o={},s={},c={}){let l=Object.entries(e??{}).filter(([,e])=>e.length>0),u=Object.entries(t??{}),d=Object.entries(s??{}).filter(([,e])=>e.length>0),f=(e,{min:t,max:o})=>h(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),p=(e,t)=>{let o=c[e]===`Number`?Number(t):NaN;return Number.isFinite(o)?f(e,{min:o,max:o}):h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,_,v]=await Promise.all([Promise.all(l.map(async([e,t])=>g(await Promise.all(t.map(t=>p(e,t))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(u.map(([e,t])=>f(e,t))),Promise.all(d.map(async([e,t])=>g(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return g([...m,..._,...v],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d,sessionId:f,source:p,count:h}){let g=(0,c.useRef)(0),y=(0,c.useRef)(void 0),b=(0,c.useRef)(!1),[x,S]=(0,c.useState)({}),[C,w]=(0,c.useState)(``),[T,E]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldTypes:r.fieldTypes,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let D=e.searchSettings.maxNumberOfRecordsToReturn,O=e.searchSettings.enableCoverage,k=e.searchSettings.removeDuplicates,A=e.searchSettings.coverageDepth,j=e.searchSettings.minimumScore,M=e.searchSettings.coverageSetup,N=e.sortBy,P=e.sortAscending,F=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++g.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[v,...y]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),b=s||e.query.trim()!==``,F={text:e.query,enableCoverage:O,removeDuplicates:k,coverageDepth:A,coverageSetup:M},I={...F,maxNumberOfRecordsToReturn:b?D:0,enableFacets:c,...v?{filter:v}:{},...N?{sortBy:N}:{},...P===void 0?{}:{sortAscending:P}};u&&console.log(`[performSearch] request body:`,JSON.stringify(I,null,2));let L=new URLSearchParams({session:f});p&&L.set(`source`,p),h||L.set(`count`,`false`);let R=e=>n(`${i}/api/teams/${a}/datasets/${o}/search?${L}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[z,...B]=await Promise.all([R(I),...y.map(e=>R({...F,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!z.ok)throw await m.fromResponse(`Search`,z);let V=await z.json(),H=z.headers.get(`Indx-Query-Id`)??void 0,U=V.truncationIndex??-1,W={};for(let e=0;e<d.length;e++){let t=d[e];if(!B[e].ok)throw await m.fromResponse(`Facets for '${t}'`,B[e]);let n=await B[e].json();n.facets?.[t]!==void 0&&(W[t]=n.facets[t])}let G=V.records||[],ee=G.map(e=>e.documentKey),K=G.map(e=>e.score),q=[];if(b&&ee.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(ee)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);q=(await e.json()).map((e,t)=>({document:e,documentKey:ee[t],score:K[t]}))}let J={};if(c&&V.facets){for(let[e,t]of Object.entries(V.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(J[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==g.current)return;let te=e.query!==C,Y=e.query!==T,X=e.facetStats??{};if(te?(X={...r.initialFacetStats,...J},S(X),w(e.query)):X={...x,...J},Y&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(J))n[e]=t;t(e=>({...e,rangeBounds:n})),E(e.query)}let Z=Object.keys(W).length>0?{...V.facets??{},...W}:V.facets;if(c&&(!Z||Object.keys(Z).length===0)){Z={};for(let[e,t]of Object.entries(r.initialFacetKeys))Z[e]=t.map(e=>({key:e,value:null}))}let ne=q.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=j}).map((e,t)=>({...e,position:t+1}));t(e=>({...e,results:ne,error:void 0,resultsSuppressed:!b,...c?{facets:Z,facetStats:X}:{},isLoading:!1,truncationIndex:U,queryId:H}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==g.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,N,P,D,O,k,A,M,j,n,r.initialFacetStats,r.initialFacetKeys,r.token,x,C,T,e.rangeBounds,i,a,o,s,u,t,f,p,h]);(0,c.useEffect)(()=>{y.current=F},[F]);let I=(0,c.useRef)(null);(0,c.useEffect)(()=>(I.current?.cancel(),I.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),y.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{I.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!b.current&&(s&&y.current?.({enableFacets:l}),b.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!b.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(I.current?.cancel(),y.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),y.current?.({enableFacets:!1}),I.current?.()):y.current?.({enableFacets:!1}),()=>{I.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!b.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||y.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!b.current||!r.token)return;let t=e.query.trim();!s&&t===``||y.current?.({enableFacets:l})},[N,P]);let L=(0,c.useRef)(!0),R=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(L.current){L.current=!1;return}if(R.current!==e.query||!b.current||!r.token)return;if(d.current){d.current=!1,y.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||y.current?.({enableFacets:l})},[D,O,k,A,M,j]),(0,c.useEffect)(()=>{R.current=e.query},[e.query])}function b(){let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():Math.random().toString(36).slice(2)+Date.now().toString(36)}var x=(0,c.createContext)(void 0),S=({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,source:_,count:v=!0})=>{let S=(0,c.useRef)(!1),C=(0,c.useRef)(b()).current,w=(0,c.useRef)(a),[T,E]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],fieldTypes:{},filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{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)(()=>{E(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[D]=(0,c.useState)(s),O=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),k=(0,c.useCallback)((e,t={})=>{if(!O.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${O.token}`}})},[O.token]);y({state:T,setState:E,authenticatedFetch:k,auth:O,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:D,enableDebugLogs:h,shouldFetchMore:S,sessionId:C,source:_,count:v});let A=(0,c.useRef)(void 0);A.current=T.queryId;let j=(0,c.useCallback)(async e=>{if(O.token)try{let i=await k(`${t}/api/teams/${n}/datasets/${r}/events/select`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({queryId:A.current,documentKey:e.documentKey,position:e.position,...v?{}:{count:!1}})});h&&(i.ok?console.log(`[select] document ${e.documentKey} at position ${e.position}`):console.warn(`[select] not recorded: ${i.status}`))}catch(e){h&&console.warn(`[select] failed:`,e)}},[O.token,k,t,n,r,h,v]),M=(0,c.useCallback)(e=>{E(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:w.current}}})},[]),N=(0,c.useCallback)(e=>{E(t=>({...t,facetDebounceDelayMillis:e}))},[]),P=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(w.current=e.maxNumberOfRecordsToReturn),E(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),F=(0,c.useCallback)(e=>{S.current=!0,E(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),I=(0,c.useCallback)((e,t,n=!1)=>{E(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),L=(0,c.useCallback)((e,t)=>{E(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),R=(0,c.useCallback)((e,t,n)=>{E(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),z=(0,c.useCallback)(()=>{E(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),B=(0,c.useCallback)((e,t,n=!0)=>{E(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),V=(0,c.useCallback)((e,t=!0)=>{E(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),H=(e,t)=>e.min===t.min&&e.max===t.max,U=(0,c.useCallback)((e,t,n=!1)=>{E(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>H(e,t))?i.filter(e=>!H(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),W=(0,c.useCallback)((e,t,n=!0)=>{E(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!H(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),G=(0,c.useCallback)((e,t)=>{E(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(x.Provider,{value:{state:T,isFetchingInitial:O.isFetchingInitial||!T.fieldsSeeded,authError:O.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:k,setQuery:M,toggleFilter:I,setValueMatch:L,setRangeFilter:R,resetFilters:z,resetSingleFilter:B,resetRangeFilter:V,toggleBucketFilter:U,resetBucketFilter:W,setSort:G,setDebounceDelay:N,setSearchSettings:P,fetchMoreResults:F,selectResult:j,sessionId:C},children:e})},C=()=>{let e=(0,c.useContext)(x);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},w=({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}=C();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`})})},T={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},E={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`},D=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:E.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:E.indexNumber,children:t}),(0,u.jsx)(`div`,{className:E.content,children:e?(0,u.jsxs)(`div`,{className:E.skeletonBars,children:[(0,u.jsx)(`div`,{className:E.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:E.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:E.scoreNumber,children:n})]}),O={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},k=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],A=({rows:e=6})=>(0,u.jsx)(`div`,{className:O.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(D,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:k[t%k.length]},t))}),j=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function M(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(!j.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var N=({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:_,selectResult:v}=C(),y=t??30,[b,x]=(0,c.useState)(y),S=(0,c.useRef)(0),w=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==w.current;(!i||i.length<S.current||e)&&x(y),S.current=i?.length??0,w.current=l},[i,y,l]);let E=i&&i.length>b,O=()=>{let e=b+y;x(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+y)};if(m)return g?(0,u.jsx)(A,{rows:y}):(0,u.jsx)(`div`,{className:T.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let k=h??p;return k?(0,u.jsx)(`div`,{className:T.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:k})}):a||i===null?(0,u.jsx)(`div`,{className:T.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:T.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,b).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:T.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=M(t);n&&(l[e]=n)}}return(0,u.jsx)(D,{index:i,score:s,showScore:o.showScore,children:r(l,{result:t,select:()=>v?.(t)??Promise.resolve()})},i)})}),E&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:O,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${b+1}-${Math.min(b+y,i.length,s)} of ${s}`:`Load more`})})]})},P={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},F=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[P.row,e===`title`?P.title:``].filter(Boolean).join(` `),children:t}),I={bar:`_bar_4nxla_12`,skeletonAppear:`_skeletonAppear_4nxla_1`,fade:`_fade_4nxla_1`,listRows:`_listRows_4nxla_19`,sliderArea:`_sliderArea_4nxla_25`,sliderTrack:`_sliderTrack_4nxla_32`,inputRow:`_inputRow_4nxla_40`,inputBar:`_inputBar_4nxla_45`,histogramRow:`_histogramRow_4nxla_55`},L=[65,80,55,72,60,75,50,68],R=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:I.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:I.histogramRow}),(0,u.jsx)(`div`,{className:I.sliderTrack}),(0,u.jsxs)(`div`,{className:I.inputRow,children:[(0,u.jsx)(`div`,{className:I.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:I.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:I.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:I.bar,style:{width:`${L[t%L.length]}%`,animationDelay:`${t*.05}s`}},t))})}),z={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},B=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:S,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=C(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(R,{rows:1,collapsible:!1}):(0,u.jsx)(R,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!S?.includes(e)){let t=[];return x?.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 F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let L=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{L.set(e,0)}),F.forEach(e=>{L.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(L.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&L.has(`null`)){let e=L.get(`null`)??0,t=L.get(`false`)??0;L.set(`false`,t+e),L.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:z.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=L.get(`true`),r=typeof n==`number`?n:null,i=I.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(L.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,ee=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:z.chip,title:t,children:(0,u.jsx)(`span`,{className:z.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:z.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:z.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[n,(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:z.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:z.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&I.length>0?z.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?z.grid:z.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:ee(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:z.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},V={disabledMessage:`_disabledMessage_adany_1`,histogram:`_histogram_adany_6`,histogramLayer:`_histogramLayer_adany_14`,histogramLive:`_histogramLive_adany_22`,histogramLit:`_histogramLit_adany_23`,histogramFill:`_histogramFill_adany_30`,histogramBar:`_histogramBar_adany_43`,histogramSeparators:`_histogramSeparators_adany_61`,histogramSeparator:`_histogramSeparator_adany_48`,active:`_active_adany_76`};function H(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 U(e){let t=0;for(let n of e)t=Math.max(t,H(n));return t===0?1:Number((10**-t).toFixed(t))}function W(e,t){return Number(e.toFixed(H(t)))}function G(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(H(n)))}function ee(e,t,n){let r=Math.ceil(Number(((e-t)/n).toFixed(6)));return Number((t+r*n).toFixed(H(n)))}var K=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:S,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=C(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),L=c.default.useMemo(()=>{if(m)return m;let t=Math.max(H(M),H(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,H(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,B=z?n:M,U=z?r:N,K=ee(U+L,B,L),q=e=>Math.min(K,Math.max(B,e)),J=g?.[e],te=o&&J!==void 0?V.active:void 0,Y=J?J.min:M,X=J?J.max:N,Z=J!==void 0,ne=F!==M||I!==N,[Q,$]=c.default.useState([Y,X]),[re,ie]=c.default.useState(!1),[ae,oe]=c.default.useState(!1),[se,ce]=c.default.useState(String(Y)),[le,ue]=c.default.useState(String(X)),de=c.default.useMemo(()=>{let e=H(L);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,se.length,le.length)+1}ch + 20px)`}},[L,M,N,se,le]);c.default.useEffect(()=>{ce(String(Q[0])),ue(String(Q[1]))},[Q]);let{finalMin:fe,finalMax:pe,isValidMin:me,isValidMax:he}=c.default.useMemo(()=>{let[e,t]=Q,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[Q,M,N]);c.default.useEffect(()=>{if(z)return;if(Q[0]===M&&Q[1]===N){ie(!1),oe(!1);return}let t=w??500,n=setTimeout(()=>{ie(!me),oe(!he)},300),r=setTimeout(()=>{me&&he&&(fe===M&&pe===N?E(e,!1):T(e,fe,pe))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[fe,pe,me,he,M,N,e,E,T,w,z]),c.default.useEffect(()=>{$([Y,X]),ie(!1),oe(!1)},[Y,X,e]);let ge=c.default.useCallback(e=>{let t=W(Math.min(e[0],e[1]-L),L);return[t,W(Math.max(e[1]-L,t),L)]},[L]),_e=c.default.useCallback(e=>{if(z)return;let[t,n]=ge(e);$([Math.max(M,Math.min(I,t)),Math.max(F,Math.min(N,n))])},[z,ge,M,N,F,I]),ve=c.default.useCallback(t=>{if(z)return;let[n,r]=ge(t),i=Math.max(M,Math.min(I,n)),a=Math.max(F,Math.min(N,r));i===M&&a===N?($([M,N]),E(e,!0)):$([i,a])},[z,ge,M,N,F,I,e,E]),ye=c.default.useRef(null),be=c.default.useCallback((t,n)=>{if(z)return;let r=ye.current;if(J&&r&&r.start===t&&r.last===n){ye.current=null,$([M,N]),E(e,!0);return}let i=G(Math.max(M,F,t),M,L),a=Math.max(i,G(Math.min(N,I,n),M,L));ye.current={start:t,last:n},$([i,a])},[z,J,M,N,F,I,L,e,E]),xe=c.default.useCallback(()=>{if(z)return;let e=se.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ce(String(Q[0]));return}let n=Math.max(M,Math.min(I,t));n<Q[1]?$([n,Q[1]]):$([M,Q[1]]),ce(String(n<Q[1]?n:M))},[z,se,Q,M,I]),Se=c.default.useCallback(()=>{if(z)return;let e=le.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ue(String(Q[1]));return}let n=Math.max(F,Math.min(N,t));n>Q[0]?$([Q[0],n]):$([Q[0],N]),ue(String(n>Q[0]?n:N))},[z,le,Q,F,N]),Ce=e=>t=>{t.key===`Enter`&&e()},[we,Te]=c.default.useState(null),Ee=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Ee.current&&Ee.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(Ee.current=t,Te(r))},[M,N,y,e,f]);let De=c.default.useMemo(()=>{if(!f||!we||we.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??Math.max(L,W(Math.ceil(e/20/L)*L,L)),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=we.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:W(a-L,L);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:W(c+L,L)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:Math.max(e.barEnd,K))-e.bucketStart}))},[f,we,M,N,p,L,K]),Oe=c.default.useMemo(()=>Math.max(...De.map(e=>e.count),1),[De]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(R,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!S?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:te,children:[z&&(0,u.jsxs)(`div`,{className:V.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&De.length===0&&(0,u.jsx)(`div`,{className:V.histogram}),f&&De.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[B,U],n=Math.max(fe,e),r=Math.min(pe,t),i=K,a=i-B||1,o=e=>Math.max(0,Math.min(1,(e-B)/a)),s=e=>e>=U?0:Math.max(0,Math.min(1,(i-(e+L))/a)),c=o(n),l=r<n?1-c:s(r),d=e=>`calc(10px + (100% - 20px) * ${e})`,f=`inset(0 ${d(l)} 0 ${d(c)})`,p=`inset(0 ${d(s(t))} 0 ${d(o(e))})`,m=n=>n.last<e||n.bucketStart>t,h=De.slice(1).map(e=>d((e.bucketStart-B)/a)),g=De.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Oe*20))}));return(0,u.jsxs)(`div`,{className:V.histogram,children:[(0,u.jsx)(`div`,{className:V.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:V.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>be(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${V.histogramLayer} ${V.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${V.histogramLayer} ${V.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:V.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:V.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:V.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:B,max:K,step:L,stepMarks:h,value:z?[B,K]:[q(G(fe,B,L)),q(G(pe+L,B,L))],isRange:!0,onChange:e=>_e(e),onFinalChange:e=>ve(e),disabled:z,activeMin:F,activeMax:q(W(I+L,L)),isFaceted:ne,highlightFaceted:Z,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:de,value:z?String(M):se,min:M,max:W(Math.min(I,Q[1]-L),L),onChange:e=>ce(e.target.value),onBlur:xe,onKeyDown:Ce(xe),disabled:z,isValid:z||!re}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:de,value:z?String(N):le,min:W(Math.max(F,Q[0]+L),L),max:N,onChange:e=>ue(e.target.value),onBlur:Se,onKeyDown:Ce(Se),disabled:z,isValid:z||!ae})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:te,children:[z&&(0,u.jsxs)(`div`,{className:V.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:de,value:z?String(M):se,min:M,max:W(Math.min(I,Q[1]-L),L),onChange:e=>ce(e.target.value),onBlur:xe,onKeyDown:Ce(xe),disabled:z,isValid:z||!re}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:de,value:z?String(N):le,min:W(Math.max(F,Q[0]+L),L),max:N,onChange:e=>ue(e.target.value),onBlur:Se,onKeyDown:Ce(Se),disabled:z,isValid:z||!ae})]})]}):(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.`]})})},q={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function J(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var te=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:S},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=C(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return U(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],W(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=W(r+n,N))e.push(i(W(r,N),W(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(R,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!S)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:q.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),L=P.map(e=>({bucket:e,count:F?J(e,O):null}));if(l||(L=L.filter(e=>e.count!==0||I(e.bucket))),L.length===0)return null;let z=L.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[n,(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:q.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[e,(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:q.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:q.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&k.length>0?q.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?q.grid:q.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<L.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(L.length),children:`Show ${L.length-z.length} more of ${L.length} total`})})]})})},Y={grid:`_grid_1xjna_2`,chip:`_chip_1xjna_21`,chipLabel:`_chipLabel_1xjna_32`},X=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),Z=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),ne=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Q(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=C(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(X,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(Z,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(ne,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var $={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},re=({options:e,noneLabel:t=`None`,control:n,displayType:r,collapsible:i=!0,startCollapsed:a=!1})=>{let o=n??(r===`radio`?`radio`:`select`),{state:{sortableFields:s,sortBy:c,sortAscending:l},setSort:f,isFetchingInitial:p}=C();if(p)return(0,u.jsx)(R,{title:`Sort by`,rows:o===`radio`?3:1,collapsible:i,startCollapsed:a});if(!s||s.length===0)return null;let m=c?`${c}:${l?`asc`:`desc`}`:`none`,h=e?e.filter(e=>s.includes(e.field)?!0:(console.warn(`[SortByPanel] '${e.field}' is not sortable, so "${e.label}" is left out. Mark the field Sortable in the dataset's field configuration.`),!1)).map(e=>({label:e.label,value:`${e.field}:${e.ascending?`asc`:`desc`}`})):s.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}]),g=t===null?h:[{label:t,value:`none`},...h],_=e=>{if(e===`none`||e===``)f(null,!0);else{let[t,n]=e.split(`:`);f(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:i,collapsed:i?a:!1,children:o===`select`?(0,u.jsx)(d.Select,{value:m,onValueChange:_,options:g,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:$.radioGroup,children:g.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:m===e.value,onChange:e=>_(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=C(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var oe=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function se(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=C(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function ce(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=C(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=Q,exports.BucketFilterPanel=te,exports.FilterPanelSkeleton=R,exports.IndxApiError=m,exports.RangeFilterPanel=K,exports.SearchContext=x,exports.SearchErrorBoundary=oe,exports.SearchInput=w,exports.SearchProvider=S,exports.SearchResult=D,exports.SearchResultRow=F,exports.SearchResults=N,exports.SearchResultsSkeleton=A,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=B,exports.useHybridSearch=ce,exports.useSearch=C,exports.useSearchContext=C,exports.useVectorSearch=se;
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export { BucketFilterPanel } from './components/BucketFilterPanel';
19
19
  export type { BucketFilterPanelProps, BucketSpec } from './components/BucketFilterPanel';
20
20
  export { ActiveFiltersPanel } from './components/ActiveFiltersPanel';
21
21
  export { SortByPanel } from './components/SortByPanel';
22
+ export type { SortOption } from './components/SortByPanel';
22
23
  export { SearchSettingsPanel } from './components/SearchSettingsPanel';
23
24
  export { SearchErrorBoundary } from './components/SearchErrorBoundary';
24
25
  export { IndxApiError } from './context/IndxApiError';