@indxsearch/intrface 3.6.0 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 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.
8
+
9
+ ## 3.7.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 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.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [401b272]
18
+ - Updated dependencies
19
+ - @indxsearch/systm@2.15.0
20
+
3
21
  ## 3.6.0
4
22
 
5
23
  ### 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_g8ib6_1`,histogram:`_histogram_g8ib6_6`,histogramLayer:`_histogramLayer_g8ib6_14`,histogramLive:`_histogramLive_g8ib6_22`,histogramLit:`_histogramLit_g8ib6_23`,histogramFill:`_histogramFill_g8ib6_30`,histogramBar:`_histogramBar_g8ib6_43`,histogramGap:`_histogramGap_g8ib6_62`,histogramSeparators:`_histogramSeparators_g8ib6_68`,histogramSeparator:`_histogramSeparator_g8ib6_48`,active:`_active_g8ib6_83`};function V(e){if(!Number.isFinite(e))return 0;let t=String(e),n=t.indexOf(`.`);return n===-1?0:Math.min(6,t.length-n-1)}function H(e){let t=0;for(let n of e)t=Math.max(t,V(n));return t===0?1:Number((10**-t).toFixed(t))}function U(e,t){return Number(e.toFixed(V(t)))}function W(e,t,n){let r=t+Math.round((e-t)/n)*n;return Number(r.toFixed(V(n)))}var G=({field:e,label:t,expectedMin:n=0,expectedMax:r=1e3,control:i,displayType:a,showActivePanel:o=!1,collapsible:s=!0,startCollapsed:l=!1,showHistogram:f=!1,resolution:p,step:m,stepMarks:h})=>{let{state:{rangeFilters:g,rangeBounds:_,facetStats:v,facets:y,filterableFields:b,facetableFields:x,query:C,facetDebounceDelayMillis:w},setRangeFilter:T,resetRangeFilter:E,allowEmptySearch:D,isFetchingInitial:O}=S(),k=i??a??`input`,A=_?.[e]!==void 0,j=_?.[e]??{min:n,max:r},M=j.min,N=j.max,P=v?.[e]??j,F=Math.max(M,Math.min(N,P.min)),I=Math.max(M,Math.min(N,P.max)),R=c.default.useMemo(()=>{if(m)return m;let t=Math.max(V(M),V(N)),n=y?.[e];if(Array.isArray(n))for(let e of n)t=Math.max(t,V(Number(e.key)));return t===0?1:Number((10**-t).toFixed(t))},[m,M,N,y,e]),z=A&&M===N,H=z?n:M,G=z?r:N,K=g?.[e],q=o&&K!==void 0?B.active:void 0,J=K?K.min:M,Y=K?K.max:N,ee=K!==void 0,te=F!==M||I!==N,[X,Z]=c.default.useState([J,Y]),[ne,re]=c.default.useState(!1),[ie,ae]=c.default.useState(!1),[Q,oe]=c.default.useState(String(J)),[$,se]=c.default.useState(String(Y)),ce=c.default.useMemo(()=>{let e=V(R);return{width:`calc(${Math.max(3,M.toFixed(e).length,N.toFixed(e).length,Q.length,$.length)+1}ch + 20px)`}},[R,M,N,Q,$]);c.default.useEffect(()=>{oe(String(X[0])),se(String(X[1]))},[X]);let{finalMin:le,finalMax:ue,isValidMin:de,isValidMax:fe}=c.default.useMemo(()=>{let[e,t]=X,n=Math.max(M,Math.min(N,e)),r=Math.max(M,Math.min(N,t)),i=Math.min(n,r),a=Math.max(n,r);return{finalMin:i,finalMax:a,isValidMin:i>=M&&i<=a,isValidMax:a<=N&&a>=i}},[X,M,N]);c.default.useEffect(()=>{if(z)return;if(X[0]===M&&X[1]===N){re(!1),ae(!1);return}let t=w??500,n=setTimeout(()=>{re(!de),ae(!fe)},300),r=setTimeout(()=>{de&&fe&&(le===M&&ue===N?E(e,!1):T(e,le,ue))},t);return()=>{clearTimeout(n),clearTimeout(r)}},[le,ue,de,fe,M,N,e,E,T,w,z]),c.default.useEffect(()=>{Z([J,Y]),re(!1),ae(!1)},[J,Y,e]);let pe=c.default.useCallback(e=>{z||Z([Math.max(M,Math.min(I,e[0])),Math.max(F,Math.min(N,e[1]))])},[z,M,N,F,I]),me=c.default.useCallback(t=>{if(z)return;let n=Math.max(M,Math.min(I,t[0])),r=Math.max(F,Math.min(N,t[1]));n===M&&r===N?(Z([M,N]),E(e,!0)):Z([n,r])},[z,M,N,F,I,e,E]),he=c.default.useRef(null),ge=c.default.useCallback((t,n)=>{if(z)return;let r=he.current;if(K&&r&&r.start===t&&r.last===n){he.current=null,Z([M,N]),E(e,!0);return}let i=W(Math.max(M,F,t),M,R),a=Math.max(i,W(Math.min(N,I,n),M,R));he.current={start:t,last:n},Z([i,a])},[z,K,M,N,F,I,R,e,E]),_e=c.default.useCallback(()=>{if(z)return;let e=Q.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){oe(String(X[0]));return}let n=Math.max(M,Math.min(I,t));n<X[1]?Z([n,X[1]]):Z([M,X[1]]),oe(String(n<X[1]?n:M))},[z,Q,X,M,I]),ve=c.default.useCallback(()=>{if(z)return;let e=$.trim(),t=e===``?NaN:Number(e);if(isNaN(t)){se(String(X[1]));return}let n=Math.max(F,Math.min(N,t));n>X[0]?Z([X[0],n]):Z([X[0],N]),se(String(n>X[0]?n:N))},[z,$,X,F,N]),ye=e=>t=>{t.key===`Enter`&&e()},[be,xe]=c.default.useState(null),Se=c.default.useRef(null);c.default.useEffect(()=>{if(!f)return;let t=`${M}:${N}`;if(t===Se.current&&Se.current!==null)return;let n=y?.[e];if(!Array.isArray(n)||n.length===0)return;let r=n.filter(e=>e.value!=null&&!isNaN(Number(e.key))).map(e=>({key:e.key,value:e.value}));r.length>0&&(Se.current=t,xe(r))},[M,N,y,e,f]);let Ce=c.default.useMemo(()=>{if(!f||!be||be.length===0)return[];let e=N-M;if(e<=0)return[];let t=p??(Math.ceil(e/20)||1),n=Math.ceil(e/t);return Array.from({length:n},(e,r)=>{let i=M+r*t,a=M+(r+1)*t,o=r===n-1,s=be.filter(e=>{let t=Number(e.key);return t>=i&&(t<a||o&&t<=N)}).reduce((e,t)=>e+t.value,0),c=o?N:U(a-R,R),l=c>i?c:Math.min(a,N);return{bucketStart:i,bucketEnd:a,count:s,span:l-i,gap:o?0:Math.max(0,a-l),barEnd:l,last:c}})},[f,be,M,N,p,R]),we=c.default.useMemo(()=>Math.max(...Ce.map(e=>e.count),1),[Ce]);return f&&!O&&!x?.includes(e)&&console.warn(`RangeFilterPanel: showHistogram=true but field "${e}" is not facetable. Add .Facetable = true to this field.`),O?(0,u.jsx)(L,{title:t,variant:`slider`,withHistogram:f,collapsible:s,startCollapsed:l}):!D&&!C?null:b?.includes(e)?k===`slider`?(0,u.jsxs)(d.FilterPanelBase,{title:t,collapsed:l,collapsible:s,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),f&&Ce.length===0&&(0,u.jsx)(`div`,{className:B.histogram}),f&&Ce.length>0&&(()=>{let[e,t]=I>F&&(F>M||I<N)?[F,I]:[H,G],n=Math.max(le,e),r=Math.min(ue,t),i=G-H||1,a=e=>Math.max(0,Math.min(1,(e-H)/i)),o=e=>Math.max(0,Math.min(1,(G-e)/i)),s=a(n),c=r<n?1-s:o(r),l=e=>`calc(10px + (100% - 20px) * ${e})`,d=`inset(0 ${l(c)} 0 ${l(s)})`,f=`inset(0 ${l(o(t))} 0 ${l(a(e))})`,p=n=>n.last<e||n.bucketStart>t,m=Ce.slice(1).map((e,t)=>l(((Ce[t].barEnd+e.bucketStart)/2-H)/i)),h=(e,t)=>e.gap>0?(0,u.jsx)(`span`,{className:B.histogramGap,style:{flexGrow:e.gap}},`gap${t}`):null,g=Ce.map(e=>({...e,height:Math.max(1,Math.ceil(e.count/we*20))}));return(0,u.jsxs)(`div`,{className:B.histogram,children:[(0,u.jsx)(`div`,{className:B.histogramLayer,children:g.map((e,t)=>[(0,u.jsx)(`button`,{type:`button`,className:B.histogramBar,style:{flexGrow:e.span},"data-testid":`histogram-bar`,disabled:z||p(e),"aria-label":`${e.bucketStart} to ${e.last}: ${e.count}`,title:`${e.bucketStart} to ${e.last}: ${e.count}`,onClick:()=>ge(e.bucketStart,e.last),children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLive}`,"aria-hidden":`true`,"data-testid":`histogram-live`,style:{clipPath:f},children:g.map((e,t)=>[(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:`${B.histogramLayer} ${B.histogramLit}`,"aria-hidden":`true`,"data-testid":`histogram-lit`,style:{clipPath:d},children:g.map((e,t)=>[(0,u.jsx)(`span`,{className:B.histogramBar,style:{flexGrow:e.span},children:(0,u.jsx)(`span`,{className:B.histogramFill,style:{height:`${e.height}px`}})},t),h(e,t)])}),(0,u.jsx)(`div`,{className:B.histogramSeparators,"aria-hidden":`true`,children:m.map((e,t)=>(0,u.jsx)(`span`,{className:B.histogramSeparator,style:{left:e}},t))})]})})(),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:H,max:G,step:R,stepMarks:h,value:z?[H,G]:[W(le,H,R),W(ue,H,R)],isRange:!0,onChange:e=>pe(e),onFinalChange:e=>me(e),disabled:z,activeMin:F,activeMax:I,isFaceted:te,highlightFaceted:ee,"aria-label":t||`Filter by ${e}`})}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`,justifyContent:`space-between`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ye(_e),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ve,onKeyDown:ye(ve),disabled:z,isValid:z||!ie})]})]}):(0,u.jsxs)(d.FilterPanelBase,{title:t,className:q,children:[z&&(0,u.jsxs)(`div`,{className:B.disabledMessage,children:[`No adjustable range (all results have the same value: `,M,`).`]}),(0,u.jsxs)(`div`,{style:{display:`flex`,gap:`10px`,alignItems:`flex-start`},children:[(0,u.jsx)(d.InputField,{label:`Min:`,type:`number`,style:ce,value:z?String(M):Q,min:M,max:U(Math.min(I,X[1]-R),R),onChange:e=>oe(e.target.value),onBlur:_e,onKeyDown:ye(_e),disabled:z,isValid:z||!ne}),(0,u.jsx)(d.InputField,{label:`Max:`,type:`number`,style:ce,value:z?String(N):$,min:U(Math.max(F,X[0]+R),R),max:N,onChange:e=>se(e.target.value),onBlur:ve,onKeyDown:ye(ve),disabled:z,isValid:z||!ie})]})]}):(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{style:{color:`red`,fontSize:`12px`},children:[`Cannot render filter for "`,e,`": missing filterable.`]})})},K={list:`_list_apmmi_2`,grid:`_grid_apmmi_9`,count:`_count_apmmi_22`,countValue:`_countValue_apmmi_31`,chip:`_chip_apmmi_35`,error:`_error_apmmi_40`,active:`_active_apmmi_46`};function q(e,t){if(!t)return null;let n=0,r=!1;for(let i of t){let t=Number(i.key);if(!(Number.isNaN(t)||!e.contains(t))){if(typeof i.value!=`number`)return null;n+=i.value,r=!0}}return r?n:0}var J=({field:e,label:t,width:n,buckets:r,control:i,displayType:a,layout:o=`list`,showCount:s=!0,showEmpty:l=!1,limit:f,showActivePanel:p=!1,collapsible:m=!0,startCollapsed:h=!1})=>{let{state:{facets:g,filterableFields:_,facetableFields:v,bucketFilters:y,rangeBounds:b,facetStats:x,query:C},toggleBucketFilter:w,isFetchingInitial:T,allowEmptySearch:E}=S(),D=i??a??`checkbox`,O=g?.[e],k=y[e]??[],[A,j]=(0,c.useState)(f??1/0);(0,c.useEffect)(()=>{j(f??1/0)},[f,O]);let M=b?.[e]??x?.[e],N=(0,c.useMemo)(()=>{let e=[];if(M&&e.push(M.min,M.max),Array.isArray(O))for(let t of O)e.push(Number(t.key));return H(e.filter(Number.isFinite))},[M,O]),P=(0,c.useMemo)(()=>{let e=M?.min??-Number.MAX_VALUE,t=M?.max??Number.MAX_VALUE,i=(n,r,i)=>({label:i??(n===void 0?`up to ${r}`:r===void 0?`${n} and up`:`${n}-${r}`),range:{min:n??e,max:r??t},contains:e=>(n===void 0||e>=n)&&(r===void 0||e<=r)});if(r&&r.length>0)return r.map(e=>i(e.min,e.max,e.label));if(Array.isArray(n)){let e=[...n].sort((e,t)=>e-t),t=[];for(let n=0;n<e.length-1;n++)t.push(i(e[n],U(e[n+1]-N,N)));return t}if(typeof n==`number`&&n>0&&M){let e=[],t=Math.floor(M.min/n)*n;for(let r=t;r<=M.max;r=U(r+n,N))e.push(i(U(r,N),U(r+n-N,N)));return e}return[]},[r,n,M,N]);if(T||!g)return(0,u.jsx)(L,{title:t,rows:Math.max(1,Math.min(P.length||5,8)),collapsible:m,startCollapsed:h});if(!E&&!C)return null;if(!_?.includes(e))return(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,children:(0,u.jsxs)(`div`,{className:K.error,children:[`Cannot render buckets for "`,e,`": field is not filterable.`]})});let F=v?.includes(e)&&Array.isArray(O),I=e=>k.some(t=>t.min===e.range.min&&t.max===e.range.max),R=P.map(e=>({bucket:e,count:F?q(e,O):null}));if(l||(R=R.filter(e=>e.count!==0||I(e.bucket))),R.length===0)return null;let z=R.slice(0,A),B=(t,n)=>{let r=I(t),i=n===0&&!r,a=s&&(n??0)>0?`${n}`:``,c=()=>w(e,t.range,D===`radio`);if(D===`radio`){let n=(0,u.jsx)(d.RadioButton,{id:`${e}-${t.range.min}-${t.range.max}`,name:e,value:t.label,label:o===`grid`&&a?`${t.label} (${a})`:t.label,checked:r,onChange:c,disabled:i});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[n,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):n}if(D===`button`){let e=(0,u.jsx)(d.Button,{variant:r?`primary`:`secondary`,onClick:c,disabled:i,size:`micro`,className:K.chip,children:o===`grid`&&a?`${t.label} (${a})`:t.label});return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[e,(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):e}return o===`list`?(0,u.jsxs)(`div`,{className:K.count,children:[(0,u.jsx)(d.Checkbox,{label:t.label,score:``,checked:r,onChange:c,disabled:i}),(0,u.jsx)(`span`,{className:K.countValue,children:a})]}):(0,u.jsx)(d.Checkbox,{label:t.label,score:a?` (${a})`:``,checked:r,onChange:c,disabled:i})};return(0,u.jsx)(d.FilterPanelBase,{title:t,collapsible:m,collapsed:m?h:!1,className:p&&k.length>0?K.active:void 0,children:(0,u.jsxs)(`ul`,{className:o===`grid`?K.grid:K.list,style:{listStyle:`none`,padding:0,margin:0},children:[z.map(({bucket:e,count:t})=>(0,u.jsx)(`li`,{children:B(e,t)},`${e.range.min}-${e.range.max}`)),z.length<R.length&&(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,onClick:()=>j(R.length),children:`Show ${R.length-z.length} more of ${R.length} total`})})]})})},Y={grid:`_grid_xm2uh_2`,chip:`_chip_xm2uh_17`,chipLabel:`_chipLabel_xm2uh_28`},ee=(0,c.memo)(({field:e,value:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})})),te=(0,c.memo)(({field:e,min:t,max:n,onReset:r})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t} – ${n}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t,` – `,n]})})})),X=(0,c.memo)(({field:e,label:t,onReset:n})=>(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:n,iconRight:(0,u.jsx)(f.X_or_error,{}),variant:`primary`,size:`micro`,className:Y.chip,title:`${e}: ${t}`,children:(0,u.jsxs)(`span`,{className:Y.chipLabel,children:[e,`: `,t]})})}));function Z(){let{state:{filters:e,rangeFilters:t,bucketFilters:n},resetFilters:r,resetSingleFilter:i,resetRangeFilter:a,resetBucketFilter:o}=S(),s=(0,c.useMemo)(()=>Object.entries(e).map(([e,t])=>t.map(t=>({field:e,value:t}))).flat(),[e]),l=(0,c.useMemo)(()=>Object.entries(t).map(([e,{min:t,max:n}])=>({field:e,min:t,max:n})),[t]),f=(0,c.useMemo)(()=>Object.entries(n).flatMap(([e,t])=>t.map(t=>({field:e,range:t,label:`${t.min}-${t.max}`}))),[n]);return(0,c.useMemo)(()=>Object.keys(e).length>0||Object.keys(t).length>0||f.length>0,[e,t,f])?(0,u.jsx)(d.FilterPanelBase,{collapsible:!1,title:`Active filters`,children:(0,u.jsxs)(`ul`,{className:Y.grid,children:[s.map(({field:e,value:t})=>(0,u.jsx)(ee,{field:e,value:t,onReset:()=>i(e,t)},`${e}-${t}`)),l.map(({field:e,min:t,max:n})=>(0,u.jsx)(te,{field:e,min:t,max:n,onReset:()=>a(e)},e)),f.map(({field:e,range:t,label:n})=>(0,u.jsx)(X,{field:e,label:n,onReset:()=>o(e,t)},`${e}-${t.min}-${t.max}`)),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{onClick:r,size:`micro`,variant:`ghost`,children:`Reset`})})]})}):null}var ne={select:`_select_nwf7i_1`,radioGroup:`_radioGroup_nwf7i_6`},re=({control:e,displayType:t,collapsible:n=!0,startCollapsed:r=!1})=>{let i=e??(t===`radio`?`radio`:`select`),{state:{sortableFields:a,sortBy:o,sortAscending:s},setSort:c,isFetchingInitial:l}=S();if(l)return(0,u.jsx)(L,{title:`Sort by`,rows:i===`radio`?3:1,collapsible:n,startCollapsed:r});if(!a||a.length===0)return null;let f=o?`${o}:${s?`asc`:`desc`}`:`none`,p=[{label:`None`,value:`none`},...a.flatMap(e=>[{label:`${e} (asc)`,value:`${e}:asc`},{label:`${e} (desc)`,value:`${e}:desc`}])],m=e=>{if(e===`none`||e===``)c(null,!0);else{let[t,n]=e.split(`:`);c(t,n===`asc`)}};return(0,u.jsx)(d.FilterPanelBase,{title:`Sort by`,collapsible:n,collapsed:n?r:!1,children:i===`select`?(0,u.jsx)(d.Select,{value:f,onValueChange:m,options:p,placeholder:`Select sort...`,"aria-label":`Sort by`}):(0,u.jsx)(`div`,{className:ne.radioGroup,children:p.map(e=>(0,u.jsx)(d.RadioButton,{id:`sort-${e.value}`,name:`sort-by`,value:e.value,label:e.label,checked:f===e.value,onChange:e=>m(e.target.value)},e.value))})})},ie={list:`_list_1y4fk_1`};function ae(){let{state:{searchSettings:e},setSearchSettings:t}=S(),[n,r]=(0,c.useState)(!1),i=(e,n)=>{let r=parseInt(n,10);isNaN(r)||t({[e]:r})},a=(e,n)=>{t({[e]:n})},o=(n,r)=>{let i=parseInt(r,10);isNaN(i)||t({coverageSetup:{...e.coverageSetup,[n]:i}})},s=(n,r)=>{t({coverageSetup:{...e.coverageSetup,[n]:r}})};return(0,u.jsx)(d.FilterPanelBase,{collapsed:!0,title:`Settings`,children:(0,u.jsxs)(`ul`,{className:ie.list,children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Max Results`,type:`number`,value:e.maxNumberOfRecordsToReturn.toString(),onChange:e=>i(`maxNumberOfRecordsToReturn`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Coverage Depth`,type:`number`,value:e.coverageDepth.toString(),onChange:e=>i(`coverageDepth`,e.target.value)})}),(0,u.jsxs)(`li`,{children:[(0,u.jsx)(d.InputField,{label:`Minimum Score (16 bit)`,type:`number`,value:e.minimumScore.toString(),min:`0`,max:`65535`,onChange:e=>{let n=parseFloat(e.target.value);isNaN(n)||t({minimumScore:n})}}),(0,u.jsx)(`div`,{style:{padding:`10px 10px 20px 10px`},children:(0,u.jsx)(d.Slider,{min:0,max:65535,step:1,value:Math.max(0,Math.min(65535,Math.round(e.minimumScore))),onChange:e=>{t({minimumScore:e})},"aria-label":`Minimum score`})})]}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Placeholder text`,type:`text`,value:e.placeholderText,onChange:e=>{t({placeholderText:e.target.value})}})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Show score`,checked:e.showScore,onChange:e=>a(`showScore`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Enable Coverage`,checked:e.enableCoverage,onChange:e=>a(`enableCoverage`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Remove Duplicates`,checked:e.removeDuplicates,onChange:e=>a(`removeDuplicates`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.Button,{variant:`ghost`,size:`micro`,iconRight:n?(0,u.jsx)(f.ArrowDown,{}):(0,u.jsx)(f.ArrowRight,{}),onClick:()=>r(e=>!e),children:n?`Hide Coverage Setup`:`Show Coverage Setup`})}),n&&(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Query`,checked:e.coverageSetup.coverWholeQuery,onChange:e=>s(`coverWholeQuery`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Whole Words`,checked:e.coverageSetup.coverWholeWords,onChange:e=>s(`coverWholeWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Fuzzy Words`,checked:e.coverageSetup.coverFuzzyWords,onChange:e=>s(`coverFuzzyWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Joined Words`,checked:e.coverageSetup.coverJoinedWords,onChange:e=>s(`coverJoinedWords`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Cover Prefix Suffix`,checked:e.coverageSetup.coverPrefixSuffix,onChange:e=>s(`coverPrefixSuffix`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Truncate`,checked:e.coverageSetup.truncate,onChange:e=>s(`truncate`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.ToggleSwitch,{label:`Include Pattern Matches`,checked:e.coverageSetup.includePatternMatches,onChange:e=>s(`includePatternMatches`,e)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Levenshtein Max Word Size`,type:`number`,value:e.coverageSetup.levenshteinMaxWordSize.toString(),onChange:e=>o(`levenshteinMaxWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Min Word Size`,type:`number`,value:e.coverageSetup.minWordSize.toString(),onChange:e=>o(`minWordSize`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Limit`,type:`number`,value:e.coverageSetup.truncateWordHitLimit.toString(),onChange:e=>o(`truncateWordHitLimit`,e.target.value)})}),(0,u.jsx)(`li`,{children:(0,u.jsx)(d.InputField,{label:`Truncate Word Hit Tolerance`,type:`number`,value:e.coverageSetup.truncateWordHitTolerance.toString(),onChange:e=>o(`truncateWordHitTolerance`,e.target.value)})})]})]})})}var Q=class extends c.Component{constructor(e){super(e),this.state={hasError:!1,error:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[SearchErrorBoundary] Caught error:`,e,t)}reset=()=>{this.setState({hasError:!1,error:null})};render(){return this.state.hasError&&this.state.error?this.props.fallback?this.props.fallback(this.state.error,this.reset):(0,u.jsxs)(`div`,{style:{padding:`2rem`,backgroundColor:`#fee`,border:`2px solid #c33`,borderRadius:`8px`,maxWidth:`600px`,margin:`2rem auto`},children:[(0,u.jsx)(`h2`,{style:{color:`#c33`,marginTop:0},children:`⚠️ Search Initialization Error`}),(0,u.jsxs)(`p`,{style:{marginBottom:`1rem`},children:[(0,u.jsx)(`strong`,{children:`Error:`}),` `,this.state.error.message]}),(0,u.jsxs)(`div`,{style:{backgroundColor:`#fff`,padding:`1rem`,borderRadius:`4px`,marginBottom:`1rem`,fontSize:`0.9rem`},children:[(0,u.jsx)(`strong`,{children:`💡 Common fixes:`}),(0,u.jsxs)(`ul`,{style:{marginBottom:0,paddingLeft:`1.5rem`},children:[(0,u.jsx)(`li`,{children:`Check browser console for detailed error messages`}),(0,u.jsx)(`li`,{children:`Verify the url passed to SearchProvider is correct`}),(0,u.jsx)(`li`,{children:`Verify your bearer token is valid (create or check it on the Indx Dashboard)`}),(0,u.jsx)(`li`,{children:`Ensure INDX server is running`}),(0,u.jsx)(`li`,{children:`Check dataset name spelling`})]})]}),(0,u.jsx)(d.Button,{variant:`primary`,size:`micro`,onClick:this.reset,children:`Try Again`})]}):this.props.children}};function oe(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={fieldName:t.fieldName,vector:c,maxResults:t.maxResults??10};t.filter&&(l.filter=t.filter);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/vector`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`VectorSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Vector search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.maxResults,t.filter,n,r,i,a])}}function $(e,t){let{url:n,team:r,dataset:i,authenticatedFetch:a}=S(),[o,s]=(0,c.useState)(null),[l,u]=(0,c.useState)(!1),[d,f]=(0,c.useState)(void 0);return{results:o,isLoading:l,error:d,search:(0,c.useCallback)(async o=>{u(!0),f(void 0);try{let c=await e(o),l={text:o,embeddingField:t.fieldName,vector:c,maxNumberOfRecordsToReturn:t.maxResults??10,alpha:t.alpha??.5};t.filter&&(l.filter=t.filter),t.timeoutMs&&(l.timeOutLimitMilliseconds=t.timeoutMs);let u=await a(`${n}/api/teams/${r}/datasets/${i}/search/hybrid`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(l)});if(!u.ok)throw await m.fromResponse(`HybridSearch`,u);let d=await u.json();if(d.length===0){s([]);return}let f=d.map(e=>e.documentKey),p=await a(`${n}/api/teams/${r}/datasets/${i}/documents/lookup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(f)});if(!p.ok)throw await m.fromResponse(`GetJson`,p);s((await p.json()).map((e,t)=>({document:e,documentKey:f[t],score:d[t].score})))}catch(e){f(e instanceof Error?e.message:`Hybrid search failed`),s(null)}finally{u(!1)}},[e,t.fieldName,t.alpha,t.maxResults,t.filter,t.timeoutMs,n,r,i,a])}}exports.ActiveFiltersPanel=Z,exports.BucketFilterPanel=J,exports.FilterPanelSkeleton=L,exports.IndxApiError=m,exports.RangeFilterPanel=G,exports.SearchContext=b,exports.SearchErrorBoundary=Q,exports.SearchInput=C,exports.SearchProvider=x,exports.SearchResult=E,exports.SearchResultRow=P,exports.SearchResults=M,exports.SearchResultsSkeleton=k,exports.SearchSettingsPanel=ae,exports.SortByPanel=re,exports.ValueFilterPanel=z,exports.useHybridSearch=$,exports.useSearch=S,exports.useSearchContext=S,exports.useVectorSearch=oe;
