@indxsearch/intrface 3.7.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/context/SearchContext.d.ts +1 -0
- package/dist/context/buildFilterProxy.d.ts +9 -1
- package/dist/context/useIndxAuth.d.ts +8 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +119 -99
- package/dist/intrface.css +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- d5e93d4: A selected value on a numeric field is sent as a range filter with equal limits instead of a value filter. A value filter compares text, so on a number it was slow and missed `129.0` when asked for `129`; a range with equal limits is numeric equality through the field's index. The field types come from `GET fields/configuration`, fetched once at start beside the three field lists, and are exposed as `fieldTypes` on the search state. Against an older server that still answers 403 to a Search key on that call, nothing changes: every selection stays a value filter.
|
|
8
|
+
|
|
9
|
+
## 3.7.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- RangeFilterPanel: every value now owns a cell one step wide, and the upper thumb sits at the end of its value's cell, so the slider runs one step past the field's max. Histogram bars touch again instead of leaving a one-step gap between buckets, and a clicked bar's edges still sit exactly under both thumbs. The filter and the Min and Max inputs are unchanged: a 2004 to 2008 selection still filters on 2004 to 2008. When the thumbs meet, the selection stays one value wide.
|
|
14
|
+
|
|
3
15
|
## 3.7.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -29,6 +29,7 @@ export interface SearchState {
|
|
|
29
29
|
filterableFields: string[];
|
|
30
30
|
facetableFields: string[];
|
|
31
31
|
sortableFields: string[];
|
|
32
|
+
fieldTypes: Record<string, string>;
|
|
32
33
|
filters: Record<string, string[]>;
|
|
33
34
|
valueMatch: Record<string, ValueMatch>;
|
|
34
35
|
rangeFilters: Record<string, {
|
|
@@ -16,6 +16,14 @@ export interface NumericRange {
|
|
|
16
16
|
* always ORed. The per-field results are then ANDed with each other and with
|
|
17
17
|
* every range filter. Any failed filter call throws — the caller must not fall
|
|
18
18
|
* back to an unfiltered search.
|
|
19
|
+
*
|
|
20
|
+
* A selected value on a field whose type is 'Number' (per `fieldTypes`, from
|
|
21
|
+
* fields/configuration) is sent as a range filter with equal limits, not a
|
|
22
|
+
* value filter. A value filter compares text, so on a number it is slow and
|
|
23
|
+
* misses 129.0 when asked for 129; a range with equal limits is numeric
|
|
24
|
+
* equality through the field's index. A value that is not a number on such a
|
|
25
|
+
* field, or a field of unknown type, goes as a value filter and the server
|
|
26
|
+
* answers.
|
|
19
27
|
*/
|
|
20
|
-
export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, NumericRange>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>, bucketFilters?: Record<string, NumericRange[]>): Promise<any>;
|
|
28
|
+
export declare function buildFilterProxy(filters: Record<string, string[]>, rangeFilters: Record<string, NumericRange>, url: string, team: string, dataset: string, authenticatedFetch: AuthenticatedFetch, valueMatch?: Record<string, ValueMatch>, bucketFilters?: Record<string, NumericRange[]>, fieldTypes?: Record<string, string>): Promise<any>;
|
|
21
29
|
export {};
|
|
@@ -11,6 +11,14 @@ export interface IndxAuthResult {
|
|
|
11
11
|
filterableFields: string[];
|
|
12
12
|
facetableFields: string[];
|
|
13
13
|
sortableFields: string[];
|
|
14
|
+
/**
|
|
15
|
+
* Each field's JSON type as the server reports it ('String', 'Number', 'True', 'False', ...),
|
|
16
|
+
* from GET fields/configuration. A selected value on a 'Number' field is sent as a range with
|
|
17
|
+
* equal limits rather than a value filter: a value filter compares text, so on a number it is
|
|
18
|
+
* slow and misses 129.0 when asked for 129. Empty when the server refused the call (older
|
|
19
|
+
* servers answer 403 to a Search key), in which case every selection is a value filter as before.
|
|
20
|
+
*/
|
|
21
|
+
fieldTypes: Record<string, string>;
|
|
14
22
|
totalDocumentCount: number;
|
|
15
23
|
}
|
|
16
24
|
interface UseIndxAuthOptions {
|
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");function p({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)(0),[C,w]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{w(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),Error(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),Error(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok){if(c.status===401)throw console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[p,h,_]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`)]);if(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[y,x,C]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(y||[]),m(x||[]),g(C||[]),S(d);let w={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?w=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let T={};if(w.facets){for(let[e,t]of Object.entries(w.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(T[e]={min:Math.min(...n),max:Math.max(...n)})}}let E={};if(w.facets)for(let[e,t]of Object.entries(w.facets))Array.isArray(t)&&(E[e]=t.map(e=>e.key));v(T),b(E),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),w(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:C,initialFacetStats:_,initialFacetKeys:y,filterableFields:d,facetableFields:p,sortableFields:h,totalDocumentCount:x}}var m=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}};async function h(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await m.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function g(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(e,t,n,r,i,a,o={},s={}){let c=Object.entries(e??{}).filter(([,e])=>e.length>0),l=Object.entries(t??{}),u=Object.entries(s??{}).filter(([,e])=>e.length>0),d=(e,{min:t,max:o})=>h(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),[f,p,m]=await Promise.all([Promise.all(c.map(async([e,t])=>g(await Promise.all(t.map(t=>h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(l.map(([e,t])=>d(e,t))),Promise.all(u.map(async([e,t])=>g(await Promise.all(t.map(t=>d(e,t))),`or`,n,r,i,a)))]);return g([...f,...p,...m],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d}){let f=(0,c.useRef)(0),p=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[g,y]=(0,c.useState)({}),[b,x]=(0,c.useState)(``),[S,C]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let w=e.searchSettings.maxNumberOfRecordsToReturn,T=e.searchSettings.enableCoverage,E=e.searchSettings.removeDuplicates,D=e.searchSettings.coverageDepth,O=e.searchSettings.minimumScore,k=e.searchSettings.coverageSetup,A=e.sortBy,j=e.sortAscending,M=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++f.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[p,...h]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]}))]),v=s||e.query.trim()!==``,M={text:e.query,enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k},N={...M,maxNumberOfRecordsToReturn:v?w:0,enableFacets:c,...p?{filter:p}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j}};u&&console.log(`[performSearch] request body:`,JSON.stringify(N,null,2));let P=e=>n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[F,...I]=await Promise.all([P(N),...h.map(e=>P({...M,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!F.ok)throw await m.fromResponse(`Search`,F);let L=await F.json(),R=L.truncationIndex??-1,z={};for(let e=0;e<d.length;e++){let t=d[e];if(!I[e].ok)throw await m.fromResponse(`Facets for '${t}'`,I[e]);let n=await I[e].json();n.facets?.[t]!==void 0&&(z[t]=n.facets[t])}let B=L.records||[],V=B.map(e=>e.documentKey),H=B.map(e=>e.score),U=[];if(v&&V.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(V)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);U=(await e.json()).map((e,t)=>({document:e,documentKey:V[t],score:H[t]}))}let W={};if(c&&L.facets){for(let[e,t]of Object.entries(L.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(W[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==f.current)return;let G=e.query!==b,K=e.query!==S,q=e.facetStats??{};if(G?(q={...r.initialFacetStats,...W},y(q),x(e.query)):q={...g,...W},K&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(W))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let J=Object.keys(z).length>0?{...L.facets??{},...z}:L.facets;if(c&&(!J||Object.keys(J).length===0)){J={};for(let[e,t]of Object.entries(r.initialFacetKeys))J[e]=t.map(e=>({key:e,value:null}))}let Y=U.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:Y,error:void 0,resultsSuppressed:!v,...c?{facets:J,facetStats:q}:{},isLoading:!1,truncationIndex:R}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==f.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,g,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{p.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),p.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&p.current?.({enableFacets:l}),h.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!h.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(N.current?.cancel(),p.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),p.current?.({enableFacets:!1}),N.current?.()):p.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!h.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[A,j]);let P=(0,c.useRef)(!0),F=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(P.current){P.current=!1;return}if(F.current!==e.query||!h.current||!r.token)return;if(d.current){d.current=!1,p.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var b=(0,c.createContext)(void 0),x=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),v=(0,c.useRef)(a),[x,S]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{S(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[C]=(0,c.useState)(s),w=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),T=(0,c.useCallback)((e,t={})=>{if(!w.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${w.token}`}})},[w.token]);y({state:x,setState:S,authenticatedFetch:T,auth:w,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:C,enableDebugLogs:h,shouldFetchMore:_});let E=(0,c.useCallback)(e=>{S(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:v.current}}})},[]),D=(0,c.useCallback)(e=>{S(t=>({...t,facetDebounceDelayMillis:e}))},[]),O=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(v.current=e.maxNumberOfRecordsToReturn),S(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),k=(0,c.useCallback)(e=>{_.current=!0,S(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),A=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),j=(0,c.useCallback)((e,t)=>{S(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),M=(0,c.useCallback)((e,t,n)=>{S(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),N=(0,c.useCallback)(()=>{S(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),P=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),F=(0,c.useCallback)((e,t=!0)=>{S(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),I=(e,t)=>e.min===t.min&&e.max===t.max,L=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>I(e,t))?i.filter(e=>!I(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),R=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!I(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),z=(0,c.useCallback)((e,t)=>{S(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(b.Provider,{value:{state:x,isFetchingInitial:w.isFetchingInitial||!x.fieldsSeeded,authError:w.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:T,setQuery:E,toggleFilter:A,setValueMatch:j,setRangeFilter:M,resetFilters:N,resetSingleFilter:P,resetRangeFilter:F,toggleBucketFilter:L,resetBucketFilter:R,setSort:z,setDebounceDelay:D,setSearchSettings:O,fetchMoreResults:k},children:e})},S=()=>{let e=(0,c.useContext)(b);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},C=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,...a})=>{let{state:{query:o,filters:s,rangeFilters:c,searchSettings:l},setQuery:f}=S();Object.keys(s).length>0||Object.keys(c).length;let p=o.length>0;return(0,u.jsx)(d.SearchField,{type:`text`,value:o,onChange:e=>f(e.target.value),placeholder:l.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...a,children:r&&p&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>f(``),"aria-label":`Clear search`,children:`Clear`})})},w={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},T={row:`_row_1i201_1`,content:`_content_1i201_19`,indexNumber:`_indexNumber_1i201_31`,scoreNumber:`_scoreNumber_1i201_39`,skeletonBars:`_skeletonBars_1i201_53`,skeletonBarLg:`_skeletonBarLg_1i201_59`,fade:`_fade_1i201_1`,skeletonBarSm:`_skeletonBarSm_1i201_66`},E=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:T.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:T.indexNumber,children:t}),(0,u.jsx)(`div`,{className:T.content,children:e?(0,u.jsxs)(`div`,{className:T.skeletonBars,children:[(0,u.jsx)(`div`,{className:T.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:T.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:T.scoreNumber,children:n})]}),D={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},O=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],k=({rows:e=6})=>(0,u.jsx)(`div`,{className:D.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(E,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:O[t%O.length]},t))}),A=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function j(e){let t=e.trim();if(!t.startsWith(`[`)||!t.endsWith(`]`))return;try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e))}catch{}if(!A.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var M=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p},isFetchingInitial:m,authError:h,allowEmptySearch:g,fetchMoreResults:_}=S(),v=t??30,[y,b]=(0,c.useState)(v),x=(0,c.useRef)(0),C=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==C.current;(!i||i.length<x.current||e)&&b(v),x.current=i?.length??0,C.current=l},[i,v,l]);let T=i&&i.length>y,D=()=>{let e=y+v;b(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+v)};if(m)return g?(0,u.jsx)(k,{rows:v}):(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let O=h??p;return O?(0,u.jsx)(`div`,{className:w.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:O})}):a||i===null?(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,y).map((t,i)=>{let a=t.document,s=t.score,c;try{c=typeof a==`string`?JSON.parse(a):a}catch{return(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},i)}let l;if(e&&e.length>0){l={};for(let t of e)t in c&&(l[t]=c[t])}else l={...c};if(n)for(let e in l){let t=l[e];if(typeof t==`string`){let n=j(t);n&&(l[e]=n)}}return(0,u.jsx)(E,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),T&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:D,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${y+1}-${Math.min(y+v,i.length,s)} of ${s}`:`Load more`})})]})},N={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},P=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[N.row,e===`title`?N.title:``].filter(Boolean).join(` `),children:t}),F={bar:`_bar_4nxla_12`,skeletonAppear:`_skeletonAppear_4nxla_1`,fade:`_fade_4nxla_1`,listRows:`_listRows_4nxla_19`,sliderArea:`_sliderArea_4nxla_25`,sliderTrack:`_sliderTrack_4nxla_32`,inputRow:`_inputRow_4nxla_40`,inputBar:`_inputBar_4nxla_45`,histogramRow:`_histogramRow_4nxla_55`},I=[65,80,55,72,60,75,50,68],L=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:F.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:F.histogramRow}),(0,u.jsx)(`div`,{className:F.sliderTrack}),(0,u.jsxs)(`div`,{className:F.inputRow,children:[(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:F.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:F.bar,style:{width:`${I[t%I.length]}%`,animationDelay:`${t*.05}s`}},t))})}),R={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},z=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:C,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=S(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(L,{rows:1,collapsible:!1}):(0,u.jsx)(L,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!C?.includes(e)){let t=[];return x?.includes(e)||t.push(`filterable`),C?.includes(e)||t.push(`facetable`),(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing `,t.join(` and `),`.`]})})}let F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let z=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{z.set(e,0)}),F.forEach(e=>{z.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(z.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&z.has(`null`)){let e=z.get(`null`)??0,t=z.get(`false`)??0;z.set(`false`,t+e),z.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:R.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=z.get(`true`),r=typeof n==`number`?n:null,i=I.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(z.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,K=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:t,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[n,(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&I.length>0?R.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?R.grid:R.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:K(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:R.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},B={disabledMessage:`_disabledMessage_g8ib6_1`,histogram:`_histogram_g8ib6_6`,histogramLayer:`_histogramLayer_g8ib6_14`,histogramLive:`_histogramLive_g8ib6_22`,histogramLit:`_histogramLit_g8ib6_23`,histogramFill:`_histogramFill_g8ib6_30`,histogramBar:`_histogramBar_g8ib6_43`,histogramGap:`_histogramGap_g8ib6_62`,histogramSeparators:`_histogramSeparators_g8ib6_68`,histogramSeparator:`_histogramSeparator_g8ib6_48`,active:`_active_g8ib6_83`};function V(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function H(e){let t=0;for(let n of e)t=Math.max(t,V(n));return t===0?1:Number((10**-t).toFixed(t))}function U(e,t){return Number(e.toFixed(V(t)))}function W(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(V(n)))}var G=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:C,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=S(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(M),V(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,V(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,H=z?n:M,G=z?r:N,K=g?.[e],q=o&&K!==void 0?B.active:void 0,J=K?K.min:M,Y=K?K.max:N,ee=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([J,Y]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(J)),[$,se]=c.default.useState(String(Y)),ce=c.default.useMemo(()=>{let e=V(R);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[R,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([J,Y]),re(!1),ae(!1)},[J,Y,e]);let pe=c.default.useCallback(e=>{z||Z([Math.max(M,Math.min(I,e[0])),Math.max(F,Math.min(N,e[1]))])},[z,M,N,F,I]),me=c.default.useCallback(t=>{if(z)return;let n=Math.max(M,Math.min(I,t[0])),r=Math.max(F,Math.min(N,t[1]));n===M&&r===N?(Z([M,N]),E(e,!0)):Z([n,r])},[z,M,N,F,I,e,E]),he=c.default.useRef(null),ge=c.default.useCallback((t,n)=>{if(z)return;let r=he.current;if(K&&r&&r.start===t&&r.last===n){he.current=null,Z([M,N]),E(e,!0);return}let i=W(Math.max(M,F,t),M,R),a=Math.max(i,W(Math.min(N,I,n),M,R));he.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,R,e,E]),_e=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]),ve=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]),ye=e=>t=>{t.key===`Enter`&&e()},[be,xe]=c.default.useState(null),Se=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Se.current&&Se.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&&(Se.current=t,xe(r))},[M,N,y,e,f]);let Ce=c.default.useMemo(()=>{if(!f||!be||be.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=be.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:U(a-R,R),l=c>i?c:Math.min(a,N);return{bucketStart:i,bucketEnd:a,count:s,span:l-i,gap:o?0:Math.max(0,a-l),barEnd:l,last:c}})},[f,be,M,N,p,R]),we=c.default.useMemo(()=>Math.max(...Ce.map(e=>e.count),1),[Ce]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!C?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&Ce.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&Ce.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[H,G],n=Math.max(le,e),r=Math.min(ue,t),i=G-H||1,a=e=>Math.max(0,Math.min(1,(e-H)/i)),o=e=>Math.max(0,Math.min(1,(G-e)/i)),s=a(n),c=r<n?1-s:o(r),l=e=>`calc(10px + (100% - 20px) * ${e})`,d=`inset(0 ${l(c)} 0 ${l(s)})`,f=`inset(0 ${l(o(t))} 0 ${l(a(e))})`,p=n=>n.last<e||n.bucketStart>t,m=Ce.slice(1).map((e,t)=>l(((Ce[t].barEnd+e.bucketStart)/2-H)/i)),h=(e,t)=>e.gap>0?(0,u.jsx)(`span`,{className:B.histogramGap,style:{flexGrow:e.gap}},`gap${t}`):null,g=Ce.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/we*20))}));return(0,u.jsxs)(`div`,{className:B.histogram,children:[(0,u.jsx)(`div`,{className:B.histogramLayer,children:g.map((e,t)=>[(0,u.jsx)(`button`,{type:`button`,className:B.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||p(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>ge(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:f},children:g.map((e,t)=>[(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:d},children:g.map((e,t)=>[(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:B.histogramSeparators,"aria-hidden":`true`,children:m.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:H,max:G,step:R,stepMarks:h,value:z?[H,G]:[W(le,H,R),W(ue,H,R)],isRange:!0,onChange:e=>pe(e),onFinalChange:e=>me(e),disabled:z,activeMin:F,activeMax:I,isFaceted:te,highlightFaceted:ee,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ye(_e),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ve,onKeyDown:ye(ve),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ye(_e),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ve,onKeyDown:ye(ve),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},K={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function q(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var J=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:C},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=S(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return H(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],U(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=U(r+n,N))e.push(i(U(r,N),U(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(L,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!C)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:K.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),R=P.map(e=>({bucket:e,count:F?q(e,O):null}));if(l||(R=R.filter(e=>e.count!==0||I(e.bucket))),R.length===0)return null;let z=R.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[n,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:K.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[e,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&k.length>0?K.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?K.grid:K.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<R.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),te=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),X=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Z(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=S(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(X,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var ne={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},re=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=S();if(l)return(0,u.jsx)(L,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:ne.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=S(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var Q=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function oe(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=Z,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=Q,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=$,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=oe;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");function p({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)({}),[C,w]=(0,c.useState)(0),[T,E]=(0,c.useState)(null);return(0,c.useEffect)(()=>{(async()=>{E(null);try{if(!r)throw console.error(`[Auth] ❌ Missing bearer token`),console.error(`[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)`),Error(`A bearer token is required. Check console for instructions.`);if(!e)throw console.error(`[Auth] ❌ Missing INDX server URL`),console.error(`[Auth] 💡 Pass a url to SearchProvider`),Error(`INDX server URL is required. Check console for instructions.`);if(!n)throw console.error(`[Auth] ❌ Missing dataset name`),console.error(`[Auth] 💡 Pass dataset="your-dataset-name" to SearchProvider`),Error(`Dataset name is required. Check console for instructions.`);i&&console.log(`[Auth] ✅ Using bearer token`);let a=r,s=e=>fetch(e,{method:`GET`,headers:{accept:`text/plain`,Authorization:`Bearer ${a}`}});i&&console.log(`[Auth] 🔍 Checking dataset status...`);let c=await s(`${e}/api/teams/${t}/datasets/${n}/status`);if(!c.ok){if(c.status===401)throw console.error(`[Auth] ❌ Authentication failed (401 Unauthorized)`),console.error(`[Auth] 💡 Your token may be expired or invalid`),console.error(`[Auth] 💡 Create or refresh your token on the Indx Dashboard`),Error(`Authentication failed (401). Token may be expired. Check console for instructions.`);if(c.status===404)throw console.error(`[Auth] ❌ Dataset "`+n+`" not found (404)`),console.error(`[Auth] 💡 Available datasets can be checked with: curl -X GET "`+e+`/api/me/datasets" -H "Authorization: Bearer YOUR_TOKEN"`),console.error(`[Auth] 💡 Make sure you spelled the dataset name correctly`),Error(`Dataset "`+n+`" not found. Check console for instructions.`);{let t=await c.text();throw console.error(`[Auth] ❌ Failed to get dataset status:`,c.status,t),console.error(`[Auth] 💡 Check if your INDX server is running at:`,e),Error(`Failed to connect to INDX server. Check console for details.`)}}let u=await c.json();i&&console.log(`[Auth] 📊 Dataset status:`,u),o(a),i&&console.log(`[Auth] ✅ Dataset session established`),u.systemState!==void 0&&u.systemState!==l.SystemState.Ready&&(console.warn(`[Auth] ⚠️ Dataset is not ready yet. Current state:`,l.SystemState[u.systemState]),console.warn(`[Auth] 💡 Wait for indexing to complete before searching`));let d=u.documentCount??u.numberOfRecords??0;d===0?(console.warn(`[Auth] ⚠️ Dataset "`+n+`" is empty (0 records)`),console.warn(`[Auth] 💡 Add documents to your dataset before searching`),console.warn(`[Auth] 💡 Search will work but return no results`)):i&&console.log(`[Auth] ✅ Dataset has`,d,`records`);let[p,h,_,y]=await Promise.all([s(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),s(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(()=>null)]);if(!p.ok)throw console.error(`[Auth] ❌ GetFilterableFields failed:`,p.status,await p.text()),Error(`Failed to get filterable fields. Check console for details.`);if(!h.ok)throw console.error(`[Auth] ❌ GetFacetableFields failed:`,h.status,await h.text()),Error(`Failed to get facetable fields. Check console for details.`);if(!_.ok)throw console.error(`[Auth] ❌ GetSortableFields failed:`,_.status,await _.text()),Error(`Failed to get sortable fields. Check console for details.`);let[x,C,T]=await Promise.all([p.json().catch(e=>(console.error(`Failed to parse GetFilterableFields response:`,e),[])),h.json().catch(e=>(console.error(`Failed to parse GetFacetableFields response:`,e),[])),_.json().catch(e=>(console.error(`Failed to parse GetSortableFields response:`,e),[]))]);f(x||[]),m(C||[]),g(T||[]),w(d);let E={};if(y?.ok){let e=await y.json().catch(e=>(console.error(`Failed to parse GetFieldConfiguration response:`,e),[]));for(let t of e??[])t?.fieldName&&t?.fieldType&&(E[t.fieldName]=t.fieldType)}else i&&console.log(`[Auth] fields/configuration not available`,y?.status,`- every selected value will be sent as a value filter`);v(E);let D={facets:{}};try{let r=await fetch(`${e}/api/teams/${t}/datasets/${n}/search`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${a}`},body:JSON.stringify({text:``,maxNumberOfRecordsToReturn:0,enableFacets:!0})});r.ok?D=await r.json().catch(e=>(console.warn(`Failed to parse blank search response:`,e),{facets:{}})):(console.warn(`Blank search failed:`,r.status,r.statusText),console.warn(`Continuing without initial facet data - facets will be populated after first search`))}catch(e){console.warn(`Blank search error:`,e),console.warn(`Continuing without initial facet data - facets will be populated after first search`)}let O={};if(D.facets){for(let[e,t]of Object.entries(D.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(O[e]={min:Math.min(...n),max:Math.max(...n)})}}let k={};if(D.facets)for(let[e,t]of Object.entries(D.facets))Array.isArray(t)&&(k[e]=t.map(e=>e.key));b(O),S(k),i&&console.log(`[Auth] ✅ Initialization complete`)}catch(t){console.error(`[Auth] ❌ Initialization failed:`,t),(t instanceof Error||typeof t==`object`&&t&&`message`in t)&&console.error(`[Auth] 💡 Error:`,t.message),t instanceof TypeError&&t.message.includes(`fetch`)&&(console.error(`[Auth] ❌ Network error - cannot connect to INDX server`),console.error(`[Auth] 💡 Check if the server is running at:`,e),console.error(`[Auth] 💡 Check the url you passed to SearchProvider`),console.error(`[Auth] 💡 For local development, it should be: http://localhost:5001`)),E(t instanceof Error?t.message:String(t))}finally{u(!1)}})()},[e,t,n]),{token:a,isFetchingInitial:s,authError:T,initialFacetStats:y,initialFacetKeys:x,filterableFields:d,facetableFields:p,sortableFields:h,fieldTypes:_,totalDocumentCount:C}}var m=class e extends Error{status;code;problem;retryAfterSeconds;constructor(e,t,n,r){let i=n?.detail??n?.title;super(`${e} failed: HTTP ${t}${i?` — ${i}`:``}`),this.name=`IndxApiError`,this.status=t,this.code=n?.code,this.problem=n,this.retryAfterSeconds=r}get retryable(){return this.code===`invalidState`&&this.problem?.retryable===!0}static async fromResponse(t,n){let r;try{let e=await n.json();e&&typeof e==`object`&&typeof e.code==`string`?r=e:e&&typeof e==`object`&&(r={...e,code:``})}catch{}let i=n.headers?.get?.(`Retry-After`),a=i!=null&&/^\d+$/.test(i)?Number(i):void 0;return new e(t,n.status,r,a)}};async function h(e,t,n,r,i,a,o){let s=await o(`${r}/api/teams/${i}/datasets/${a}/filters/${e}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!s.ok)throw await m.fromResponse(n,s);let c=await s.json();if(!c||typeof c.hashString!=`string`)throw Error(`${n} failed: server returned no filter token`);return c}async function g(e,t,n,r,i,a){if(e.length===0)return null;if(e.length===1)return e[0];let o=e[0];for(let s=1;s<e.length;s++)o=await h(`combine`,{a:o,b:e[s],useAndOperation:t===`and`},`CombineFilters`,n,r,i,a);return o}async function _(e,t,n,r,i,a,o={},s={},c={}){let l=Object.entries(e??{}).filter(([,e])=>e.length>0),u=Object.entries(t??{}),d=Object.entries(s??{}).filter(([,e])=>e.length>0),f=(e,{min:t,max:o})=>h(`range`,{fieldName:e,lowerLimit:t,upperLimit:o},`Range filter '${e}'`,n,r,i,a),p=(e,t)=>{let o=c[e]===`Number`?Number(t):NaN;return Number.isFinite(o)?f(e,{min:o,max:o}):h(`value`,{fieldName:e,value:t},`Value filter '${e}'`,n,r,i,a)},[m,_,v]=await Promise.all([Promise.all(l.map(async([e,t])=>g(await Promise.all(t.map(t=>p(e,t))),o[e]===`any`?`or`:`and`,n,r,i,a))),Promise.all(u.map(([e,t])=>f(e,t))),Promise.all(d.map(async([e,t])=>g(await Promise.all(t.map(t=>f(e,t))),`or`,n,r,i,a)))]);return g([...m,..._,...v],`and`,n,r,i,a)}function v(e,t){let n,r=(...r)=>{clearTimeout(n),n=setTimeout(()=>e(...r),t)};return r.cancel=()=>clearTimeout(n),r}function y({state:e,setState:t,authenticatedFetch:n,auth:r,url:i,team:a,dataset:o,allowEmptySearch:s,facetsEnabled:l,enableDebugLogs:u,shouldFetchMore:d}){let f=(0,c.useRef)(0),p=(0,c.useRef)(void 0),h=(0,c.useRef)(!1),[g,y]=(0,c.useState)({}),[b,x]=(0,c.useState)(``),[S,C]=(0,c.useState)(``);(0,c.useEffect)(()=>{r.isFetchingInitial||t(e=>({...e,facetStats:r.initialFacetStats,rangeBounds:r.initialFacetStats,totalDocumentCount:r.totalDocumentCount,filterableFields:r.filterableFields,facetableFields:r.facetableFields,sortableFields:r.sortableFields,fieldTypes:r.fieldTypes,fieldsSeeded:!0}))},[r.isFetchingInitial,r.initialFacetStats,r.totalDocumentCount,r.filterableFields,r.facetableFields,r.sortableFields,t]);let w=e.searchSettings.maxNumberOfRecordsToReturn,T=e.searchSettings.enableCoverage,E=e.searchSettings.removeDuplicates,D=e.searchSettings.coverageDepth,O=e.searchSettings.minimumScore,k=e.searchSettings.coverageSetup,A=e.sortBy,j=e.sortAscending,M=(0,c.useCallback)(async({enableFacets:c})=>{if(!r.token)return;let l=++f.current;if(t(e=>({...e,isLoading:!0})),e.query.trim()===``){if(!s)return;c=!0}try{let d=c?Array.from(new Set([...Object.keys(e.filters).filter(t=>e.valueMatch[t]===`any`&&(e.filters[t]?.length??0)>0),...Object.keys(e.bucketFilters).filter(t=>(e.bucketFilters[t]?.length??0)>0)])):[],[p,...h]=await Promise.all([_(e.filters,e.rangeFilters,i,a,o,n,e.valueMatch,e.bucketFilters,e.fieldTypes),...d.map(t=>_({...e.filters,[t]:[]},e.rangeFilters,i,a,o,n,e.valueMatch,{...e.bucketFilters,[t]:[]},e.fieldTypes))]),v=s||e.query.trim()!==``,M={text:e.query,enableCoverage:T,removeDuplicates:E,coverageDepth:D,coverageSetup:k},N={...M,maxNumberOfRecordsToReturn:v?w:0,enableFacets:c,...p?{filter:p}:{},...A?{sortBy:A}:{},...j===void 0?{}:{sortAscending:j}};u&&console.log(`[performSearch] request body:`,JSON.stringify(N,null,2));let P=e=>n(`${i}/api/teams/${a}/datasets/${o}/search`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),[F,...I]=await Promise.all([P(N),...h.map(e=>P({...M,maxNumberOfRecordsToReturn:0,enableFacets:!0,...e?{filter:e}:{}}))]);if(!F.ok)throw await m.fromResponse(`Search`,F);let L=await F.json(),R=L.truncationIndex??-1,z={};for(let e=0;e<d.length;e++){let t=d[e];if(!I[e].ok)throw await m.fromResponse(`Facets for '${t}'`,I[e]);let n=await I[e].json();n.facets?.[t]!==void 0&&(z[t]=n.facets[t])}let B=L.records||[],V=B.map(e=>e.documentKey),H=B.map(e=>e.score),U=[];if(v&&V.length>0){let e=await n(`${i}/api/teams/${a}/datasets/${o}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(V)});if(!e.ok)throw await m.fromResponse(`Document lookup`,e);U=(await e.json()).map((e,t)=>({document:e,documentKey:V[t],score:H[t]}))}let W={};if(c&&L.facets){for(let[e,t]of Object.entries(L.facets))if(Array.isArray(t)&&t.length>0){let n=t.map(e=>Number(e.key)).filter(e=>!isNaN(e));n.length>0&&(W[e]={min:Math.min(...n),max:Math.max(...n)})}}if(l!==f.current)return;let G=e.query!==b,K=e.query!==S,q=e.facetStats??{};if(G?(q={...r.initialFacetStats,...W},y(q),x(e.query)):q={...g,...W},K&&c){let n={...e.rangeBounds};for(let[e,t]of Object.entries(W))n[e]=t;t(e=>({...e,rangeBounds:n})),C(e.query)}let J=Object.keys(z).length>0?{...L.facets??{},...z}:L.facets;if(c&&(!J||Object.keys(J).length===0)){J={};for(let[e,t]of Object.entries(r.initialFacetKeys))J[e]=t.map(e=>({key:e,value:null}))}let Y=U.filter(t=>{let n=e.query.trim();return n===``||n.length===1?!0:t.score>=O});t(e=>({...e,results:Y,error:void 0,resultsSuppressed:!v,...c?{facets:J,facetStats:q}:{},isLoading:!1,truncationIndex:R}))}catch(e){if(console.error(`[Search] ❌ Search failed:`,e),e instanceof TypeError&&e.message.includes(`fetch`)?(console.error(`[Search] ❌ Network error - cannot reach INDX server`),console.error(`[Search] 💡 Check if server is running at:`,i)):e instanceof Error&&(e.message.includes(`401`)?(console.error(`[Search] ❌ Authentication failed`),console.error(`[Search] 💡 Your token may have expired. Create or refresh it on the Indx Dashboard.`)):e.message.includes(`404`)?(console.error(`[Search] ❌ Dataset not found`),console.error(`[Search] 💡 Check that dataset "`+o+`" exists`)):console.error(`[Search] 💡 Error:`,e.message)),l!==f.current)return;t(t=>({...t,results:null,isLoading:!1,resultsSuppressed:!1,error:e instanceof Error?e.message:`Search failed`}))}},[e.query,e.filters,e.valueMatch,e.rangeFilters,e.bucketFilters,e.facetStats,A,j,w,T,E,D,k,O,n,r.initialFacetStats,r.initialFacetKeys,r.token,g,b,S,e.rangeBounds,i,a,o,s,u,t]);(0,c.useEffect)(()=>{p.current=M},[M]);let N=(0,c.useRef)(null);(0,c.useEffect)(()=>(N.current?.cancel(),N.current=v(()=>{u&&console.log(`Debounced searchWithFacets fired`),p.current?.({enableFacets:!0})},e.facetDebounceDelayMillis??500),()=>{N.current?.cancel()}),[e.facetDebounceDelayMillis]),(0,c.useEffect)(()=>{!r.isFetchingInitial&&r.token&&!h.current&&(s&&p.current?.({enableFacets:l}),h.current=!0)},[r.isFetchingInitial,r.token,s,l]),(0,c.useEffect)(()=>{if(!r.token||!h.current)return;let n=e.query.trim(),i=n===``&&s;if(n===``&&!s){e.resultsSuppressed||t(e=>({...e,resultsSuppressed:!0}));return}return i?(N.current?.cancel(),p.current?.({enableFacets:l})):l?(u&&console.log(`Search fired`),p.current?.({enableFacets:!1}),N.current?.()):p.current?.({enableFacets:!1}),()=>{N.current?.cancel()}},[e.query,s,l]),(0,c.useEffect)(()=>{if(!h.current||!r.token||e.filterRevision===0)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[e.filterRevision]),(0,c.useEffect)(()=>{if(!h.current||!r.token)return;let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[A,j]);let P=(0,c.useRef)(!0),F=(0,c.useRef)(e.query);(0,c.useEffect)(()=>{if(P.current){P.current=!1;return}if(F.current!==e.query||!h.current||!r.token)return;if(d.current){d.current=!1,p.current?.({enableFacets:!1});return}let t=e.query.trim();!s&&t===``||p.current?.({enableFacets:l})},[w,T,E,D,k,O]),(0,c.useEffect)(()=>{F.current=e.query},[e.query])}var b=(0,c.createContext)(void 0),x=({children:e,url:t,team:n,dataset:r,allowEmptySearch:i=!1,maxResults:a=10,facetDebounceDelayMillis:o=500,enableFacets:s=!0,coverageDepth:l=500,removeDuplicates:d=!0,enableCoverage:f=!0,initialCoverageSetup:m={},enableDebugLogs:h=!1,preAuthenticatedToken:g})=>{let _=(0,c.useRef)(!1),v=(0,c.useRef)(a),[x,S]=(0,c.useState)({query:``,results:null,isLoading:!1,resultsSuppressed:!i,facetDebounceDelayMillis:o,filterableFields:[],facetableFields:[],sortableFields:[],fieldTypes:{},filters:{},valueMatch:{},rangeFilters:{},bucketFilters:{},filterRevision:0,fieldsSeeded:!1,facetStats:{},rangeBounds:{},searchSettings:{maxNumberOfRecordsToReturn:a,coverageDepth:l,enableCoverage:f,removeDuplicates:d,minimumScore:0,showScore:!0,placeholderText:`Type to search`,coverageSetup:{coverWholeQuery:!0,coverWholeWords:!0,coverFuzzyWords:!0,coverJoinedWords:!0,coverPrefixSuffix:!0,truncate:!0,includePatternMatches:!0,minWordSize:2,levenshteinMaxWordSize:20,truncateWordHitLimit:1,truncateWordHitTolerance:0,truncationScore:65024,...m}}});(0,c.useEffect)(()=>{h&&console.log(`SearchContext mounted on client`)},[h]),(0,c.useEffect)(()=>{S(e=>({...e,facetDebounceDelayMillis:o}))},[o]);let[C]=(0,c.useState)(s),w=p({url:t,team:n,dataset:r,preAuthenticatedToken:g,enableDebugLogs:h}),T=(0,c.useCallback)((e,t={})=>{if(!w.token)throw Error(`No authentication token available`);return fetch(e,{...t,headers:{...t.headers,Authorization:`Bearer ${w.token}`}})},[w.token]);y({state:x,setState:S,authenticatedFetch:T,auth:w,url:t,team:n,dataset:r,allowEmptySearch:i,facetsEnabled:C,enableDebugLogs:h,shouldFetchMore:_});let E=(0,c.useCallback)(e=>{S(t=>{let n=Object.keys(t.filters).length>0,r=Object.keys(t.rangeFilters).length>0,i=Object.keys(t.bucketFilters).length>0;return{...t,query:e,filters:n?{}:t.filters,rangeFilters:r?{}:t.rangeFilters,bucketFilters:i?{}:t.bucketFilters,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:v.current}}})},[]),D=(0,c.useCallback)(e=>{S(t=>({...t,facetDebounceDelayMillis:e}))},[]),O=(0,c.useCallback)(e=>{typeof e.maxNumberOfRecordsToReturn==`number`&&(v.current=e.maxNumberOfRecordsToReturn),S(t=>{let n={...t.searchSettings,...e};return e.coverageSetup?n.coverageSetup={...t.searchSettings.coverageSetup,...e.coverageSetup}:n.coverageSetup=t.searchSettings.coverageSetup,{...t,searchSettings:n}})},[]),k=(0,c.useCallback)(e=>{_.current=!0,S(t=>({...t,searchSettings:{...t.searchSettings,maxNumberOfRecordsToReturn:e}}))},[]),A=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i={...r.filters},a=i[e]||[],o=a.includes(t)?a.filter(e=>e!==t):n?[t]:[...a,t];return o.length?i[e]=o:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+1}})},[]),j=(0,c.useCallback)((e,t)=>{S(n=>n.valueMatch[e]===t?n:{...n,valueMatch:{...n.valueMatch,[e]:t}})},[]),M=(0,c.useCallback)((e,t,n)=>{S(r=>({...r,rangeFilters:{...r.rangeFilters,[e]:{min:t,max:n}},filterRevision:r.filterRevision+1}))},[]),N=(0,c.useCallback)(()=>{S(e=>({...e,filters:{},rangeFilters:{},bucketFilters:{},filterRevision:e.filterRevision+1}))},[]),P=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.filters},a=(i[e]||[]).filter(e=>e!==t);return a.length>0?i[e]=a:delete i[e],{...r,filters:i,filterRevision:r.filterRevision+ +!!n}})},[]),F=(0,c.useCallback)((e,t=!0)=>{S(n=>{if(!(e in n.rangeFilters))return n;let r={...n.rangeFilters};return delete r[e],{...n,rangeFilters:r,filterRevision:n.filterRevision+ +!!t}})},[]),I=(e,t)=>e.min===t.min&&e.max===t.max,L=(0,c.useCallback)((e,t,n=!1)=>{S(r=>{let i=r.bucketFilters[e]??[],a=i.some(e=>I(e,t))?i.filter(e=>!I(e,t)):n?[t]:[...i,t],o={...r.bucketFilters};return a.length>0?o[e]=a:delete o[e],{...r,bucketFilters:o,filterRevision:r.filterRevision+1}})},[]),R=(0,c.useCallback)((e,t,n=!0)=>{S(r=>{let i={...r.bucketFilters},a=t?(i[e]??[]).filter(e=>!I(e,t)):[];return a.length>0?i[e]=a:delete i[e],{...r,bucketFilters:i,filterRevision:r.filterRevision+ +!!n}})},[]),z=(0,c.useCallback)((e,t)=>{S(n=>({...n,sortBy:e||void 0,sortAscending:e?t:void 0}))},[]);return(0,u.jsx)(b.Provider,{value:{state:x,isFetchingInitial:w.isFetchingInitial||!x.fieldsSeeded,authError:w.authError??void 0,allowEmptySearch:i,url:t,team:n,dataset:r,authenticatedFetch:T,setQuery:E,toggleFilter:A,setValueMatch:j,setRangeFilter:M,resetFilters:N,resetSingleFilter:P,resetRangeFilter:F,toggleBucketFilter:L,resetBucketFilter:R,setSort:z,setDebounceDelay:D,setSearchSettings:O,fetchMoreResults:k},children:e})},S=()=>{let e=(0,c.useContext)(b);if(!e)throw Error(`useSearchContext must be used within a SearchProvider`);return e},C=({className:e=``,autoFocus:t=!1,inputSize:n=`default`,showClear:r=!0,showFocus:i=!1,...a})=>{let{state:{query:o,filters:s,rangeFilters:c,searchSettings:l},setQuery:f}=S();Object.keys(s).length>0||Object.keys(c).length;let p=o.length>0;return(0,u.jsx)(d.SearchField,{type:`text`,value:o,onChange:e=>f(e.target.value),placeholder:l.placeholderText,autoFocus:t,className:e,showSearchIcon:!0,inputSize:n,showFocusBorder:i,...a,children:r&&p&&(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>f(``),"aria-label":`Clear search`,children:`Clear`})})},w={placeholder:`_placeholder_ee9qi_1`,invalid:`_invalid_ee9qi_11`},T={row:`_row_1i201_1`,content:`_content_1i201_19`,indexNumber:`_indexNumber_1i201_31`,scoreNumber:`_scoreNumber_1i201_39`,skeletonBars:`_skeletonBars_1i201_53`,skeletonBarLg:`_skeletonBarLg_1i201_59`,fade:`_fade_1i201_1`,skeletonBarSm:`_skeletonBarSm_1i201_66`},E=({skeleton:e=!1,index:t,score:n,showScore:r=!1,children:i,skeletonDelay:a=0,skeletonWidths:o=[62,38]})=>(0,u.jsxs)(`div`,{className:T.row,children:[t!==void 0&&(0,u.jsx)(`div`,{className:T.indexNumber,children:t}),(0,u.jsx)(`div`,{className:T.content,children:e?(0,u.jsxs)(`div`,{className:T.skeletonBars,children:[(0,u.jsx)(`div`,{className:T.skeletonBarLg,style:{width:`${o[0]}%`,animationDelay:`${a}s`}}),(0,u.jsx)(`div`,{className:T.skeletonBarSm,style:{width:`${o[1]}%`,animationDelay:`${a+.05}s`}})]}):i}),r&&n!==void 0&&(0,u.jsx)(`div`,{className:T.scoreNumber,children:n})]}),D={wrapper:`_wrapper_81m3c_6`,skeletonAppear:`_skeletonAppear_81m3c_1`},O=[[62,38],[75,45],[58,33],[70,42],[65,50],[55,35],[72,40],[60,30]],k=({rows:e=6})=>(0,u.jsx)(`div`,{className:D.wrapper,children:Array.from({length:e}).map((e,t)=>(0,u.jsx)(E,{skeleton:!0,skeletonDelay:t*.1,skeletonWidths:O[t%O.length]},t))}),A=/^\[\s*(?:'[^']*'(?:\s*,\s*'[^']*')*)?\s*\]$/;function j(e){let t=e.trim();if(!t.startsWith(`[`)||!t.endsWith(`]`))return;try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(e=>String(e))}catch{}if(!A.test(t))return;let n=[],r=/'([^']*)'/g,i;for(;(i=r.exec(t))!==null;)n.push(i[1]);return n}var M=({fields:e,resultsPerPage:t,parseArrayStrings:n=!1,children:r})=>{let{state:{results:i,resultsSuppressed:a,searchSettings:o,truncationIndex:s,query:l,error:p},isFetchingInitial:m,authError:h,allowEmptySearch:g,fetchMoreResults:_}=S(),v=t??30,[y,b]=(0,c.useState)(v),x=(0,c.useRef)(0),C=(0,c.useRef)(``);(0,c.useEffect)(()=>{let e=l!==C.current;(!i||i.length<x.current||e)&&b(v),x.current=i?.length??0,C.current=l},[i,v,l]);let T=i&&i.length>y,D=()=>{let e=y+v;b(e),i&&e>=i.length&&(!s||s===-1||s>i.length)&&_(i.length+v)};if(m)return g?(0,u.jsx)(k,{rows:v}):(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})});let O=h??p;return O?(0,u.jsx)(`div`,{className:w.invalid,role:`alert`,children:(0,u.jsx)(`p`,{children:O})}):a||i===null?(0,u.jsx)(`div`,{className:w.placeholder,children:(0,u.jsx)(f.Indx,{size:200,color:`var(--lv5)`})}):i.length===0?(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`No results found.`})}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{children:(i??[]).slice(0,y).map((t,i)=>{let a=t.document,s=t.score,c;try{c=typeof a==`string`?JSON.parse(a):a}catch{return(0,u.jsx)(`div`,{className:w.invalid,children:(0,u.jsx)(`p`,{children:`Invalid JSON`})},i)}let l;if(e&&e.length>0){l={};for(let t of e)t in c&&(l[t]=c[t])}else l={...c};if(n)for(let e in l){let t=l[e];if(typeof t==`string`){let n=j(t);n&&(l[e]=n)}}return(0,u.jsx)(E,{index:i,score:s,showScore:o.showScore,children:r(l)},i)})}),T&&(0,u.jsx)(`div`,{style:{textAlign:`center`,marginTop:`20px`},children:(0,u.jsx)(d.Button,{variant:`secondary`,size:`micro`,onClick:D,children:l.trim()===``?`Load more`:s!==-1&&s!==void 0&&s>0?`Load results ${y+1}-${Math.min(y+v,i.length,s)} of ${s}`:`Load more`})})]})},N={row:`_row_ujwhc_1`,title:`_title_ujwhc_8`},P=({variant:e=`default`,children:t})=>(0,u.jsx)(`div`,{className:[N.row,e===`title`?N.title:``].filter(Boolean).join(` `),children:t}),F={bar:`_bar_4nxla_12`,skeletonAppear:`_skeletonAppear_4nxla_1`,fade:`_fade_4nxla_1`,listRows:`_listRows_4nxla_19`,sliderArea:`_sliderArea_4nxla_25`,sliderTrack:`_sliderTrack_4nxla_32`,inputRow:`_inputRow_4nxla_40`,inputBar:`_inputBar_4nxla_45`,histogramRow:`_histogramRow_4nxla_55`},I=[65,80,55,72,60,75,50,68],L=({title:e,rows:t=5,variant:n=`list`,withHistogram:r=!1,collapsible:i=!0,startCollapsed:a=!1})=>(0,u.jsx)(d.FilterPanelBase,{title:e,collapsible:i,collapsed:a,children:n===`slider`?(0,u.jsxs)(`div`,{className:F.sliderArea,children:[r&&(0,u.jsx)(`div`,{className:F.histogramRow}),(0,u.jsx)(`div`,{className:F.sliderTrack}),(0,u.jsxs)(`div`,{className:F.inputRow,children:[(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.1s`}}),(0,u.jsx)(`div`,{className:F.inputBar,style:{animationDelay:`0.15s`}})]})]}):(0,u.jsx)(`div`,{className:F.listRows,children:Array.from({length:t}).map((e,t)=>(0,u.jsx)(`div`,{className:F.bar,style:{width:`${I[t%I.length]}%`,animationDelay:`${t*.05}s`}},t))})}),R={list:`_list_18vbb_2`,count:`_count_18vbb_7`,countValue:`_countValue_18vbb_17`,chip:`_chip_18vbb_22`,chipLabel:`_chipLabel_18vbb_32`,grid:`_grid_18vbb_40`,active:`_active_18vbb_54`},z=({field:e,label:t,preserveBlankFacetState:n=!1,preserveBlankFacetStateOrder:r=!1,sortFacetsBy:i=`histogram`,limit:a=10,collapsible:o=!0,startCollapsed:s=!1,control:l,displayType:f,layout:p=`list`,showActivePanel:m=!1,showCount:h=!0,showNull:g=!1,match:_=`all`,displayIfEmptyQuery:v=!0,displayCondition:y=e=>!0})=>{let{state:{facets:b,filterableFields:x,facetableFields:C,filters:w,query:T},toggleFilter:E,setValueMatch:D,isFetchingInitial:O,allowEmptySearch:k}=S(),A=l??f??`checkbox`,j=A===`radio`?`any`:_;(0,c.useEffect)(()=>{D(e,j)},[e,j,D]);let M=(0,c.useRef)(null),[N,P]=(0,c.useState)(a);if((0,c.useEffect)(()=>{P(a)},[b?.[e],a]),!k&&!T)return null;if(O||!b)return A===`toggle`?(0,u.jsx)(L,{rows:1,collapsible:!1}):(0,u.jsx)(L,{title:t,rows:Math.min(a,6),collapsible:o,startCollapsed:s});if(!y({query:T??``,filters:w,facets:b})||!v&&!T&&Object.keys(w).length<1)return null;if(!x?.includes(e)||!C?.includes(e)){let t=[];return x?.includes(e)||t.push(`filterable`),C?.includes(e)||t.push(`facetable`),(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing `,t.join(` and `),`.`]})})}let F=b?.[e]??(A===`toggle`?[]:void 0);if(!F||!Array.isArray(F))return null;let I=w?.[e]??[];n&&!M.current&&F.length>0&&(M.current=F.reduce((e,t)=>(e[t.key]=t.value,e),{}));let z=new Map;n&&M.current&&Object.keys(M.current).forEach(e=>{z.set(e,0)}),F.forEach(e=>{z.set(e.key,e.value)});let B=new Set([`true`,`false`,`null`]),V=Array.from(z.keys()),H=A===`toggle`&&(V.length>0&&V.every(e=>B.has(e))||V.length===0&&I.length>0);if(H&&z.has(`null`)){let e=z.get(`null`)??0,t=z.get(`false`)??0;z.set(`false`,t+e),z.delete(`null`)}if(A===`toggle`&&!H)return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsx)(`div`,{className:R.count,children:(0,u.jsx)(d.ToggleSwitch,{label:t,checked:!1,onChange:()=>{},disabled:!0})})});if(H){let n=z.get(`true`),r=typeof n==`number`?n:null,i=I.includes(`true`),a=r===0&&!i,o=h&&(r??0)>0?`${r}`:``;return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.ToggleSwitch,{label:t,checked:i,onChange:()=>E(e,`true`),disabled:a}),` `,o]})})}let U=Array.from(z.entries());if(g||(U=U.filter(([e])=>e!==`null`)),U.length===0&&!n)return null;if(!r)if(i===`alphabetical`){let e=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([e],[t])=>e.localeCompare(t)),t=U.filter(([,e])=>e===0||e===null).sort(([e],[t])=>e.localeCompare(t));U=[...e,...t]}else if(i===`numeric`){let e=(e,t)=>{let n=Number(e),r=Number(t);return!isNaN(n)&&!isNaN(r)?n-r:e.localeCompare(t)},t=U.filter(([,e])=>typeof e==`number`&&e>0).sort(([t],[n])=>e(t,n)),n=U.filter(([,e])=>e===0||e===null).sort(([t],[n])=>e(t,n));U=[...t,...n]}else{let e=U.filter(([,e])=>typeof e==`number`&&e>0),t=U.filter(([,e])=>e===0||e===null);U=[...e,...t]}let W=typeof a==`number`&&U.length>a,G=W?U.slice(0,N):U,K=(t,n)=>{let r=I.includes(t),i=n===0,a=h&&(n??0)>0?` (${n})`:``,o=h&&(n??0)>0?n:``,s=()=>E(e,t,A===`radio`);switch(A){case`button`:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:t,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:t})}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:s,disabled:i,size:`micro`,className:R.chip,title:`${t}${a}`,children:(0,u.jsx)(`span`,{className:R.chipLabel,children:`${t}${a}`})});case`toggle`:return(0,u.jsx)(d.ToggleSwitch,{label:t,checked:r,onChange:s,disabled:i});case`radio`:{let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t}`,name:e,value:t,label:p===`grid`?`${t}${a}`:t,checked:r,onChange:s,disabled:i});return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[n,(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):n}default:return p===`list`?(0,u.jsxs)(`div`,{className:R.count,children:[(0,u.jsx)(d.Checkbox,{label:t,score:``,checked:r,onChange:s,disabled:i}),(0,u.jsx)(`span`,{className:R.countValue,children:o})]}):(0,u.jsx)(d.Checkbox,{label:t,score:a,checked:r,onChange:s,disabled:i})}};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:o,collapsed:o?s:!1,className:m&&I.length>0?R.active:void 0,children:(0,u.jsxs)(`ul`,{className:p===`grid`?R.grid:R.list,style:{listStyle:`none`,padding:0,margin:0},children:[G.map(([e,t])=>(0,u.jsx)(`li`,{children:K(e,t)},e)),W&&N<U.length&&(()=>{let e=U.length-N,t=Math.min(50,e);return(0,u.jsx)(`li`,{className:R.toggleItem,children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>P(e=>e+50),children:`Show ${t} more of ${U.length} total`})})})()]})})},B={disabledMessage:`_disabledMessage_adany_1`,histogram:`_histogram_adany_6`,histogramLayer:`_histogramLayer_adany_14`,histogramLive:`_histogramLive_adany_22`,histogramLit:`_histogramLit_adany_23`,histogramFill:`_histogramFill_adany_30`,histogramBar:`_histogramBar_adany_43`,histogramSeparators:`_histogramSeparators_adany_61`,histogramSeparator:`_histogramSeparator_adany_48`,active:`_active_adany_76`};function V(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function H(e){let t=0;for(let n of e)t=Math.max(t,V(n));return t===0?1:Number((10**-t).toFixed(t))}function U(e,t){return Number(e.toFixed(V(t)))}function W(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(V(n)))}var G=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:C,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=S(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(M),V(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,V(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,H=z?n:M,G=z?r:N,K=g?.[e],q=o&&K!==void 0?B.active:void 0,J=K?K.min:M,Y=K?K.max:N,ee=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([J,Y]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(J)),[$,se]=c.default.useState(String(Y)),ce=c.default.useMemo(()=>{let e=V(R);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[R,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([J,Y]),re(!1),ae(!1)},[J,Y,e]);let pe=c.default.useCallback(e=>{let t=U(Math.min(e[0],e[1]-R),R);return[t,U(Math.max(e[1]-R,t),R)]},[R]),me=c.default.useCallback(e=>{if(z)return;let[t,n]=pe(e);Z([Math.max(M,Math.min(I,t)),Math.max(F,Math.min(N,n))])},[z,pe,M,N,F,I]),he=c.default.useCallback(t=>{if(z)return;let[n,r]=pe(t),i=Math.max(M,Math.min(I,n)),a=Math.max(F,Math.min(N,r));i===M&&a===N?(Z([M,N]),E(e,!0)):Z([i,a])},[z,pe,M,N,F,I,e,E]),ge=c.default.useRef(null),_e=c.default.useCallback((t,n)=>{if(z)return;let r=ge.current;if(K&&r&&r.start===t&&r.last===n){ge.current=null,Z([M,N]),E(e,!0);return}let i=W(Math.max(M,F,t),M,R),a=Math.max(i,W(Math.min(N,I,n),M,R));ge.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,R,e,E]),ve=c.default.useCallback(()=>{if(z)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[0]));return}let n=Math.max(M,Math.min(I,t));n<X[1]?Z([n,X[1]]):Z([M,X[1]]),oe(String(n<X[1]?n:M))},[z,Q,X,M,I]),ye=c.default.useCallback(()=>{if(z)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){se(String(X[1]));return}let n=Math.max(F,Math.min(N,t));n>X[0]?Z([X[0],n]):Z([X[0],N]),se(String(n>X[0]?n:N))},[z,$,X,F,N]),be=e=>t=>{t.key===`Enter`&&e()},[xe,Se]=c.default.useState(null),Ce=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Ce.current&&Ce.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(Ce.current=t,Se(r))},[M,N,y,e,f]);let we=c.default.useMemo(()=>{if(!f||!xe||xe.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=xe.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:U(a-R,R);return{bucketStart:i,bucketEnd:a,count:s,last:c,barEnd:U(c+R,R)}}).map((e,t,n)=>({...e,span:(t+1<n.length?n[t+1].bucketStart:e.barEnd)-e.bucketStart}))},[f,xe,M,N,p,R]),Te=c.default.useMemo(()=>Math.max(...we.map(e=>e.count),1),[we]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!C?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&we.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&we.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[H,G],n=Math.max(le,e),r=Math.min(ue,t),i=G+R,a=i-H||1,o=e=>Math.max(0,Math.min(1,(e-H)/a)),s=e=>Math.max(0,Math.min(1,(i-(e+R))/a)),c=o(n),l=r<n?1-c:s(r),d=e=>`calc(10px + (100% - 20px) * ${e})`,f=`inset(0 ${d(l)} 0 ${d(c)})`,p=`inset(0 ${d(s(t))} 0 ${d(o(e))})`,m=n=>n.last<e||n.bucketStart>t,h=we.slice(1).map(e=>d((e.bucketStart-H)/a)),g=we.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Te*20))}));return(0,u.jsxs)(`div`,{className:B.histogram,children:[(0,u.jsx)(`div`,{className:B.histogramLayer,children:g.map((e,t)=>(0,u.jsx)(`button`,{type:`button`,className:B.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>_e(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:p},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:f},children:g.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t))}),(0,u.jsx)(`div`,{className:B.histogramSeparators,"aria-hidden":`true`,children:h.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:H,max:U(G+R,R),step:R,stepMarks:h,value:z?[H,U(G+R,R)]:[W(le,H,R),W(ue+R,H,R)],isRange:!0,onChange:e=>me(e),onFinalChange:e=>he(e),disabled:z,activeMin:F,activeMax:U(I+R,R),isFaceted:te,highlightFaceted:ee,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:ve,onKeyDown:be(ve),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ye,onKeyDown:be(ye),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},K={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function q(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var J=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:C},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=S(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return H(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],U(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=U(r+n,N))e.push(i(U(r,N),U(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(L,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!C)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:K.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),R=P.map(e=>({bucket:e,count:F?q(e,O):null}));if(l||(R=R.filter(e=>e.count!==0||I(e.bucket))),R.length===0)return null;let z=R.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[n,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:K.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[e,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&k.length>0?K.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?K.grid:K.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<R.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),te=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),X=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Z(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=S(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(X,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var ne={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},re=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=S();if(l)return(0,u.jsx)(L,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:ne.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=S(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var Q=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function oe(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=Z,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=Q,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=$,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=oe;
|
package/dist/index.es.js
CHANGED
|
@@ -6,10 +6,10 @@ import { Button as m, Checkbox as h, FilterPanelBase as g, InputField as _, Radi
|
|
|
6
6
|
import { ArrowDown as C, ArrowRight as w, Indx as T, X_or_error as E } from "@indxsearch/pixl";
|
|
7
7
|
//#region src/context/useIndxAuth.ts
|
|
8
8
|
function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugLogs: i = !1 }) {
|
|
9
|
-
let [a, s] = l(null), [c, d] = l(!0), [f, p] = l([]), [m, h] = l([]), [g, _] = l([]), [v, y] = l({}), [b, x] = l({}), [S, C] = l(
|
|
9
|
+
let [a, s] = l(null), [c, d] = l(!0), [f, p] = l([]), [m, h] = l([]), [g, _] = l([]), [v, y] = l({}), [b, x] = l({}), [S, C] = l({}), [w, T] = l(0), [E, D] = l(null);
|
|
10
10
|
return o(() => {
|
|
11
11
|
(async () => {
|
|
12
|
-
|
|
12
|
+
D(null);
|
|
13
13
|
try {
|
|
14
14
|
if (!r) throw console.error("[Auth] ❌ Missing bearer token"), console.error("[Auth] 💡 Pass preAuthenticatedToken to SearchProvider (create a token on the Indx Dashboard)"), Error("A bearer token is required. Check console for instructions.");
|
|
15
15
|
if (!e) throw console.error("[Auth] ❌ Missing INDX server URL"), console.error("[Auth] 💡 Pass a url to SearchProvider"), Error("INDX server URL is required. Check console for instructions.");
|
|
@@ -36,21 +36,28 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
|
|
|
36
36
|
i && console.log("[Auth] 📊 Dataset status:", l), s(a), i && console.log("[Auth] ✅ Dataset session established"), l.systemState !== void 0 && l.systemState !== u.Ready && (console.warn("[Auth] ⚠️ Dataset is not ready yet. Current state:", u[l.systemState]), console.warn("[Auth] 💡 Wait for indexing to complete before searching"));
|
|
37
37
|
let d = l.documentCount ?? l.numberOfRecords ?? 0;
|
|
38
38
|
d === 0 ? (console.warn("[Auth] ⚠️ Dataset \"" + n + "\" is empty (0 records)"), console.warn("[Auth] 💡 Add documents to your dataset before searching"), console.warn("[Auth] 💡 Search will work but return no results")) : i && console.log("[Auth] ✅ Dataset has", d, "records");
|
|
39
|
-
let [f, m, g] = await Promise.all([
|
|
39
|
+
let [f, m, g, v] = await Promise.all([
|
|
40
40
|
o(`${e}/api/teams/${t}/datasets/${n}/fields/filterable`),
|
|
41
41
|
o(`${e}/api/teams/${t}/datasets/${n}/fields/facetable`),
|
|
42
|
-
o(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`)
|
|
42
|
+
o(`${e}/api/teams/${t}/datasets/${n}/fields/sortable`),
|
|
43
|
+
o(`${e}/api/teams/${t}/datasets/${n}/fields/configuration`).catch(() => null)
|
|
43
44
|
]);
|
|
44
45
|
if (!f.ok) throw console.error("[Auth] ❌ GetFilterableFields failed:", f.status, await f.text()), Error("Failed to get filterable fields. Check console for details.");
|
|
45
46
|
if (!m.ok) throw console.error("[Auth] ❌ GetFacetableFields failed:", m.status, await m.text()), Error("Failed to get facetable fields. Check console for details.");
|
|
46
47
|
if (!g.ok) throw console.error("[Auth] ❌ GetSortableFields failed:", g.status, await g.text()), Error("Failed to get sortable fields. Check console for details.");
|
|
47
|
-
let [
|
|
48
|
+
let [b, S, w] = await Promise.all([
|
|
48
49
|
f.json().catch((e) => (console.error("Failed to parse GetFilterableFields response:", e), [])),
|
|
49
50
|
m.json().catch((e) => (console.error("Failed to parse GetFacetableFields response:", e), [])),
|
|
50
51
|
g.json().catch((e) => (console.error("Failed to parse GetSortableFields response:", e), []))
|
|
51
52
|
]);
|
|
52
|
-
p(
|
|
53
|
-
let
|
|
53
|
+
p(b || []), h(S || []), _(w || []), T(d);
|
|
54
|
+
let E = {};
|
|
55
|
+
if (v?.ok) {
|
|
56
|
+
let e = await v.json().catch((e) => (console.error("Failed to parse GetFieldConfiguration response:", e), []));
|
|
57
|
+
for (let t of e ?? []) t?.fieldName && t?.fieldType && (E[t.fieldName] = t.fieldType);
|
|
58
|
+
} else i && console.log("[Auth] fields/configuration not available", v?.status, "- every selected value will be sent as a value filter");
|
|
59
|
+
y(E);
|
|
60
|
+
let D = { facets: {} };
|
|
54
61
|
try {
|
|
55
62
|
let r = await fetch(`${e}/api/teams/${t}/datasets/${n}/search`, {
|
|
56
63
|
method: "POST",
|
|
@@ -64,25 +71,25 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
|
|
|
64
71
|
enableFacets: !0
|
|
65
72
|
})
|
|
66
73
|
});
|
|
67
|
-
r.ok ?
|
|
74
|
+
r.ok ? D = await r.json().catch((e) => (console.warn("Failed to parse blank search response:", e), { facets: {} })) : (console.warn("Blank search failed:", r.status, r.statusText), console.warn("Continuing without initial facet data - facets will be populated after first search"));
|
|
68
75
|
} catch (e) {
|
|
69
76
|
console.warn("Blank search error:", e), console.warn("Continuing without initial facet data - facets will be populated after first search");
|
|
70
77
|
}
|
|
71
|
-
let
|
|
72
|
-
if (
|
|
73
|
-
for (let [e, t] of Object.entries(
|
|
78
|
+
let O = {};
|
|
79
|
+
if (D.facets) {
|
|
80
|
+
for (let [e, t] of Object.entries(D.facets)) if (Array.isArray(t) && t.length > 0) {
|
|
74
81
|
let n = t.map((e) => Number(e.key)).filter((e) => !isNaN(e));
|
|
75
|
-
n.length > 0 && (
|
|
82
|
+
n.length > 0 && (O[e] = {
|
|
76
83
|
min: Math.min(...n),
|
|
77
84
|
max: Math.max(...n)
|
|
78
85
|
});
|
|
79
86
|
}
|
|
80
87
|
}
|
|
81
|
-
let
|
|
82
|
-
if (
|
|
83
|
-
|
|
88
|
+
let k = {};
|
|
89
|
+
if (D.facets) for (let [e, t] of Object.entries(D.facets)) Array.isArray(t) && (k[e] = t.map((e) => e.key));
|
|
90
|
+
x(O), C(k), i && console.log("[Auth] ✅ Initialization complete");
|
|
84
91
|
} catch (t) {
|
|
85
|
-
console.error("[Auth] ❌ Initialization failed:", t), (t instanceof Error || typeof t == "object" && t && "message" in t) && console.error("[Auth] 💡 Error:", t.message), t instanceof TypeError && t.message.includes("fetch") && (console.error("[Auth] ❌ Network error - cannot connect to INDX server"), console.error("[Auth] 💡 Check if the server is running at:", e), console.error("[Auth] 💡 Check the url you passed to SearchProvider"), console.error("[Auth] 💡 For local development, it should be: http://localhost:5001")),
|
|
92
|
+
console.error("[Auth] ❌ Initialization failed:", t), (t instanceof Error || typeof t == "object" && t && "message" in t) && console.error("[Auth] 💡 Error:", t.message), t instanceof TypeError && t.message.includes("fetch") && (console.error("[Auth] ❌ Network error - cannot connect to INDX server"), console.error("[Auth] 💡 Check if the server is running at:", e), console.error("[Auth] 💡 Check the url you passed to SearchProvider"), console.error("[Auth] 💡 For local development, it should be: http://localhost:5001")), D(t instanceof Error ? t.message : String(t));
|
|
86
93
|
} finally {
|
|
87
94
|
d(!1);
|
|
88
95
|
}
|
|
@@ -94,13 +101,14 @@ function D({ url: e, team: t, dataset: n, preAuthenticatedToken: r, enableDebugL
|
|
|
94
101
|
]), {
|
|
95
102
|
token: a,
|
|
96
103
|
isFetchingInitial: c,
|
|
97
|
-
authError:
|
|
98
|
-
initialFacetStats:
|
|
99
|
-
initialFacetKeys:
|
|
104
|
+
authError: E,
|
|
105
|
+
initialFacetStats: b,
|
|
106
|
+
initialFacetKeys: S,
|
|
100
107
|
filterableFields: f,
|
|
101
108
|
facetableFields: m,
|
|
102
109
|
sortableFields: g,
|
|
103
|
-
|
|
110
|
+
fieldTypes: v,
|
|
111
|
+
totalDocumentCount: w
|
|
104
112
|
};
|
|
105
113
|
}
|
|
106
114
|
//#endregion
|
|
@@ -154,23 +162,29 @@ async function A(e, t, n, r, i, a) {
|
|
|
154
162
|
}, "CombineFilters", n, r, i, a);
|
|
155
163
|
return o;
|
|
156
164
|
}
|
|
157
|
-
async function ee(e, t, n, r, i, a, o = {}, s = {}) {
|
|
158
|
-
let
|
|
165
|
+
async function ee(e, t, n, r, i, a, o = {}, s = {}, c = {}) {
|
|
166
|
+
let l = Object.entries(e ?? {}).filter(([, e]) => e.length > 0), u = Object.entries(t ?? {}), d = Object.entries(s ?? {}).filter(([, e]) => e.length > 0), f = (e, { min: t, max: o }) => k("range", {
|
|
159
167
|
fieldName: e,
|
|
160
168
|
lowerLimit: t,
|
|
161
169
|
upperLimit: o
|
|
162
|
-
}, `Range filter '${e}'`, n, r, i, a),
|
|
163
|
-
|
|
170
|
+
}, `Range filter '${e}'`, n, r, i, a), p = (e, t) => {
|
|
171
|
+
let o = c[e] === "Number" ? Number(t) : NaN;
|
|
172
|
+
return Number.isFinite(o) ? f(e, {
|
|
173
|
+
min: o,
|
|
174
|
+
max: o
|
|
175
|
+
}) : k("value", {
|
|
164
176
|
fieldName: e,
|
|
165
177
|
value: t
|
|
166
|
-
}, `Value filter '${e}'`, n, r, i, a)
|
|
167
|
-
|
|
168
|
-
Promise.all(
|
|
178
|
+
}, `Value filter '${e}'`, n, r, i, a);
|
|
179
|
+
}, [m, h, g] = await Promise.all([
|
|
180
|
+
Promise.all(l.map(async ([e, t]) => A(await Promise.all(t.map((t) => p(e, t))), o[e] === "any" ? "or" : "and", n, r, i, a))),
|
|
181
|
+
Promise.all(u.map(([e, t]) => f(e, t))),
|
|
182
|
+
Promise.all(d.map(async ([e, t]) => A(await Promise.all(t.map((t) => f(e, t))), "or", n, r, i, a)))
|
|
169
183
|
]);
|
|
170
184
|
return A([
|
|
171
|
-
...
|
|
172
|
-
...
|
|
173
|
-
...
|
|
185
|
+
...m,
|
|
186
|
+
...h,
|
|
187
|
+
...g
|
|
174
188
|
], "and", n, r, i, a);
|
|
175
189
|
}
|
|
176
190
|
//#endregion
|
|
@@ -192,6 +206,7 @@ function M({ state: e, setState: t, authenticatedFetch: n, auth: r, url: a, team
|
|
|
192
206
|
filterableFields: r.filterableFields,
|
|
193
207
|
facetableFields: r.facetableFields,
|
|
194
208
|
sortableFields: r.sortableFields,
|
|
209
|
+
fieldTypes: r.fieldTypes,
|
|
195
210
|
fieldsSeeded: !0
|
|
196
211
|
}));
|
|
197
212
|
}, [
|
|
@@ -214,13 +229,13 @@ function M({ state: e, setState: t, authenticatedFetch: n, auth: r, url: a, team
|
|
|
214
229
|
i = !0;
|
|
215
230
|
}
|
|
216
231
|
try {
|
|
217
|
-
let c = i ? Array.from(new Set([...Object.keys(e.filters).filter((t) => e.valueMatch[t] === "any" && (e.filters[t]?.length ?? 0) > 0), ...Object.keys(e.bucketFilters).filter((t) => (e.bucketFilters[t]?.length ?? 0) > 0)])) : [], [l, ...f] = await Promise.all([ee(e.filters, e.rangeFilters, a, s, u, n, e.valueMatch, e.bucketFilters), ...c.map((t) => ee({
|
|
232
|
+
let c = i ? Array.from(new Set([...Object.keys(e.filters).filter((t) => e.valueMatch[t] === "any" && (e.filters[t]?.length ?? 0) > 0), ...Object.keys(e.bucketFilters).filter((t) => (e.bucketFilters[t]?.length ?? 0) > 0)])) : [], [l, ...f] = await Promise.all([ee(e.filters, e.rangeFilters, a, s, u, n, e.valueMatch, e.bucketFilters, e.fieldTypes), ...c.map((t) => ee({
|
|
218
233
|
...e.filters,
|
|
219
234
|
[t]: []
|
|
220
235
|
}, e.rangeFilters, a, s, u, n, e.valueMatch, {
|
|
221
236
|
...e.bucketFilters,
|
|
222
237
|
[t]: []
|
|
223
|
-
}))]), m = d || e.query.trim() !== "", g = {
|
|
238
|
+
}, e.fieldTypes))]), m = d || e.query.trim() !== "", g = {
|
|
224
239
|
text: e.query,
|
|
225
240
|
enableCoverage: T,
|
|
226
241
|
removeDuplicates: E,
|
|
@@ -437,6 +452,7 @@ var N = n(void 0), P = ({ children: e, url: t, team: n, dataset: r, allowEmptySe
|
|
|
437
452
|
filterableFields: [],
|
|
438
453
|
facetableFields: [],
|
|
439
454
|
sortableFields: [],
|
|
455
|
+
fieldTypes: {},
|
|
440
456
|
filters: {},
|
|
441
457
|
valueMatch: {},
|
|
442
458
|
rangeFilters: {},
|
|
@@ -1111,17 +1127,16 @@ var W = ({ fields: e, resultsPerPage: t, parseArrayStrings: n = !1, children: r
|
|
|
1111
1127
|
})
|
|
1112
1128
|
});
|
|
1113
1129
|
}, X = {
|
|
1114
|
-
disabledMessage: "
|
|
1115
|
-
histogram: "
|
|
1116
|
-
histogramLayer: "
|
|
1117
|
-
histogramLive: "
|
|
1118
|
-
histogramLit: "
|
|
1119
|
-
histogramFill: "
|
|
1120
|
-
histogramBar: "
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
active: "_active_g8ib6_83"
|
|
1130
|
+
disabledMessage: "_disabledMessage_adany_1",
|
|
1131
|
+
histogram: "_histogram_adany_6",
|
|
1132
|
+
histogramLayer: "_histogramLayer_adany_14",
|
|
1133
|
+
histogramLive: "_histogramLive_adany_22",
|
|
1134
|
+
histogramLit: "_histogramLit_adany_23",
|
|
1135
|
+
histogramFill: "_histogramFill_adany_30",
|
|
1136
|
+
histogramBar: "_histogramBar_adany_43",
|
|
1137
|
+
histogramSeparators: "_histogramSeparators_adany_61",
|
|
1138
|
+
histogramSeparator: "_histogramSeparator_adany_48",
|
|
1139
|
+
active: "_active_adany_76"
|
|
1125
1140
|
};
|
|
1126
1141
|
//#endregion
|
|
1127
1142
|
//#region src/utils/numeric.ts
|
|
@@ -1219,34 +1234,41 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1219
1234
|
t
|
|
1220
1235
|
]);
|
|
1221
1236
|
let ge = e.useCallback((e) => {
|
|
1222
|
-
|
|
1237
|
+
let t = Z(Math.min(e[0], e[1] - z), z);
|
|
1238
|
+
return [t, Z(Math.max(e[1] - z, t), z)];
|
|
1239
|
+
}, [z]), _e = e.useCallback((e) => {
|
|
1240
|
+
if (B) return;
|
|
1241
|
+
let [t, n] = ge(e);
|
|
1242
|
+
Y([Math.max(N, Math.min(R, t)), Math.max(L, Math.min(P, n))]);
|
|
1223
1243
|
}, [
|
|
1224
1244
|
B,
|
|
1245
|
+
ge,
|
|
1225
1246
|
N,
|
|
1226
1247
|
P,
|
|
1227
1248
|
L,
|
|
1228
1249
|
R
|
|
1229
|
-
]),
|
|
1250
|
+
]), ve = e.useCallback((e) => {
|
|
1230
1251
|
if (B) return;
|
|
1231
|
-
let n = Math.max(N, Math.min(R,
|
|
1232
|
-
|
|
1252
|
+
let [n, r] = ge(e), i = Math.max(N, Math.min(R, n)), a = Math.max(L, Math.min(P, r));
|
|
1253
|
+
i === N && a === P ? (Y([N, P]), O(t, !0)) : Y([i, a]);
|
|
1233
1254
|
}, [
|
|
1234
1255
|
B,
|
|
1256
|
+
ge,
|
|
1235
1257
|
N,
|
|
1236
1258
|
P,
|
|
1237
1259
|
L,
|
|
1238
1260
|
R,
|
|
1239
1261
|
t,
|
|
1240
1262
|
O
|
|
1241
|
-
]),
|
|
1263
|
+
]), ye = e.useRef(null), be = e.useCallback((e, n) => {
|
|
1242
1264
|
if (B) return;
|
|
1243
|
-
let r =
|
|
1265
|
+
let r = ye.current;
|
|
1244
1266
|
if (U && r && r.start === e && r.last === n) {
|
|
1245
|
-
|
|
1267
|
+
ye.current = null, Y([N, P]), O(t, !0);
|
|
1246
1268
|
return;
|
|
1247
1269
|
}
|
|
1248
1270
|
let i = oe(Math.max(N, L, e), N, z), a = Math.max(i, oe(Math.min(P, R, n), N, z));
|
|
1249
|
-
|
|
1271
|
+
ye.current = {
|
|
1250
1272
|
start: e,
|
|
1251
1273
|
last: n
|
|
1252
1274
|
}, Y([i, a]);
|
|
@@ -1260,7 +1282,7 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1260
1282
|
z,
|
|
1261
1283
|
t,
|
|
1262
1284
|
O
|
|
1263
|
-
]),
|
|
1285
|
+
]), xe = e.useCallback(() => {
|
|
1264
1286
|
if (B) return;
|
|
1265
1287
|
let e = ce.trim(), t = e === "" ? NaN : Number(e);
|
|
1266
1288
|
if (isNaN(t)) {
|
|
@@ -1275,7 +1297,7 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1275
1297
|
J,
|
|
1276
1298
|
N,
|
|
1277
1299
|
R
|
|
1278
|
-
]),
|
|
1300
|
+
]), Se = e.useCallback(() => {
|
|
1279
1301
|
if (B) return;
|
|
1280
1302
|
let e = $.trim(), t = e === "" ? NaN : Number(e);
|
|
1281
1303
|
if (isNaN(t)) {
|
|
@@ -1290,20 +1312,20 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1290
1312
|
J,
|
|
1291
1313
|
L,
|
|
1292
1314
|
P
|
|
1293
|
-
]),
|
|
1315
|
+
]), Ce = (e) => (t) => {
|
|
1294
1316
|
t.key === "Enter" && e();
|
|
1295
|
-
}, [
|
|
1317
|
+
}, [we, Te] = e.useState(null), Ee = e.useRef(null);
|
|
1296
1318
|
e.useEffect(() => {
|
|
1297
1319
|
if (!u) return;
|
|
1298
1320
|
let e = `${N}:${P}`;
|
|
1299
|
-
if (e ===
|
|
1321
|
+
if (e === Ee.current && Ee.current !== null) return;
|
|
1300
1322
|
let n = S?.[t];
|
|
1301
1323
|
if (!Array.isArray(n) || n.length === 0) return;
|
|
1302
1324
|
let r = n.filter((e) => e.value != null && !isNaN(Number(e.key))).map((e) => ({
|
|
1303
1325
|
key: e.key,
|
|
1304
1326
|
value: e.value
|
|
1305
1327
|
}));
|
|
1306
|
-
r.length > 0 && (
|
|
1328
|
+
r.length > 0 && (Ee.current = e, Te(r));
|
|
1307
1329
|
}, [
|
|
1308
1330
|
N,
|
|
1309
1331
|
P,
|
|
@@ -1311,34 +1333,35 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1311
1333
|
t,
|
|
1312
1334
|
u
|
|
1313
1335
|
]);
|
|
1314
|
-
let
|
|
1315
|
-
if (!u || !
|
|
1336
|
+
let De = e.useMemo(() => {
|
|
1337
|
+
if (!u || !we || we.length === 0) return [];
|
|
1316
1338
|
let e = P - N;
|
|
1317
1339
|
if (e <= 0) return [];
|
|
1318
1340
|
let t = d ?? (Math.ceil(e / 20) || 1), n = Math.ceil(e / t);
|
|
1319
1341
|
return Array.from({ length: n }, (e, r) => {
|
|
1320
|
-
let i = N + r * t, a = N + (r + 1) * t, o = r === n - 1, s =
|
|
1342
|
+
let i = N + r * t, a = N + (r + 1) * t, o = r === n - 1, s = we.filter((e) => {
|
|
1321
1343
|
let t = Number(e.key);
|
|
1322
1344
|
return t >= i && (t < a || o && t <= P);
|
|
1323
|
-
}).reduce((e, t) => e + t.value, 0), c = o ? P : Z(a - z, z)
|
|
1345
|
+
}).reduce((e, t) => e + t.value, 0), c = o ? P : Z(a - z, z);
|
|
1324
1346
|
return {
|
|
1325
1347
|
bucketStart: i,
|
|
1326
1348
|
bucketEnd: a,
|
|
1327
1349
|
count: s,
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
barEnd: l,
|
|
1331
|
-
last: c
|
|
1350
|
+
last: c,
|
|
1351
|
+
barEnd: Z(c + z, z)
|
|
1332
1352
|
};
|
|
1333
|
-
})
|
|
1353
|
+
}).map((e, t, n) => ({
|
|
1354
|
+
...e,
|
|
1355
|
+
span: (t + 1 < n.length ? n[t + 1].bucketStart : e.barEnd) - e.bucketStart
|
|
1356
|
+
}));
|
|
1334
1357
|
}, [
|
|
1335
1358
|
u,
|
|
1336
|
-
|
|
1359
|
+
we,
|
|
1337
1360
|
N,
|
|
1338
1361
|
P,
|
|
1339
1362
|
d,
|
|
1340
1363
|
z
|
|
1341
|
-
]),
|
|
1364
|
+
]), Oe = e.useMemo(() => Math.max(...De.map((e) => e.count), 1), [De]);
|
|
1342
1365
|
return u && !A && !w?.includes(t) && console.warn(`RangeFilterPanel: showHistogram=true but field "${t}" is not facetable. Add .Facetable = true to this field.`), A ? /* @__PURE__ */ f(ne, {
|
|
1343
1366
|
title: n,
|
|
1344
1367
|
variant: "slider",
|
|
@@ -1359,67 +1382,64 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1359
1382
|
")."
|
|
1360
1383
|
]
|
|
1361
1384
|
}),
|
|
1362
|
-
u &&
|
|
1363
|
-
u &&
|
|
1364
|
-
let [e, t] = R > L && (L > N || R < P) ? [L, R] : [V, H], n = Math.max(fe, e), r = Math.min(pe, t), i = H - V || 1,
|
|
1365
|
-
className: X.histogramGap,
|
|
1366
|
-
style: { flexGrow: e.gap }
|
|
1367
|
-
}, `gap${t}`) : null, _ = Ee.map((e) => ({
|
|
1385
|
+
u && De.length === 0 && /* @__PURE__ */ f("div", { className: X.histogram }),
|
|
1386
|
+
u && De.length > 0 && (() => {
|
|
1387
|
+
let [e, t] = R > L && (L > N || R < P) ? [L, R] : [V, H], n = Math.max(fe, e), r = Math.min(pe, t), i = H + z, a = i - V || 1, o = (e) => Math.max(0, Math.min(1, (e - V) / a)), s = (e) => Math.max(0, Math.min(1, (i - (e + z)) / a)), c = o(n), l = r < n ? 1 - c : s(r), u = (e) => `calc(10px + (100% - 20px) * ${e})`, d = `inset(0 ${u(l)} 0 ${u(c)})`, m = `inset(0 ${u(s(t))} 0 ${u(o(e))})`, h = (n) => n.last < e || n.bucketStart > t, g = De.slice(1).map((e) => u((e.bucketStart - V) / a)), _ = De.map((e) => ({
|
|
1368
1388
|
...e,
|
|
1369
|
-
height: Math.max(1, Math.ceil(e.count /
|
|
1389
|
+
height: Math.max(1, Math.ceil(e.count / Oe * 20))
|
|
1370
1390
|
}));
|
|
1371
1391
|
return /* @__PURE__ */ p("div", {
|
|
1372
1392
|
className: X.histogram,
|
|
1373
1393
|
children: [
|
|
1374
1394
|
/* @__PURE__ */ f("div", {
|
|
1375
1395
|
className: X.histogramLayer,
|
|
1376
|
-
children: _.map((e, t) =>
|
|
1396
|
+
children: _.map((e, t) => /* @__PURE__ */ f("button", {
|
|
1377
1397
|
type: "button",
|
|
1378
1398
|
className: X.histogramBar,
|
|
1379
1399
|
style: { flexGrow: e.span },
|
|
1380
1400
|
"data-testid": "histogram-bar",
|
|
1381
|
-
disabled: B ||
|
|
1401
|
+
disabled: B || h(e),
|
|
1382
1402
|
"aria-label": `${e.bucketStart} to ${e.last}: ${e.count}`,
|
|
1383
1403
|
title: `${e.bucketStart} to ${e.last}: ${e.count}`,
|
|
1384
|
-
onClick: () =>
|
|
1404
|
+
onClick: () => be(e.bucketStart, e.last),
|
|
1385
1405
|
children: /* @__PURE__ */ f("span", {
|
|
1386
1406
|
className: X.histogramFill,
|
|
1387
1407
|
style: { height: `${e.height}px` }
|
|
1388
1408
|
})
|
|
1389
|
-
}, t)
|
|
1409
|
+
}, t))
|
|
1390
1410
|
}),
|
|
1391
1411
|
/* @__PURE__ */ f("div", {
|
|
1392
1412
|
className: `${X.histogramLayer} ${X.histogramLive}`,
|
|
1393
1413
|
"aria-hidden": "true",
|
|
1394
1414
|
"data-testid": "histogram-live",
|
|
1395
|
-
style: { clipPath:
|
|
1396
|
-
children: _.map((e, t) =>
|
|
1415
|
+
style: { clipPath: m },
|
|
1416
|
+
children: _.map((e, t) => /* @__PURE__ */ f("span", {
|
|
1397
1417
|
className: X.histogramBar,
|
|
1398
1418
|
style: { flexGrow: e.span },
|
|
1399
1419
|
children: /* @__PURE__ */ f("span", {
|
|
1400
1420
|
className: X.histogramFill,
|
|
1401
1421
|
style: { height: `${e.height}px` }
|
|
1402
1422
|
})
|
|
1403
|
-
}, t)
|
|
1423
|
+
}, t))
|
|
1404
1424
|
}),
|
|
1405
1425
|
/* @__PURE__ */ f("div", {
|
|
1406
1426
|
className: `${X.histogramLayer} ${X.histogramLit}`,
|
|
1407
1427
|
"aria-hidden": "true",
|
|
1408
1428
|
"data-testid": "histogram-lit",
|
|
1409
|
-
style: { clipPath:
|
|
1410
|
-
children: _.map((e, t) =>
|
|
1429
|
+
style: { clipPath: d },
|
|
1430
|
+
children: _.map((e, t) => /* @__PURE__ */ f("span", {
|
|
1411
1431
|
className: X.histogramBar,
|
|
1412
1432
|
style: { flexGrow: e.span },
|
|
1413
1433
|
children: /* @__PURE__ */ f("span", {
|
|
1414
1434
|
className: X.histogramFill,
|
|
1415
1435
|
style: { height: `${e.height}px` }
|
|
1416
1436
|
})
|
|
1417
|
-
}, t)
|
|
1437
|
+
}, t))
|
|
1418
1438
|
}),
|
|
1419
1439
|
/* @__PURE__ */ f("div", {
|
|
1420
1440
|
className: X.histogramSeparators,
|
|
1421
1441
|
"aria-hidden": "true",
|
|
1422
|
-
children:
|
|
1442
|
+
children: g.map((e, t) => /* @__PURE__ */ f("span", {
|
|
1423
1443
|
className: X.histogramSeparator,
|
|
1424
1444
|
style: { left: e }
|
|
1425
1445
|
}, t))
|
|
@@ -1431,16 +1451,16 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1431
1451
|
style: { padding: "10px 10px 20px 10px" },
|
|
1432
1452
|
children: /* @__PURE__ */ f(x, {
|
|
1433
1453
|
min: V,
|
|
1434
|
-
max: H,
|
|
1454
|
+
max: Z(H + z, z),
|
|
1435
1455
|
step: z,
|
|
1436
1456
|
stepMarks: h,
|
|
1437
|
-
value: B ? [V, H] : [oe(fe, V, z), oe(pe, V, z)],
|
|
1457
|
+
value: B ? [V, Z(H + z, z)] : [oe(fe, V, z), oe(pe + z, V, z)],
|
|
1438
1458
|
isRange: !0,
|
|
1439
|
-
onChange: (e) =>
|
|
1440
|
-
onFinalChange: (e) =>
|
|
1459
|
+
onChange: (e) => _e(e),
|
|
1460
|
+
onFinalChange: (e) => ve(e),
|
|
1441
1461
|
disabled: B,
|
|
1442
1462
|
activeMin: L,
|
|
1443
|
-
activeMax: R,
|
|
1463
|
+
activeMax: Z(R + z, z),
|
|
1444
1464
|
isFaceted: q,
|
|
1445
1465
|
highlightFaceted: K,
|
|
1446
1466
|
"aria-label": n || `Filter by ${t}`
|
|
@@ -1461,8 +1481,8 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1461
1481
|
min: N,
|
|
1462
1482
|
max: Z(Math.min(R, J[1] - z), z),
|
|
1463
1483
|
onChange: (e) => le(e.target.value),
|
|
1464
|
-
onBlur:
|
|
1465
|
-
onKeyDown:
|
|
1484
|
+
onBlur: xe,
|
|
1485
|
+
onKeyDown: Ce(xe),
|
|
1466
1486
|
disabled: B,
|
|
1467
1487
|
isValid: B || !re
|
|
1468
1488
|
}), /* @__PURE__ */ f(_, {
|
|
@@ -1473,8 +1493,8 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1473
1493
|
min: Z(Math.max(L, J[0] + z), z),
|
|
1474
1494
|
max: P,
|
|
1475
1495
|
onChange: (e) => ue(e.target.value),
|
|
1476
|
-
onBlur:
|
|
1477
|
-
onKeyDown: Se
|
|
1496
|
+
onBlur: Se,
|
|
1497
|
+
onKeyDown: Ce(Se),
|
|
1478
1498
|
disabled: B,
|
|
1479
1499
|
isValid: B || !se
|
|
1480
1500
|
})]
|
|
@@ -1504,8 +1524,8 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1504
1524
|
min: N,
|
|
1505
1525
|
max: Z(Math.min(R, J[1] - z), z),
|
|
1506
1526
|
onChange: (e) => le(e.target.value),
|
|
1507
|
-
onBlur:
|
|
1508
|
-
onKeyDown:
|
|
1527
|
+
onBlur: xe,
|
|
1528
|
+
onKeyDown: Ce(xe),
|
|
1509
1529
|
disabled: B,
|
|
1510
1530
|
isValid: B || !re
|
|
1511
1531
|
}), /* @__PURE__ */ f(_, {
|
|
@@ -1516,8 +1536,8 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
|
|
|
1516
1536
|
min: Z(Math.max(L, J[0] + z), z),
|
|
1517
1537
|
max: P,
|
|
1518
1538
|
onChange: (e) => ue(e.target.value),
|
|
1519
|
-
onBlur:
|
|
1520
|
-
onKeyDown: Se
|
|
1539
|
+
onBlur: Se,
|
|
1540
|
+
onKeyDown: Ce(Se),
|
|
1521
1541
|
disabled: B,
|
|
1522
1542
|
isValid: B || !se
|
|
1523
1543
|
})]
|
package/dist/intrface.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
._placeholder_ee9qi_1{opacity:.05;justify-content:center;align-items:center;height:100%;min-height:600px;max-height:1000px;display:flex}._invalid_ee9qi_11 p{font:var(--text-base);padding:25px}._row_1i201_1{border-bottom:1px solid var(--lv0);font:var(--text-xs);color:var(--lv5);padding:20px 25px 20px 30px;position:relative}@media (prefers-color-scheme:dark){._row_1i201_1{border-color:var(--lv2)}}._row_1i201_1:last-child{border-bottom:none}._content_1i201_19{flex-direction:column;gap:10px;line-height:1.8;display:flex}._content_1i201_19 span{background-color:var(--lv0)}._indexNumber_1i201_31{font:var(--text-2xs);color:var(--lv4);position:absolute;top:25px;left:5px}._scoreNumber_1i201_39{font:var(--text-2xs);color:var(--lv4);position:absolute;top:25px;right:5px}@keyframes _fade_1i201_1{0%,to{opacity:1}50%{opacity:.4}}._skeletonBars_1i201_53{flex-direction:column;gap:10px;display:flex}._skeletonBarLg_1i201_59{background:var(--lv3);border-radius:1px;height:12px;animation:2.4s ease-in-out infinite _fade_1i201_1}._skeletonBarSm_1i201_66{background:var(--lv3);border-radius:1px;height:8px;animation:2.4s ease-in-out infinite _fade_1i201_1}@keyframes _skeletonAppear_81m3c_1{0%{opacity:0}to{opacity:1}}._wrapper_81m3c_6{animation:.2s .15s both _skeletonAppear_81m3c_1}._row_ujwhc_1{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._title_ujwhc_8{font:var(--text-base);color:var(--lv8)}@keyframes _skeletonAppear_4nxla_1{0%{opacity:0}to{opacity:1}}@keyframes _fade_4nxla_1{0%,to{opacity:1}50%{opacity:.4}}._bar_4nxla_12{background:var(--lv2);border-radius:1px;height:10px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._listRows_4nxla_19{flex-direction:column;gap:12px;display:flex}._sliderArea_4nxla_25{flex-direction:column;gap:14px;padding:4px 0 10px;display:flex}._sliderTrack_4nxla_32{background:var(--lv2);border-radius:1px;width:100%;height:6px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._inputRow_4nxla_40{justify-content:space-between;display:flex}._inputBar_4nxla_45{background:var(--lv2);border-radius:1px;width:40px;height:20px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._histogramRow_4nxla_55{height:8px;margin-top:2px}._list_18vbb_2{flex-direction:column;gap:10px;display:flex}._count_18vbb_7{font:var(--text-xs);color:var(--lv5);justify-content:space-between;align-items:center;gap:8px;display:flex}._countValue_18vbb_17{flex-shrink:0}._chip_18vbb_22{min-width:0;max-width:100%}._chip_18vbb_22 svg{flex-shrink:0}._chipLabel_18vbb_32{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._grid_18vbb_40{flex-wrap:wrap;gap:10px;display:flex}._grid_18vbb_40 li{flex:0 auto;min-width:0;max-width:100%}._active_18vbb_54{background:var(--lv1)}.
|
|
1
|
+
._placeholder_ee9qi_1{opacity:.05;justify-content:center;align-items:center;height:100%;min-height:600px;max-height:1000px;display:flex}._invalid_ee9qi_11 p{font:var(--text-base);padding:25px}._row_1i201_1{border-bottom:1px solid var(--lv0);font:var(--text-xs);color:var(--lv5);padding:20px 25px 20px 30px;position:relative}@media (prefers-color-scheme:dark){._row_1i201_1{border-color:var(--lv2)}}._row_1i201_1:last-child{border-bottom:none}._content_1i201_19{flex-direction:column;gap:10px;line-height:1.8;display:flex}._content_1i201_19 span{background-color:var(--lv0)}._indexNumber_1i201_31{font:var(--text-2xs);color:var(--lv4);position:absolute;top:25px;left:5px}._scoreNumber_1i201_39{font:var(--text-2xs);color:var(--lv4);position:absolute;top:25px;right:5px}@keyframes _fade_1i201_1{0%,to{opacity:1}50%{opacity:.4}}._skeletonBars_1i201_53{flex-direction:column;gap:10px;display:flex}._skeletonBarLg_1i201_59{background:var(--lv3);border-radius:1px;height:12px;animation:2.4s ease-in-out infinite _fade_1i201_1}._skeletonBarSm_1i201_66{background:var(--lv3);border-radius:1px;height:8px;animation:2.4s ease-in-out infinite _fade_1i201_1}@keyframes _skeletonAppear_81m3c_1{0%{opacity:0}to{opacity:1}}._wrapper_81m3c_6{animation:.2s .15s both _skeletonAppear_81m3c_1}._row_ujwhc_1{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._title_ujwhc_8{font:var(--text-base);color:var(--lv8)}@keyframes _skeletonAppear_4nxla_1{0%{opacity:0}to{opacity:1}}@keyframes _fade_4nxla_1{0%,to{opacity:1}50%{opacity:.4}}._bar_4nxla_12{background:var(--lv2);border-radius:1px;height:10px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._listRows_4nxla_19{flex-direction:column;gap:12px;display:flex}._sliderArea_4nxla_25{flex-direction:column;gap:14px;padding:4px 0 10px;display:flex}._sliderTrack_4nxla_32{background:var(--lv2);border-radius:1px;width:100%;height:6px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._inputRow_4nxla_40{justify-content:space-between;display:flex}._inputBar_4nxla_45{background:var(--lv2);border-radius:1px;width:40px;height:20px;animation:.2s .15s both _skeletonAppear_4nxla_1,2.4s ease-in-out .35s infinite _fade_4nxla_1}._histogramRow_4nxla_55{height:8px;margin-top:2px}._list_18vbb_2{flex-direction:column;gap:10px;display:flex}._count_18vbb_7{font:var(--text-xs);color:var(--lv5);justify-content:space-between;align-items:center;gap:8px;display:flex}._countValue_18vbb_17{flex-shrink:0}._chip_18vbb_22{min-width:0;max-width:100%}._chip_18vbb_22 svg{flex-shrink:0}._chipLabel_18vbb_32{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._grid_18vbb_40{flex-wrap:wrap;gap:10px;display:flex}._grid_18vbb_40 li{flex:0 auto;min-width:0;max-width:100%}._active_18vbb_54{background:var(--lv1)}._disabledMessage_adany_1{font:var(--text-2xs);margin-bottom:10px}._histogram_adany_6{height:20px;margin-bottom:2px;position:relative}._histogramLayer_adany_14{align-items:flex-end;padding:0 10px;display:flex;position:absolute;inset:0}._histogramLive_adany_22,._histogramLit_adany_23{pointer-events:none}._histogramLive_adany_22 ._histogramFill_adany_30{background:var(--lv3);border-radius:0}._histogramLit_adany_23 ._histogramFill_adany_30{background:var(--lv5);border-radius:0}._histogramBar_adany_43{cursor:pointer;background:0 0;border:0;flex:0 0;align-items:flex-end;min-width:0;height:100%;padding:0;display:flex}._histogramSeparators_adany_61{pointer-events:none;position:absolute;inset:0}._histogramSeparator_adany_48{background:var(--lv0);width:1px;margin-left:-.5px;position:absolute;top:0;bottom:0}._active_adany_76 ._histogramSeparator_adany_48{background:var(--lv1)}._histogramBar_adany_43:disabled{cursor:default}._histogramBar_adany_43:focus-visible{outline:1px solid var(--lv5);outline-offset:1px}._histogramFill_adany_30{background:var(--lv2);border-radius:1px 1px 0 0;width:100%;transition:height .15s;display:block}._active_adany_76{background:var(--lv1)}._list_apmmi_2{flex-direction:column;gap:10px;display:flex}._grid_apmmi_9{flex-wrap:wrap;gap:10px;display:flex}._grid_apmmi_9 li{flex:0 auto;min-width:0;max-width:100%}._count_apmmi_22{font:var(--text-xs);color:var(--lv5);justify-content:space-between;align-items:center;gap:8px;display:flex}._countValue_apmmi_31{flex-shrink:0}._chip_apmmi_35{min-width:0;max-width:100%}._error_apmmi_40{font:var(--text-xs);color:var(--negative,#c33)}._active_apmmi_46{background:var(--lv1)}._grid_xm2uh_2{flex-wrap:wrap;gap:10px;list-style:none;display:flex}._grid_xm2uh_2 li{flex:0 auto;min-width:0;max-width:100%}._chip_xm2uh_17{min-width:0;max-width:100%}._chip_xm2uh_17 svg{flex-shrink:0}._chipLabel_xm2uh_28{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._select_nwf7i_1{padding:6px 10px;font-size:14px}._radioGroup_nwf7i_6{flex-direction:column;gap:6px;display:flex}._list_1y4fk_1{flex-direction:column;gap:15px;list-style-type:none;display:flex}
|
|
2
2
|
/*$vite$:1*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@indxsearch/intrface",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"description": "Indx Search interface components for React. Provides ready-to-use filter panels, search inputs, faceted navigation, and sorting components. Built on @indxsearch/systm.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"indx",
|