@indxsearch/intrface 3.6.0 → 3.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.7.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 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.
8
+
9
+ ## 3.7.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 657eb06: RangeFilterPanel: a histogram bar now ends at its last value instead of at the next bucket's first, so after clicking a bar its right edge sits under the max thumb and at the end of the track's highlight. Before, it ran one step past both. The step between buckets, which holds no values, is left empty with the separator in it.
14
+
15
+ ## 3.7.0
16
+
17
+ ### Minor Changes
18
+
19
+ - RangeFilterPanel: a new `stepMarks` prop draws a small bar at every step of the slider, `"below"` in a row under the track or `"inline"` across it, so a coarse `step` shows where the thumbs will snap. It is passed straight to the systm `Slider`, and like there it draws nothing past 50 steps.
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [401b272]
24
+ - Updated dependencies
25
+ - @indxsearch/systm@2.15.0
26
+
3
27
  ## 3.6.0
4
28
 
5
29
  ### Minor Changes
package/README.md CHANGED
@@ -401,6 +401,7 @@ Different fields and range filters always narrow the result set (ANDed). With `c
401
401
  | `expectedMin` | `number` | ❌ | Expected lower bound (default `0`) |
402
402
  | `expectedMax` | `number` | ❌ | Expected upper bound (default `1000`) |
403
403
  | `step` | `number` | ❌ | Slider step. Derived from the precision of the field's values if omitted (1 for integers, 0.1 for one decimal, …) |
404
+ | `stepMarks` | `'below' \| 'inline'` | ❌ | Draw a small bar at every slider step: `'below'` in a row under the track, `'inline'` across it. Drawn only at 50 steps or fewer, so pair it with a coarse `step` |
404
405
  | `showHistogram` | `boolean` | ❌ | Show a histogram above the slider; clicking a bar filters on that bucket, clicking it again returns to the full range (requires the field to be facetable; default `false`) |
405
406
  | `resolution` | `number` | ❌ | Value-range per histogram bucket (e.g. `200` → 5 bars over 0–1000). Auto-derived (~20 bars) if omitted |
406
407
  | `collapsible` | `boolean` | ❌ | Whether the panel can collapse (default `true`) |
@@ -1,4 +1,5 @@
1
1
  import { default as React } from 'react';
2
+ import { StepMarks } from '@indxsearch/systm';
2
3
  export interface RangeFilterPanelProps {
3
4
  field: string;
4
5
  label?: string;
@@ -14,5 +15,7 @@ export interface RangeFilterPanelProps {
14
15
  showHistogram?: boolean;
15
16
  resolution?: number;
16
17
  step?: number;
18
+ /** Draw a bar at every step of the slider: in a row below the track, or across it. Only drawn at 50 steps or fewer, so pair it with a coarse `step`. */
19
+ stepMarks?: StepMarks;
17
20
  }
18
21
  export declare const RangeFilterPanel: React.FC<RangeFilterPanelProps>;
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_f0nx8_1`,histogram:`_histogram_f0nx8_6`,histogramLayer:`_histogramLayer_f0nx8_14`,histogramLive:`_histogramLive_f0nx8_22`,histogramLit:`_histogramLit_f0nx8_23`,histogramFill:`_histogramFill_f0nx8_30`,histogramBar:`_histogramBar_f0nx8_43`,histogramSeparators:`_histogramSeparators_f0nx8_61`,histogramSeparator:`_histogramSeparator_f0nx8_48`,active:`_active_f0nx8_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})=>{let{state:{rangeFilters:h,rangeBounds:g,facetStats:_,facets:v,filterableFields:y,facetableFields:b,query:x,facetDebounceDelayMillis:C},setRangeFilter:w,resetRangeFilter:T,allowEmptySearch:E,isFetchingInitial:D}=S(),O=i??a??`input`,k=g?.[e]!==void 0,A=g?.[e]??{min:n,max:r},j=A.min,M=A.max,N=_?.[e]??A,P=Math.max(j,Math.min(M,N.min)),F=Math.max(j,Math.min(M,N.max)),I=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(j),V(M)),n=v?.[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,j,M,v,e]),R=k&&j===M,z=R?n:j,H=R?r:M,G=h?.[e],K=o&&G!==void 0?B.active:void 0,q=G?G.min:j,J=G?G.max:M,Y=G!==void 0,ee=P!==j||F!==M,[X,Z]=c.default.useState([q,J]),[te,ne]=c.default.useState(!1),[re,ie]=c.default.useState(!1),[Q,ae]=c.default.useState(String(q)),[$,oe]=c.default.useState(String(J)),se=c.default.useMemo(()=>{let e=V(I);return{width:`calc(${Math.max(3,j.toFixed(e).length,M.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[I,j,M,Q,$]);c.default.useEffect(()=>{ae(String(X[0])),oe(String(X[1]))},[X]);let{finalMin:ce,finalMax:le,isValidMin:ue,isValidMax:de}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(j,Math.min(M,e)),r=Math.max(j,Math.min(M,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=j&&i<=a,isValidMax:a<=M&&a>=i}},[X,j,M]);c.default.useEffect(()=>{if(R)return;if(X[0]===j&&X[1]===M){ne(!1),ie(!1);return}let t=C??500,n=setTimeout(()=>{ne(!ue),ie(!de)},300),r=setTimeout(()=>{ue&&de&&(ce===j&&le===M?T(e,!1):w(e,ce,le))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[ce,le,ue,de,j,M,e,T,w,C,R]),c.default.useEffect(()=>{Z([q,J]),ne(!1),ie(!1)},[q,J,e]);let fe=c.default.useCallback(e=>{R||Z([Math.max(j,Math.min(F,e[0])),Math.max(P,Math.min(M,e[1]))])},[R,j,M,P,F]),pe=c.default.useCallback(t=>{if(R)return;let n=Math.max(j,Math.min(F,t[0])),r=Math.max(P,Math.min(M,t[1]));n===j&&r===M?(Z([j,M]),T(e,!0)):Z([n,r])},[R,j,M,P,F,e,T]),me=c.default.useRef(null),he=c.default.useCallback((t,n)=>{if(R)return;let r=me.current;if(G&&r&&r.start===t&&r.last===n){me.current=null,Z([j,M]),T(e,!0);return}let i=W(Math.max(j,P,t),j,I),a=Math.max(i,W(Math.min(M,F,n),j,I));me.current={start:t,last:n},Z([i,a])},[R,G,j,M,P,F,I,e,T]),ge=c.default.useCallback(()=>{if(R)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){ae(String(X[0]));return}let n=Math.max(j,Math.min(F,t));n<X[1]?Z([n,X[1]]):Z([j,X[1]]),ae(String(n<X[1]?n:j))},[R,Q,X,j,F]),_e=c.default.useCallback(()=>{if(R)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[1]));return}let n=Math.max(P,Math.min(M,t));n>X[0]?Z([X[0],n]):Z([X[0],M]),oe(String(n>X[0]?n:M))},[R,$,X,P,M]),ve=e=>t=>{t.key===`Enter`&&e()},[ye,be]=c.default.useState(null),xe=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${j}:${M}`;if(t===xe.current&&xe.current!==null)return;let n=v?.[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&&(xe.current=t,be(r))},[j,M,v,e,f]);let Se=c.default.useMemo(()=>{if(!f||!ye||ye.length===0)return[];let e=M-j;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=j+r*t,a=j+(r+1)*t,o=r===n-1;return{bucketStart:i,bucketEnd:a,count:ye.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=M)}).reduce((e,t)=>e+t.value,0),span:Math.min(a,M)-i,last:o?M:U(a-I,I)}})},[f,ye,j,M,p,I]),Ce=c.default.useMemo(()=>Math.max(...Se.map(e=>e.count),1),[Se]);return f&&!D&&!b?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),D?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!E&&!x?null:y?.includes(e)?O===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:K,children:[R&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,j,`).`]}),f&&Se.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&Se.length>0&&(()=>{let[e,t]=F>P&&(P>j||F<M)?[P,F]:[z,H],n=Math.max(ce,e),r=Math.min(le,t),i=H-z||1,a=e=>Math.max(0,Math.min(1,(e-z)/i)),o=e=>Math.max(0,Math.min(1,(H-e)/i)),s=a(n),c=r<n?1-s:o(r),l=e=>`calc(10px + (100% - 20px) * ${e})`,d=e=>`calc(10px + (100% - 20px) * ${e} - 1px)`,f=`inset(0 ${d(c)} 0 ${l(s)})`,p=`inset(0 ${d(o(t))} 0 ${l(a(e))})`,m=n=>n.last<e||n.bucketStart>t,h=Se.slice(1).map(e=>l((e.bucketStart-z)/i)),g=Se.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/Ce*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:R||m(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>he(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:z,max:H,step:I,value:R?[z,H]:[W(ce,z,I),W(le,z,I)],isRange:!0,onChange:e=>fe(e),onFinalChange:e=>pe(e),disabled:R,activeMin:P,activeMax:F,isFaceted:ee,highlightFaceted:Y,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:se,value:R?String(j):Q,min:j,max:U(Math.min(F,X[1]-I),I),onChange:e=>ae(e.target.value),onBlur:ge,onKeyDown:ve(ge),disabled:R,isValid:R||!te}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:se,value:R?String(M):$,min:U(Math.max(P,X[0]+I),I),max:M,onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ve(_e),disabled:R,isValid:R||!re})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:K,children:[R&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,j,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:se,value:R?String(j):Q,min:j,max:U(Math.min(F,X[1]-I),I),onChange:e=>ae(e.target.value),onBlur:ge,onKeyDown:ve(ge),disabled:R,isValid:R||!te}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:se,value:R?String(M):$,min:U(Math.max(P,X[0]+I),I),max:M,onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ve(_e),disabled:R,isValid:R||!re})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},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]})})})),X=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),Z=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function te(){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)(X,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(Z,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var 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 Q(){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 ae=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=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 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={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=te,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=ae,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=Q,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=oe,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=$;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require("@indxsearch/systm/styles.css");let c=require("react");c=s(c);let l=require("@indxsearch/indx-types"),u=require("react/jsx-runtime"),d=require("@indxsearch/systm"),f=require("@indxsearch/pixl");function p({url:e,team:t,dataset:n,preAuthenticatedToken:r,enableDebugLogs:i=!1}){let[a,o]=(0,c.useState)(null),[s,u]=(0,c.useState)(!0),[d,f]=(0,c.useState)([]),[p,m]=(0,c.useState)([]),[h,g]=(0,c.useState)([]),[_,v]=(0,c.useState)({}),[y,b]=(0,c.useState)({}),[x,S]=(0,c.useState)(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_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
@@ -1111,16 +1111,16 @@ var W = ({ fields: e, resultsPerPage: t, parseArrayStrings: n = !1, children: r
1111
1111
  })
1112
1112
  });
1113
1113
  }, X = {
1114
- disabledMessage: "_disabledMessage_f0nx8_1",
1115
- histogram: "_histogram_f0nx8_6",
1116
- histogramLayer: "_histogramLayer_f0nx8_14",
1117
- histogramLive: "_histogramLive_f0nx8_22",
1118
- histogramLit: "_histogramLit_f0nx8_23",
1119
- histogramFill: "_histogramFill_f0nx8_30",
1120
- histogramBar: "_histogramBar_f0nx8_43",
1121
- histogramSeparators: "_histogramSeparators_f0nx8_61",
1122
- histogramSeparator: "_histogramSeparator_f0nx8_48",
1123
- active: "_active_f0nx8_76"
1114
+ disabledMessage: "_disabledMessage_adany_1",
1115
+ histogram: "_histogram_adany_6",
1116
+ histogramLayer: "_histogramLayer_adany_14",
1117
+ histogramLive: "_histogramLive_adany_22",
1118
+ histogramLit: "_histogramLit_adany_23",
1119
+ histogramFill: "_histogramFill_adany_30",
1120
+ histogramBar: "_histogramBar_adany_43",
1121
+ histogramSeparators: "_histogramSeparators_adany_61",
1122
+ histogramSeparator: "_histogramSeparator_adany_48",
1123
+ active: "_active_adany_76"
1124
1124
  };
1125
1125
  //#endregion
1126
1126
  //#region src/utils/numeric.ts
@@ -1143,224 +1143,234 @@ function oe(e, t, n) {
1143
1143
  let r = t + Math.round((e - t) / n) * n;
1144
1144
  return Number(r.toFixed(ie(n)));
1145
1145
  }
1146
- var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, control: a, displayType: o, showActivePanel: s = !1, collapsible: c = !0, startCollapsed: l = !1, showHistogram: u = !1, resolution: d, step: m }) => {
1147
- let { state: { rangeFilters: h, rangeBounds: v, facetStats: y, facets: b, filterableFields: S, facetableFields: C, query: w, facetDebounceDelayMillis: T }, setRangeFilter: E, resetRangeFilter: D, allowEmptySearch: O, isFetchingInitial: k } = F(), A = a ?? o ?? "input", ee = v?.[t] !== void 0, j = v?.[t] ?? {
1146
+ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, control: a, displayType: o, showActivePanel: s = !1, collapsible: c = !0, startCollapsed: l = !1, showHistogram: u = !1, resolution: d, step: m, stepMarks: h }) => {
1147
+ let { state: { rangeFilters: v, rangeBounds: y, facetStats: b, facets: S, filterableFields: C, facetableFields: w, query: T, facetDebounceDelayMillis: E }, setRangeFilter: D, resetRangeFilter: O, allowEmptySearch: k, isFetchingInitial: A } = F(), ee = a ?? o ?? "input", j = y?.[t] !== void 0, M = y?.[t] ?? {
1148
1148
  min: r,
1149
1149
  max: i
1150
- }, M = j.min, N = j.max, P = y?.[t] ?? j, I = Math.max(M, Math.min(N, P.min)), L = Math.max(M, Math.min(N, P.max)), R = e.useMemo(() => {
1150
+ }, N = M.min, P = M.max, I = b?.[t] ?? M, L = Math.max(N, Math.min(P, I.min)), R = Math.max(N, Math.min(P, I.max)), z = e.useMemo(() => {
1151
1151
  if (m) return m;
1152
- let e = Math.max(ie(M), ie(N)), n = b?.[t];
1152
+ let e = Math.max(ie(N), ie(P)), n = S?.[t];
1153
1153
  if (Array.isArray(n)) for (let t of n) e = Math.max(e, ie(Number(t.key)));
1154
1154
  return e === 0 ? 1 : Number((10 ** -e).toFixed(e));
1155
1155
  }, [
1156
1156
  m,
1157
- M,
1158
1157
  N,
1159
- b,
1158
+ P,
1159
+ S,
1160
1160
  t
1161
- ]), z = ee && M === N, B = z ? r : M, V = z ? i : N, H = h?.[t], U = s && H !== void 0 ? X.active : void 0, te = H ? H.min : M, W = H ? H.max : N, G = H !== void 0, K = I !== M || L !== N, [q, J] = e.useState([te, W]), [Y, re] = e.useState(!1), [ae, se] = e.useState(!1), [Q, ce] = e.useState(String(te)), [le, $] = e.useState(String(W)), ue = e.useMemo(() => {
1162
- let e = ie(R);
1163
- return { width: `calc(${Math.max(3, M.toFixed(e).length, N.toFixed(e).length, Q.length, le.length) + 1}ch + 20px)` };
1161
+ ]), B = j && N === P, V = B ? r : N, H = B ? i : P, U = v?.[t], te = s && U !== void 0 ? X.active : void 0, W = U ? U.min : N, G = U ? U.max : P, K = U !== void 0, q = L !== N || R !== P, [J, Y] = e.useState([W, G]), [re, ae] = e.useState(!1), [se, Q] = e.useState(!1), [ce, le] = e.useState(String(W)), [$, ue] = e.useState(String(G)), de = e.useMemo(() => {
1162
+ let e = ie(z);
1163
+ return { width: `calc(${Math.max(3, N.toFixed(e).length, P.toFixed(e).length, ce.length, $.length) + 1}ch + 20px)` };
1164
1164
  }, [
1165
- R,
1166
- M,
1165
+ z,
1167
1166
  N,
1168
- Q,
1169
- le
1167
+ P,
1168
+ ce,
1169
+ $
1170
1170
  ]);
1171
1171
  e.useEffect(() => {
1172
- ce(String(q[0])), $(String(q[1]));
1173
- }, [q]);
1174
- let { finalMin: de, finalMax: fe, isValidMin: pe, isValidMax: me } = e.useMemo(() => {
1175
- let [e, t] = q, n = Math.max(M, Math.min(N, e)), r = Math.max(M, Math.min(N, t)), i = Math.min(n, r), a = Math.max(n, r);
1172
+ le(String(J[0])), ue(String(J[1]));
1173
+ }, [J]);
1174
+ let { finalMin: fe, finalMax: pe, isValidMin: me, isValidMax: he } = e.useMemo(() => {
1175
+ let [e, t] = J, n = Math.max(N, Math.min(P, e)), r = Math.max(N, Math.min(P, t)), i = Math.min(n, r), a = Math.max(n, r);
1176
1176
  return {
1177
1177
  finalMin: i,
1178
1178
  finalMax: a,
1179
- isValidMin: i >= M && i <= a,
1180
- isValidMax: a <= N && a >= i
1179
+ isValidMin: i >= N && i <= a,
1180
+ isValidMax: a <= P && a >= i
1181
1181
  };
1182
1182
  }, [
1183
- q,
1184
- M,
1185
- N
1183
+ J,
1184
+ N,
1185
+ P
1186
1186
  ]);
1187
1187
  e.useEffect(() => {
1188
- if (z) return;
1189
- if (q[0] === M && q[1] === N) {
1190
- re(!1), se(!1);
1188
+ if (B) return;
1189
+ if (J[0] === N && J[1] === P) {
1190
+ ae(!1), Q(!1);
1191
1191
  return;
1192
1192
  }
1193
- let e = T ?? 500, n = setTimeout(() => {
1194
- re(!pe), se(!me);
1193
+ let e = E ?? 500, n = setTimeout(() => {
1194
+ ae(!me), Q(!he);
1195
1195
  }, 300), r = setTimeout(() => {
1196
- pe && me && (de === M && fe === N ? D(t, !1) : E(t, de, fe));
1196
+ me && he && (fe === N && pe === P ? O(t, !1) : D(t, fe, pe));
1197
1197
  }, e);
1198
1198
  return () => {
1199
1199
  clearTimeout(n), clearTimeout(r);
1200
1200
  };
1201
1201
  }, [
1202
- de,
1203
1202
  fe,
1204
1203
  pe,
1205
1204
  me,
1206
- M,
1205
+ he,
1207
1206
  N,
1207
+ P,
1208
1208
  t,
1209
+ O,
1209
1210
  D,
1210
1211
  E,
1211
- T,
1212
- z
1212
+ B
1213
1213
  ]), e.useEffect(() => {
1214
- J([te, W]), re(!1), se(!1);
1214
+ Y([W, G]), ae(!1), Q(!1);
1215
1215
  }, [
1216
- te,
1217
1216
  W,
1217
+ G,
1218
1218
  t
1219
1219
  ]);
1220
- let he = e.useCallback((e) => {
1221
- z || J([Math.max(M, Math.min(L, e[0])), Math.max(I, Math.min(N, e[1]))]);
1220
+ let ge = e.useCallback((e) => {
1221
+ let t = Z(Math.min(e[0], e[1] - z), z);
1222
+ return [t, Z(Math.max(e[1] - z, t), z)];
1223
+ }, [z]), _e = e.useCallback((e) => {
1224
+ if (B) return;
1225
+ let [t, n] = ge(e);
1226
+ Y([Math.max(N, Math.min(R, t)), Math.max(L, Math.min(P, n))]);
1222
1227
  }, [
1223
- z,
1224
- M,
1228
+ B,
1229
+ ge,
1225
1230
  N,
1226
- I,
1227
- L
1228
- ]), ge = e.useCallback((e) => {
1229
- if (z) return;
1230
- let n = Math.max(M, Math.min(L, e[0])), r = Math.max(I, Math.min(N, e[1]));
1231
- n === M && r === N ? (J([M, N]), D(t, !0)) : J([n, r]);
1231
+ P,
1232
+ L,
1233
+ R
1234
+ ]), ve = e.useCallback((e) => {
1235
+ if (B) return;
1236
+ let [n, r] = ge(e), i = Math.max(N, Math.min(R, n)), a = Math.max(L, Math.min(P, r));
1237
+ i === N && a === P ? (Y([N, P]), O(t, !0)) : Y([i, a]);
1232
1238
  }, [
1233
- z,
1234
- M,
1239
+ B,
1240
+ ge,
1235
1241
  N,
1236
- I,
1242
+ P,
1237
1243
  L,
1244
+ R,
1238
1245
  t,
1239
- D
1240
- ]), _e = e.useRef(null), ve = e.useCallback((e, n) => {
1241
- if (z) return;
1242
- let r = _e.current;
1243
- if (H && r && r.start === e && r.last === n) {
1244
- _e.current = null, J([M, N]), D(t, !0);
1246
+ O
1247
+ ]), ye = e.useRef(null), be = e.useCallback((e, n) => {
1248
+ if (B) return;
1249
+ let r = ye.current;
1250
+ if (U && r && r.start === e && r.last === n) {
1251
+ ye.current = null, Y([N, P]), O(t, !0);
1245
1252
  return;
1246
1253
  }
1247
- let i = oe(Math.max(M, I, e), M, R), a = Math.max(i, oe(Math.min(N, L, n), M, R));
1248
- _e.current = {
1254
+ let i = oe(Math.max(N, L, e), N, z), a = Math.max(i, oe(Math.min(P, R, n), N, z));
1255
+ ye.current = {
1249
1256
  start: e,
1250
1257
  last: n
1251
- }, J([i, a]);
1258
+ }, Y([i, a]);
1252
1259
  }, [
1253
- z,
1254
- H,
1255
- M,
1260
+ B,
1261
+ U,
1256
1262
  N,
1257
- I,
1263
+ P,
1258
1264
  L,
1259
1265
  R,
1266
+ z,
1260
1267
  t,
1261
- D
1262
- ]), ye = e.useCallback(() => {
1263
- if (z) return;
1264
- let e = Q.trim(), t = e === "" ? NaN : Number(e);
1268
+ O
1269
+ ]), xe = e.useCallback(() => {
1270
+ if (B) return;
1271
+ let e = ce.trim(), t = e === "" ? NaN : Number(e);
1265
1272
  if (isNaN(t)) {
1266
- ce(String(q[0]));
1273
+ le(String(J[0]));
1267
1274
  return;
1268
1275
  }
1269
- let n = Math.max(M, Math.min(L, t));
1270
- n < q[1] ? J([n, q[1]]) : J([M, q[1]]), ce(String(n < q[1] ? n : M));
1276
+ let n = Math.max(N, Math.min(R, t));
1277
+ n < J[1] ? Y([n, J[1]]) : Y([N, J[1]]), le(String(n < J[1] ? n : N));
1271
1278
  }, [
1272
- z,
1273
- Q,
1274
- q,
1275
- M,
1276
- L
1277
- ]), be = e.useCallback(() => {
1278
- if (z) return;
1279
- let e = le.trim(), t = e === "" ? NaN : Number(e);
1279
+ B,
1280
+ ce,
1281
+ J,
1282
+ N,
1283
+ R
1284
+ ]), Se = e.useCallback(() => {
1285
+ if (B) return;
1286
+ let e = $.trim(), t = e === "" ? NaN : Number(e);
1280
1287
  if (isNaN(t)) {
1281
- $(String(q[1]));
1288
+ ue(String(J[1]));
1282
1289
  return;
1283
1290
  }
1284
- let n = Math.max(I, Math.min(N, t));
1285
- n > q[0] ? J([q[0], n]) : J([q[0], N]), $(String(n > q[0] ? n : N));
1291
+ let n = Math.max(L, Math.min(P, t));
1292
+ n > J[0] ? Y([J[0], n]) : Y([J[0], P]), ue(String(n > J[0] ? n : P));
1286
1293
  }, [
1287
- z,
1288
- le,
1289
- q,
1290
- I,
1291
- N
1292
- ]), xe = (e) => (t) => {
1294
+ B,
1295
+ $,
1296
+ J,
1297
+ L,
1298
+ P
1299
+ ]), Ce = (e) => (t) => {
1293
1300
  t.key === "Enter" && e();
1294
- }, [Se, Ce] = e.useState(null), we = e.useRef(null);
1301
+ }, [we, Te] = e.useState(null), Ee = e.useRef(null);
1295
1302
  e.useEffect(() => {
1296
1303
  if (!u) return;
1297
- let e = `${M}:${N}`;
1298
- if (e === we.current && we.current !== null) return;
1299
- let n = b?.[t];
1304
+ let e = `${N}:${P}`;
1305
+ if (e === Ee.current && Ee.current !== null) return;
1306
+ let n = S?.[t];
1300
1307
  if (!Array.isArray(n) || n.length === 0) return;
1301
1308
  let r = n.filter((e) => e.value != null && !isNaN(Number(e.key))).map((e) => ({
1302
1309
  key: e.key,
1303
1310
  value: e.value
1304
1311
  }));
1305
- r.length > 0 && (we.current = e, Ce(r));
1312
+ r.length > 0 && (Ee.current = e, Te(r));
1306
1313
  }, [
1307
- M,
1308
1314
  N,
1309
- b,
1315
+ P,
1316
+ S,
1310
1317
  t,
1311
1318
  u
1312
1319
  ]);
1313
- let Te = e.useMemo(() => {
1314
- if (!u || !Se || Se.length === 0) return [];
1315
- let e = N - M;
1320
+ let De = e.useMemo(() => {
1321
+ if (!u || !we || we.length === 0) return [];
1322
+ let e = P - N;
1316
1323
  if (e <= 0) return [];
1317
1324
  let t = d ?? (Math.ceil(e / 20) || 1), n = Math.ceil(e / t);
1318
1325
  return Array.from({ length: n }, (e, r) => {
1319
- let i = M + r * t, a = M + (r + 1) * t, o = r === n - 1;
1326
+ let i = N + r * t, a = N + (r + 1) * t, o = r === n - 1, s = we.filter((e) => {
1327
+ let t = Number(e.key);
1328
+ return t >= i && (t < a || o && t <= P);
1329
+ }).reduce((e, t) => e + t.value, 0), c = o ? P : Z(a - z, z);
1320
1330
  return {
1321
1331
  bucketStart: i,
1322
1332
  bucketEnd: a,
1323
- count: Se.filter((e) => {
1324
- let t = Number(e.key);
1325
- return t >= i && (t < a || o && t <= N);
1326
- }).reduce((e, t) => e + t.value, 0),
1327
- span: Math.min(a, N) - i,
1328
- last: o ? N : Z(a - R, R)
1333
+ count: s,
1334
+ last: c,
1335
+ barEnd: Z(c + z, z)
1329
1336
  };
1330
- });
1337
+ }).map((e, t, n) => ({
1338
+ ...e,
1339
+ span: (t + 1 < n.length ? n[t + 1].bucketStart : e.barEnd) - e.bucketStart
1340
+ }));
1331
1341
  }, [
1332
1342
  u,
1333
- Se,
1334
- M,
1343
+ we,
1335
1344
  N,
1345
+ P,
1336
1346
  d,
1337
- R
1338
- ]), Ee = e.useMemo(() => Math.max(...Te.map((e) => e.count), 1), [Te]);
1339
- return u && !k && !C?.includes(t) && console.warn(`RangeFilterPanel: showHistogram=true but field "${t}" is not facetable. Add .Facetable = true to this field.`), k ? /* @__PURE__ */ f(ne, {
1347
+ z
1348
+ ]), Oe = e.useMemo(() => Math.max(...De.map((e) => e.count), 1), [De]);
1349
+ 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, {
1340
1350
  title: n,
1341
1351
  variant: "slider",
1342
1352
  withHistogram: u,
1343
1353
  collapsible: c,
1344
1354
  startCollapsed: l
1345
- }) : !O && !w ? null : S?.includes(t) ? A === "slider" ? /* @__PURE__ */ p(g, {
1355
+ }) : !k && !T ? null : C?.includes(t) ? ee === "slider" ? /* @__PURE__ */ p(g, {
1346
1356
  title: n,
1347
1357
  collapsed: l,
1348
1358
  collapsible: c,
1349
- className: U,
1359
+ className: te,
1350
1360
  children: [
1351
- z && /* @__PURE__ */ p("div", {
1361
+ B && /* @__PURE__ */ p("div", {
1352
1362
  className: X.disabledMessage,
1353
1363
  children: [
1354
1364
  "No adjustable range (all results have the same value: ",
1355
- M,
1365
+ N,
1356
1366
  ")."
1357
1367
  ]
1358
1368
  }),
1359
- u && Te.length === 0 && /* @__PURE__ */ f("div", { className: X.histogram }),
1360
- u && Te.length > 0 && (() => {
1361
- let [e, t] = L > I && (I > M || L < N) ? [I, L] : [B, V], n = Math.max(de, e), r = Math.min(fe, t), i = V - B || 1, a = (e) => Math.max(0, Math.min(1, (e - B) / i)), o = (e) => Math.max(0, Math.min(1, (V - e) / i)), s = a(n), c = r < n ? 1 - s : o(r), l = (e) => `calc(10px + (100% - 20px) * ${e})`, u = (e) => `calc(10px + (100% - 20px) * ${e} - 1px)`, d = `inset(0 ${u(c)} 0 ${l(s)})`, m = `inset(0 ${u(o(t))} 0 ${l(a(e))})`, h = (n) => n.last < e || n.bucketStart > t, g = Te.slice(1).map((e) => l((e.bucketStart - B) / i)), _ = Te.map((e) => ({
1369
+ u && De.length === 0 && /* @__PURE__ */ f("div", { className: X.histogram }),
1370
+ u && De.length > 0 && (() => {
1371
+ 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) => ({
1362
1372
  ...e,
1363
- height: Math.max(1, Math.ceil(e.count / Ee * 20))
1373
+ height: Math.max(1, Math.ceil(e.count / Oe * 20))
1364
1374
  }));
1365
1375
  return /* @__PURE__ */ p("div", {
1366
1376
  className: X.histogram,
@@ -1372,10 +1382,10 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1372
1382
  className: X.histogramBar,
1373
1383
  style: { flexGrow: e.span },
1374
1384
  "data-testid": "histogram-bar",
1375
- disabled: z || h(e),
1385
+ disabled: B || h(e),
1376
1386
  "aria-label": `${e.bucketStart} to ${e.last}: ${e.count}`,
1377
1387
  title: `${e.bucketStart} to ${e.last}: ${e.count}`,
1378
- onClick: () => ve(e.bucketStart, e.last),
1388
+ onClick: () => be(e.bucketStart, e.last),
1379
1389
  children: /* @__PURE__ */ f("span", {
1380
1390
  className: X.histogramFill,
1381
1391
  style: { height: `${e.height}px` }
@@ -1424,18 +1434,19 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1424
1434
  /* @__PURE__ */ f("div", {
1425
1435
  style: { padding: "10px 10px 20px 10px" },
1426
1436
  children: /* @__PURE__ */ f(x, {
1427
- min: B,
1428
- max: V,
1429
- step: R,
1430
- value: z ? [B, V] : [oe(de, B, R), oe(fe, B, R)],
1437
+ min: V,
1438
+ max: Z(H + z, z),
1439
+ step: z,
1440
+ stepMarks: h,
1441
+ value: B ? [V, Z(H + z, z)] : [oe(fe, V, z), oe(pe + z, V, z)],
1431
1442
  isRange: !0,
1432
- onChange: (e) => he(e),
1433
- onFinalChange: (e) => ge(e),
1434
- disabled: z,
1435
- activeMin: I,
1436
- activeMax: L,
1437
- isFaceted: K,
1438
- highlightFaceted: G,
1443
+ onChange: (e) => _e(e),
1444
+ onFinalChange: (e) => ve(e),
1445
+ disabled: B,
1446
+ activeMin: L,
1447
+ activeMax: Z(R + z, z),
1448
+ isFaceted: q,
1449
+ highlightFaceted: K,
1439
1450
  "aria-label": n || `Filter by ${t}`
1440
1451
  })
1441
1452
  }),
@@ -1449,38 +1460,38 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1449
1460
  children: [/* @__PURE__ */ f(_, {
1450
1461
  label: "Min:",
1451
1462
  type: "number",
1452
- style: ue,
1453
- value: z ? String(M) : Q,
1454
- min: M,
1455
- max: Z(Math.min(L, q[1] - R), R),
1456
- onChange: (e) => ce(e.target.value),
1457
- onBlur: ye,
1458
- onKeyDown: xe(ye),
1459
- disabled: z,
1460
- isValid: z || !Y
1463
+ style: de,
1464
+ value: B ? String(N) : ce,
1465
+ min: N,
1466
+ max: Z(Math.min(R, J[1] - z), z),
1467
+ onChange: (e) => le(e.target.value),
1468
+ onBlur: xe,
1469
+ onKeyDown: Ce(xe),
1470
+ disabled: B,
1471
+ isValid: B || !re
1461
1472
  }), /* @__PURE__ */ f(_, {
1462
1473
  label: "Max:",
1463
1474
  type: "number",
1464
- style: ue,
1465
- value: z ? String(N) : le,
1466
- min: Z(Math.max(I, q[0] + R), R),
1467
- max: N,
1468
- onChange: (e) => $(e.target.value),
1469
- onBlur: be,
1470
- onKeyDown: xe(be),
1471
- disabled: z,
1472
- isValid: z || !ae
1475
+ style: de,
1476
+ value: B ? String(P) : $,
1477
+ min: Z(Math.max(L, J[0] + z), z),
1478
+ max: P,
1479
+ onChange: (e) => ue(e.target.value),
1480
+ onBlur: Se,
1481
+ onKeyDown: Ce(Se),
1482
+ disabled: B,
1483
+ isValid: B || !se
1473
1484
  })]
1474
1485
  })
1475
1486
  ]
1476
1487
  }) : /* @__PURE__ */ p(g, {
1477
1488
  title: n,
1478
- className: U,
1479
- children: [z && /* @__PURE__ */ p("div", {
1489
+ className: te,
1490
+ children: [B && /* @__PURE__ */ p("div", {
1480
1491
  className: X.disabledMessage,
1481
1492
  children: [
1482
1493
  "No adjustable range (all results have the same value: ",
1483
- M,
1494
+ N,
1484
1495
  ")."
1485
1496
  ]
1486
1497
  }), /* @__PURE__ */ p("div", {
@@ -1492,27 +1503,27 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1492
1503
  children: [/* @__PURE__ */ f(_, {
1493
1504
  label: "Min:",
1494
1505
  type: "number",
1495
- style: ue,
1496
- value: z ? String(M) : Q,
1497
- min: M,
1498
- max: Z(Math.min(L, q[1] - R), R),
1499
- onChange: (e) => ce(e.target.value),
1500
- onBlur: ye,
1501
- onKeyDown: xe(ye),
1502
- disabled: z,
1503
- isValid: z || !Y
1506
+ style: de,
1507
+ value: B ? String(N) : ce,
1508
+ min: N,
1509
+ max: Z(Math.min(R, J[1] - z), z),
1510
+ onChange: (e) => le(e.target.value),
1511
+ onBlur: xe,
1512
+ onKeyDown: Ce(xe),
1513
+ disabled: B,
1514
+ isValid: B || !re
1504
1515
  }), /* @__PURE__ */ f(_, {
1505
1516
  label: "Max:",
1506
1517
  type: "number",
1507
- style: ue,
1508
- value: z ? String(N) : le,
1509
- min: Z(Math.max(I, q[0] + R), R),
1510
- max: N,
1511
- onChange: (e) => $(e.target.value),
1512
- onBlur: be,
1513
- onKeyDown: xe(be),
1514
- disabled: z,
1515
- isValid: z || !ae
1518
+ style: de,
1519
+ value: B ? String(P) : $,
1520
+ min: Z(Math.max(L, J[0] + z), z),
1521
+ max: P,
1522
+ onChange: (e) => ue(e.target.value),
1523
+ onBlur: Se,
1524
+ onKeyDown: Ce(Se),
1525
+ disabled: B,
1526
+ isValid: B || !se
1516
1527
  })]
1517
1528
  })]
1518
1529
  }) : /* @__PURE__ */ f(g, {
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)}._disabledMessage_f0nx8_1{font:var(--text-2xs);margin-bottom:10px}._histogram_f0nx8_6{height:20px;margin-bottom:2px;position:relative}._histogramLayer_f0nx8_14{align-items:flex-end;padding:0 10px;display:flex;position:absolute;inset:0}._histogramLive_f0nx8_22,._histogramLit_f0nx8_23{pointer-events:none}._histogramLive_f0nx8_22 ._histogramFill_f0nx8_30{background:var(--lv3);border-radius:0}._histogramLit_f0nx8_23 ._histogramFill_f0nx8_30{background:var(--lv5);border-radius:0}._histogramBar_f0nx8_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_f0nx8_61{pointer-events:none;position:absolute;inset:0}._histogramSeparator_f0nx8_48{background:var(--lv0);width:1px;margin-left:-.5px;position:absolute;top:0;bottom:0}._active_f0nx8_76 ._histogramSeparator_f0nx8_48{background:var(--lv1)}._histogramBar_f0nx8_43:disabled{cursor:default}._histogramBar_f0nx8_43:focus-visible{outline:1px solid var(--lv5);outline-offset:1px}._histogramFill_f0nx8_30{background:var(--lv2);border-radius:1px 1px 0 0;width:100%;transition:height .15s;display:block}._active_f0nx8_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}
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.6.0",
3
+ "version": "3.7.2",
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",
@@ -73,7 +73,7 @@
73
73
  "dependencies": {
74
74
  "@indxsearch/indx-types": "^2.2.0",
75
75
  "@indxsearch/pixl": "^1.5.0",
76
- "@indxsearch/systm": "^2.6.1",
76
+ "@indxsearch/systm": "^2.15.0",
77
77
  "react-range": "^1.10.0"
78
78
  },
79
79
  "publishConfig": {