package/dist/index.es.js CHANGED
@@ -1111,16 +1111,17 @@ 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_g8ib6_1",
1115
+ histogram: "_histogram_g8ib6_6",
1116
+ histogramLayer: "_histogramLayer_g8ib6_14",
1117
+ histogramLive: "_histogramLive_g8ib6_22",
1118
+ histogramLit: "_histogramLit_g8ib6_23",
1119
+ histogramFill: "_histogramFill_g8ib6_30",
1120
+ histogramBar: "_histogramBar_g8ib6_43",
1121
+ histogramGap: "_histogramGap_g8ib6_62",
1122
+ histogramSeparators: "_histogramSeparators_g8ib6_68",
1123
+ histogramSeparator: "_histogramSeparator_g8ib6_48",
1124
+ active: "_active_g8ib6_83"
1124
1125
  };
1125
1126
  //#endregion
1126
1127
  //#region src/utils/numeric.ts
@@ -1143,277 +1144,282 @@ function oe(e, t, n) {
1143
1144
  let r = t + Math.round((e - t) / n) * n;
1144
1145
  return Number(r.toFixed(ie(n)));
1145
1146
  }
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] ?? {
1147
+ 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 }) => {
1148
+ 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
1149
  min: r,
1149
1150
  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(() => {
1151
+ }, 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
1152
  if (m) return m;
1152
- let e = Math.max(ie(M), ie(N)), n = b?.[t];
1153
+ let e = Math.max(ie(N), ie(P)), n = S?.[t];
1153
1154
  if (Array.isArray(n)) for (let t of n) e = Math.max(e, ie(Number(t.key)));
1154
1155
  return e === 0 ? 1 : Number((10 ** -e).toFixed(e));
1155
1156
  }, [
1156
1157
  m,
1157
- M,
1158
1158
  N,
1159
- b,
1159
+ P,
1160
+ S,
1160
1161
  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)` };
1162
+ ]), 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(() => {
1163
+ let e = ie(z);
1164
+ return { width: `calc(${Math.max(3, N.toFixed(e).length, P.toFixed(e).length, ce.length, $.length) + 1}ch + 20px)` };
1164
1165
  }, [
1165
- R,
1166
- M,
1166
+ z,
1167
1167
  N,
1168
- Q,
1169
- le
1168
+ P,
1169
+ ce,
1170
+ $
1170
1171
  ]);
1171
1172
  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);
1173
+ le(String(J[0])), ue(String(J[1]));
1174
+ }, [J]);
1175
+ let { finalMin: fe, finalMax: pe, isValidMin: me, isValidMax: he } = e.useMemo(() => {
1176
+ 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
1177
  return {
1177
1178
  finalMin: i,
1178
1179
  finalMax: a,
1179
- isValidMin: i >= M && i <= a,
1180
- isValidMax: a <= N && a >= i
1180
+ isValidMin: i >= N && i <= a,
1181
+ isValidMax: a <= P && a >= i
1181
1182
  };
1182
1183
  }, [
1183
- q,
1184
- M,
1185
- N
1184
+ J,
1185
+ N,
1186
+ P
1186
1187
  ]);
1187
1188
  e.useEffect(() => {
1188
- if (z) return;
1189
- if (q[0] === M && q[1] === N) {
1190
- re(!1), se(!1);
1189
+ if (B) return;
1190
+ if (J[0] === N && J[1] === P) {
1191
+ ae(!1), Q(!1);
1191
1192
  return;
1192
1193
  }
1193
- let e = T ?? 500, n = setTimeout(() => {
1194
- re(!pe), se(!me);
1194
+ let e = E ?? 500, n = setTimeout(() => {
1195
+ ae(!me), Q(!he);
1195
1196
  }, 300), r = setTimeout(() => {
1196
- pe && me && (de === M && fe === N ? D(t, !1) : E(t, de, fe));
1197
+ me && he && (fe === N && pe === P ? O(t, !1) : D(t, fe, pe));
1197
1198
  }, e);
1198
1199
  return () => {
1199
1200
  clearTimeout(n), clearTimeout(r);
1200
1201
  };
1201
1202
  }, [
1202
- de,
1203
1203
  fe,
1204
1204
  pe,
1205
1205
  me,
1206
- M,
1206
+ he,
1207
1207
  N,
1208
+ P,
1208
1209
  t,
1210
+ O,
1209
1211
  D,
1210
1212
  E,
1211
- T,
1212
- z
1213
+ B
1213
1214
  ]), e.useEffect(() => {
1214
- J([te, W]), re(!1), se(!1);
1215
+ Y([W, G]), ae(!1), Q(!1);
1215
1216
  }, [
1216
- te,
1217
1217
  W,
1218
+ G,
1218
1219
  t
1219
1220
  ]);
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]))]);
1221
+ let ge = e.useCallback((e) => {
1222
+ B || Y([Math.max(N, Math.min(R, e[0])), Math.max(L, Math.min(P, e[1]))]);
1222
1223
  }, [
1223
- z,
1224
- M,
1224
+ B,
1225
1225
  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]);
1226
+ P,
1227
+ L,
1228
+ R
1229
+ ]), _e = e.useCallback((e) => {
1230
+ if (B) return;
1231
+ let n = Math.max(N, Math.min(R, e[0])), r = Math.max(L, Math.min(P, e[1]));
1232
+ n === N && r === P ? (Y([N, P]), O(t, !0)) : Y([n, r]);
1232
1233
  }, [
1233
- z,
1234
- M,
1234
+ B,
1235
1235
  N,
1236
- I,
1236
+ P,
1237
1237
  L,
1238
+ R,
1238
1239
  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);
1240
+ O
1241
+ ]), ve = e.useRef(null), ye = e.useCallback((e, n) => {
1242
+ if (B) return;
1243
+ let r = ve.current;
1244
+ if (U && r && r.start === e && r.last === n) {
1245
+ ve.current = null, Y([N, P]), O(t, !0);
1245
1246
  return;
1246
1247
  }
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 = {
1248
+ let i = oe(Math.max(N, L, e), N, z), a = Math.max(i, oe(Math.min(P, R, n), N, z));
1249
+ ve.current = {
1249
1250
  start: e,
1250
1251
  last: n
1251
- }, J([i, a]);
1252
+ }, Y([i, a]);
1252
1253
  }, [
1253
- z,
1254
- H,
1255
- M,
1254
+ B,
1255
+ U,
1256
1256
  N,
1257
- I,
1257
+ P,
1258
1258
  L,
1259
1259
  R,
1260
+ z,
1260
1261
  t,
1261
- D
1262
- ]), ye = e.useCallback(() => {
1263
- if (z) return;
1264
- let e = Q.trim(), t = e === "" ? NaN : Number(e);
1262
+ O
1263
+ ]), be = e.useCallback(() => {
1264
+ if (B) return;
1265
+ let e = ce.trim(), t = e === "" ? NaN : Number(e);
1265
1266
  if (isNaN(t)) {
1266
- ce(String(q[0]));
1267
+ le(String(J[0]));
1267
1268
  return;
1268
1269
  }
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));
1270
+ let n = Math.max(N, Math.min(R, t));
1271
+ n < J[1] ? Y([n, J[1]]) : Y([N, J[1]]), le(String(n < J[1] ? n : N));
1271
1272
  }, [
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);
1273
+ B,
1274
+ ce,
1275
+ J,
1276
+ N,
1277
+ R
1278
+ ]), xe = e.useCallback(() => {
1279
+ if (B) return;
1280
+ let e = $.trim(), t = e === "" ? NaN : Number(e);
1280
1281
  if (isNaN(t)) {
1281
- $(String(q[1]));
1282
+ ue(String(J[1]));
1282
1283
  return;
1283
1284
  }
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));
1285
+ let n = Math.max(L, Math.min(P, t));
1286
+ n > J[0] ? Y([J[0], n]) : Y([J[0], P]), ue(String(n > J[0] ? n : P));
1286
1287
  }, [
1287
- z,
1288
- le,
1289
- q,
1290
- I,
1291
- N
1292
- ]), xe = (e) => (t) => {
1288
+ B,
1289
+ $,
1290
+ J,
1291
+ L,
1292
+ P
1293
+ ]), Se = (e) => (t) => {
1293
1294
  t.key === "Enter" && e();
1294
- }, [Se, Ce] = e.useState(null), we = e.useRef(null);
1295
+ }, [Ce, we] = e.useState(null), Te = e.useRef(null);
1295
1296
  e.useEffect(() => {
1296
1297
  if (!u) return;
1297
- let e = `${M}:${N}`;
1298
- if (e === we.current && we.current !== null) return;
1299
- let n = b?.[t];
1298
+ let e = `${N}:${P}`;
1299
+ if (e === Te.current && Te.current !== null) return;
1300
+ let n = S?.[t];
1300
1301
  if (!Array.isArray(n) || n.length === 0) return;
1301
1302
  let r = n.filter((e) => e.value != null && !isNaN(Number(e.key))).map((e) => ({
1302
1303
  key: e.key,
1303
1304
  value: e.value
1304
1305
  }));
1305
- r.length > 0 && (we.current = e, Ce(r));
1306
+ r.length > 0 && (Te.current = e, we(r));
1306
1307
  }, [
1307
- M,
1308
1308
  N,
1309
- b,
1309
+ P,
1310
+ S,
1310
1311
  t,
1311
1312
  u
1312
1313
  ]);
1313
- let Te = e.useMemo(() => {
1314
- if (!u || !Se || Se.length === 0) return [];
1315
- let e = N - M;
1314
+ let Ee = e.useMemo(() => {
1315
+ if (!u || !Ce || Ce.length === 0) return [];
1316
+ let e = P - N;
1316
1317
  if (e <= 0) return [];
1317
1318
  let t = d ?? (Math.ceil(e / 20) || 1), n = Math.ceil(e / t);
1318
1319
  return Array.from({ length: n }, (e, r) => {
1319
- let i = M + r * t, a = M + (r + 1) * t, o = r === n - 1;
1320
+ let i = N + r * t, a = N + (r + 1) * t, o = r === n - 1, s = Ce.filter((e) => {
1321
+ let t = Number(e.key);
1322
+ return t >= i && (t < a || o && t <= P);
1323
+ }).reduce((e, t) => e + t.value, 0), c = o ? P : Z(a - z, z), l = c > i ? c : Math.min(a, P);
1320
1324
  return {
1321
1325
  bucketStart: i,
1322
1326
  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)
1327
+ count: s,
1328
+ span: l - i,
1329
+ gap: o ? 0 : Math.max(0, a - l),
1330
+ barEnd: l,
1331
+ last: c
1329
1332
  };
1330
1333
  });
1331
1334
  }, [
1332
1335
  u,
1333
- Se,
1334
- M,
1336
+ Ce,
1335
1337
  N,
1338
+ P,
1336
1339
  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, {
1340
+ z
1341
+ ]), De = e.useMemo(() => Math.max(...Ee.map((e) => e.count), 1), [Ee]);
1342
+ 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
1343
  title: n,
1341
1344
  variant: "slider",
1342
1345
  withHistogram: u,
1343
1346
  collapsible: c,
1344
1347
  startCollapsed: l
1345
- }) : !O && !w ? null : S?.includes(t) ? A === "slider" ? /* @__PURE__ */ p(g, {
1348
+ }) : !k && !T ? null : C?.includes(t) ? ee === "slider" ? /* @__PURE__ */ p(g, {
1346
1349
  title: n,
1347
1350
  collapsed: l,
1348
1351
  collapsible: c,
1349
- className: U,
1352
+ className: te,
1350
1353
  children: [
1351
- z && /* @__PURE__ */ p("div", {
1354
+ B && /* @__PURE__ */ p("div", {
1352
1355
  className: X.disabledMessage,
1353
1356
  children: [
1354
1357
  "No adjustable range (all results have the same value: ",
1355
- M,
1358
+ N,
1356
1359
  ")."
1357
1360
  ]
1358
1361
  }),
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) => ({
1362
+ u && Ee.length === 0 && /* @__PURE__ */ f("div", { className: X.histogram }),
1363
+ u && Ee.length > 0 && (() => {
1364
+ let [e, t] = R > L && (L > N || R < P) ? [L, R] : [V, H], n = Math.max(fe, e), r = Math.min(pe, t), i = H - V || 1, a = (e) => Math.max(0, Math.min(1, (e - V) / 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})`, u = `inset(0 ${l(c)} 0 ${l(s)})`, d = `inset(0 ${l(o(t))} 0 ${l(a(e))})`, m = (n) => n.last < e || n.bucketStart > t, h = Ee.slice(1).map((e, t) => l(((Ee[t].barEnd + e.bucketStart) / 2 - V) / i)), g = (e, t) => e.gap > 0 ? /* @__PURE__ */ f("span", {
1365
+ className: X.histogramGap,
1366
+ style: { flexGrow: e.gap }
1367
+ }, `gap${t}`) : null, _ = Ee.map((e) => ({
1362
1368
  ...e,
1363
- height: Math.max(1, Math.ceil(e.count / Ee * 20))
1369
+ height: Math.max(1, Math.ceil(e.count / De * 20))
1364
1370
  }));
1365
1371
  return /* @__PURE__ */ p("div", {
1366
1372
  className: X.histogram,
1367
1373
  children: [
1368
1374
  /* @__PURE__ */ f("div", {
1369
1375
  className: X.histogramLayer,
1370
- children: _.map((e, t) => /* @__PURE__ */ f("button", {
1376
+ children: _.map((e, t) => [/* @__PURE__ */ f("button", {
1371
1377
  type: "button",
1372
1378
  className: X.histogramBar,
1373
1379
  style: { flexGrow: e.span },
1374
1380
  "data-testid": "histogram-bar",
1375
- disabled: z || h(e),
1381
+ disabled: B || m(e),
1376
1382
  "aria-label": `${e.bucketStart} to ${e.last}: ${e.count}`,
1377
1383
  title: `${e.bucketStart} to ${e.last}: ${e.count}`,
1378
- onClick: () => ve(e.bucketStart, e.last),
1384
+ onClick: () => ye(e.bucketStart, e.last),
1379
1385
  children: /* @__PURE__ */ f("span", {
1380
1386
  className: X.histogramFill,
1381
1387
  style: { height: `${e.height}px` }
1382
1388
  })
1383
- }, t))
1389
+ }, t), g(e, t)])
1384
1390
  }),
1385
1391
  /* @__PURE__ */ f("div", {
1386
1392
  className: `${X.histogramLayer} ${X.histogramLive}`,
1387
1393
  "aria-hidden": "true",
1388
1394
  "data-testid": "histogram-live",
1389
- style: { clipPath: m },
1390
- children: _.map((e, t) => /* @__PURE__ */ f("span", {
1395
+ style: { clipPath: d },
1396
+ children: _.map((e, t) => [/* @__PURE__ */ f("span", {
1391
1397
  className: X.histogramBar,
1392
1398
  style: { flexGrow: e.span },
1393
1399
  children: /* @__PURE__ */ f("span", {
1394
1400
  className: X.histogramFill,
1395
1401
  style: { height: `${e.height}px` }
1396
1402
  })
1397
- }, t))
1403
+ }, t), g(e, t)])
1398
1404
  }),
1399
1405
  /* @__PURE__ */ f("div", {
1400
1406
  className: `${X.histogramLayer} ${X.histogramLit}`,
1401
1407
  "aria-hidden": "true",
1402
1408
  "data-testid": "histogram-lit",
1403
- style: { clipPath: d },
1404
- children: _.map((e, t) => /* @__PURE__ */ f("span", {
1409
+ style: { clipPath: u },
1410
+ children: _.map((e, t) => [/* @__PURE__ */ f("span", {
1405
1411
  className: X.histogramBar,
1406
1412
  style: { flexGrow: e.span },
1407
1413
  children: /* @__PURE__ */ f("span", {
1408
1414
  className: X.histogramFill,
1409
1415
  style: { height: `${e.height}px` }
1410
1416
  })
1411
- }, t))
1417
+ }, t), g(e, t)])
1412
1418
  }),
1413
1419
  /* @__PURE__ */ f("div", {
1414
1420
  className: X.histogramSeparators,
1415
1421
  "aria-hidden": "true",
1416
- children: g.map((e, t) => /* @__PURE__ */ f("span", {
1422
+ children: h.map((e, t) => /* @__PURE__ */ f("span", {
1417
1423
  className: X.histogramSeparator,
1418
1424
  style: { left: e }
1419
1425
  }, t))
@@ -1424,18 +1430,19 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1424
1430
  /* @__PURE__ */ f("div", {
1425
1431
  style: { padding: "10px 10px 20px 10px" },
1426
1432
  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)],
1433
+ min: V,
1434
+ max: H,
1435
+ step: z,
1436
+ stepMarks: h,
1437
+ value: B ? [V, H] : [oe(fe, V, z), oe(pe, V, z)],
1431
1438
  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,
1439
+ onChange: (e) => ge(e),
1440
+ onFinalChange: (e) => _e(e),
1441
+ disabled: B,
1442
+ activeMin: L,
1443
+ activeMax: R,
1444
+ isFaceted: q,
1445
+ highlightFaceted: K,
1439
1446
  "aria-label": n || `Filter by ${t}`
1440
1447
  })
1441
1448
  }),
@@ -1449,38 +1456,38 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1449
1456
  children: [/* @__PURE__ */ f(_, {
1450
1457
  label: "Min:",
1451
1458
  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
1459
+ style: de,
1460
+ value: B ? String(N) : ce,
1461
+ min: N,
1462
+ max: Z(Math.min(R, J[1] - z), z),
1463
+ onChange: (e) => le(e.target.value),
1464
+ onBlur: be,
1465
+ onKeyDown: Se(be),
1466
+ disabled: B,
1467
+ isValid: B || !re
1461
1468
  }), /* @__PURE__ */ f(_, {
1462
1469
  label: "Max:",
1463
1470
  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
1471
+ style: de,
1472
+ value: B ? String(P) : $,
1473
+ min: Z(Math.max(L, J[0] + z), z),
1474
+ max: P,
1475
+ onChange: (e) => ue(e.target.value),
1476
+ onBlur: xe,
1477
+ onKeyDown: Se(xe),
1478
+ disabled: B,
1479
+ isValid: B || !se
1473
1480
  })]
1474
1481
  })
1475
1482
  ]
1476
1483
  }) : /* @__PURE__ */ p(g, {
1477
1484
  title: n,
1478
- className: U,
1479
- children: [z && /* @__PURE__ */ p("div", {
1485
+ className: te,
1486
+ children: [B && /* @__PURE__ */ p("div", {
1480
1487
  className: X.disabledMessage,
1481
1488
  children: [
1482
1489
  "No adjustable range (all results have the same value: ",
1483
- M,
1490
+ N,
1484
1491
  ")."
1485
1492
  ]
1486
1493
  }), /* @__PURE__ */ p("div", {
@@ -1492,27 +1499,27 @@ var se = ({ field: t, label: n, expectedMin: r = 0, expectedMax: i = 1e3, contro
1492
1499
  children: [/* @__PURE__ */ f(_, {
1493
1500
  label: "Min:",
1494
1501
  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
1502
+ style: de,
1503
+ value: B ? String(N) : ce,
1504
+ min: N,
1505
+ max: Z(Math.min(R, J[1] - z), z),
1506
+ onChange: (e) => le(e.target.value),
1507
+ onBlur: be,
1508
+ onKeyDown: Se(be),
1509
+ disabled: B,
1510
+ isValid: B || !re
1504
1511
  }), /* @__PURE__ */ f(_, {
1505
1512
  label: "Max:",
1506
1513
  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
1514
+ style: de,
1515
+ value: B ? String(P) : $,
1516
+ min: Z(Math.max(L, J[0] + z), z),
1517
+ max: P,
1518
+ onChange: (e) => ue(e.target.value),
1519
+ onBlur: xe,
1520
+ onKeyDown: Se(xe),
1521
+ disabled: B,
1522
+ isValid: B || !se
1516
1523
  })]
1517
1524
  })]
1518
1525
  }) : /* @__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_g8ib6_1{font:var(--text-2xs);margin-bottom:10px}._histogram_g8ib6_6{height:20px;margin-bottom:2px;position:relative}._histogramLayer_g8ib6_14{align-items:flex-end;padding:0 10px;display:flex;position:absolute;inset:0}._histogramLive_g8ib6_22,._histogramLit_g8ib6_23{pointer-events:none}._histogramLive_g8ib6_22 ._histogramFill_g8ib6_30{background:var(--lv3);border-radius:0}._histogramLit_g8ib6_23 ._histogramFill_g8ib6_30{background:var(--lv5);border-radius:0}._histogramBar_g8ib6_43{cursor:pointer;background:0 0;border:0;flex:0 0;align-items:flex-end;min-width:0;height:100%;padding:0;display:flex}._histogramGap_g8ib6_62{flex:0 0;min-width:0}._histogramSeparators_g8ib6_68{pointer-events:none;position:absolute;inset:0}._histogramSeparator_g8ib6_48{background:var(--lv0);width:1px;margin-left:-.5px;position:absolute;top:0;bottom:0}._active_g8ib6_83 ._histogramSeparator_g8ib6_48{background:var(--lv1)}._histogramBar_g8ib6_43:disabled{cursor:default}._histogramBar_g8ib6_43:focus-visible{outline:1px solid var(--lv5);outline-offset:1px}._histogramFill_g8ib6_30{background:var(--lv2);border-radius:1px 1px 0 0;width:100%;transition:height .15s;display:block}._active_g8ib6_83{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.1",
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": {