@aiquants/select-box 0.1.1 โ 0.2.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/README.md +100 -321
- package/dist/index.cjs +6 -6
- package/dist/index.js +767 -639
- package/dist/select-box.css +1 -1
- package/dist/src/components/DropdownList.d.ts.map +1 -1
- package/dist/src/components/InputArea.d.ts +4 -0
- package/dist/src/components/InputArea.d.ts.map +1 -1
- package/dist/src/components/SelectBox.d.ts.map +1 -1
- package/dist/src/hooks/useSearchSort.d.ts +4 -1
- package/dist/src/hooks/useSearchSort.d.ts.map +1 -1
- package/dist/src/hooks/useSelectBox.d.ts +1 -0
- package/dist/src/hooks/useSelectBox.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +6 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/styles/select-box.css +2 -2
- package/dist/vite.config.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),ie=require("@aiquants/virtualscroll");var se=typeof document<"u"?document.currentScript:null;function me(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const C=me(d);var G={exports:{}},N={};var ne;function pe(){if(ne)return N;ne=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(s,a,o){var n=null;if(o!==void 0&&(n=""+o),a.key!==void 0&&(n=""+a.key),"key"in a){o={};for(var l in a)l!=="key"&&(o[l]=a[l])}else o=a;return a=o.ref,{$$typeof:e,type:s,key:n,ref:a!==void 0?a:null,props:o}}return N.Fragment=t,N.jsx=r,N.jsxs=r,N}var H={};var ae;function ve(){return ae||(ae=1,process.env.NODE_ENV!=="production"&&(function(){function e(i){if(i==null)return null;if(typeof i=="function")return i.$$typeof===ee?null:i.displayName||i.name||null;if(typeof i=="string")return i;switch(i){case S:return"Fragment";case g:return"Profiler";case k:return"StrictMode";case M:return"Suspense";case X:return"SuspenseList";case K:return"Activity"}if(typeof i=="object")switch(typeof i.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),i.$$typeof){case O:return"Portal";case P:return i.displayName||"Context";case w:return(i._context.displayName||"Context")+".Consumer";case A:var p=i.render;return i=i.displayName,i||(i=p.displayName||p.name||"",i=i!==""?"ForwardRef("+i+")":"ForwardRef"),i;case Z:return p=i.displayName||null,p!==null?p:e(i.type)||"Memo";case _:p=i._payload,i=i._init;try{return e(i(p))}catch{}}return null}function t(i){return""+i}function r(i){try{t(i);var p=!1}catch{p=!0}if(p){p=console;var W=p.error,F=typeof Symbol=="function"&&Symbol.toStringTag&&i[Symbol.toStringTag]||i.constructor.name||"Object";return W.call(p,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",F),t(i)}}function s(i){if(i===S)return"<>";if(typeof i=="object"&&i!==null&&i.$$typeof===_)return"<...>";try{var p=e(i);return p?"<"+p+">":"<...>"}catch{return"<...>"}}function a(){var i=q.A;return i===null?null:i.getOwner()}function o(){return Error("react-stack-top-frame")}function n(i){if(u.call(i,"key")){var p=Object.getOwnPropertyDescriptor(i,"key").get;if(p&&p.isReactWarning)return!1}return i.key!==void 0}function l(i,p){function W(){R||(R=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",p))}W.isReactWarning=!0,Object.defineProperty(i,"key",{get:W,configurable:!0})}function c(){var i=e(this.type);return I[i]||(I[i]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),i=this.props.ref,i!==void 0?i:null}function v(i,p,W,F,V,te){var T=W.ref;return i={$$typeof:E,type:i,key:p,props:W,_owner:F},(T!==void 0?T:null)!==null?Object.defineProperty(i,"ref",{enumerable:!1,get:c}):Object.defineProperty(i,"ref",{enumerable:!1,value:null}),i._store={},Object.defineProperty(i._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(i,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(i,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:V}),Object.defineProperty(i,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:te}),Object.freeze&&(Object.freeze(i.props),Object.freeze(i)),i}function f(i,p,W,F,V,te){var T=p.children;if(T!==void 0)if(F)if(y(T)){for(F=0;F<T.length;F++)b(T[F]);Object.freeze&&Object.freeze(T)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else b(T);if(u.call(p,"key")){T=e(i);var j=Object.keys(p).filter(function(fe){return fe!=="key"});F=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",Y[T+F]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
2
2
|
let props = %s;
|
|
3
3
|
<%s {...props} />
|
|
4
4
|
React keys must be passed directly to JSX without using spread:
|
|
5
5
|
let props = %s;
|
|
6
|
-
<%s key={someKey} {...props} />`,z,N,w,N),B[N+z]=!0)}if(N=null,x!==void 0&&(t(x),N=""+x),n(Z)&&(t(Z.key),N=""+Z.key),"key"in Z){x={};for(var ae in Z)ae!=="key"&&(x[ae]=Z[ae])}else x=Z;return N&&c(x,typeof s=="function"?s.displayName||s.name||"Unknown":s),X(s,N,x,r(),O,te)}function p(s){u(s)?s._store&&(s._store.validated=1):typeof s=="object"&&s!==null&&s.$$typeof===C&&(s._payload.status==="fulfilled"?u(s._payload.value)&&s._payload.value._store&&(s._payload.value._store.validated=1):s._store&&(s._store.validated=1))}function u(s){return typeof s=="object"&&s!==null&&s.$$typeof===F}var b=o,F=Symbol.for("react.transitional.element"),f=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),R=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),W=Symbol.for("react.consumer"),H=Symbol.for("react.context"),M=Symbol.for("react.forward_ref"),U=Symbol.for("react.suspense"),_=Symbol.for("react.suspense_list"),q=Symbol.for("react.memo"),C=Symbol.for("react.lazy"),ee=Symbol.for("react.activity"),le=Symbol.for("react.client.reference"),j=b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,i=Object.prototype.hasOwnProperty,V=Array.isArray,Y=console.createTask?console.createTask:function(){return null};b={react_stack_bottom_frame:function(s){return s()}};var v,g={},J=b.react_stack_bottom_frame.bind(b,d)(),T=Y(a(d)),B={};E.Fragment=S,E.jsx=function(s,Z,x){var z=1e4>j.recentlyCreatedOwnerStacks++;return m(s,Z,x,!1,z?Error("react-stack-top-frame"):J,z?Y(a(s)):T)},E.jsxs=function(s,Z,x){var z=1e4>j.recentlyCreatedOwnerStacks++;return m(s,Z,x,!0,z?Error("react-stack-top-frame"):J,z?Y(a(s)):T)}})()),E}var ne;function Ze(){return ne||(ne=1,process.env.NODE_ENV==="production"?Q.exports=me():Q.exports=he()),Q.exports}var y=Ze(),$=class{constructor(e=2,l="[fuzzy-search]",t=console){this.level=e,this.prefix=l,this.impl=t}setLevel(e){this.level=e}setImplementation(e){this.impl=e}setPrefix(e){this.prefix=e}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}debug(e,...l){this.level<=0&&this.impl.debug(...this.formatMessage(e),...l)}info(e,...l){this.level<=1&&this.impl.info(...this.formatMessage(e),...l)}warn(e,...l){this.level<=2&&this.impl.warn(...this.formatMessage(e),...l)}error(e,...l){this.level<=3&&this.impl.error(...this.formatMessage(e),...l)}},D={threshold:.4,caseSensitive:!1,learningWeight:1.2,debounceMs:300,multiTermOperator:"and",autoSearchOnIndexRebuild:!0,customWeights:{},ngramSize:2,minNgramOverlap:1,sortBy:"relevance",sortOrder:"desc",enableIndexFiltering:!0,enableLevenshtein:!0,parallelSearchStrategy:"balanced",logLevel:2,indexWorkerOptions:{strategy:"hybrid",threshold:.4,ngramOverlapThreshold:.3,minCandidatesRatio:.1,maxCandidatesRatio:.5,jaroWinklerPrefix:.1,maxResults:1e3,relevanceFieldWeight:.2,relevancePerfectMatchBonus:.1},levenshteinWorkerOptions:{threshold:.3,lengthSimilarityThreshold:.1,partialMatchBonus:.1,lengthDiffPenalty:1,maxResults:1e3,relevanceFieldWeight:.15}},ce=class A{constructor(l){this.indexWorker=null,this.levenshteinWorker=null,this.initializationPromise=null,this.referenceCount=0,this.lastIndexedDataHash=null,this.buildingDataHash=null,this.buildingPromise=null,this.id=l;let t=l!=="default"?`[GlobalWorkerManager:${l}]`:"[GlobalWorkerManager]";this.logger=new $(2,t)}static getInstance(l="default"){let t=A.instances.get(l);return t||(t=new A(l),A.instances.set(l,t)),t}getLastIndexedDataHash(){return this.lastIndexedDataHash}setLastIndexedDataHash(l){this.lastIndexedDataHash=l}getBuildingPromise(l){return this.buildingDataHash===l?this.buildingPromise:null}setBuildingPromise(l,t){this.buildingDataHash=l,this.buildingPromise=t,t.finally(()=>{this.buildingDataHash===l&&(this.buildingDataHash=null,this.buildingPromise=null)})}async getWorkers(l){return l.logLevel!==void 0&&this.logger.setLevel(l.logLevel),l.logger&&this.logger.setImplementation(l.logger),this.referenceCount++,this.indexWorker&&this.levenshteinWorker?(this.logger.debug(`๐ง Using existing global Workers (ref count: ${this.referenceCount})`),l.logLevel!==void 0&&(this.indexWorker.postMessage({type:"setLogLevel",id:"system",logLevel:l.logLevel,workerId:this.id}),this.levenshteinWorker.postMessage({type:"setLogLevel",id:"system",logLevel:l.logLevel,workerId:this.id})),{indexWorker:this.indexWorker,levenshteinWorker:this.levenshteinWorker}):(this.initializationPromise||(this.initializationPromise=this.initializeWorkers(l)),await this.initializationPromise,this.indexWorker&&this.levenshteinWorker&&l.logLevel!==void 0&&(this.indexWorker.postMessage({type:"setLogLevel",id:"system",logLevel:l.logLevel,workerId:this.id}),this.levenshteinWorker.postMessage({type:"setLogLevel",id:"system",logLevel:l.logLevel,workerId:this.id})),{indexWorker:this.indexWorker,levenshteinWorker:this.levenshteinWorker})}async initializeWorkers(l){if(!(typeof Worker>"u"))try{if(!this.indexWorker){let t=(typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href).includes(".ts")?new URL("../worker/indexWorker.ts",typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href):new URL("data:text/javascript;base64,dmFyIEM9Y2xhc3N7Y29uc3RydWN0b3Iocz0yLHQ9IltmdXp6eS1zZWFyY2hdIixlPWNvbnNvbGUpe3RoaXMubGV2ZWw9cyx0aGlzLnByZWZpeD10LHRoaXMuaW1wbD1lfXNldExldmVsKHMpe3RoaXMubGV2ZWw9c31zZXRJbXBsZW1lbnRhdGlvbihzKXt0aGlzLmltcGw9c31zZXRQcmVmaXgocyl7dGhpcy5wcmVmaXg9c31mb3JtYXRNZXNzYWdlKHMpe3JldHVybiB0eXBlb2Ygcz09InN0cmluZyI/W2Ake3RoaXMucHJlZml4fSAke3N9YF06W3RoaXMucHJlZml4LHNdfWRlYnVnKHMsLi4udCl7dGhpcy5sZXZlbDw9MCYmdGhpcy5pbXBsLmRlYnVnKC4uLnRoaXMuZm9ybWF0TWVzc2FnZShzKSwuLi50KX1pbmZvKHMsLi4udCl7dGhpcy5sZXZlbDw9MSYmdGhpcy5pbXBsLmluZm8oLi4udGhpcy5mb3JtYXRNZXNzYWdlKHMpLC4uLnQpfXdhcm4ocywuLi50KXt0aGlzLmxldmVsPD0yJiZ0aGlzLmltcGwud2FybiguLi50aGlzLmZvcm1hdE1lc3NhZ2UocyksLi4udCl9ZXJyb3IocywuLi50KXt0aGlzLmxldmVsPD0zJiZ0aGlzLmltcGwuZXJyb3IoLi4udGhpcy5mb3JtYXRNZXNzYWdlKHMpLC4uLnQpfX07dmFyIHU9e3RocmVzaG9sZDouNCxjYXNlU2Vuc2l0aXZlOiExLGxlYXJuaW5nV2VpZ2h0OjEuMixkZWJvdW5jZU1zOjMwMCxtdWx0aVRlcm1PcGVyYXRvcjoiYW5kIixhdXRvU2VhcmNoT25JbmRleFJlYnVpbGQ6ITAsY3VzdG9tV2VpZ2h0czp7fSxuZ3JhbVNpemU6MixtaW5OZ3JhbU92ZXJsYXA6MSxzb3J0Qnk6InJlbGV2YW5jZSIsc29ydE9yZGVyOiJkZXNjIixlbmFibGVJbmRleEZpbHRlcmluZzohMCxlbmFibGVMZXZlbnNodGVpbjohMCxwYXJhbGxlbFNlYXJjaFN0cmF0ZWd5OiJiYWxhbmNlZCIsbG9nTGV2ZWw6MixpbmRleFdvcmtlck9wdGlvbnM6e3N0cmF0ZWd5OiJoeWJyaWQiLHRocmVzaG9sZDouNCxuZ3JhbU92ZXJsYXBUaHJlc2hvbGQ6LjMsbWluQ2FuZGlkYXRlc1JhdGlvOi4xLG1heENhbmRpZGF0ZXNSYXRpbzouNSxqYXJvV2lua2xlclByZWZpeDouMSxtYXhSZXN1bHRzOjFlMyxyZWxldmFuY2VGaWVsZFdlaWdodDouMixyZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251czouMX0sbGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zOnt0aHJlc2hvbGQ6LjMsbGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZDouMSxwYXJ0aWFsTWF0Y2hCb251czouMSxsZW5ndGhEaWZmUGVuYWx0eToxLG1heFJlc3VsdHM6MWUzLHJlbGV2YW5jZUZpZWxkV2VpZ2h0Oi4xNX19O3ZhciB6PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0cz17dG90YWxTZWFyY2hlczowLHRvdGFsUHJvY2Vzc2luZ1RpbWU6MCxhdmVyYWdlU2VhcmNoVGltZTowLGxhc3RTZWFyY2hUaW1lOjAsZXJyb3JDb3VudDowLHRpbWVzdGFtcDpEYXRlLm5vdygpfTt0aGlzLmJhc2VMb2dQcmVmaXg9IltmdXp6eS1zZWFyY2gtd29ya2VyXSI7dGhpcy5sb2dnZXI9bmV3IEMoMix0aGlzLmJhc2VMb2dQcmVmaXgpO3RoaXMuZGV0YWlsZWRTdGF0cz1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5PVtdO3RoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5maWVsZFN0YXRzPW5ldyBNYXA7dGhpcy5tZXRyaWNzPXt0aW1pbmdzOnthdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxmYXN0ZXN0UHJvY2Vzc2luZzoxLzAsc2xvd2VzdFByb2Nlc3Npbmc6MCxsYXN0UHJvY2Vzc2luZ1RpbWU6MH0sdGhyb3VnaHB1dDp7b3BlcmF0aW9uc1BlclNlY29uZDowLHRvdGFsT3BlcmF0aW9uczowfSxxdWFsaXR5OntzdWNjZXNzUmF0ZToxLGVycm9yUmF0ZTowLHRpbWVvdXRSYXRlOjB9fX1zZXRMb2dMZXZlbChzKXt0aGlzLmxvZ2dlci5zZXRMZXZlbChzKX1zZXRXb3JrZXJJZChzKXtsZXQgdD1zP2Ake3RoaXMuYmFzZUxvZ1ByZWZpeC5zbGljZSgwLC0xKX06JHtzfV1gOnRoaXMuYmFzZUxvZ1ByZWZpeDt0aGlzLmxvZ2dlci5zZXRQcmVmaXgodCl9dXBkYXRlU3RhdHMocyx0PSEwKXt0aGlzLnN0YXRzLnRvdGFsU2VhcmNoZXMrKyx0aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUrPXMsdGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZT10aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUvdGhpcy5zdGF0cy50b3RhbFNlYXJjaGVzLHRoaXMuc3RhdHMubGFzdFNlYXJjaFRpbWU9cyx0aGlzLm1ldHJpY3MudGltaW5ncy5sYXN0UHJvY2Vzc2luZ1RpbWU9cyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU9dGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZSx0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZz1NYXRoLm1pbih0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZyxzKSx0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZz1NYXRoLm1heCh0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZyxzKSx0aGlzLm1ldHJpY3MudGhyb3VnaHB1dC50b3RhbE9wZXJhdGlvbnMrKyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU+MCYmKHRoaXMubWV0cmljcy50aHJvdWdocHV0Lm9wZXJhdGlvbnNQZXJTZWNvbmQ9MWUzL3RoaXMubWV0cmljcy50aW1pbmdzLmF2ZXJhZ2VQcm9jZXNzaW5nVGltZSksdHx8dGhpcy5zdGF0cy5lcnJvckNvdW50Kys7bGV0IGU9dGhpcy5tZXRyaWNzLnRocm91Z2hwdXQudG90YWxPcGVyYXRpb25zO3RoaXMubWV0cmljcy5xdWFsaXR5LnN1Y2Nlc3NSYXRlPShlLXRoaXMuc3RhdHMuZXJyb3JDb3VudCkvZSx0aGlzLm1ldHJpY3MucXVhbGl0eS5lcnJvclJhdGU9dGhpcy5zdGF0cy5lcnJvckNvdW50L2V9Z2V0U3RhdHMoKXtyZXR1cm57Li4udGhpcy5zdGF0c319Z2V0TWV0cmljcygpe3JldHVybnsuLi50aGlzLm1ldHJpY3N9fXJlc2V0U3RhdHMoKXt0aGlzLnN0YXRzPXt0b3RhbFNlYXJjaGVzOjAsdG90YWxQcm9jZXNzaW5nVGltZTowLGF2ZXJhZ2VTZWFyY2hUaW1lOjAsbGFzdFNlYXJjaFRpbWU6MCxlcnJvckNvdW50OjAsdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubWV0cmljcz17dGltaW5nczp7YXZlcmFnZVByb2Nlc3NpbmdUaW1lOjAsZmFzdGVzdFByb2Nlc3Npbmc6MS8wLHNsb3dlc3RQcm9jZXNzaW5nOjAsbGFzdFByb2Nlc3NpbmdUaW1lOjB9LHRocm91Z2hwdXQ6e29wZXJhdGlvbnNQZXJTZWNvbmQ6MCx0b3RhbE9wZXJhdGlvbnM6MH0scXVhbGl0eTp7c3VjY2Vzc1JhdGU6MSxlcnJvclJhdGU6MCx0aW1lb3V0UmF0ZTowfX0sdGhpcy5kZXRhaWxlZFN0YXRzLmNsZWFyKCksdGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9W10sdGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24uY2xlYXIoKSx0aGlzLmZpZWxkU3RhdHMuY2xlYXIoKSx0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDQX0gJHt0aGlzLmdldFdvcmtlclR5cGUoKX0gV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZGApfXVwZGF0ZVdvcmtlclN0YXRzKHMsdCxlPXt9KXt0aGlzLnVwZGF0ZVN0YXRzKHQsITApO2xldCByPXRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLmdldChzKXx8MDt0aGlzLm9wZXJhdGlvbkRpc3RyaWJ1dGlvbi5zZXQocyxyKzEpLE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFtpLG5dKT0+e3RoaXMuZGV0YWlsZWRTdGF0cy5zZXQoaSxuKX0pLHRoaXMuYWRkUGVyZm9ybWFuY2VFbnRyeSh7dGltZXN0YW1wOkRhdGUubm93KCksb3BlcmF0aW9uVHlwZTpzLHByb2Nlc3NpbmdUaW1lOnQscXVlcnlMZW5ndGg6ZS5xdWVyeUxlbmd0aHx8MCxpdGVtQ291bnQ6ZS5pdGVtQ291bnR8fDAscmVzdWx0Q291bnQ6ZS5yZXN1bHRDb3VudHx8MCxhZGRpdGlvbmFsTWV0cmljczplfSl9dXBkYXRlRmllbGRTdGF0cyhzLHQpe2xldCBlPXRoaXMuZmllbGRTdGF0cy5nZXQocyl8fHttYXRjaENvdW50OjAsYXZlcmFnZVNjb3JlOjAsdG90YWxTY29yZTowLGJlc3RTY29yZTowLHdvcnN0U2NvcmU6MX07ZS5tYXRjaENvdW50Kz0xLGUudG90YWxTY29yZSs9dCxlLmF2ZXJhZ2VTY29yZT1lLnRvdGFsU2NvcmUvZS5tYXRjaENvdW50LGUuYmVzdFNjb3JlPU1hdGgubWF4KGUuYmVzdFNjb3JlLHQpLGUud29yc3RTY29yZT1NYXRoLm1pbihlLndvcnN0U2NvcmUsdCksdGhpcy5maWVsZFN0YXRzLnNldChzLGUpfWFkZFBlcmZvcm1hbmNlRW50cnkocyl7dGhpcy5wZXJmb3JtYW5jZUhpc3RvcnkucHVzaChzKSx0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg+MTAwJiYodGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9dGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnkuc2xpY2UoLTEwMCkpfWdldFdvcmtlclN0YXRzKCl7cmV0dXJue2Jhc2ljOnsuLi50aGlzLnN0YXRzLHRpbWVzdGFtcDpEYXRlLm5vdygpfSx3b3JrZXJTcGVjaWZpYzp7d29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25Db3VudDp0aGlzLmdldFRvdGFsT3BlcmF0aW9ucygpLG9wZXJhdGlvbkRpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24pLHNwZWNpZmljTWV0cmljczp0aGlzLmdldFNwZWNpZmljTWV0cmljcygpfSxhbmFseXNpczp7ZmllbGRQZXJmb3JtYW5jZTpPYmplY3QuZnJvbUVudHJpZXModGhpcy5maWVsZFN0YXRzKSxwZXJmb3JtYW5jZUluc2lnaHRzOnRoaXMuZ2VuZXJhdGVQZXJmb3JtYW5jZUluc2lnaHRzKCkscmVjZW50SGlzdG9yeTp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApfX19c2VuZFN0YXRzVXBkYXRlKCl7bGV0IHM9e3R5cGU6InN0YXRzIixpZDpgc3RhdHMtJHtEYXRlLm5vdygpfWAsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6MCx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e319O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENBfSAke3RoaXMuZ2V0V29ya2VyVHlwZSgpfSBXb3JrZXI6IFNlbmRpbmcgdW5pZmllZCBzdGF0cyB1cGRhdGVgKSxzZWxmLnBvc3RNZXNzYWdlKHMpfWdldFRvdGFsT3BlcmF0aW9ucygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLnZhbHVlcygpKS5yZWR1Y2UoKHMsdCk9PnMrdCwwKX1nZW5lcmF0ZVBlcmZvcm1hbmNlSW5zaWdodHMoKXtpZih0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg9PT0wKXJldHVybntyZWNlbnRBdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxyZWNlbnRBdmVyYWdlUmVzdWx0Q291bnQ6MCx0aHJvdWdocHV0UGVyU2Vjb25kOjAsdG90YWxIaXN0b3J5RW50cmllczowLG1vc3RDb21tb25RdWVyeUxlbmd0aDowLGJlc3RQZXJmb3JtaW5nRmllbGQ6IiIsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fTtsZXQgcz10aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApLHQ9cy5yZWR1Y2UoKG8saCk9Pm8raC5wcm9jZXNzaW5nVGltZSwwKS9zLmxlbmd0aCxlPXMucmVkdWNlKChvLGgpPT5vK2gucmVzdWx0Q291bnQsMCkvcy5sZW5ndGgscj1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5LmZvckVhY2gobz0+e2xldCBoPXIuZ2V0KG8ucXVlcnlMZW5ndGgpfHwwO3Iuc2V0KG8ucXVlcnlMZW5ndGgsaCsxKX0pO2xldCBpPTAsbj0wO3IuZm9yRWFjaCgobyxoKT0+e28+biYmKG49byxpPWgpfSk7bGV0IGE9IiIsYz0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgobyxoKT0+e28uYXZlcmFnZVNjb3JlPmMmJihjPW8uYXZlcmFnZVNjb3JlLGE9aCl9KSx7cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOnQscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OmUsdGhyb3VnaHB1dFBlclNlY29uZDp0PjA/MWUzL3Q6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOnRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aCxtb3N0Q29tbW9uUXVlcnlMZW5ndGg6aSxiZXN0UGVyZm9ybWluZ0ZpZWxkOmEsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fX1oYW5kbGVNZXNzYWdlKHMpe3RoaXMubG9nZ2VyLndhcm4oIlx1MjZBMFx1RkUwRiBCYXNlV29ya2VyLmhhbmRsZU1lc3NhZ2U6IE5vIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIil9fTt2YXIgST1jbGFzcyBleHRlbmRzIHp7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMubmdyYW1DYWNoZT1uZXcgTWFwO3RoaXMud29yZENhY2hlPW5ldyBNYXA7dGhpcy5waG9uZXRpY0NhY2hlPW5ldyBNYXA7dGhpcy5jdXJyZW50SXRlbXM9W107dGhpcy5jdXJyZW50U2VhcmNoRmllbGRzPVtdO3RoaXMuaW5kZXhNZXRhZGF0YT1udWxsO3RoaXMuaW5kZXhTdGF0cz17dG90YWxJbmRleEJ1aWxkczowLGN1cnJlbnREYXRhU2l6ZTowLGxhc3RJbmRleFRpbWU6MH07dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH07dGhpcy5iYXNlTG9nUHJlZml4PSJbZnV6enktc2VhcmNoLWluZGV4XSIsdGhpcy5sb2dnZXIuc2V0UHJlZml4KHRoaXMuYmFzZUxvZ1ByZWZpeCksdGhpcy5zZXR1cE1lc3NhZ2VIYW5kbGVyKCl9Z2V0V29ya2VyVHlwZSgpe3JldHVybiJpbmRleCJ9Z2V0U3BlY2lmaWNNZXRyaWNzKCl7cmV0dXJue3RvdGFsSW5kZXhCdWlsZHM6dGhpcy5pbmRleFN0YXRzLnRvdGFsSW5kZXhCdWlsZHMsY3VycmVudERhdGFTaXplOnRoaXMuaW5kZXhTdGF0cy5jdXJyZW50RGF0YVNpemUsbGFzdEluZGV4VGltZTp0aGlzLmluZGV4U3RhdHMubGFzdEluZGV4VGltZSxjYWNoZVNpemU6e25ncmFtOnRoaXMubmdyYW1DYWNoZS5zaXplLHdvcmQ6dGhpcy53b3JkQ2FjaGUuc2l6ZSxwaG9uZXRpYzp0aGlzLnBob25ldGljQ2FjaGUuc2l6ZX0saW5kZXhNZXRhZGF0YTp0aGlzLmluZGV4TWV0YWRhdGF8fHt9LHNpbWlsYXJpdHlUaHJlc2hvbGRzOnsuLi50aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0c319fXJlc2V0U3RhdHMoKXtzdXBlci5yZXNldFN0YXRzKCksdGhpcy5pbmRleFN0YXRzPXt0b3RhbEluZGV4QnVpbGRzOjAsY3VycmVudERhdGFTaXplOjAsbGFzdEluZGV4VGltZTowfSx0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cz17YWJvdmU4MDowLGFib3ZlNjA6MCxhYm92ZTQwOjAsYmVsb3c0MDowfSx0aGlzLmxvZ2dlci5pbmZvKCJcdXsxRjUyN30gSW5kZXggV29ya2VyOiBBbGwgc3RhdGlzdGljcyByZXNldCBjb21wbGV0ZWQiKX11cGRhdGVTaW1pbGFyaXR5U3RhdHModCl7dD49Ljg/dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU4MCsrOnQ+PS42P3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNjArKzp0Pj0uND90aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTQwKys6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MCsrfWdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpe2xldCB0PXN1cGVyLmdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpLGU9dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU4MCt0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTYwK3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDArdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MCxyPWU+MD97aGlnaFNpbWlsYXJpdHk6TWF0aC5yb3VuZCh0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwL2UqMTAwKSxtZWRpdW1TaW1pbGFyaXR5Ok1hdGgucm91bmQodGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MC9lKjEwMCksbG93U2ltaWxhcml0eTpNYXRoLnJvdW5kKHRoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDAvZSoxMDApLHZlcnlMb3dTaW1pbGFyaXR5Ok1hdGgucm91bmQodGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MC9lKjEwMCl9OntoaWdoU2ltaWxhcml0eTowLG1lZGl1bVNpbWlsYXJpdHk6MCxsb3dTaW1pbGFyaXR5OjAsdmVyeUxvd1NpbWlsYXJpdHk6MH07cmV0dXJuey4uLnQsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjpyfX1zZXR1cE1lc3NhZ2VIYW5kbGVyKCl7c2VsZi5vbm1lc3NhZ2U9dD0+e3RoaXMuaGFuZGxlTWVzc2FnZSh0KX19aGFuZGxlTWVzc2FnZSh0KXtsZXQgZT1wZXJmb3JtYW5jZS5ub3coKSx7ZGF0YTpyfT10O3RyeXtzd2l0Y2goci50eXBlKXtjYXNlInBpbmciOnNlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6InBvbmciLGlkOnIuaWR9KTticmVhaztjYXNlImJ1aWxkSW5kZXgiOnRoaXMuaGFuZGxlQnVpbGRJbmRleChyLGUpO2JyZWFrO2Nhc2UiaW5kZXhTZWFyY2giOnRoaXMuaGFuZGxlSW5kZXhTZWFyY2gocixlKTticmVhaztjYXNlImdldFN0YXRzIjp0aGlzLmhhbmRsZUdldFN0YXRzKHIsZSk7YnJlYWs7Y2FzZSJyZXNldFN0YXRzIjp0aGlzLmhhbmRsZVJlc2V0U3RhdHMocixlKTticmVhaztjYXNlInNldExvZ0xldmVsIjpyLmxvZ0xldmVsIT09dm9pZCAwJiZ0aGlzLnNldExvZ0xldmVsKHIubG9nTGV2ZWwpLHIud29ya2VySWQhPT12b2lkIDAmJnRoaXMuc2V0V29ya2VySWQoci53b3JrZXJJZCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnNlbmRFcnJvcihyLmlkLGBVbmtub3duIHJlcXVlc3QgdHlwZTogJHtyLnR5cGV9YCxlKX19Y2F0Y2goaSl7dGhpcy5zZW5kRXJyb3Ioci5pZCxpIGluc3RhbmNlb2YgRXJyb3I/aS5tZXNzYWdlOlN0cmluZyhpKSxlKX19aGFuZGxlQnVpbGRJbmRleCh0LGUpe2lmKCEodC5pdGVtcyYmdC5zZWFyY2hGaWVsZHMpKXt0aGlzLnNlbmRFcnJvcih0LmlkLCJJdGVtcyBhbmQgc2VhcmNoRmllbGRzIGFyZSByZXF1aXJlZCBmb3IgYnVpbGRJbmRleCIsZSk7cmV0dXJufWxldHtpdGVtczpyLHNlYXJjaEZpZWxkczppLG9wdGlvbnM6bn09dCxhPW4/Lm5ncmFtU2l6ZXx8dS5uZ3JhbVNpemU7dGhpcy5uZ3JhbUNhY2hlLmNsZWFyKCksdGhpcy53b3JkQ2FjaGUuY2xlYXIoKSx0aGlzLnBob25ldGljQ2FjaGUuY2xlYXIoKSx0aGlzLmN1cnJlbnRJdGVtcz1yLHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcz1pLHIuZm9yRWFjaCgoaCxtKT0+e2kuZm9yRWFjaChTPT57bGV0IHA9U3RyaW5nKGhbU10/PyIiKTtpZighcClyZXR1cm47bGV0IGQ9cC50b0xvd2VyQ2FzZSgpO3RoaXMuYnVpbGROZ3JhbUluZGV4KGQsbSxhKSx0aGlzLmJ1aWxkV29yZEluZGV4KGQsbSksdGhpcy5idWlsZFBob25ldGljSW5kZXgoZCxtKX0pfSk7bGV0IGM9cGVyZm9ybWFuY2Uubm93KCktZTt0aGlzLmluZGV4TWV0YWRhdGE9e2l0ZW1Db3VudDpyLmxlbmd0aCxidWlsZFRpbWU6YyxjcmVhdGVkQXQ6RGF0ZS5ub3coKSxpbmRleGVkRmllbGRzOlsuLi5pXSxuZ3JhbVNpemU6YSxzdHJhdGVneTpuPy5pbmRleFdvcmtlck9wdGlvbnM/LnN0cmF0ZWd5fHwiaHlicmlkIix0b3RhbEluZGV4U2l6ZTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSt0aGlzLndvcmRDYWNoZS5zaXplK3RoaXMucGhvbmV0aWNDYWNoZS5zaXplLGluZGV4U2l6ZXM6e25ncmFtOnRoaXMubmdyYW1DYWNoZS5zaXplLHdvcmQ6dGhpcy53b3JkQ2FjaGUuc2l6ZSxwaG9uZXRpYzp0aGlzLnBob25ldGljQ2FjaGUuc2l6ZX19LHRoaXMuaW5kZXhTdGF0cy50b3RhbEluZGV4QnVpbGRzKyssdGhpcy5pbmRleFN0YXRzLmN1cnJlbnREYXRhU2l6ZT1yLmxlbmd0aCx0aGlzLmluZGV4U3RhdHMubGFzdEluZGV4VGltZT1jLHRoaXMudXBkYXRlV29ya2VyU3RhdHMoImJ1aWxkSW5kZXgiLGMse2l0ZW1Db3VudDpyLmxlbmd0aCxmaWVsZENvdW50OmkubGVuZ3RoLG5ncmFtU2l6ZTphLGluZGV4U2l6ZTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSt0aGlzLndvcmRDYWNoZS5zaXplK3RoaXMucGhvbmV0aWNDYWNoZS5zaXplLHN0cmF0ZWd5OiJoeWJyaWQifSk7bGV0IG89e3R5cGU6ImluZGV4UmVhZHkiLGlkOnQuaWQsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6Yyx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e2l0ZW1Db3VudDpyLmxlbmd0aCxpbmRleFNpemU6e3RvdGFsOnRoaXMubmdyYW1DYWNoZS5zaXplK3RoaXMud29yZENhY2hlLnNpemUrdGhpcy5waG9uZXRpY0NhY2hlLnNpemUsbmdyYW06dGhpcy5uZ3JhbUNhY2hlLnNpemUsd29yZDp0aGlzLndvcmRDYWNoZS5zaXplLHBob25ldGljOnRoaXMucGhvbmV0aWNDYWNoZS5zaXplfSxzdHJhdGVneToiaHlicmlkIixuZ3JhbVNpemU6YX19O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNTI3fSBJbmRleCBXb3JrZXI6IEJ1aWx0IGNvbXBvc2l0ZSBpbmRleCAtIE4tZ3JhbTogJHt0aGlzLm5ncmFtQ2FjaGUuc2l6ZX0sIFdvcmQ6ICR7dGhpcy53b3JkQ2FjaGUuc2l6ZX0sIFBob25ldGljOiAke3RoaXMucGhvbmV0aWNDYWNoZS5zaXplfWApLHNlbGYucG9zdE1lc3NhZ2Uobyl9aGFuZGxlR2V0U3RhdHModCxlKXtsZXQgcj17dHlwZToic3RhdHMiLGlkOnQuaWQsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6cGVyZm9ybWFuY2Uubm93KCktZSx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e3RvdGFsSW5kZXhCdWlsZHM6dGhpcy5pbmRleFN0YXRzLnRvdGFsSW5kZXhCdWlsZHMsY3VycmVudERhdGFTaXplOnRoaXMuaW5kZXhTdGF0cy5jdXJyZW50RGF0YVNpemUsaW5kZXhTaXplczp7dG90YWw6dGhpcy5uZ3JhbUNhY2hlLnNpemUrdGhpcy53b3JkQ2FjaGUuc2l6ZSt0aGlzLnBob25ldGljQ2FjaGUuc2l6ZSxuZ3JhbTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSx3b3JkOnRoaXMud29yZENhY2hlLnNpemUscGhvbmV0aWM6dGhpcy5waG9uZXRpY0NhY2hlLnNpemV9fX07dGhpcy5sb2dnZXIuaW5mbygiXHV7MUY0Q0F9IEluZGV4IFdvcmtlcjogU2VuZGluZyBzdGF0cyB1cGRhdGUiLHIuc3RhdHMpLHNlbGYucG9zdE1lc3NhZ2Uocil9aGFuZGxlUmVzZXRTdGF0cyh0LGUpe3RoaXMucmVzZXRTdGF0cygpO2xldCByPXBlcmZvcm1hbmNlLm5vdygpLWUsaT17dHlwZToicmVzZXRTdGF0cyIsaWQ6dC5pZCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpyLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7cmVzZXRDb21wbGV0ZWQ6ITAsdGltZXN0YW1wOkRhdGUubm93KCl9fTt0aGlzLmxvZ2dlci5pbmZvKCJcdXsxRjUwNH0gSW5kZXggV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZCIpLHNlbGYucG9zdE1lc3NhZ2UoaSl9aGFuZGxlSW5kZXhTZWFyY2godCxlKXtpZighdC5xdWVyeSl7dGhpcy5zZW5kRXJyb3IodC5pZCwiUXVlcnkgaXMgcmVxdWlyZWQgZm9yIGluZGV4U2VhcmNoIixlKTtyZXR1cm59aWYodGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoPT09MCl7dGhpcy5zZW5kRXJyb3IodC5pZCwiSW5kZXggaXMgbm90IGJ1aWx0LiBTZW5kIGJ1aWxkSW5kZXggcmVxdWVzdCBmaXJzdC4iLGUpO3JldHVybn1sZXR7cXVlcnk6cixvcHRpb25zOml9PXQsbj1pPy5pbmRleFdvcmtlck9wdGlvbnM/LnN0cmF0ZWd5fHwiaHlicmlkIixhO3N3aXRjaChuKXtjYXNlImZhc3QiOmE9dGhpcy5nZXRGYXN0Q2FuZGlkYXRlcyhyLGl8fHt9KTticmVhaztjYXNlImFjY3VyYXRlIjphPXRoaXMuZ2V0QWNjdXJhdGVDYW5kaWRhdGVzKHIsaXx8e30pO2JyZWFrO2RlZmF1bHQ6YT10aGlzLmdldEh5YnJpZENhbmRpZGF0ZXMocixpfHx7fSk7YnJlYWt9bGV0IGM9dGhpcy5jcmVhdGVTZWFyY2hSZXN1bHRzKEFycmF5LmZyb20oYSkscixpfHx7fSksbz1wZXJmb3JtYW5jZS5ub3coKS1lO3RoaXMudXBkYXRlV29ya2VyU3RhdHMoImluZGV4U2VhcmNoIixvLHtxdWVyeUxlbmd0aDpyLmxlbmd0aCxpdGVtQ291bnQ6dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoLHJlc3VsdENvdW50OmMubGVuZ3RoLGNhbmRpZGF0ZUNvdW50OmEuc2l6ZSxzdHJhdGVneTpufSksYy5mb3JFYWNoKG09PnttLm1hdGNoZWRGaWVsZHMuZm9yRWFjaChTPT57dGhpcy51cGRhdGVGaWVsZFN0YXRzKFMsbS5zY29yZSl9KX0pO2xldCBoPXt0eXBlOiJpbmRleFNlYXJjaFJlc3VsdHMiLGlkOnQuaWQscmVzdWx0czpjLHN0YXRzOnRoaXMuZ2V0V29ya2VyU3RhdHMoKSxtZXRyaWNzOnRoaXMuZ2V0TWV0cmljcygpLHByb2Nlc3NpbmdUaW1lOm8sd29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25NZXRhOntjYW5kaWRhdGVDb3VudDphLnNpemUsc3RyYXRlZ3k6bixxdWVyeUxlbmd0aDpyLmxlbmd0aCx0aHJlc2hvbGQ6aT8uaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGR8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGR8fC40fX07dGhpcy5sb2dnZXIuaW5mbyhgXHV7MUY1MER9IEluZGV4IFdvcmtlcjogRm91bmQgJHtjLmxlbmd0aH0gcmVzdWx0cyBmb3IgIiR7cn0iIChzdHJhdGVneTogJHtufSlgKSxzZWxmLnBvc3RNZXNzYWdlKGgpLHRoaXMuc2VuZFN0YXRzVXBkYXRlKCl9YnVpbGROZ3JhbUluZGV4KHQsZSxyKXt0aGlzLmdlbmVyYXRlTmdyYW1zKHQscikuZm9yRWFjaChuPT57dGhpcy5uZ3JhbUNhY2hlLmhhcyhuKXx8dGhpcy5uZ3JhbUNhY2hlLnNldChuLG5ldyBTZXQpO2xldCBhPXRoaXMubmdyYW1DYWNoZS5nZXQobik7YSYmYS5hZGQoZSl9KX1idWlsZFdvcmRJbmRleCh0LGUpe3Quc3BsaXQoL1xzKy8pLmZpbHRlcihpPT5pLmxlbmd0aD4wKS5mb3JFYWNoKGk9Pnt0aGlzLndvcmRDYWNoZS5oYXMoaSl8fHRoaXMud29yZENhY2hlLnNldChpLG5ldyBTZXQpO2xldCBuPXRoaXMud29yZENhY2hlLmdldChpKTtuJiZuLmFkZChlKX0pfWJ1aWxkUGhvbmV0aWNJbmRleCh0LGUpe2xldCByPXRoaXMuZ2VuZXJhdGVQaG9uZXRpY0tleSh0KTt0aGlzLnBob25ldGljQ2FjaGUuaGFzKHIpfHx0aGlzLnBob25ldGljQ2FjaGUuc2V0KHIsbmV3IFNldCk7bGV0IGk9dGhpcy5waG9uZXRpY0NhY2hlLmdldChyKTtpJiZpLmFkZChlKX1nZW5lcmF0ZU5ncmFtcyh0LGUpe2xldCByPW5ldyBTZXQsaT10LnRvTG93ZXJDYXNlKCkudHJpbSgpO2ZvcihsZXQgbj0wO248PWkubGVuZ3RoLWU7bisrKXIuYWRkKGkuc3Vic3RyaW5nKG4sbitlKSk7cmV0dXJuIHJ9Z2VuZXJhdGVQaG9uZXRpY0tleSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9b44KhLeODtl0vZyxlPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgwKS05NikpLnJlcGxhY2UoL1vjgaPjgoPjgoXjgoddL2csZT0+KHtcdTMwNjM6Ilx1MzA2NCIsXHUzMDgzOiJcdTMwODQiLFx1MzA4NToiXHUzMDg2IixcdTMwODc6Ilx1MzA4OCJ9KVtlXT8/ZSkucmVwbGFjZSgv44O8L2csIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiIpfWdldEZhc3RDYW5kaWRhdGVzKHQsZSl7bGV0IHI9bmV3IFNldCxpPWUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKTtyZXR1cm4gaS5zcGxpdCgvXHMrLykuZmlsdGVyKGE9PmEubGVuZ3RoPjApLmZvckVhY2goYT0+e2xldCBjPXRoaXMud29yZENhY2hlLmdldChhKTtjJiZjLmZvckVhY2gobz0+e3IuYWRkKG8pfSl9KSxyLnNpemU9PT0wJiZ0aGlzLmdlbmVyYXRlTmdyYW1zKGksZS5uZ3JhbVNpemV8fHUubmdyYW1TaXplKS5mb3JFYWNoKGM9PntsZXQgbz10aGlzLm5ncmFtQ2FjaGUuZ2V0KGMpO28mJm8uZm9yRWFjaChoPT57ci5hZGQoaCl9KX0pLHJ9Z2V0QWNjdXJhdGVDYW5kaWRhdGVzKHQsZSl7bGV0IHI9bmV3IFNldCxpPWUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKSxuPWUubmdyYW1TaXplfHx1Lm5ncmFtU2l6ZSxhPWUubWluTmdyYW1PdmVybGFwfHx1Lm1pbk5ncmFtT3ZlcmxhcCxjPW5ldyBNYXAsbz10aGlzLmdlbmVyYXRlTmdyYW1zKGksbik7by5mb3JFYWNoKGc9PntsZXQgZj10aGlzLm5ncmFtQ2FjaGUuZ2V0KGcpO2YmJmYuZm9yRWFjaChsPT57Yy5zZXQobCwoYy5nZXQobCl8fDApKzEpfSl9KSxpLnNwbGl0KC9ccysvKS5maWx0ZXIoZz0+Zy5sZW5ndGg+MCkuZm9yRWFjaChnPT57bGV0IGY9dGhpcy53b3JkQ2FjaGUuZ2V0KGcpO2YmJmYuZm9yRWFjaChsPT57ci5hZGQobCl9KX0pO2xldCBtPXRoaXMuZ2VuZXJhdGVQaG9uZXRpY0tleShpKSxTPXRoaXMucGhvbmV0aWNDYWNoZS5nZXQobSk7UyYmUy5mb3JFYWNoKGc9PntyLmFkZChnKX0pO2xldCBwPWUuaW5kZXhXb3JrZXJPcHRpb25zPy5uZ3JhbU92ZXJsYXBUaHJlc2hvbGR8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5uZ3JhbU92ZXJsYXBUaHJlc2hvbGR8fC4zLGQ9TWF0aC5tYXgoYSxvLnNpemUqcCk7cmV0dXJuIGMuZm9yRWFjaCgoZyxmKT0+e2c+PWQmJnIuYWRkKGYpfSkscn1nZXRIeWJyaWRDYW5kaWRhdGVzKHQsZSl7bGV0IHI9dGhpcy5nZXRGYXN0Q2FuZGlkYXRlcyh0LGUpLGk9ZS5pbmRleFdvcmtlck9wdGlvbnM/Lm1pbkNhbmRpZGF0ZXNSYXRpb3x8dS5pbmRleFdvcmtlck9wdGlvbnM/Lm1pbkNhbmRpZGF0ZXNSYXRpb3x8LjE7ci5zaXplPE1hdGgubWluKHRoaXMuY3VycmVudEl0ZW1zLmxlbmd0aCppLDEwKSYmdGhpcy5nZXRBY2N1cmF0ZUNhbmRpZGF0ZXModCxlKS5mb3JFYWNoKGM9PntyLmFkZChjKX0pO2xldCBuPWUuaW5kZXhXb3JrZXJPcHRpb25zPy5tYXhDYW5kaWRhdGVzUmF0aW98fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5tYXhDYW5kaWRhdGVzUmF0aW98fC41O3JldHVybiByLnNpemU+dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoKm4mJihyPXRoaXMuZmlsdGVyQnlOZ3JhbU92ZXJsYXAodCxyLGUubmdyYW1TaXplfHx1Lm5ncmFtU2l6ZSxlKSkscn1maWx0ZXJCeU5ncmFtT3ZlcmxhcCh0LGUscixpKXtsZXQgbj1uZXcgU2V0LGE9dGhpcy5nZW5lcmF0ZU5ncmFtcyh0LnRvTG93ZXJDYXNlKCksciksYz1pPy5pbmRleFdvcmtlck9wdGlvbnM/Lm5ncmFtT3ZlcmxhcFRocmVzaG9sZHx8dS5pbmRleFdvcmtlck9wdGlvbnM/Lm5ncmFtT3ZlcmxhcFRocmVzaG9sZHx8LjMsbz1NYXRoLm1heCgxLGEuc2l6ZSpjKTtyZXR1cm4gZS5mb3JFYWNoKGg9PntsZXQgbT0wO2EuZm9yRWFjaChTPT57dGhpcy5uZ3JhbUNhY2hlLmdldChTKT8uaGFzKGgpJiZtKyt9KSxtPj1vJiZuLmFkZChoKX0pLG59Y3JlYXRlU2VhcmNoUmVzdWx0cyh0LGUscil7bGV0IGk9W10sbj1yLmNhc2VTZW5zaXRpdmU/ZTplLnRvTG93ZXJDYXNlKCksYT10aGlzLmdldFF1ZXJ5VG9rZW5zKGUsciksbz10aGlzLmdldE11bHRpVGVybU9wZXJhdG9yKHIpPT09ImFuZCImJmEubGVuZ3RoPjEsaD1yLnNvcnRCeXx8dS5zb3J0QnksbT1oPT09InJlbGV2YW5jZSIsUz1tP3IuaW5kZXhXb3JrZXJPcHRpb25zPy5yZWxldmFuY2VGaWVsZFdlaWdodD8/dS5pbmRleFdvcmtlck9wdGlvbnM/LnJlbGV2YW5jZUZpZWxkV2VpZ2h0Pz8uMjowLHA9bT9yLmluZGV4V29ya2VyT3B0aW9ucz8ucmVsZXZhbmNlUGVyZmVjdE1hdGNoQm9udXM/P3UuaW5kZXhXb3JrZXJPcHRpb25zPy5yZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251cz8/LjE6MDt0LmZvckVhY2gobD0+e2lmKGw+PXRoaXMuY3VycmVudEl0ZW1zLmxlbmd0aClyZXR1cm47bGV0IGI9dGhpcy5jdXJyZW50SXRlbXNbbF0seT0wLHg9MCxrPVtdLE09ci5pbmRleFdvcmtlck9wdGlvbnM/LnRocmVzaG9sZD8/ci50aHJlc2hvbGQ/P3UuaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py40O2lmKG8mJiF0aGlzLml0ZW1NYXRjaGVzVG9rZW5zKGIsYSxyKSlyZXR1cm47Zm9yKGxldCB2IG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7bGV0IFA9U3RyaW5nKGJbdl0/PyIiKTtpZighUCljb250aW51ZTtsZXQgTz1yLmNhc2VTZW5zaXRpdmU/UDpQLnRvTG93ZXJDYXNlKCksdz10aGlzLmNhbGN1bGF0ZUphcm9XaW5rbGVyKG4sTyxyKSxMPXIuY3VzdG9tV2VpZ2h0cz8uW3ZdPz8xLFI9dypMO3c+MCYmay5wdXNoKHYpLHc+eCYmKHg9dyksUj55JiYoeT1SKX1sZXQgVD15O2lmKG0mJmsubGVuZ3RoPjApe2xldCB2PXg+PS45OT9wOjA7VD15K2subGVuZ3RoKlMrdn1UPj1NJiYodGhpcy51cGRhdGVTaW1pbGFyaXR5U3RhdHMoVCksaS5wdXNoKHtpdGVtOmIsc2NvcmU6VCxiYXNlU2NvcmU6eCxtYXRjaGVkRmllbGRzOmssb3JpZ2luYWxJbmRleDpsfSkpfSk7bGV0IGQ9ci5zb3J0T3JkZXJ8fHUuc29ydE9yZGVyLGc7aD09PSJyZWxldmFuY2UiP2c9aS5zb3J0KChsLGIpPT5kPT09ImFzYyI/bC5zY29yZS1iLnNjb3JlOmIuc2NvcmUtbC5zY29yZSk6aD09PSJvcmlnaW5hbCI/Zz1pLnNvcnQoKGwsYik9PntsZXQgeT1sLm9yaWdpbmFsSW5kZXg/PzAseD1iLm9yaWdpbmFsSW5kZXg/PzA7cmV0dXJuIGQ9PT0iYXNjIj95LXg6eC15fSk6Zz1pLnNvcnQoKGwsYik9PmQ9PT0iYXNjIj9sLnNjb3JlLWIuc2NvcmU6Yi5zY29yZS1sLnNjb3JlKTtsZXQgZj1yLmluZGV4V29ya2VyT3B0aW9ucz8ubWF4UmVzdWx0cztyZXR1cm4gdHlwZW9mIGY9PSJudW1iZXIiP2cuc2xpY2UoMCxmKTpnfWdldE11bHRpVGVybU9wZXJhdG9yKHQpe3JldHVybiB0Lm11bHRpVGVybU9wZXJhdG9yPz91Lm11bHRpVGVybU9wZXJhdG9yPz8ib3IifWdldFF1ZXJ5VG9rZW5zKHQsZSl7cmV0dXJuKGUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKSkuc3BsaXQoL1xzKy8pLmZpbHRlcihpPT5pLmxlbmd0aD4wKX1pdGVtTWF0Y2hlc1Rva2Vucyh0LGUscil7aWYoZS5sZW5ndGg9PT0wKXJldHVybiEwO2xldCBpPW5ldyBTZXQoZSk7Zm9yKGxldCBuIG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7aWYoaS5zaXplPT09MClicmVhaztsZXQgYT1TdHJpbmcodFtuXT8/IiIpO2lmKCFhKWNvbnRpbnVlO2xldCBjPXIuY2FzZVNlbnNpdGl2ZT9hOmEudG9Mb3dlckNhc2UoKTtmb3IobGV0IG8gb2YgZSlpZihpLmhhcyhvKSYmYy5pbmNsdWRlcyhvKSYmKGkuZGVsZXRlKG8pLGkuc2l6ZT09PTApKWJyZWFrfXJldHVybiBpLnNpemU9PT0wfWNhbGN1bGF0ZUphcm9XaW5rbGVyKHQsZSxyKXtsZXQgaT0wLG49TWF0aC5mbG9vcihNYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCkvMiktMSxhPW5ldyBBcnJheSh0Lmxlbmd0aCkuZmlsbCghMSksYz1uZXcgQXJyYXkoZS5sZW5ndGgpLmZpbGwoITEpO2ZvcihsZXQgZD0wO2Q8dC5sZW5ndGg7ZCsrKXtsZXQgZz1NYXRoLm1heCgwLGQtbiksZj1NYXRoLm1pbihkK24rMSxlLmxlbmd0aCk7Zm9yKGxldCBsPWc7bDxmO2wrKylpZighY1tsXSYmdFtkXT09PWVbbF0pe2FbZF09ITAsY1tsXT0hMCxpKys7YnJlYWt9fWlmKGk9PT0wKXJldHVybiAwO2xldCBvPTAsaD0wO2ZvcihsZXQgZD0wO2Q8dC5sZW5ndGg7ZCsrKWlmKGFbZF0pe2Zvcig7IWNbaF07KWgrKzt0W2RdIT09ZVtoXSYmbysrLGgrK31sZXQgbT0oaS90Lmxlbmd0aCtpL2UubGVuZ3RoKyhpLW8vMikvaSkvMyxTPXI/LmluZGV4V29ya2VyT3B0aW9ucz8uamFyb1dpbmtsZXJQcmVmaXh8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5qYXJvV2lua2xlclByZWZpeHx8LjEscD0wO2Zvcig7cDw0JiZ0W3BdPT09ZVtwXTspcCsrO3JldHVybiBtK3AqUyooMS1tKX1zZW5kRXJyb3IodCxlLHIpe2xldCBpPXBlcmZvcm1hbmNlLm5vdygpLXI7dGhpcy51cGRhdGVXb3JrZXJTdGF0cygiZXJyb3IiLGkse2Vycm9yTWVzc2FnZTplLGhhc0Vycm9yOiEwfSk7bGV0IG49e3R5cGU6ImVycm9yIixpZDp0LGVycm9yOmUsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6aSx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpfTtzZWxmLnBvc3RNZXNzYWdlKG4pfX07bmV3IEk7Cg==",typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href),a=l.workerUrls?.indexWorker?new URL(l.workerUrls.indexWorker,window.location.origin):t;this.logger.debug("๐ง Global Index Worker URL:",a.toString()),this.indexWorker=new Worker(a,{type:"module"}),this.logger.info("๐ง Global Index Worker: Initialized successfully")}if(!this.levenshteinWorker){let t=(typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href).includes(".ts")?new URL("../worker/levenshteinWorker.ts",typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href):new URL("data:text/javascript;base64,dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IoaT0yLGU9IltmdXp6eS1zZWFyY2hdIix0PWNvbnNvbGUpe3RoaXMubGV2ZWw9aSx0aGlzLnByZWZpeD1lLHRoaXMuaW1wbD10fXNldExldmVsKGkpe3RoaXMubGV2ZWw9aX1zZXRJbXBsZW1lbnRhdGlvbihpKXt0aGlzLmltcGw9aX1zZXRQcmVmaXgoaSl7dGhpcy5wcmVmaXg9aX1mb3JtYXRNZXNzYWdlKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/W2Ake3RoaXMucHJlZml4fSAke2l9YF06W3RoaXMucHJlZml4LGldfWRlYnVnKGksLi4uZSl7dGhpcy5sZXZlbDw9MCYmdGhpcy5pbXBsLmRlYnVnKC4uLnRoaXMuZm9ybWF0TWVzc2FnZShpKSwuLi5lKX1pbmZvKGksLi4uZSl7dGhpcy5sZXZlbDw9MSYmdGhpcy5pbXBsLmluZm8oLi4udGhpcy5mb3JtYXRNZXNzYWdlKGkpLC4uLmUpfXdhcm4oaSwuLi5lKXt0aGlzLmxldmVsPD0yJiZ0aGlzLmltcGwud2FybiguLi50aGlzLmZvcm1hdE1lc3NhZ2UoaSksLi4uZSl9ZXJyb3IoaSwuLi5lKXt0aGlzLmxldmVsPD0zJiZ0aGlzLmltcGwuZXJyb3IoLi4udGhpcy5mb3JtYXRNZXNzYWdlKGkpLC4uLmUpfX07dmFyIHA9e3RocmVzaG9sZDouNCxjYXNlU2Vuc2l0aXZlOiExLGxlYXJuaW5nV2VpZ2h0OjEuMixkZWJvdW5jZU1zOjMwMCxtdWx0aVRlcm1PcGVyYXRvcjoiYW5kIixhdXRvU2VhcmNoT25JbmRleFJlYnVpbGQ6ITAsY3VzdG9tV2VpZ2h0czp7fSxuZ3JhbVNpemU6MixtaW5OZ3JhbU92ZXJsYXA6MSxzb3J0Qnk6InJlbGV2YW5jZSIsc29ydE9yZGVyOiJkZXNjIixlbmFibGVJbmRleEZpbHRlcmluZzohMCxlbmFibGVMZXZlbnNodGVpbjohMCxwYXJhbGxlbFNlYXJjaFN0cmF0ZWd5OiJiYWxhbmNlZCIsbG9nTGV2ZWw6MixpbmRleFdvcmtlck9wdGlvbnM6e3N0cmF0ZWd5OiJoeWJyaWQiLHRocmVzaG9sZDouNCxuZ3JhbU92ZXJsYXBUaHJlc2hvbGQ6LjMsbWluQ2FuZGlkYXRlc1JhdGlvOi4xLG1heENhbmRpZGF0ZXNSYXRpbzouNSxqYXJvV2lua2xlclByZWZpeDouMSxtYXhSZXN1bHRzOjFlMyxyZWxldmFuY2VGaWVsZFdlaWdodDouMixyZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251czouMX0sbGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zOnt0aHJlc2hvbGQ6LjMsbGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZDouMSxwYXJ0aWFsTWF0Y2hCb251czouMSxsZW5ndGhEaWZmUGVuYWx0eToxLG1heFJlc3VsdHM6MWUzLHJlbGV2YW5jZUZpZWxkV2VpZ2h0Oi4xNX19O3ZhciBrPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0cz17dG90YWxTZWFyY2hlczowLHRvdGFsUHJvY2Vzc2luZ1RpbWU6MCxhdmVyYWdlU2VhcmNoVGltZTowLGxhc3RTZWFyY2hUaW1lOjAsZXJyb3JDb3VudDowLHRpbWVzdGFtcDpEYXRlLm5vdygpfTt0aGlzLmJhc2VMb2dQcmVmaXg9IltmdXp6eS1zZWFyY2gtd29ya2VyXSI7dGhpcy5sb2dnZXI9bmV3IFQoMix0aGlzLmJhc2VMb2dQcmVmaXgpO3RoaXMuZGV0YWlsZWRTdGF0cz1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5PVtdO3RoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5maWVsZFN0YXRzPW5ldyBNYXA7dGhpcy5tZXRyaWNzPXt0aW1pbmdzOnthdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxmYXN0ZXN0UHJvY2Vzc2luZzoxLzAsc2xvd2VzdFByb2Nlc3Npbmc6MCxsYXN0UHJvY2Vzc2luZ1RpbWU6MH0sdGhyb3VnaHB1dDp7b3BlcmF0aW9uc1BlclNlY29uZDowLHRvdGFsT3BlcmF0aW9uczowfSxxdWFsaXR5OntzdWNjZXNzUmF0ZToxLGVycm9yUmF0ZTowLHRpbWVvdXRSYXRlOjB9fX1zZXRMb2dMZXZlbChpKXt0aGlzLmxvZ2dlci5zZXRMZXZlbChpKX1zZXRXb3JrZXJJZChpKXtsZXQgZT1pP2Ake3RoaXMuYmFzZUxvZ1ByZWZpeC5zbGljZSgwLC0xKX06JHtpfV1gOnRoaXMuYmFzZUxvZ1ByZWZpeDt0aGlzLmxvZ2dlci5zZXRQcmVmaXgoZSl9dXBkYXRlU3RhdHMoaSxlPSEwKXt0aGlzLnN0YXRzLnRvdGFsU2VhcmNoZXMrKyx0aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUrPWksdGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZT10aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUvdGhpcy5zdGF0cy50b3RhbFNlYXJjaGVzLHRoaXMuc3RhdHMubGFzdFNlYXJjaFRpbWU9aSx0aGlzLm1ldHJpY3MudGltaW5ncy5sYXN0UHJvY2Vzc2luZ1RpbWU9aSx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU9dGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZSx0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZz1NYXRoLm1pbih0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZyxpKSx0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZz1NYXRoLm1heCh0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZyxpKSx0aGlzLm1ldHJpY3MudGhyb3VnaHB1dC50b3RhbE9wZXJhdGlvbnMrKyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU+MCYmKHRoaXMubWV0cmljcy50aHJvdWdocHV0Lm9wZXJhdGlvbnNQZXJTZWNvbmQ9MWUzL3RoaXMubWV0cmljcy50aW1pbmdzLmF2ZXJhZ2VQcm9jZXNzaW5nVGltZSksZXx8dGhpcy5zdGF0cy5lcnJvckNvdW50Kys7bGV0IHQ9dGhpcy5tZXRyaWNzLnRocm91Z2hwdXQudG90YWxPcGVyYXRpb25zO3RoaXMubWV0cmljcy5xdWFsaXR5LnN1Y2Nlc3NSYXRlPSh0LXRoaXMuc3RhdHMuZXJyb3JDb3VudCkvdCx0aGlzLm1ldHJpY3MucXVhbGl0eS5lcnJvclJhdGU9dGhpcy5zdGF0cy5lcnJvckNvdW50L3R9Z2V0U3RhdHMoKXtyZXR1cm57Li4udGhpcy5zdGF0c319Z2V0TWV0cmljcygpe3JldHVybnsuLi50aGlzLm1ldHJpY3N9fXJlc2V0U3RhdHMoKXt0aGlzLnN0YXRzPXt0b3RhbFNlYXJjaGVzOjAsdG90YWxQcm9jZXNzaW5nVGltZTowLGF2ZXJhZ2VTZWFyY2hUaW1lOjAsbGFzdFNlYXJjaFRpbWU6MCxlcnJvckNvdW50OjAsdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubWV0cmljcz17dGltaW5nczp7YXZlcmFnZVByb2Nlc3NpbmdUaW1lOjAsZmFzdGVzdFByb2Nlc3Npbmc6MS8wLHNsb3dlc3RQcm9jZXNzaW5nOjAsbGFzdFByb2Nlc3NpbmdUaW1lOjB9LHRocm91Z2hwdXQ6e29wZXJhdGlvbnNQZXJTZWNvbmQ6MCx0b3RhbE9wZXJhdGlvbnM6MH0scXVhbGl0eTp7c3VjY2Vzc1JhdGU6MSxlcnJvclJhdGU6MCx0aW1lb3V0UmF0ZTowfX0sdGhpcy5kZXRhaWxlZFN0YXRzLmNsZWFyKCksdGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9W10sdGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24uY2xlYXIoKSx0aGlzLmZpZWxkU3RhdHMuY2xlYXIoKSx0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDQX0gJHt0aGlzLmdldFdvcmtlclR5cGUoKX0gV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZGApfXVwZGF0ZVdvcmtlclN0YXRzKGksZSx0PXt9KXt0aGlzLnVwZGF0ZVN0YXRzKGUsITApO2xldCByPXRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLmdldChpKXx8MDt0aGlzLm9wZXJhdGlvbkRpc3RyaWJ1dGlvbi5zZXQoaSxyKzEpLE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtzLG5dKT0+e3RoaXMuZGV0YWlsZWRTdGF0cy5zZXQocyxuKX0pLHRoaXMuYWRkUGVyZm9ybWFuY2VFbnRyeSh7dGltZXN0YW1wOkRhdGUubm93KCksb3BlcmF0aW9uVHlwZTppLHByb2Nlc3NpbmdUaW1lOmUscXVlcnlMZW5ndGg6dC5xdWVyeUxlbmd0aHx8MCxpdGVtQ291bnQ6dC5pdGVtQ291bnR8fDAscmVzdWx0Q291bnQ6dC5yZXN1bHRDb3VudHx8MCxhZGRpdGlvbmFsTWV0cmljczp0fSl9dXBkYXRlRmllbGRTdGF0cyhpLGUpe2xldCB0PXRoaXMuZmllbGRTdGF0cy5nZXQoaSl8fHttYXRjaENvdW50OjAsYXZlcmFnZVNjb3JlOjAsdG90YWxTY29yZTowLGJlc3RTY29yZTowLHdvcnN0U2NvcmU6MX07dC5tYXRjaENvdW50Kz0xLHQudG90YWxTY29yZSs9ZSx0LmF2ZXJhZ2VTY29yZT10LnRvdGFsU2NvcmUvdC5tYXRjaENvdW50LHQuYmVzdFNjb3JlPU1hdGgubWF4KHQuYmVzdFNjb3JlLGUpLHQud29yc3RTY29yZT1NYXRoLm1pbih0LndvcnN0U2NvcmUsZSksdGhpcy5maWVsZFN0YXRzLnNldChpLHQpfWFkZFBlcmZvcm1hbmNlRW50cnkoaSl7dGhpcy5wZXJmb3JtYW5jZUhpc3RvcnkucHVzaChpKSx0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg+MTAwJiYodGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9dGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnkuc2xpY2UoLTEwMCkpfWdldFdvcmtlclN0YXRzKCl7cmV0dXJue2Jhc2ljOnsuLi50aGlzLnN0YXRzLHRpbWVzdGFtcDpEYXRlLm5vdygpfSx3b3JrZXJTcGVjaWZpYzp7d29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25Db3VudDp0aGlzLmdldFRvdGFsT3BlcmF0aW9ucygpLG9wZXJhdGlvbkRpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24pLHNwZWNpZmljTWV0cmljczp0aGlzLmdldFNwZWNpZmljTWV0cmljcygpfSxhbmFseXNpczp7ZmllbGRQZXJmb3JtYW5jZTpPYmplY3QuZnJvbUVudHJpZXModGhpcy5maWVsZFN0YXRzKSxwZXJmb3JtYW5jZUluc2lnaHRzOnRoaXMuZ2VuZXJhdGVQZXJmb3JtYW5jZUluc2lnaHRzKCkscmVjZW50SGlzdG9yeTp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApfX19c2VuZFN0YXRzVXBkYXRlKCl7bGV0IGk9e3R5cGU6InN0YXRzIixpZDpgc3RhdHMtJHtEYXRlLm5vdygpfWAsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6MCx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e319O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENBfSAke3RoaXMuZ2V0V29ya2VyVHlwZSgpfSBXb3JrZXI6IFNlbmRpbmcgdW5pZmllZCBzdGF0cyB1cGRhdGVgKSxzZWxmLnBvc3RNZXNzYWdlKGkpfWdldFRvdGFsT3BlcmF0aW9ucygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLnZhbHVlcygpKS5yZWR1Y2UoKGksZSk9PmkrZSwwKX1nZW5lcmF0ZVBlcmZvcm1hbmNlSW5zaWdodHMoKXtpZih0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg9PT0wKXJldHVybntyZWNlbnRBdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxyZWNlbnRBdmVyYWdlUmVzdWx0Q291bnQ6MCx0aHJvdWdocHV0UGVyU2Vjb25kOjAsdG90YWxIaXN0b3J5RW50cmllczowLG1vc3RDb21tb25RdWVyeUxlbmd0aDowLGJlc3RQZXJmb3JtaW5nRmllbGQ6IiIsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fTtsZXQgaT10aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApLGU9aS5yZWR1Y2UoKGEsbyk9PmErby5wcm9jZXNzaW5nVGltZSwwKS9pLmxlbmd0aCx0PWkucmVkdWNlKChhLG8pPT5hK28ucmVzdWx0Q291bnQsMCkvaS5sZW5ndGgscj1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5LmZvckVhY2goYT0+e2xldCBvPXIuZ2V0KGEucXVlcnlMZW5ndGgpfHwwO3Iuc2V0KGEucXVlcnlMZW5ndGgsbysxKX0pO2xldCBzPTAsbj0wO3IuZm9yRWFjaCgoYSxvKT0+e2E+biYmKG49YSxzPW8pfSk7bGV0IGM9IiIsbD0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgoYSxvKT0+e2EuYXZlcmFnZVNjb3JlPmwmJihsPWEuYXZlcmFnZVNjb3JlLGM9byl9KSx7cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOmUscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OnQsdGhyb3VnaHB1dFBlclNlY29uZDplPjA/MWUzL2U6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOnRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aCxtb3N0Q29tbW9uUXVlcnlMZW5ndGg6cyxiZXN0UGVyZm9ybWluZ0ZpZWxkOmMsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fX1oYW5kbGVNZXNzYWdlKGkpe3RoaXMubG9nZ2VyLndhcm4oIlx1MjZBMFx1RkUwRiBCYXNlV29ya2VyLmhhbmRsZU1lc3NhZ2U6IE5vIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIil9fTt2YXIgTD1jbGFzcyBleHRlbmRzIGt7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuY3VycmVudEl0ZW1zPVtdO3RoaXMuY3VycmVudFNlYXJjaEZpZWxkcz1bXTt0aGlzLmRpc3RhbmNlRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5xdWVyeUxlbmd0aFN0YXRzPW5ldyBNYXA7dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH07dGhpcy5sZXZlbnNodGVpblN0YXRzPXt0b3RhbENhbGN1bGF0aW9uczowLHRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnM6MCxhdmVyYWdlRGlzdGFuY2U6MCxtaW5EaXN0YW5jZToxLzAsbWF4RGlzdGFuY2U6MCxwYXJ0aWFsTWF0Y2hlczowLHBlcmZlY3RNYXRjaGVzOjB9O3RoaXMuYmFzZUxvZ1ByZWZpeD0iW2Z1enp5LXNlYXJjaC1sZXZlbnNodGVpbl0iLHRoaXMubG9nZ2VyLnNldFByZWZpeCh0aGlzLmJhc2VMb2dQcmVmaXgpLHRoaXMuc2V0dXBNZXNzYWdlSGFuZGxlcigpfWdldFdvcmtlclR5cGUoKXtyZXR1cm4ibGV2ZW5zaHRlaW4ifWdldFNwZWNpZmljTWV0cmljcygpe3JldHVybnt0b3RhbENhbGN1bGF0aW9uczp0aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxDYWxjdWxhdGlvbnMsdG90YWxEaXN0YW5jZUNhbGN1bGF0aW9uczp0aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxEaXN0YW5jZUNhbGN1bGF0aW9ucyxhdmVyYWdlRGlzdGFuY2U6dGhpcy5sZXZlbnNodGVpblN0YXRzLmF2ZXJhZ2VEaXN0YW5jZSxtaW5EaXN0YW5jZTp0aGlzLmxldmVuc2h0ZWluU3RhdHMubWluRGlzdGFuY2UhPT0xLzA/dGhpcy5sZXZlbnNodGVpblN0YXRzLm1pbkRpc3RhbmNlOnZvaWQgMCxtYXhEaXN0YW5jZTp0aGlzLmxldmVuc2h0ZWluU3RhdHMubWF4RGlzdGFuY2UscGFydGlhbE1hdGNoZXM6dGhpcy5sZXZlbnNodGVpblN0YXRzLnBhcnRpYWxNYXRjaGVzLHBlcmZlY3RNYXRjaGVzOnRoaXMubGV2ZW5zaHRlaW5TdGF0cy5wZXJmZWN0TWF0Y2hlcyxkaXN0YW5jZURpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5kaXN0YW5jZURpc3RyaWJ1dGlvbiksc2ltaWxhcml0eVRocmVzaG9sZHM6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMscXVlcnlMZW5ndGhTdGF0czpPYmplY3QuZnJvbUVudHJpZXModGhpcy5xdWVyeUxlbmd0aFN0YXRzKX19cmVzZXRTdGF0cygpe3N1cGVyLnJlc2V0U3RhdHMoKSx0aGlzLmRpc3RhbmNlRGlzdHJpYnV0aW9uLmNsZWFyKCksdGhpcy5xdWVyeUxlbmd0aFN0YXRzLmNsZWFyKCksdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH0sdGhpcy5sZXZlbnNodGVpblN0YXRzPXt0b3RhbENhbGN1bGF0aW9uczowLHRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnM6MCxhdmVyYWdlRGlzdGFuY2U6MCxtaW5EaXN0YW5jZToxLzAsbWF4RGlzdGFuY2U6MCxwYXJ0aWFsTWF0Y2hlczowLHBlcmZlY3RNYXRjaGVzOjB9LHRoaXMubG9nZ2VyLmluZm8oIlx1ezFGNENBfSBMZXZlbnNodGVpbiBXb3JrZXI6IEFsbCBzdGF0aXN0aWNzIGhhdmUgYmVlbiByZXNldCIpfXVwZGF0ZVNpbWlsYXJpdHlTdGF0cyhlKXtlPj0uOD90aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwKys6ZT49LjY/dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MCsrOmU+PS40P3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDArKzp0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5iZWxvdzQwKyt9c2V0dXBNZXNzYWdlSGFuZGxlcigpe3NlbGYub25tZXNzYWdlPWU9Pnt0aGlzLmhhbmRsZU1lc3NhZ2UoZSl9fWhhbmRsZU1lc3NhZ2UoZSl7bGV0IHQ9cGVyZm9ybWFuY2Uubm93KCkse2RhdGE6cn09ZTt0cnl7c3dpdGNoKHIudHlwZSl7Y2FzZSJwaW5nIjpzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJwb25nIixpZDpyLmlkfSk7YnJlYWs7Y2FzZSJsZXZlbnNodGVpblNlYXJjaCI6dGhpcy5oYW5kbGVMZXZlbnNodGVpblNlYXJjaChyLHQpO2JyZWFrO2Nhc2UiZ2V0U3RhdHMiOnRoaXMuaGFuZGxlR2V0U3RhdHMocix0KTticmVhaztjYXNlInJlc2V0U3RhdHMiOnRoaXMuaGFuZGxlUmVzZXRTdGF0cyhyLHQpO2JyZWFrO2Nhc2Uic2V0TG9nTGV2ZWwiOnIubG9nTGV2ZWwhPT12b2lkIDAmJnRoaXMuc2V0TG9nTGV2ZWwoci5sb2dMZXZlbCksci53b3JrZXJJZCE9PXZvaWQgMCYmdGhpcy5zZXRXb3JrZXJJZChyLndvcmtlcklkKTticmVhaztkZWZhdWx0OnRoaXMuc2VuZEVycm9yKHIuaWQsYFVua25vd24gcmVxdWVzdCB0eXBlOiAke3IudHlwZX1gLHQpfX1jYXRjaChzKXt0aGlzLnNlbmRFcnJvcihyLmlkLHMgaW5zdGFuY2VvZiBFcnJvcj9zLm1lc3NhZ2U6U3RyaW5nKHMpLHQpfX1oYW5kbGVMZXZlbnNodGVpblNlYXJjaChlLHQpe2lmKHRoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENGfSBMZXZlbnNodGVpbiBXb3JrZXI6IFN0YXJ0aW5nIHNlYXJjaCBmb3IgIiR7ZS5xdWVyeX0iIHdpdGggJHtlLml0ZW1zPy5sZW5ndGh8fDB9IGl0ZW1zYCksIShlLnF1ZXJ5JiZlLml0ZW1zJiZlLnNlYXJjaEZpZWxkcykpe3RoaXMuc2VuZEVycm9yKGUuaWQsIlF1ZXJ5LCBpdGVtcywgYW5kIHNlYXJjaEZpZWxkcyBhcmUgcmVxdWlyZWQgZm9yIGxldmVuc2h0ZWluU2VhcmNoIix0KTtyZXR1cm59bGV0e3F1ZXJ5OnIsaXRlbXM6cyxzZWFyY2hGaWVsZHM6bixvcHRpb25zOmN9PWU7dGhpcy5jdXJyZW50SXRlbXM9cyx0aGlzLmN1cnJlbnRTZWFyY2hGaWVsZHM9bix0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDRn0gTGV2ZW5zaHRlaW4gV29ya2VyOiBDb25maWd1cmF0aW9uIC0gcXVlcnk6ICIke3J9IiwgZmllbGRzOiBbJHtuLmpvaW4oIiwgIil9XSwgdGhyZXNob2xkOiAke2M/LmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8udGhyZXNob2xkPz9jPy50aHJlc2hvbGQ/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py4zfWApO2xldCBsPWM/LmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8udGhyZXNob2xkPz9jPy50aHJlc2hvbGQ/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py4zLGE9dGhpcy5jYWxjdWxhdGVTaW1pbGFyaXR5KHIsQXJyYXkuZnJvbSh7bGVuZ3RoOnMubGVuZ3RofSwoaCx1KT0+dSksY3x8e30sbCksbz1wZXJmb3JtYW5jZS5ub3coKS10O3RoaXMudXBkYXRlV29ya2VyU3RhdHMoImxldmVuc2h0ZWluU2VhcmNoIixvLHtxdWVyeUxlbmd0aDpyLmxlbmd0aCxpdGVtQ291bnQ6cy5sZW5ndGgscmVzdWx0Q291bnQ6YS5sZW5ndGgsdGhyZXNob2xkOmwsYXZlcmFnZURpc3RhbmNlOmEucmVkdWNlKChoLHUpPT5oKygxLXUuc2NvcmUpLDApLyhhLmxlbmd0aHx8MSl9KSxhLmZvckVhY2goaD0+e2gubWF0Y2hlZEZpZWxkcy5mb3JFYWNoKHU9Pnt0aGlzLnVwZGF0ZUZpZWxkU3RhdHModSxoLnNjb3JlKX0pfSk7bGV0IG09e3R5cGU6ImxldmVuc2h0ZWluU2VhcmNoIixpZDplLmlkLHJlc3VsdHM6YSxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpvLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7dGhyZXNob2xkOmwsdG90YWxDYWxjdWxhdGlvbnM6YS5sZW5ndGgsYXZlcmFnZURpc3RhbmNlOmEucmVkdWNlKChoLHUpPT5oKygxLXUuc2NvcmUpLDApLyhhLmxlbmd0aHx8MSl9fTt0aGlzLmxvZ2dlci5pbmZvKGBcdTI2QTEgTGV2ZW5zaHRlaW4gV29ya2VyOiBDYWxjdWxhdGVkIHNpbWlsYXJpdHkgZm9yICR7cy5sZW5ndGh9IGl0ZW1zLCByZXR1cm5lZCAke2EubGVuZ3RofSByZXN1bHRzYCksdGhpcy5sb2dnZXIuaW5mbygiXHV7MUY0Q0F9IExldmVuc2h0ZWluIFdvcmtlcjogU2VuZGluZyB1bmlmaWVkIHJlc3BvbnNlIHdpdGggc3RhdHM6Iix7dG90YWxDYWxjdWxhdGlvbnM6bS5vcGVyYXRpb25NZXRhPy50b3RhbENhbGN1bGF0aW9ucyxhdmVyYWdlRGlzdGFuY2U6bS5vcGVyYXRpb25NZXRhPy5hdmVyYWdlRGlzdGFuY2Usc3RhdHNLZXlzOk9iamVjdC5rZXlzKG0uc3RhdHN8fHt9KSxwcm9jZXNzaW5nVGltZTptLnByb2Nlc3NpbmdUaW1lfSksc2VsZi5wb3N0TWVzc2FnZShtKSx0aGlzLnNlbmRTdGF0c1VwZGF0ZSgpfWhhbmRsZUdldFN0YXRzKGUsdCl7bGV0IHI9e3R5cGU6InN0YXRzIixpZDplLmlkLHN0YXRzOnRoaXMuZ2V0V29ya2VyU3RhdHMoKSxtZXRyaWNzOnRoaXMuZ2V0TWV0cmljcygpLHByb2Nlc3NpbmdUaW1lOnBlcmZvcm1hbmNlLm5vdygpLXQsd29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25NZXRhOnt9fTtzZWxmLnBvc3RNZXNzYWdlKHIpfWhhbmRsZVJlc2V0U3RhdHMoZSx0KXt0aGlzLnJlc2V0U3RhdHMoKTtsZXQgcj17dHlwZToicmVzZXRTdGF0cyIsaWQ6ZS5pZCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpwZXJmb3JtYW5jZS5ub3coKS10LHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7cmVzZXRDb21wbGV0ZWQ6ITB9fTtzZWxmLnBvc3RNZXNzYWdlKHIpfWNhbGN1bGF0ZVNpbWlsYXJpdHkoZSx0LHIscyl7dGhpcy5sb2dnZXIuaW5mbyhgXHV7MUY1MDR9IExldmVuc2h0ZWluIFdvcmtlcjogUHJvY2Vzc2luZyAke3QubGVuZ3RofSBjYW5kaWRhdGVzIHdpdGggdGhyZXNob2xkICR7c31gKTtsZXQgbj1bXSxjPXIuY2FzZVNlbnNpdGl2ZT9lOmUudG9Mb3dlckNhc2UoKSxsPXRoaXMuZ2V0UXVlcnlUb2tlbnMoZSxyKSxvPXRoaXMuZ2V0TXVsdGlUZXJtT3BlcmF0b3Iocik9PT0iYW5kIiYmbC5sZW5ndGg+MSxtPXIuc29ydEJ5fHxwLnNvcnRCeSxoPW09PT0icmVsZXZhbmNlIix1PWg/ci5sZXZlbnNodGVpbldvcmtlck9wdGlvbnM/LnJlbGV2YW5jZUZpZWxkV2VpZ2h0Pz9wLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ucmVsZXZhbmNlRmllbGRXZWlnaHQ/Py4xNTowLHg9aD9yLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ucGFydGlhbE1hdGNoQm9udXM/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5wYXJ0aWFsTWF0Y2hCb251cz8/LjE6MDtmb3IobGV0IGcgb2YgdCl7aWYoZz49dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoKWNvbnRpbnVlO2xldCBkPXRoaXMuY3VycmVudEl0ZW1zW2ddO2lmKG8mJiF0aGlzLml0ZW1NYXRjaGVzVG9rZW5zKGQsbCxyKSljb250aW51ZTtsZXQgUz0wLGY9MCx5PVtdLEM9W107Zm9yKGxldCBXIG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7bGV0IE09U3RyaW5nKGRbV10/PyIiKTtpZighTSljb250aW51ZTtsZXQgRj1yLmNhc2VTZW5zaXRpdmU/TTpNLnRvTG93ZXJDYXNlKCksUj10aGlzLmNhbGN1bGF0ZUxldmVuc2h0ZWluU2ltaWxhcml0eShjLEYscik7dGhpcy5sZXZlbnNodGVpblN0YXRzLnRvdGFsQ2FsY3VsYXRpb25zKys7bGV0IEQ9ci5jdXN0b21XZWlnaHRzPy5bV10/PzEsdj1SKkQ7Qy5wdXNoKHYpLHY+MCYmeS5wdXNoKFcpLFI+ZiYmKGY9Uiksdj5TJiYoUz12KX1sZXQgdz1TO2gmJnkubGVuZ3RoPjAmJih3PVMreS5sZW5ndGgqdSt4KSx3Pj1zJiZuLnB1c2goe2l0ZW06ZCxzY29yZTp3LGJhc2VTY29yZTpmLG1hdGNoZWRGaWVsZHM6eSxvcmlnaW5hbEluZGV4Omd9KX1sZXQgUD1yLnNvcnRPcmRlcnx8cC5zb3J0T3JkZXIsYjttPT09InJlbGV2YW5jZSI/Yj1uLnNvcnQoKGcsZCk9PlA9PT0iYXNjIj9nLnNjb3JlLWQuc2NvcmU6ZC5zY29yZS1nLnNjb3JlKTptPT09Im9yaWdpbmFsIj9iPW4uc29ydCgoZyxkKT0+e2xldCBTPWcub3JpZ2luYWxJbmRleD8/MCxmPWQub3JpZ2luYWxJbmRleD8/MDtyZXR1cm4gUD09PSJhc2MiP1MtZjpmLVN9KTpiPW4uc29ydCgoZyxkKT0+UD09PSJhc2MiP2cuc2NvcmUtZC5zY29yZTpkLnNjb3JlLWcuc2NvcmUpO2xldCBPPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5tYXhSZXN1bHRzO3JldHVybiB0eXBlb2YgTz09Im51bWJlciI/Yi5zbGljZSgwLE8pOmJ9Z2V0TXVsdGlUZXJtT3BlcmF0b3IoZSl7cmV0dXJuIGUubXVsdGlUZXJtT3BlcmF0b3I/P3AubXVsdGlUZXJtT3BlcmF0b3I/PyJvciJ9Z2V0UXVlcnlUb2tlbnMoZSx0KXtyZXR1cm4odC5jYXNlU2Vuc2l0aXZlP2U6ZS50b0xvd2VyQ2FzZSgpKS5zcGxpdCgvXHMrLykuZmlsdGVyKHM9PnMubGVuZ3RoPjApfWl0ZW1NYXRjaGVzVG9rZW5zKGUsdCxyKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuITA7bGV0IHM9bmV3IFNldCh0KTtmb3IobGV0IG4gb2YgdGhpcy5jdXJyZW50U2VhcmNoRmllbGRzKXtpZihzLnNpemU9PT0wKWJyZWFrO2xldCBjPVN0cmluZyhlW25dPz8iIik7aWYoIWMpY29udGludWU7bGV0IGw9ci5jYXNlU2Vuc2l0aXZlP2M6Yy50b0xvd2VyQ2FzZSgpO2ZvcihsZXQgYSBvZiB0KWlmKHMuaGFzKGEpJiZsLmluY2x1ZGVzKGEpJiYocy5kZWxldGUoYSkscy5zaXplPT09MCkpYnJlYWt9cmV0dXJuIHMuc2l6ZT09PTB9Y2FsY3VsYXRlTGV2ZW5zaHRlaW5TaW1pbGFyaXR5KGUsdCxyKXtpZihlPT09dClyZXR1cm4gdGhpcy5sZXZlbnNodGVpblN0YXRzLnBlcmZlY3RNYXRjaGVzKyssMTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQubGVuZ3RoPT09MD8xOjA7aWYodC5sZW5ndGg9PT0wKXJldHVybiAwO2xldCBzPU1hdGguYWJzKGUubGVuZ3RoLXQubGVuZ3RoKSxuPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxjPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5sZW5ndGhEaWZmUGVuYWx0eXx8cC5sZXZlbnNodGVpbldvcmtlck9wdGlvbnM/Lmxlbmd0aERpZmZQZW5hbHR5fHwxLGw9MS1zL24qYyxhPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5sZW5ndGhTaW1pbGFyaXR5VGhyZXNob2xkfHxwLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ubGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZHx8LjE7aWYobDxhKXJldHVybiAwO2xldCBvPXRoaXMubGV2ZW5zaHRlaW5EaXN0YW5jZShlLHQpLG09MS1vL247dGhpcy5sZXZlbnNodGVpblN0YXRzLnRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnMrPTEsdGhpcy5sZXZlbnNodGVpblN0YXRzLm1pbkRpc3RhbmNlPU1hdGgubWluKHRoaXMubGV2ZW5zaHRlaW5TdGF0cy5taW5EaXN0YW5jZSxvKSx0aGlzLmxldmVuc2h0ZWluU3RhdHMubWF4RGlzdGFuY2U9TWF0aC5tYXgodGhpcy5sZXZlbnNodGVpblN0YXRzLm1heERpc3RhbmNlLG8pO2xldCBoPXRoaXMuZGlzdGFuY2VEaXN0cmlidXRpb24uZ2V0KG8pfHwwO3RoaXMuZGlzdGFuY2VEaXN0cmlidXRpb24uc2V0KG8saCsxKTtsZXQgdT10aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxEaXN0YW5jZUNhbGN1bGF0aW9ucyx4PXRoaXMubGV2ZW5zaHRlaW5TdGF0cy5hdmVyYWdlRGlzdGFuY2U7cmV0dXJuIHRoaXMubGV2ZW5zaHRlaW5TdGF0cy5hdmVyYWdlRGlzdGFuY2U9KHgqKHUtMSkrbykvdSx0aGlzLnVwZGF0ZVNpbWlsYXJpdHlTdGF0cyhtKSx0LmluY2x1ZGVzKGUpJiZ0aGlzLmxldmVuc2h0ZWluU3RhdHMucGFydGlhbE1hdGNoZXMrKyxNYXRoLm1heCgwLG0pfWxldmVuc2h0ZWluRGlzdGFuY2UoZSx0KXtsZXQgcj1bXTtmb3IobGV0IHM9MDtzPD10Lmxlbmd0aDtzKyspcltzXT1bc107Zm9yKGxldCBzPTA7czw9ZS5sZW5ndGg7cysrKXJbMF1bc109cztmb3IobGV0IHM9MTtzPD10Lmxlbmd0aDtzKyspZm9yKGxldCBuPTE7bjw9ZS5sZW5ndGg7bisrKXQuY2hhckF0KHMtMSk9PT1lLmNoYXJBdChuLTEpP3Jbc11bbl09cltzLTFdW24tMV06cltzXVtuXT1NYXRoLm1pbihyW3MtMV1bbi0xXSsxLHJbc11bbi0xXSsxLHJbcy0xXVtuXSsxKTtyZXR1cm4gclt0Lmxlbmd0aF1bZS5sZW5ndGhdfWdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpe2lmKHRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aD09PTApcmV0dXJue3JlY2VudEF2ZXJhZ2VQcm9jZXNzaW5nVGltZTowLHJlY2VudEF2ZXJhZ2VSZXN1bHRDb3VudDowLHRocm91Z2hwdXRQZXJTZWNvbmQ6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOjAsbW9zdENvbW1vblF1ZXJ5TGVuZ3RoOjAsYmVzdFBlcmZvcm1pbmdGaWVsZDoiIixzaW1pbGFyaXR5RGlzdHJpYnV0aW9uOntoaWdoU2ltaWxhcml0eTowLG1lZGl1bVNpbWlsYXJpdHk6MCxsb3dTaW1pbGFyaXR5OjAsdmVyeUxvd1NpbWlsYXJpdHk6MH19O2xldCBlPXRoaXMucGVyZm9ybWFuY2VIaXN0b3J5LnNsaWNlKC0xMCksdD1lLnJlZHVjZSgocyxuKT0+cytuLnByb2Nlc3NpbmdUaW1lLDApL2UubGVuZ3RoLHI9ZS5yZWR1Y2UoKHMsbik9PnMrbi5yZXN1bHRDb3VudCwwKS9lLmxlbmd0aDtyZXR1cm57cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOnQscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OnIsdGhyb3VnaHB1dFBlclNlY29uZDplLmxlbmd0aD4wPzFlMy90OjAsdG90YWxIaXN0b3J5RW50cmllczp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGgsbW9zdENvbW1vblF1ZXJ5TGVuZ3RoOnRoaXMuZ2V0TW9zdENvbW1vblF1ZXJ5TGVuZ3RoKCksYmVzdFBlcmZvcm1pbmdGaWVsZDp0aGlzLmdldEJlc3RQZXJmb3JtaW5nRmllbGQoKSxzaW1pbGFyaXR5RGlzdHJpYnV0aW9uOntoaWdoU2ltaWxhcml0eTp0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwLG1lZGl1bVNpbWlsYXJpdHk6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MCxsb3dTaW1pbGFyaXR5OnRoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDAsdmVyeUxvd1NpbWlsYXJpdHk6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MH19fWdldE1vc3RDb21tb25RdWVyeUxlbmd0aCgpe2xldCBlPTAsdD0wO3JldHVybiB0aGlzLnF1ZXJ5TGVuZ3RoU3RhdHMuZm9yRWFjaCgocixzKT0+e3IuY291bnQ+ZSYmKGU9ci5jb3VudCx0PXMpfSksdH1nZXRCZXN0UGVyZm9ybWluZ0ZpZWxkKCl7bGV0IGU9IiIsdD0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgocixzKT0+e3IuYXZlcmFnZVNjb3JlPnQmJih0PXIuYXZlcmFnZVNjb3JlLGU9cyl9KSxlfXNlbmRFcnJvcihlLHQscil7dGhpcy51cGRhdGVTdGF0cyhwZXJmb3JtYW5jZS5ub3coKS1yLCExKTtsZXQgcz17dHlwZToiZXJyb3IiLGlkOmUsZXJyb3I6dCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpwZXJmb3JtYW5jZS5ub3coKS1yLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7fX07c2VsZi5wb3N0TWVzc2FnZShzKX19O25ldyBMOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:L&&L.tagName.toUpperCase()==="SCRIPT"&&L.src||new URL("index.cjs",document.baseURI).href),a=l.workerUrls?.levenshteinWorker?new URL(l.workerUrls.levenshteinWorker,window.location.origin):t;this.logger.debug("๐ง Global Levenshtein Worker URL:",a.toString()),this.levenshteinWorker=new Worker(a,{type:"module"}),this.logger.info("๐ง Global Levenshtein Worker: Initialized successfully")}}catch(t){this.logger.warn("โ ๏ธ Failed to initialize global Workers:",t)}}releaseReference(){this.referenceCount--,this.logger.debug(`๐ง Worker reference released (ref count: ${this.referenceCount})`)}dispose(){this.indexWorker&&(this.indexWorker.terminate(),this.indexWorker=null),this.levenshteinWorker&&(this.levenshteinWorker.terminate(),this.levenshteinWorker=null),this.initializationPromise=null,this.referenceCount=0,this.logger.info("๐ง Global Workers disposed")}};ce.instances=new Map;var P=ce,be=class{constructor(){this.listeners=new Map,this.logger=new $(2)}setLogger(e){this.logger=e}on(e,l){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e)?.add(l)}off(e,l){let t=this.listeners.get(e);t&&t.delete(l)}emit(e,l){let t=this.listeners.get(e);t&&t.forEach(a=>{try{a(l)}catch(r){this.logger.error(`โ Error in event listener for ${e}:`,r)}})}removeAllListeners(){this.listeners.clear()}},Ge=class{constructor(e=D){this.defaultOptions=e,this.indexWorker=null,this.levenshteinWorker=null,this.searchHistory=[],this.learningData={fieldWeights:{},queryPatterns:{},userPreferences:{preferredThreshold:.4,frequentFields:[],searchStyle:"fuzzy",lastUsedOptions:{}},performanceMetrics:{averageSearchTime:{},indexBuildTime:0}},this.requestId=0,this.pendingRequests=new Map,this.eventEmitter=new be,this.isIndexBuilt=!1,this.lastIndexedDataHash=null,this.stats={totalSearches:0,averageSearchTime:0,popularQueries:[],performanceBySize:{},workers:{index:{stats:{}},levenshtein:{stats:{}}}},this.isDisposed=!1;let l="[fuzzy-search]";e.instanceName?l=`[fuzzy-search:${e.instanceName}]`:e.workerId&&(l=`[fuzzy-search:${e.workerId}]`),this.logger=new $(e.logLevel??2,l,e.logger??console),this.eventEmitter.setLogger(this.logger),this.handleIndexWorkerMessageBound=this.handleIndexWorkerMessage.bind(this),this.handleIndexWorkerErrorBound=this.handleIndexWorkerError.bind(this),this.handleLevenshteinWorkerMessageBound=this.handleLevenshteinWorkerMessage.bind(this),this.handleLevenshteinWorkerErrorBound=this.handleLevenshteinWorkerError.bind(this),this.loadLearningData(),this.workersInitialized=this.initializeWorkers(),setInterval(()=>this.cleanupPendingRequests(),3e4)}async initializeWorkers(){if(!(typeof Worker>"u"))try{let e=await P.getInstance(this.defaultOptions.workerId).getWorkers(this.defaultOptions);if(this.isDisposed){this.logger.debug("๐ง Manager disposed before worker initialization completed");return}this.indexWorker=e.indexWorker,this.levenshteinWorker=e.levenshteinWorker,this.indexWorker&&(this.indexWorker.addEventListener("message",this.handleIndexWorkerMessageBound),this.indexWorker.addEventListener("error",this.handleIndexWorkerErrorBound),this.indexWorker.addEventListener("error",l=>{this.logger.error("๐ง Index Worker Error (Event Listener):",l)})),this.levenshteinWorker&&(this.levenshteinWorker.addEventListener("message",this.handleLevenshteinWorkerMessageBound),this.levenshteinWorker.addEventListener("error",this.handleLevenshteinWorkerErrorBound),this.levenshteinWorker.addEventListener("error",l=>{this.logger.error("๐ง Levenshtein Worker Error (Event Listener):",l)})),this.eventEmitter.emit("workers:initialized",{indexWorker:!!this.indexWorker,levenshteinWorker:!!this.levenshteinWorker}),await this.testWorkerConnectivity()}catch(e){this.logger.warn("โ ๏ธ Failed to initialize Workers:",e)}}async testWorkerConnectivity(){try{let e=[];this.indexWorker&&e.push(this.pingWorker(this.indexWorker,"index")),this.levenshteinWorker&&e.push(this.pingWorker(this.levenshteinWorker,"levenshtein")),await Promise.all(e)}catch(e){this.logger.error("๐ง Worker connectivity test failed:",e)}}async pingWorker(e,l){let t=`ping-${l}-${Date.now()}`;await new Promise((a,r)=>{let d=setTimeout(()=>{this.logger.warn(`๐ง ${l==="index"?"Index":"Levenshtein"} Worker: Ping timeout`),e.removeEventListener("message",n),r(new Error(`${l==="index"?"Index":"Levenshtein"} Worker ping timeout`))},5e3),n=c=>{let G=c.data;G.type==="pong"&&G.id===t&&(clearTimeout(d),e.removeEventListener("message",n),this.logger.debug(`๐ง ${l==="index"?"Index":"Levenshtein"} Worker: Ping successful`),a())};e.addEventListener("message",n),this.logger.debug(`๐ง ${l==="index"?"Index":"Levenshtein"} Worker: Sending ping message:`,t),e.postMessage({type:"ping",id:t})})}handleIndexWorkerMessage(e){let l=e.data;if(this.logger.debug("๐ง Index Worker message received:",l.type,l),l.type==="indexSearchResults"){let t=this.pendingRequests.get(l.id);t&&(this.pendingRequests.delete(l.id),l.error?t.reject(new Error(l.error)):t.resolve(l.results||[])),this.eventEmitter.emit("indexWorker:searchCompleted",{requestId:l.id,resultsCount:l.results?.length||0,processingTime:l.processingTime})}else if(l.type==="error"){let t=this.pendingRequests.get(l.id);t&&(this.pendingRequests.delete(l.id),t.reject(new Error(l.error||"Index Worker error"))),this.logger.error("โ Index Worker reported error:",{requestId:l.id,message:l.error,processingTime:l.processingTime}),this.eventEmitter.emit("indexWorker:error",{requestId:l.id,error:l.error,processingTime:l.processingTime})}else l.type==="indexReady"?(this.logger.info("โ
Index Worker: Index ready notification received",l),l.stats&&(this.stats.workers.index.stats=l.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"index",stats:this.stats.workers.index.stats})),this.eventEmitter.emit("indexWorker:message",l)):l.type==="pong"||l.type==="stats"&&l.stats&&(this.stats.workers.index.stats=l.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"index",stats:this.stats.workers.index.stats}));this.eventEmitter.emit("indexWorker:message",l)}handleIndexWorkerError(e){this.logger.error("๐ง Index Worker Error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,type:e.type}),this.eventEmitter.emit("indexWorker:error",e)}handleLevenshteinWorkerMessage(e){let l=e.data;if(this.logger.debug("๐ง Levenshtein Worker message received:",l.type,"stats present:",!!l.stats),l.type==="levenshteinSearch"){let t=this.pendingRequests.get(l.id);t&&(this.pendingRequests.delete(l.id),l.error?t.reject(new Error(l.error)):t.resolve(l.results||[])),l.stats&&(this.stats.workers.levenshtein.stats=l.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"levenshtein",stats:this.stats.workers.levenshtein.stats})),this.eventEmitter.emit("levenshteinWorker:searchCompleted",{requestId:l.id,processingTime:l.processingTime,workerType:l.workerType,operationMeta:l.operationMeta})}else l.type==="pong"||l.type==="stats"&&l.stats&&(this.stats.workers.levenshtein.stats=l.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"levenshtein",stats:this.stats.workers.levenshtein.stats}));this.eventEmitter.emit("levenshteinWorker:message",l)}handleLevenshteinWorkerError(e){this.logger.error("๐ง Levenshtein Worker Error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,type:e.type}),this.eventEmitter.emit("levenshteinWorker:error",e)}isLocalStorageAvailable(){try{return typeof window<"u"&&window.localStorage!==void 0}catch{return!1}}loadLearningData(){try{if(this.isLocalStorageAvailable()){let e=localStorage.getItem("fuzzy-search-learning-data");e?this.learningData=JSON.parse(e):this.initializeDefaultLearningData()}else this.initializeDefaultLearningData()}catch(e){this.logger.warn("โ ๏ธ Failed to load learning data:",e),this.initializeDefaultLearningData()}}initializeDefaultLearningData(){this.learningData={fieldWeights:{},queryPatterns:{},userPreferences:{preferredThreshold:this.defaultOptions.threshold,frequentFields:[],searchStyle:"fuzzy",lastUsedOptions:{}},performanceMetrics:{averageSearchTime:{},indexBuildTime:0}}}saveLearningData(){try{this.isLocalStorageAvailable()&&localStorage.setItem("fuzzy-search-learning-data",JSON.stringify(this.learningData))}catch(e){this.logger.warn("โ ๏ธ Failed to save learning data:",e)}}async search(e,l,t,a){let r=performance.now(),d={...this.defaultOptions,...a};a?.threshold!==void 0&&(a.levenshteinWorkerOptions||(d.levenshteinWorkerOptions={...d.levenshteinWorkerOptions,threshold:a.threshold}),a.indexWorkerOptions||(d.indexWorkerOptions={...d.indexWorkerOptions,threshold:a.threshold})),this.logger.debug(`๐ FuzzySearchManager.search called: query="${e}", items.length=${l.length}`),this.eventEmitter.emit("search:start",{query:e,options:d});try{if(await this.workersInitialized,this.isDisposed)return this.logger.debug("๐ซ search skipped because manager is disposed"),[];let n=this.generateDataHash(l,t),c=P.getInstance(this.defaultOptions.workerId),G=c.getLastIndexedDataHash();if(G!==n){let u=c.getBuildingPromise(n);if(u)this.logger.debug("๐ง Index build already in progress globally, waiting..."),await u,this.isIndexBuilt=!0,this.lastIndexedDataHash=n;else{this.logger.debug(`๐ง Building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${G!==n}`);let b=(async()=>{await this.buildIndex(l,t,d),this.isIndexBuilt=!0,this.lastIndexedDataHash=n,c.setLastIndexedDataHash(n)})();c.setBuildingPromise(n,b),await b}}else this.isIndexBuilt?this.logger.debug("๐ง Index already built for current data, skipping rebuild"):(this.logger.debug("๐ง Index already built globally for current data, skipping rebuild"),this.isIndexBuilt=!0,this.lastIndexedDataHash=n);if(!(this.indexWorker&&this.levenshteinWorker)){if(this.isDisposed)return this.logger.debug("๐ซ search skipped because manager is disposed"),[];throw new Error("Web Workers are not available or not initialized.")}let X=await this.searchParallel(e,l,t,d),m=performance.now()-r;this.updateStats(e,m),this.updateLearningData(e,l.length,m);let p={results:X,totalItems:l.length,processingTime:m,query:e,options:d};return this.eventEmitter.emit("search:complete",p),X}catch(n){let c=n instanceof Error?n:new Error("Unknown search error");throw this.eventEmitter.emit("search:error",{error:c,query:e}),c}}async buildIndex(e,l,t){if(this.isDisposed){this.logger.debug("๐ซ buildIndex skipped because manager is disposed");return}if(!this.indexWorker){if(this.isDisposed){this.logger.debug("๐ซ buildIndex skipped because manager is disposed");return}throw new Error("Index Worker not available")}let a=`build-index-${++this.requestId}`;this.logger.debug(`๐ค Building index: requestId=${a}`);let r={type:"buildIndex",id:a,items:e,searchFields:l,options:t};return new Promise((d,n)=>{let c=null,G=m=>{let p=m;p.type==="indexReady"&&p.id===a&&(this.logger.info(`โ
Index Worker: Index built successfully (requestId=${a})`),this.logger.debug(`๐ฏ buildIndex: Match found! Resolving promise for requestId=${a}`),this.eventEmitter.off("indexWorker:message",G),this.eventEmitter.off("indexWorker:message",X),c&&(clearTimeout(c),c=null),d())},X=m=>{let p=m;p.type==="error"&&p.id===a&&(this.logger.warn(`โ buildIndex: Worker reported error for requestId=${a}`,p.error),this.eventEmitter.off("indexWorker:message",G),this.eventEmitter.off("indexWorker:message",X),c&&(clearTimeout(c),c=null),n(new Error(p.error||"Index Worker error")))};this.eventEmitter.on("indexWorker:message",G),this.eventEmitter.on("indexWorker:message",X),this.indexWorker?.postMessage(r),c=setTimeout(()=>{this.eventEmitter.off("indexWorker:message",G),this.eventEmitter.off("indexWorker:message",X),c=null,n(new Error("Index build timeout"))},6e4)})}async searchParallel(e,l,t,a){if(this.isDisposed)return this.logger.debug("๐ซ searchParallel skipped because manager is disposed"),[];this.logger.debug(`๐ searchParallel: query="${e}", items.length=${l.length}`);let{enableIndexFiltering:r,enableLevenshtein:d}=a;if(!(r||d))return this.logger.warn("โ ๏ธ Both search stages are disabled. Returning empty results."),[];let n=r?this.runIndexStage(e,l,t,a):Promise.resolve({stage:"index",results:[],processingTime:0,confidence:0,candidatesProcessed:0}),c=d?this.runLevenshteinStage(e,l,t,a):Promise.resolve({stage:"levenshtein",results:[],processingTime:0,confidence:0,candidatesProcessed:0}),[G,X]=await Promise.all([n,c]),m=this.mergeParallelResults(G,X,a.parallelSearchStrategy||"balanced",a);return this.logger.debug(`๐ง Parallel search completed: Index=${G.results.length}, Levenshtein=${X.results.length}, Merged=${m.results.length}`),m.results}async runIndexStage(e,l,t,a){let r=`index-${++this.requestId}`;this.logger.debug(`๐ค Index Stage: requestId=${r}`);let d={type:"indexSearch",id:r,query:e,items:l,searchFields:t,options:a};return this.executeWorkerStage(this.indexWorker,d,{stage:"index",confidence:.8,timeoutMessage:"Index search timeout",unavailableMessage:"Index Worker not available"})}async runLevenshteinStage(e,l,t,a){let r=`levenshtein-${++this.requestId}`;this.logger.debug(`๐ค Levenshtein Stage: requestId=${r}`);let d={type:"levenshteinSearch",id:r,query:e,items:l,searchFields:t,options:a};return this.executeWorkerStage(this.levenshteinWorker,d,{stage:"levenshtein",confidence:.9,timeoutMessage:"Levenshtein search timeout",unavailableMessage:"Levenshtein Worker not available"})}executeWorkerStage(e,l,t){if(!e)throw new Error(t.unavailableMessage);return new Promise((a,r)=>{let d=setTimeout(()=>{this.pendingRequests.has(l.id)&&(this.pendingRequests.delete(l.id),r(new Error(t.timeoutMessage)))},3e4);this.pendingRequests.set(l.id,{resolve:n=>{clearTimeout(d),a({stage:t.stage,results:n,processingTime:0,confidence:t.confidence,candidatesProcessed:n.length})},reject:n=>{clearTimeout(d),r(n)},timestamp:Date.now()}),e.postMessage(l)})}mergeParallelResults(e,l,t,a){let r=[];switch(t){case"index-first":r=e.results.length>0?e.results:l.results;break;case"levenshtein-first":r=l.results.length>0?l.results:e.results;break;default:r=this.mergeByScore([...e.results,...l.results],a);break}return{results:r,totalProcessingTime:e.processingTime+l.processingTime,indexStage:e,levenshteinStage:l,mergeStrategy:t,mergeQuality:.8}}mergeByScore(e,l){let t=new Map;e.forEach(n=>{if(n.originalIndex!==void 0){let c=t.get(n.originalIndex);(!c||n.score>c.score)&&t.set(n.originalIndex,n)}});let a=Array.from(t.values()),r=l.sortBy||D.sortBy,d=l.sortOrder||D.sortOrder;return r==="original"?a.sort((n,c)=>{let G=n.originalIndex??0,X=c.originalIndex??0;return d==="asc"?G-X:X-G}):a.sort((n,c)=>d==="asc"?n.score-c.score:c.score-n.score)}generateDataHash(e,l){return`${e.length}|${l.join(",")}|${JSON.stringify(e.slice(0,3))}`}updateStats(e,l){this.stats.totalSearches++,this.stats.averageSearchTime=(this.stats.averageSearchTime*(this.stats.totalSearches-1)+l)/this.stats.totalSearches}updateLearningData(e,l,t){this.learningData.queryPatterns[e]=(this.learningData.queryPatterns[e]??0)+1;let a=this.getPerformanceSizeKey(l);this.learningData.performanceMetrics.averageSearchTime[a]=t,this.stats.totalSearches%10===0&&this.saveLearningData()}getPerformanceSizeKey(e){return e<1e3?"small":e<1e4?"medium":e<1e5?"large":"xlarge"}cleanupPendingRequests(){let e=Date.now(),l=3e4;this.pendingRequests.forEach((t,a)=>{e-t.timestamp>l&&(t.reject(new Error("Request timeout")),this.pendingRequests.delete(a))})}updateSearchHistory(e,l,t=0,a=0){let r={query:e,timestamp:Date.now(),selectedItemId:l,resultCount:t,processingTime:a,searchTime:a,successful:t>0};this.searchHistory.unshift(r),this.searchHistory.length>1e3&&(this.searchHistory=this.searchHistory.slice(0,500))}async getStats(e=5e3){return await Promise.all([this.waitForWorkerStats(this.indexWorker,"index",e),this.waitForWorkerStats(this.levenshteinWorker,"levenshtein",e)]),this.stats}getCurrentStats(){return this.stats}async resetStats(e=5e3){let l=[this.resetWorkerStats(this.indexWorker,"index",e),this.resetWorkerStats(this.levenshteinWorker,"levenshtein",e)];this.stats={totalSearches:0,averageSearchTime:0,popularQueries:[],performanceBySize:{},workers:{index:{stats:this.createEmptyWorkerStats("index")},levenshtein:{stats:this.createEmptyWorkerStats("levenshtein")}}},this.searchHistory=[],await Promise.all(l),this.logger.info("๐ FuzzySearchManager: All statistics have been reset"),this.eventEmitter.emit("stats:reset",{timestamp:Date.now(),resetBy:"manager"})}waitForWorkerStats(e,l,t){return e?new Promise(a=>{let r=setTimeout(()=>{this.logger.warn(`โ ๏ธ getStats: Timeout waiting for ${l} worker.`),this.eventEmitter.off("worker:statsUpdated",d),a()},t),d=n=>{let{worker:c}=n;c===l&&(clearTimeout(r),this.eventEmitter.off("worker:statsUpdated",d),a())};this.eventEmitter.on("worker:statsUpdated",d),e.postMessage({type:"getStats"})}):Promise.resolve()}resetWorkerStats(e,l,t){return e?new Promise(a=>{let r=setTimeout(()=>{this.logger.warn(`โ ๏ธ resetStats: Timeout waiting for ${l} worker.`),e.removeEventListener("message",d),a()},t),d=c=>{c.data.type==="resetStats"&&(clearTimeout(r),e.removeEventListener("message",d),this.logger.info(`๐ ${l} worker statistics have been reset`),a())};e.addEventListener("message",d);let n={type:"resetStats",id:`resetStats-${Date.now()}-${l}`};e.postMessage(n)}):Promise.resolve()}createEmptyWorkerStats(e){return{basic:{totalSearches:0,totalProcessingTime:0,averageSearchTime:0,lastSearchTime:0,errorCount:0,timestamp:Date.now()},workerSpecific:{workerType:e,operationCount:0,operationDistribution:{},specificMetrics:{}},analysis:{fieldPerformance:{},performanceInsights:{recentAverageProcessingTime:0,recentAverageResultCount:0,throughputPerSecond:0,totalHistoryEntries:0,mostCommonQueryLength:0,bestPerformingField:"",similarityDistribution:{highSimilarity:0,mediumSimilarity:0,lowSimilarity:0,veryLowSimilarity:0}},recentHistory:[]}}}getSearchHistory(){return[...this.searchHistory]}on(e,l){this.eventEmitter.on(e,l)}off(e,l){this.eventEmitter.off(e,l)}async prebuildIndex(e,l,t){this.logger.info(`๐๏ธ Pre-building index for ${e.length} items`);try{if(await this.workersInitialized,this.isDisposed){this.logger.debug("๐ซ prebuildIndex skipped because manager is disposed");return}let a=this.generateDataHash(e,l),r=P.getInstance(this.defaultOptions.workerId),d=r.getLastIndexedDataHash();if(this.logger.debug(`๐ง Checking index status: globalHash=${d}, currentHash=${a}`),!this.isIndexBuilt||this.lastIndexedDataHash!==a){if(d===a){this.logger.debug("๐ง Index already built globally for current data, skipping pre-build"),this.isIndexBuilt=!0,this.lastIndexedDataHash=a;return}let n=r.getBuildingPromise(a);if(n){this.logger.debug("๐ง Index build already in progress globally, waiting..."),await n,this.isIndexBuilt=!0,this.lastIndexedDataHash=a;return}this.logger.debug(`๐ง Pre-building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${this.lastIndexedDataHash!==a}`);let c=(async()=>{await this.rebuildIndex(e,l,t)})();r.setBuildingPromise(a,c),await c,this.logger.info(`โ
Index pre-built successfully for ${e.length} items`)}else this.logger.debug("๐ง Index already built for current data, skipping pre-build")}catch(a){throw this.logger.error("๐ง Error during index pre-building:",a),a}}async rebuildIndex(e,l,t){this.logger.info(`๐ Starting forced index rebuild for ${e.length} items`);let a={...this.defaultOptions,...t};try{if(await this.workersInitialized,this.isDisposed){this.logger.debug("๐ซ rebuildIndex skipped because manager is disposed");return}this.isIndexBuilt=!1,this.lastIndexedDataHash=null,await this.buildIndex(e,l,a),this.logger.info(`โ
Index rebuild completed successfully for ${e.length} items`),this.isIndexBuilt=!0,this.lastIndexedDataHash=this.generateDataHash(e,l),P.getInstance(this.defaultOptions.workerId).setLastIndexedDataHash(this.lastIndexedDataHash),this.eventEmitter.emit("index:rebuilt",{itemCount:e.length,searchFields:l,timestamp:Date.now()})}catch(r){throw this.logger.error("โ Failed to rebuild index:",r),this.eventEmitter.emit("index:rebuildError",{error:r instanceof Error?r.message:String(r),timestamp:Date.now()}),r}}dispose(){this.isDisposed=!0,this.indexWorker&&(this.indexWorker.removeEventListener("message",this.handleIndexWorkerMessageBound),this.indexWorker.removeEventListener("error",this.handleIndexWorkerErrorBound)),this.levenshteinWorker&&(this.levenshteinWorker.removeEventListener("message",this.handleLevenshteinWorkerMessageBound),this.levenshteinWorker.removeEventListener("error",this.handleLevenshteinWorkerErrorBound)),P.getInstance(this.defaultOptions.workerId).releaseReference(),this.indexWorker=null,this.levenshteinWorker=null,this.pendingRequests.clear(),this.eventEmitter.removeAllListeners(),this.saveLearningData()}},I=(e,l)=>{if(typeof e=="string"&&e.trim())return e;if(e instanceof Error&&e.message.trim())return e.message;if(typeof e=="object"&&e!==null){if("error"in e)return I(e.error,l);if("message"in e)return I(e.message,l)}return l};function pe(e,l,t){let[a,r]=o.useState(""),[d,n]=o.useState([]),[c,G]=o.useState(!1),[X,m]=o.useState(!1),[p,u]=o.useState(null),[b,F]=o.useState([]),[f,S]=o.useState({totalSearches:0,averageSearchTime:0,itemCount:e.length,resultsCount:0,workerStats:void 0}),R=o.useMemo(()=>{let i={...D,...t};return t?.threshold!==void 0&&(t.levenshteinWorkerOptions||(i.levenshteinWorkerOptions={...i.levenshteinWorkerOptions,threshold:t.threshold}),t.indexWorkerOptions||(i.indexWorkerOptions={...i.indexWorkerOptions,threshold:t.threshold})),i},[t]),h=o.useMemo(()=>{let i="[fuzzy-search-react]";return R.instanceName?i=`[fuzzy-search-react:${R.instanceName}]`:R.workerId&&(i=`[fuzzy-search-react:${R.workerId}]`),new $(R.logLevel??2,i,R.logger??console)},[R.logLevel,R.logger,R.workerId,R.instanceName]),W=o.useRef(null),H=o.useRef(a);o.useEffect(()=>{H.current=a},[a]);let M=o.useMemo(()=>l.map(i=>String(i)),[l]);o.useEffect(()=>(W.current=new Ge(R),h.debug("๐ง FuzzySearchManager created (initial setup)"),()=>{h.debug("๐ง FuzzySearchManager disposed (component unmount)"),W.current?.dispose(),W.current=null}),[R,h]),o.useEffect(()=>{if(!W.current)return;let i=()=>{if(W.current){let g=W.current.getCurrentStats(),J={totalSearches:g?.totalSearches??0,averageSearchTime:g?.averageSearchTime??0,itemCount:e.length,resultsCount:d.length,workerStats:{index:g?.workers.index.stats,levenshtein:g?.workers.levenshtein.stats}};S(J)}},V=g=>{let J=I(g,"Index Worker error");h.error("โ Index worker error event",g),u(J),m(!1)},Y=g=>{let J=I(g,"Index rebuild error");h.error("โ Index rebuild error event",g),u(J),m(!1)},v=g=>{let J=I(g,"Search execution failed");h.error("โ Search error event",g),u(J)};return W.current.on("worker:statsUpdated",i),W.current.on("search:complete",i),W.current.on("indexWorker:error",V),W.current.on("index:rebuildError",Y),W.current.on("search:error",v),()=>{W.current&&(W.current.off("worker:statsUpdated",i),W.current.off("search:complete",i),W.current.off("indexWorker:error",V),W.current.off("index:rebuildError",Y),W.current.off("search:error",v))}});let U=o.useCallback(async i=>{if(W.current){if(h.debug(`๐ performSearch called with query: "${i}"`),i!==H.current){h.debug(`๐ซ performSearch skipped for stale query: "${i}" (current: "${H.current}")`);return}try{if(h.debug(`๐ Setting isSearching to true for query: "${i}"`),G(!0),u(null),!i.trim()){if(i!==H.current)return;n(e.map((J,T)=>({item:J,score:1,baseScore:1,matchedFields:[],relevanceReason:"ๅ
จไปถ่กจ็คบ",originalIndex:T}))),h.debug(`๐ Setting isSearching to false for empty query: "${i}"`),G(!1);return}h.info(`๐ Starting search with query: "${i}", items count: ${e.length}`);let V=performance.now(),Y=await W.current.search(i,e,M,R),v=performance.now()-V;if(i!==H.current){h.debug(`๐ซ Search result ignored for stale query: "${i}" (current: "${H.current}")`);return}h.info(`โ
Search completed with ${Y.length} results in ${v}ms`),n(Y);let g={query:i,timestamp:Date.now(),resultCount:Y.length,processingTime:v,searchTime:v,successful:Y.length>0};F(J=>{let T=J.filter(B=>B.query!==i);return[g,...T].slice(0,50)})}catch(V){if(i!==H.current)return;h.error(`โ Search error for query: "${i}"`,V),u(V instanceof Error?V.message:"Search failed"),n([])}finally{i===H.current&&(h.debug(`๐ Setting isSearching to false (finally) for query: "${i}"`),G(!1))}}},[e,M,R,h.info,h.error,h.debug]);o.useEffect(()=>{if(!W.current||e.length===0)return;let i=!1,V=R.autoSearchOnIndexRebuild??!0;return h.info(`๐๏ธ Data changed, pre-building index for ${e.length} items`),m(!0),W.current.prebuildIndex(e,M,R).then(()=>{!i&&V&&(h.debug("๐ Re-running search after index rebuild"),U(H.current))}).catch(Y=>{h.warn("๐ง Failed to pre-build index:",Y),u(I(Y,"ใคใณใใใฏในใฎไบๅๆง็ฏไธญใซใจใฉใผใ็บ็ใใพใใ"))}).finally(()=>{i||m(!1)}),()=>{i=!0}},[e,M,R,U,h.warn,h.info,h.debug]),o.useEffect(()=>{h.debug(`๐ฏ useEffect triggered - searchTerm: "${a}", debounceMs: ${R.debounceMs}`);let i=setTimeout(()=>{h.debug(`โฐ Timeout executing performSearch for: "${a}"`),U(a)},R.debounceMs);return()=>{h.debug(`๐ซ Timeout cleared for: "${a}"`),clearTimeout(i)}},[a,R,U,h]),o.useEffect(()=>{a.trim()||n(e.map((i,V)=>({item:i,score:1,baseScore:1,matchedFields:[],relevanceReason:"ๅ
จไปถ่กจ็คบ",originalIndex:V})))},[e,a]);let _=o.useCallback((i,V)=>{h.info("๐ฏ Selected item:",i,"at index:",V)},[h]),q=o.useCallback(()=>{r(""),u(null)},[]),C=o.useCallback(()=>{F([])},[]),ee=o.useCallback(async()=>{if(W.current){await W.current.resetStats(),F([]),u(null);let i=W.current.getCurrentStats(),V={totalSearches:i?.totalSearches??0,averageSearchTime:i?.averageSearchTime??0,itemCount:e.length,resultsCount:d.length,workerStats:{index:i?.workers.index.stats,levenshtein:i?.workers.levenshtein.stats}};S(V),h.info("๐ useFuzzySearch: Statistics have been reset and refreshed")}},[e.length,d.length,h]),le=o.useCallback((i,V=5)=>{let Y=b.filter(v=>v.query.toLowerCase().includes(i.toLowerCase())&&v.query!==i).sort((v,g)=>g.timestamp-v.timestamp).slice(0,V).map(v=>v.query);return Array.from(new Set(Y))},[b]),j=o.useCallback(async i=>{if(!W.current){h.warn("โ ๏ธ Search manager is not initialized");return}h.info(`๐ Rebuilding index for ${e.length} items`),m(!0),u(null);try{let V=i?{...R,...i}:R;await W.current.rebuildIndex(e,M,V),h.info("โ
Index rebuild completed successfully")}catch(V){let Y=V instanceof Error?V.message:"ใคใณใใใฏในๅๆง็ฏไธญใซใจใฉใผใ็บ็ใใพใใ";throw h.error("โ Index rebuild failed:",Y),u(Y),V}finally{m(!1)}},[e,M,R,h]);return{searchTerm:a,setSearchTerm:r,filteredItems:d,isSearching:c,isIndexBuilding:X,error:p,searchHistory:b,options:R,selectItem:_,clearSearch:q,clearHistory:C,resetStats:ee,getSearchSuggestions:le,performanceMetrics:f,rebuildIndex:j}}function Xe(e,l){const t=o.useMemo(()=>({threshold:.3,sortBy:"score",sortOrder:"desc"}),[]),a=o.useMemo(()=>["label"],[]),{setSearchTerm:r,filteredItems:d,isSearching:n}=pe(e,a,t);o.useEffect(()=>{r(l)},[l,r]);const c=o.useMemo(()=>{if(!l)return e;const G=l.toLowerCase(),X=[],m=[];for(const p of d){const u=p.item;u.label.toLowerCase()===G?X.push(u):m.push(u)}return[...X,...m]},[d,l,e]);return{filteredOptions:l?c:e,isSearching:n}}function We({value:e,onChange:l,multiple:t}){const[a,r]=o.useState(!1),[d,n]=o.useState(""),c=o.useRef(null);o.useEffect(()=>{const p=u=>{c.current&&!c.current.contains(u.target)&&r(!1)};return document.addEventListener("mousedown",p),()=>{document.removeEventListener("mousedown",p)}},[]);const G=o.useCallback(p=>{if(t){const u=Array.isArray(e)?e:e?[e]:[],b=u.some(f=>f.value===p.value);let F;b?F=u.filter(f=>f.value!==p.value):F=[...u,p],l?.(F)}else l?.(p),r(!1),n("")},[t,e,l]),X=o.useCallback(p=>{if(!t)return;const b=(Array.isArray(e)?e:e?[e]:[]).filter(F=>F.value!==p.value);l?.(b)},[t,e,l]),m=o.useCallback(()=>{r(p=>!p)},[]);return{isOpen:a,setIsOpen:r,query:d,setQuery:n,containerRef:c,handleSelect:G,handleRemove:X,toggleOpen:m}}function ye({title:e,titleId:l,...t},a){return k.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":l},t),e?k.createElement("title",{id:l},e):null,k.createElement("path",{fillRule:"evenodd",d:"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z",clipRule:"evenodd"}))}const de=k.forwardRef(ye);function Re({title:e,titleId:l,...t},a){return k.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":l},t),e?k.createElement("title",{id:l},e):null,k.createElement("path",{fillRule:"evenodd",d:"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",clipRule:"evenodd"}))}const Ve=k.forwardRef(Re);function xe({title:e,titleId:l,...t},a){return k.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:a,"aria-labelledby":l},t),e?k.createElement("title",{id:l},e):null,k.createElement("path",{d:"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"}))}const ge=k.forwardRef(xe),Ye=({option:e,isSelected:l,isFocused:t,onClick:a,multiple:r,style:d})=>y.jsxs("div",{role:"option","aria-selected":l,tabIndex:0,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&a(e)},style:d,onClick:()=>a(e),className:`sb-option ${t?"sb-option--focused":""}
|
|
7
|
-
${
|
|
8
|
-
`,children:[
|
|
9
|
-
`,children:
|
|
10
|
-
`,onMouseDown:
|
|
6
|
+
<%s key={someKey} {...props} />`,F,T,j,T),Y[T+F]=!0)}if(T=null,W!==void 0&&(r(W),T=""+W),n(p)&&(r(p.key),T=""+p.key),"key"in p){W={};for(var re in p)re!=="key"&&(W[re]=p[re])}else W=p;return T&&l(W,typeof i=="function"?i.displayName||i.name||"Unknown":i),v(i,T,W,a(),V,te)}function b(i){m(i)?i._store&&(i._store.validated=1):typeof i=="object"&&i!==null&&i.$$typeof===_&&(i._payload.status==="fulfilled"?m(i._payload.value)&&i._payload.value._store&&(i._payload.value._store.validated=1):i._store&&(i._store.validated=1))}function m(i){return typeof i=="object"&&i!==null&&i.$$typeof===E}var h=d,E=Symbol.for("react.transitional.element"),O=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),k=Symbol.for("react.strict_mode"),g=Symbol.for("react.profiler"),w=Symbol.for("react.consumer"),P=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),M=Symbol.for("react.suspense"),X=Symbol.for("react.suspense_list"),Z=Symbol.for("react.memo"),_=Symbol.for("react.lazy"),K=Symbol.for("react.activity"),ee=Symbol.for("react.client.reference"),q=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,u=Object.prototype.hasOwnProperty,y=Array.isArray,L=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(i){return i()}};var R,I={},D=h.react_stack_bottom_frame.bind(h,o)(),U=L(s(o)),Y={};H.Fragment=S,H.jsx=function(i,p,W){var F=1e4>q.recentlyCreatedOwnerStacks++;return f(i,p,W,!1,F?Error("react-stack-top-frame"):D,F?L(s(i)):U)},H.jsxs=function(i,p,W){var F=1e4>q.recentlyCreatedOwnerStacks++;return f(i,p,W,!0,F?Error("react-stack-top-frame"):D,F?L(s(i)):U)}})()),H}var oe;function ke(){return oe||(oe=1,process.env.NODE_ENV==="production"?G.exports=pe():G.exports=ve()),G.exports}var x=ke(),Q=class{constructor(e=2,t="[fuzzy-search]",r=console){this.level=e,this.prefix=t,this.impl=r}setLevel(e){this.level=e}setImplementation(e){this.impl=e}setPrefix(e){this.prefix=e}formatMessage(e){return typeof e=="string"?[`${this.prefix} ${e}`]:[this.prefix,e]}debug(e,...t){this.level<=0&&this.impl.debug(...this.formatMessage(e),...t)}info(e,...t){this.level<=1&&this.impl.info(...this.formatMessage(e),...t)}warn(e,...t){this.level<=2&&this.impl.warn(...this.formatMessage(e),...t)}error(e,...t){this.level<=3&&this.impl.error(...this.formatMessage(e),...t)}},z={threshold:.4,caseSensitive:!1,learningWeight:1.2,debounceMs:300,multiTermOperator:"or",autoSearchOnIndexRebuild:!0,customWeights:{},ngramSize:2,minNgramOverlap:1,sortBy:"relevance",sortOrder:"desc",enableIndexFiltering:!0,enableLevenshtein:!0,parallelSearchStrategy:"balanced",logLevel:2,indexWorkerOptions:{strategy:"hybrid",threshold:.4,ngramOverlapThreshold:.3,minCandidatesRatio:.1,maxCandidatesRatio:.5,jaroWinklerPrefix:.1,maxResults:1e3,relevanceFieldWeight:.2,relevancePerfectMatchBonus:.1},levenshteinWorkerOptions:{threshold:.3,lengthSimilarityThreshold:.1,partialMatchBonus:.1,lengthDiffPenalty:1,maxResults:1e3,relevanceFieldWeight:.15}},le="INDEX_DATA_MISMATCH",xe="LEVENSHTEIN_DATA_MISMATCH",ue=new WeakMap,be=0,we=e=>{let t=ue.get(e);if(t)return t;let r;try{let s=JSON.stringify(e),a=2166136261,o=-624069552;for(let n=0;n<s.length;n++){let l=s.charCodeAt(n);a=Math.imul(a^l,16777619)>>>0,o=Math.imul(o^l,16777619)>>>0}r=`${a.toString(36)}-${o.toString(36)}`}catch{r=`ref-${++be}`}return ue.set(e,r),r},de=(e,t)=>{if(!e)return null;let r=e.includes(".ts")?`../worker/${t}.ts`:`./worker/${t}.mjs`;return new URL(r,e)},ge=class J{constructor(t){this.indexWorker=null,this.levenshteinWorker=null,this.initializationPromise=null,this.referenceCount=0,this.lastIndexedDataHash=null,this.buildingDataHash=null,this.buildingPromise=null,this.lastLevenshteinDataHash=null,this.id=t;let r=t!=="default"?`[GlobalWorkerManager:${t}]`:"[GlobalWorkerManager]";this.logger=new Q(2,r)}static getInstance(t="default"){let r=J.instances.get(t);return r||(r=new J(t),J.instances.set(t,r)),r}getLastIndexedDataHash(){return this.lastIndexedDataHash}getLastLevenshteinDataHash(){return this.lastLevenshteinDataHash}setLastLevenshteinDataHash(t){this.lastLevenshteinDataHash=t}setLastIndexedDataHash(t){this.lastIndexedDataHash=t}getBuildingPromise(t){return this.buildingDataHash===t?this.buildingPromise:null}setBuildingPromise(t,r){this.buildingDataHash=t,this.buildingPromise=r,r.finally(()=>{this.buildingDataHash===t&&(this.buildingDataHash=null,this.buildingPromise=null)}).catch(()=>{})}async getWorkers(t){return t.logLevel!==void 0&&this.logger.setLevel(t.logLevel),t.logger&&this.logger.setImplementation(t.logger),this.referenceCount++,this.indexWorker&&this.levenshteinWorker?(this.logger.debug(`๐ง Using existing global Workers (ref count: ${this.referenceCount})`),t.logLevel!==void 0&&(this.indexWorker.postMessage({type:"setLogLevel",id:"system",logLevel:t.logLevel,workerId:this.id}),this.levenshteinWorker.postMessage({type:"setLogLevel",id:"system",logLevel:t.logLevel,workerId:this.id})),{indexWorker:this.indexWorker,levenshteinWorker:this.levenshteinWorker}):(this.initializationPromise||(this.initializationPromise=this.initializeWorkers(t)),await this.initializationPromise,this.indexWorker&&this.levenshteinWorker||(this.initializationPromise=null),this.indexWorker&&this.levenshteinWorker&&t.logLevel!==void 0&&(this.indexWorker.postMessage({type:"setLogLevel",id:"system",logLevel:t.logLevel,workerId:this.id}),this.levenshteinWorker.postMessage({type:"setLogLevel",id:"system",logLevel:t.logLevel,workerId:this.id})),{indexWorker:this.indexWorker,levenshteinWorker:this.levenshteinWorker})}async initializeWorkers(t){if(typeof Worker>"u")return;let r=typeof document>"u"?require("url").pathToFileURL(__filename).href:se&&se.tagName.toUpperCase()==="SCRIPT"&&se.src||new URL("index.cjs",document.baseURI).href;try{if(!this.indexWorker){let s=t.workerUrls?.indexWorker?new URL(t.workerUrls.indexWorker,window.location.origin):de(r,"indexWorker");s?(this.logger.debug("๐ง Global Index Worker URL:",s.toString()),this.indexWorker=new Worker(s,{type:"module"}),this.logger.info("๐ง Global Index Worker: Initialized successfully")):this.logger.warn("โ ๏ธ Global Index Worker: default worker URL cannot be resolved in a CJS build. Specify options.workerUrls.indexWorker explicitly.")}if(!this.levenshteinWorker){let s=t.workerUrls?.levenshteinWorker?new URL(t.workerUrls.levenshteinWorker,window.location.origin):de(r,"levenshteinWorker");s?(this.logger.debug("๐ง Global Levenshtein Worker URL:",s.toString()),this.levenshteinWorker=new Worker(s,{type:"module"}),this.logger.info("๐ง Global Levenshtein Worker: Initialized successfully")):this.logger.warn("โ ๏ธ Global Levenshtein Worker: default worker URL cannot be resolved in a CJS build. Specify options.workerUrls.levenshteinWorker explicitly.")}}catch(s){this.logger.warn("โ ๏ธ Failed to initialize global Workers:",s)}}releaseReference(){this.referenceCount--,this.logger.debug(`๐ง Worker reference released (ref count: ${this.referenceCount})`)}dispose(){this.indexWorker&&(this.indexWorker.terminate(),this.indexWorker=null),this.levenshteinWorker&&(this.levenshteinWorker.terminate(),this.levenshteinWorker=null),this.initializationPromise=null,this.referenceCount=0,this.lastIndexedDataHash=null,this.lastLevenshteinDataHash=null,this.logger.info("๐ง Global Workers disposed")}};ge.instances=new Map;var $=ge,ye=class{constructor(){this.listeners=new Map,this.logger=new Q(2)}setLogger(e){this.logger=e}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e)?.add(t)}off(e,t){let r=this.listeners.get(e);r&&r.delete(t)}emit(e,t){let r=this.listeners.get(e);r&&r.forEach(s=>{try{s(t)}catch(a){this.logger.error(`โ Error in event listener for ${e}:`,a)}})}removeAllListeners(){this.listeners.clear()}},Se=class{constructor(e={}){this.indexWorker=null,this.levenshteinWorker=null,this.searchHistory=[],this.learningData={fieldWeights:{},queryPatterns:{},userPreferences:{preferredThreshold:.4,frequentFields:[],searchStyle:"fuzzy",lastUsedOptions:{}},performanceMetrics:{averageSearchTime:{},indexBuildTime:0}},this.instanceId=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`,this.requestId=0,this.pendingRequests=new Map,this.eventEmitter=new ye,this.isIndexBuilt=!1,this.lastIndexedDataHash=null,this.stats={totalSearches:0,averageSearchTime:0,popularQueries:[],performanceBySize:{},workers:{index:{stats:{}},levenshtein:{stats:{}}}},this.isDisposed=!1,this.cleanupTimerId=null,this.defaultOptions={...z,...e,indexWorkerOptions:{...z.indexWorkerOptions,...e.indexWorkerOptions},levenshteinWorkerOptions:{...z.levenshteinWorkerOptions,...e.levenshteinWorkerOptions}},e.threshold!==void 0&&(e.levenshteinWorkerOptions||(this.defaultOptions.levenshteinWorkerOptions={...this.defaultOptions.levenshteinWorkerOptions,threshold:e.threshold}),e.indexWorkerOptions||(this.defaultOptions.indexWorkerOptions={...this.defaultOptions.indexWorkerOptions,threshold:e.threshold}));let t=this.defaultOptions,r="[fuzzy-search]";t.instanceName?r=`[fuzzy-search:${t.instanceName}]`:t.workerId&&(r=`[fuzzy-search:${t.workerId}]`),this.logger=new Q(t.logLevel??2,r,t.logger??console),this.eventEmitter.setLogger(this.logger),this.handleIndexWorkerMessageBound=this.handleIndexWorkerMessage.bind(this),this.handleIndexWorkerErrorBound=this.handleIndexWorkerError.bind(this),this.handleLevenshteinWorkerMessageBound=this.handleLevenshteinWorkerMessage.bind(this),this.handleLevenshteinWorkerErrorBound=this.handleLevenshteinWorkerError.bind(this),this.loadLearningData(),this.workersInitialized=this.initializeWorkers(),this.cleanupTimerId=setInterval(()=>this.cleanupPendingRequests(),3e4)}async initializeWorkers(){if(!(typeof Worker>"u"))try{let e=await $.getInstance(this.defaultOptions.workerId).getWorkers(this.defaultOptions);if(this.isDisposed){this.logger.debug("๐ง Manager disposed before worker initialization completed");return}this.indexWorker=e.indexWorker,this.levenshteinWorker=e.levenshteinWorker,this.indexWorker&&(this.indexWorker.addEventListener("message",this.handleIndexWorkerMessageBound),this.indexWorker.addEventListener("error",this.handleIndexWorkerErrorBound),this.indexWorker.addEventListener("error",t=>{this.logger.error("๐ง Index Worker Error (Event Listener):",t)})),this.levenshteinWorker&&(this.levenshteinWorker.addEventListener("message",this.handleLevenshteinWorkerMessageBound),this.levenshteinWorker.addEventListener("error",this.handleLevenshteinWorkerErrorBound),this.levenshteinWorker.addEventListener("error",t=>{this.logger.error("๐ง Levenshtein Worker Error (Event Listener):",t)})),this.eventEmitter.emit("workers:initialized",{indexWorker:!!this.indexWorker,levenshteinWorker:!!this.levenshteinWorker}),await this.testWorkerConnectivity()}catch(e){this.logger.warn("โ ๏ธ Failed to initialize Workers:",e)}}async testWorkerConnectivity(){try{let e=[];this.indexWorker&&e.push(this.pingWorker(this.indexWorker,"index")),this.levenshteinWorker&&e.push(this.pingWorker(this.levenshteinWorker,"levenshtein")),await Promise.all(e)}catch(e){this.logger.error("๐ง Worker connectivity test failed:",e)}}async pingWorker(e,t){let r=`ping-${t}-${this.instanceId}-${Date.now()}`;await new Promise((s,a)=>{let o=setTimeout(()=>{this.logger.warn(`๐ง ${t==="index"?"Index":"Levenshtein"} Worker: Ping timeout`),e.removeEventListener("message",n),a(new Error(`${t==="index"?"Index":"Levenshtein"} Worker ping timeout`))},5e3),n=l=>{let c=l.data;c.type==="pong"&&c.id===r&&(clearTimeout(o),e.removeEventListener("message",n),this.logger.debug(`๐ง ${t==="index"?"Index":"Levenshtein"} Worker: Ping successful`),s())};e.addEventListener("message",n),this.logger.debug(`๐ง ${t==="index"?"Index":"Levenshtein"} Worker: Sending ping message:`,r),e.postMessage({type:"ping",id:r})})}handleIndexWorkerMessage(e){let t=e.data;if(this.logger.debug("๐ง Index Worker message received:",t.type,t),t.type==="indexSearchResults"){let r=this.pendingRequests.get(t.id);r&&(this.pendingRequests.delete(t.id),t.error?r.reject(new Error(t.error)):r.resolve(t.results||[])),t.stats&&(this.stats.workers.index.stats=t.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"index",stats:this.stats.workers.index.stats})),this.eventEmitter.emit("indexWorker:searchCompleted",{requestId:t.id,resultsCount:t.results?.length||0,processingTime:t.processingTime})}else if(t.type==="error"){let r=this.pendingRequests.get(t.id);r&&(this.pendingRequests.delete(t.id),r.reject(new Error(t.error||"Index Worker error"))),this.logger.error("โ Index Worker reported error:",{requestId:t.id,message:t.error,processingTime:t.processingTime}),this.eventEmitter.emit("indexWorker:error",{requestId:t.id,error:t.error,processingTime:t.processingTime})}else t.type==="indexReady"?(this.logger.info("โ
Index Worker: Index ready notification received",t),t.stats&&(this.stats.workers.index.stats=t.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"index",stats:this.stats.workers.index.stats}))):t.type==="pong"||t.type==="stats"&&t.stats&&(this.stats.workers.index.stats=t.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"index",stats:this.stats.workers.index.stats}));this.eventEmitter.emit("indexWorker:message",t)}handleIndexWorkerError(e){this.logger.error("๐ง Index Worker Error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,type:e.type}),this.eventEmitter.emit("indexWorker:error",e)}handleLevenshteinWorkerMessage(e){let t=e.data;if(this.logger.debug("๐ง Levenshtein Worker message received:",t.type,"stats present:",!!t.stats),t.type==="levenshteinSearch"){let r=this.pendingRequests.get(t.id);r&&(this.pendingRequests.delete(t.id),t.error?r.reject(new Error(t.error)):r.resolve(t.results||[])),t.stats&&(this.stats.workers.levenshtein.stats=t.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"levenshtein",stats:this.stats.workers.levenshtein.stats})),this.eventEmitter.emit("levenshteinWorker:searchCompleted",{requestId:t.id,processingTime:t.processingTime,workerType:t.workerType,operationMeta:t.operationMeta})}else if(t.type==="error"){let r=this.pendingRequests.get(t.id);r&&(this.pendingRequests.delete(t.id),r.reject(new Error(t.error||"Levenshtein Worker error"))),this.logger.error("โ Levenshtein Worker reported error:",{requestId:t.id,message:t.error,processingTime:t.processingTime}),this.eventEmitter.emit("levenshteinWorker:error",{requestId:t.id,error:t.error,processingTime:t.processingTime})}else t.type==="pong"||t.type==="stats"&&t.stats&&(this.stats.workers.levenshtein.stats=t.stats,this.eventEmitter.emit("worker:statsUpdated",{worker:"levenshtein",stats:this.stats.workers.levenshtein.stats}));this.eventEmitter.emit("levenshteinWorker:message",t)}handleLevenshteinWorkerError(e){this.logger.error("๐ง Levenshtein Worker Error:",{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error,type:e.type}),this.eventEmitter.emit("levenshteinWorker:error",e)}isLocalStorageAvailable(){try{return typeof window<"u"&&window.localStorage!==void 0}catch{return!1}}loadLearningData(){try{if(this.isLocalStorageAvailable()){let e=localStorage.getItem("fuzzy-search-learning-data");if(e){let t=JSON.parse(e);t&&typeof t=="object"&&t.queryPatterns&&typeof t.queryPatterns=="object"&&t.userPreferences&&t.performanceMetrics&&typeof t.performanceMetrics.averageSearchTime=="object"?this.learningData=t:(this.logger.warn("โ ๏ธ Stored learning data has an unexpected shape. Reinitializing with defaults."),this.initializeDefaultLearningData())}else this.initializeDefaultLearningData()}else this.initializeDefaultLearningData()}catch(e){this.logger.warn("โ ๏ธ Failed to load learning data:",e),this.initializeDefaultLearningData()}}initializeDefaultLearningData(){this.learningData={fieldWeights:{},queryPatterns:{},userPreferences:{preferredThreshold:this.defaultOptions.threshold,frequentFields:[],searchStyle:"fuzzy",lastUsedOptions:{}},performanceMetrics:{averageSearchTime:{},indexBuildTime:0}}}saveLearningData(){try{this.isLocalStorageAvailable()&&localStorage.setItem("fuzzy-search-learning-data",JSON.stringify(this.learningData))}catch(e){this.logger.warn("โ ๏ธ Failed to save learning data:",e)}}async search(e,t,r,s){if(!e.trim())return this.logger.debug("๐ซ search skipped for empty query"),[];let a=performance.now(),o={...this.defaultOptions,...s};s?.threshold!==void 0&&(s.levenshteinWorkerOptions||(o.levenshteinWorkerOptions={...o.levenshteinWorkerOptions,threshold:s.threshold}),s.indexWorkerOptions||(o.indexWorkerOptions={...o.indexWorkerOptions,threshold:s.threshold})),this.logger.debug(`๐ FuzzySearchManager.search called: query="${e}", items.length=${t.length}`),this.eventEmitter.emit("search:start",{query:e,options:o});try{if(await this.workersInitialized,this.isDisposed)return this.logger.debug("๐ซ search skipped because manager is disposed"),[];let n=this.generateDataHash(t,r),l=$.getInstance(this.defaultOptions.workerId),c=l.getLastIndexedDataHash();if(c!==n){let m=l.getBuildingPromise(n);if(m)this.logger.debug("๐ง Index build already in progress globally, waiting..."),await m,this.isIndexBuilt=!0,this.lastIndexedDataHash=n;else{this.logger.debug(`๐ง Building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${c!==n}`);let h=(async()=>{await this.buildIndex(t,r,o),this.isIndexBuilt=!0,this.lastIndexedDataHash=n,l.setLastIndexedDataHash(n)})();l.setBuildingPromise(n,h),await h}}else this.isIndexBuilt?this.logger.debug("๐ง Index already built for current data, skipping rebuild"):(this.logger.debug("๐ง Index already built globally for current data, skipping rebuild"),this.isIndexBuilt=!0,this.lastIndexedDataHash=n);if(!(this.indexWorker&&this.levenshteinWorker)){if(this.isDisposed)return this.logger.debug("๐ซ search skipped because manager is disposed"),[];throw new Error("Web Workers are not available or not initialized.")}let v=await this.searchParallel(e,t,r,o,n),f=performance.now()-a;this.updateStats(e,f),this.updateLearningData(e,t.length,f);let b={results:v,totalItems:t.length,processingTime:f,query:e,options:o};return this.eventEmitter.emit("search:complete",b),v}catch(n){let l=n instanceof Error?n:new Error("Unknown search error");throw this.eventEmitter.emit("search:error",{error:l,query:e}),l}}async buildIndex(e,t,r){if(this.isDisposed){this.logger.debug("๐ซ buildIndex skipped because manager is disposed");return}if(!this.indexWorker){if(this.isDisposed){this.logger.debug("๐ซ buildIndex skipped because manager is disposed");return}throw new Error("Index Worker not available")}let s=`build-index-${this.instanceId}-${++this.requestId}`;this.logger.debug(`๐ค Building index: requestId=${s}`);let a={type:"buildIndex",id:s,items:e,searchFields:t,options:this.toWorkerSafeOptions(r),dataHash:this.generateDataHash(e,t)};return new Promise((o,n)=>{let l=null,c=f=>{let b=f;b.type==="indexReady"&&b.id===s&&(this.logger.info(`โ
Index Worker: Index built successfully (requestId=${s})`),this.logger.debug(`๐ฏ buildIndex: Match found! Resolving promise for requestId=${s}`),this.eventEmitter.off("indexWorker:message",c),this.eventEmitter.off("indexWorker:message",v),l&&(clearTimeout(l),l=null),o())},v=f=>{let b=f;b.type==="error"&&b.id===s&&(this.logger.warn(`โ buildIndex: Worker reported error for requestId=${s}`,b.error),this.eventEmitter.off("indexWorker:message",c),this.eventEmitter.off("indexWorker:message",v),l&&(clearTimeout(l),l=null),n(new Error(b.error||"Index Worker error")))};this.eventEmitter.on("indexWorker:message",c),this.eventEmitter.on("indexWorker:message",v),this.indexWorker?.postMessage(a),l=setTimeout(()=>{this.eventEmitter.off("indexWorker:message",c),this.eventEmitter.off("indexWorker:message",v),l=null,n(new Error("Index build timeout"))},6e4)})}async searchParallel(e,t,r,s,a){if(this.isDisposed)return this.logger.debug("๐ซ searchParallel skipped because manager is disposed"),[];this.logger.debug(`๐ searchParallel: query="${e}", items.length=${t.length}`);let{enableIndexFiltering:o,enableLevenshtein:n}=s;if(!(o||n))return this.logger.warn("โ ๏ธ Both search stages are disabled. Returning empty results."),[];let l=o?this.runIndexStage(e,t,r,s,a):Promise.resolve({stage:"index",results:[],processingTime:0,confidence:0,candidatesProcessed:0}),c=n?this.runLevenshteinStage(e,t,r,s,a):Promise.resolve({stage:"levenshtein",results:[],processingTime:0,confidence:0,candidatesProcessed:0}),[v,f]=await Promise.all([l,c]),b=this.mergeParallelResults(v,f,s.parallelSearchStrategy||"balanced",s);return this.logger.debug(`๐ง Parallel search completed: Index=${v.results.length}, Levenshtein=${f.results.length}, Merged=${b.results.length}`),b.results}async runIndexStage(e,t,r,s,a){let o=()=>{let n=`index-${this.instanceId}-${++this.requestId}`;this.logger.debug(`๐ค Index Stage: requestId=${n}`);let l={type:"indexSearch",id:n,query:e,searchFields:r,options:this.toWorkerSafeOptions(s),dataHash:a};return this.executeWorkerStage(this.indexWorker,l,{stage:"index",confidence:.8,timeoutMessage:"Index search timeout",unavailableMessage:"Index Worker not available"})};try{return await o()}catch(n){if(!(n instanceof Error?n.message:String(n)).includes(le))throw n;this.logger.warn("โ ๏ธ Index Stage: shared index was replaced by another dataset. Rebuilding and retrying..."),await this.rebuildSharedIndex(t,r,s,a);try{return await o()}catch(l){if(!(l instanceof Error?l.message:String(l)).includes(le))throw l;return this.logger.warn("โ ๏ธ Index Stage: index is still contended by another dataset. Continuing without index results."),{stage:"index",results:[],processingTime:0,confidence:0,candidatesProcessed:0}}}}async rebuildSharedIndex(e,t,r,s){let a=$.getInstance(this.defaultOptions.workerId),o=a.getBuildingPromise(s);if(o){await o;return}let n=(async()=>{await this.buildIndex(e,t,r),a.setLastIndexedDataHash(s)})();a.setBuildingPromise(s,n),await n}async runLevenshteinStage(e,t,r,s,a){let o=$.getInstance(this.defaultOptions.workerId),n=c=>{let v=`levenshtein-${this.instanceId}-${++this.requestId}`;this.logger.debug(`๐ค Levenshtein Stage: requestId=${v}, includeItems=${c}`);let f={type:"levenshteinSearch",id:v,query:e,items:c?t:void 0,searchFields:r,options:this.toWorkerSafeOptions(s),dataHash:a};return this.executeWorkerStage(this.levenshteinWorker,f,{stage:"levenshtein",confidence:.9,timeoutMessage:"Levenshtein search timeout",unavailableMessage:"Levenshtein Worker not available"})},l=o.getLastLevenshteinDataHash()!==a;try{let c=await n(l);return l&&o.setLastLevenshteinDataHash(a),c}catch(c){let v=c instanceof Error?c.message:String(c);if(l||!v.includes(xe))throw c;this.logger.warn("โ ๏ธ Levenshtein Stage: worker dataset cache was replaced by another dataset. Retrying with items...");let f=await n(!0);return o.setLastLevenshteinDataHash(a),f}}executeWorkerStage(e,t,r){if(!e)throw new Error(r.unavailableMessage);return new Promise((s,a)=>{let o=setTimeout(()=>{this.pendingRequests.has(t.id)&&(this.pendingRequests.delete(t.id),a(new Error(r.timeoutMessage)))},3e4);this.pendingRequests.set(t.id,{resolve:n=>{clearTimeout(o),s({stage:r.stage,results:n,processingTime:0,confidence:r.confidence,candidatesProcessed:n.length})},reject:n=>{clearTimeout(o),a(n)},timestamp:Date.now()}),e.postMessage(t)})}mergeParallelResults(e,t,r,s){let a=[];switch(r){case"index-first":a=e.results.length>0?e.results:t.results;break;case"levenshtein-first":a=t.results.length>0?t.results:e.results;break;default:a=this.mergeByScore([...e.results,...t.results],s);break}return{results:a,totalProcessingTime:e.processingTime+t.processingTime,indexStage:e,levenshteinStage:t,mergeStrategy:r,mergeQuality:.8}}mergeByScore(e,t){let r=new Map;e.forEach(n=>{if(n.originalIndex!==void 0){let l=r.get(n.originalIndex);(!l||n.score>l.score)&&r.set(n.originalIndex,n)}});let s=Array.from(r.values()),a=t.sortBy||z.sortBy,o=t.sortOrder||z.sortOrder;return a==="original"?s.sort((n,l)=>(n.originalIndex??0)-(l.originalIndex??0)):s.sort((n,l)=>o==="asc"?n.score-l.score:l.score-n.score)}generateDataHash(e,t){return`${e.length}|${t.join(",")}|${we(e)}`}toWorkerSafeOptions(e){if(!e.logger)return e;let{logger:t,...r}=e;return r}updateStats(e,t){this.stats.totalSearches++,this.stats.averageSearchTime=(this.stats.averageSearchTime*(this.stats.totalSearches-1)+t)/this.stats.totalSearches}updateLearningData(e,t,r){if(this.learningData.queryPatterns[e]=(this.learningData.queryPatterns[e]??0)+1,Object.keys(this.learningData.queryPatterns).length>200){let o=Object.entries(this.learningData.queryPatterns).sort((n,l)=>l[1]-n[1]).slice(0,100);this.learningData.queryPatterns=Object.fromEntries(o)}let s=this.getPerformanceSizeKey(t);this.learningData.performanceMetrics.averageSearchTime[s]=r,this.stats.popularQueries=Object.entries(this.learningData.queryPatterns).sort((o,n)=>n[1]-o[1]).slice(0,10).map(([o,n])=>({query:o,count:n}));let a=this.stats.performanceBySize[s]??{averageTime:0,sampleSize:0};a.averageTime=(a.averageTime*a.sampleSize+r)/(a.sampleSize+1),a.sampleSize+=1,this.stats.performanceBySize[s]=a,this.stats.totalSearches%10===0&&this.saveLearningData()}getPerformanceSizeKey(e){return e<1e3?"small":e<1e4?"medium":e<1e5?"large":"xlarge"}cleanupPendingRequests(){let e=Date.now(),t=3e4;this.pendingRequests.forEach((r,s)=>{e-r.timestamp>t&&(r.reject(new Error("Request timeout")),this.pendingRequests.delete(s))})}updateSearchHistory(e,t,r=0,s=0){let a={query:e,timestamp:Date.now(),selectedItemId:t,resultCount:r,processingTime:s,searchTime:s,successful:r>0};this.searchHistory.unshift(a),this.searchHistory.length>1e3&&(this.searchHistory=this.searchHistory.slice(0,500))}async getStats(e=5e3){return await Promise.all([this.waitForWorkerStats(this.indexWorker,"index",e),this.waitForWorkerStats(this.levenshteinWorker,"levenshtein",e)]),this.stats}getCurrentStats(){return this.stats}async resetStats(e=5e3){let t=[this.resetWorkerStats(this.indexWorker,"index",e),this.resetWorkerStats(this.levenshteinWorker,"levenshtein",e)];this.stats={totalSearches:0,averageSearchTime:0,popularQueries:[],performanceBySize:{},workers:{index:{stats:this.createEmptyWorkerStats("index")},levenshtein:{stats:this.createEmptyWorkerStats("levenshtein")}}},this.searchHistory=[],await Promise.all(t),this.logger.info("๐ FuzzySearchManager: All statistics have been reset"),this.eventEmitter.emit("stats:reset",{timestamp:Date.now(),resetBy:"manager"})}waitForWorkerStats(e,t,r){return e?new Promise(s=>{let a=setTimeout(()=>{this.logger.warn(`โ ๏ธ getStats: Timeout waiting for ${t} worker.`),this.eventEmitter.off("worker:statsUpdated",o),s()},r),o=n=>{let{worker:l}=n;l===t&&(clearTimeout(a),this.eventEmitter.off("worker:statsUpdated",o),s())};this.eventEmitter.on("worker:statsUpdated",o),e.postMessage({type:"getStats"})}):Promise.resolve()}resetWorkerStats(e,t,r){if(!e)return Promise.resolve();let s=`resetStats-${this.instanceId}-${++this.requestId}-${t}`;return new Promise(a=>{let o=setTimeout(()=>{this.logger.warn(`โ ๏ธ resetStats: Timeout waiting for ${t} worker.`),e.removeEventListener("message",n),a()},r),n=c=>{let v=c.data;v.type==="resetStats"&&v.id===s&&(clearTimeout(o),e.removeEventListener("message",n),this.logger.info(`๐ ${t} worker statistics have been reset`),a())};e.addEventListener("message",n);let l={type:"resetStats",id:s};e.postMessage(l)})}createEmptyWorkerStats(e){return{basic:{totalSearches:0,totalProcessingTime:0,averageSearchTime:0,lastSearchTime:0,errorCount:0,timestamp:Date.now()},workerSpecific:{workerType:e,operationCount:0,operationDistribution:{},specificMetrics:{}},analysis:{fieldPerformance:{},performanceInsights:{recentAverageProcessingTime:0,recentAverageResultCount:0,throughputPerSecond:0,totalHistoryEntries:0,mostCommonQueryLength:0,bestPerformingField:"",similarityDistribution:{highSimilarity:0,mediumSimilarity:0,lowSimilarity:0,veryLowSimilarity:0}},recentHistory:[]}}}getSearchHistory(){return[...this.searchHistory]}on(e,t){this.eventEmitter.on(e,t)}off(e,t){this.eventEmitter.off(e,t)}async prebuildIndex(e,t,r){this.logger.info(`๐๏ธ Pre-building index for ${e.length} items`);try{if(await this.workersInitialized,this.isDisposed){this.logger.debug("๐ซ prebuildIndex skipped because manager is disposed");return}let s=this.generateDataHash(e,t),a=$.getInstance(this.defaultOptions.workerId),o=a.getLastIndexedDataHash();if(this.logger.debug(`๐ง Checking index status: globalHash=${o}, currentHash=${s}`),!this.isIndexBuilt||this.lastIndexedDataHash!==s){if(o===s){this.logger.debug("๐ง Index already built globally for current data, skipping pre-build"),this.isIndexBuilt=!0,this.lastIndexedDataHash=s;return}let n=a.getBuildingPromise(s);if(n){this.logger.debug("๐ง Index build already in progress globally, waiting..."),await n,this.isIndexBuilt=!0,this.lastIndexedDataHash=s;return}this.logger.debug(`๐ง Pre-building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${this.lastIndexedDataHash!==s}`);let l=(async()=>{await this.rebuildIndex(e,t,r)})();a.setBuildingPromise(s,l),await l,this.logger.info(`โ
Index pre-built successfully for ${e.length} items`)}else this.logger.debug("๐ง Index already built for current data, skipping pre-build")}catch(s){throw this.logger.error("๐ง Error during index pre-building:",s),s}}async rebuildIndex(e,t,r){this.logger.info(`๐ Starting forced index rebuild for ${e.length} items`);let s={...this.defaultOptions,...r};try{if(await this.workersInitialized,this.isDisposed){this.logger.debug("๐ซ rebuildIndex skipped because manager is disposed");return}this.isIndexBuilt=!1,this.lastIndexedDataHash=null,await this.buildIndex(e,t,s),this.logger.info(`โ
Index rebuild completed successfully for ${e.length} items`),this.isIndexBuilt=!0,this.lastIndexedDataHash=this.generateDataHash(e,t);let a=$.getInstance(this.defaultOptions.workerId);a.setLastIndexedDataHash(this.lastIndexedDataHash),a.setLastLevenshteinDataHash(null),this.eventEmitter.emit("index:rebuilt",{itemCount:e.length,searchFields:t,timestamp:Date.now()})}catch(a){throw this.logger.error("โ Failed to rebuild index:",a),this.eventEmitter.emit("index:rebuildError",{error:a instanceof Error?a.message:String(a),timestamp:Date.now()}),a}}dispose(){this.isDisposed=!0,this.cleanupTimerId&&(clearInterval(this.cleanupTimerId),this.cleanupTimerId=null),this.indexWorker&&(this.indexWorker.removeEventListener("message",this.handleIndexWorkerMessageBound),this.indexWorker.removeEventListener("error",this.handleIndexWorkerErrorBound)),this.levenshteinWorker&&(this.levenshteinWorker.removeEventListener("message",this.handleLevenshteinWorkerMessageBound),this.levenshteinWorker.removeEventListener("error",this.handleLevenshteinWorkerErrorBound)),$.getInstance(this.defaultOptions.workerId).releaseReference(),this.indexWorker=null,this.levenshteinWorker=null,this.pendingRequests.forEach(e=>{e.reject(new Error("FuzzySearchManager disposed"))}),this.pendingRequests.clear(),this.eventEmitter.removeAllListeners(),this.saveLearningData()}},B=(e,t)=>{if(typeof e=="string"&&e.trim())return e;if(e instanceof Error&&e.message.trim())return e.message;if(typeof e=="object"&&e!==null){if("error"in e)return B(e.error,t);if("message"in e)return B(e.message,t)}return t};function Ee(e,t,r){let[s,a]=d.useState(""),[o,n]=d.useState([]),[l,c]=d.useState(!1),[v,f]=d.useState(!1),[b,m]=d.useState(null),[h,E]=d.useState([]),[O,S]=d.useState({totalSearches:0,averageSearchTime:0,itemCount:e.length,resultsCount:0,workerStats:void 0}),k=d.useMemo(()=>{let u={...z,...r};return r?.threshold!==void 0&&(r.levenshteinWorkerOptions||(u.levenshteinWorkerOptions={...u.levenshteinWorkerOptions,threshold:r.threshold}),r.indexWorkerOptions||(u.indexWorkerOptions={...u.indexWorkerOptions,threshold:r.threshold})),u},[r]),g=d.useMemo(()=>{let u="[fuzzy-search-react]";return k.instanceName?u=`[fuzzy-search-react:${k.instanceName}]`:k.workerId&&(u=`[fuzzy-search-react:${k.workerId}]`),new Q(k.logLevel??2,u,k.logger??console)},[k.logLevel,k.logger,k.workerId,k.instanceName]),w=d.useRef(null),P=d.useRef(s);d.useEffect(()=>{P.current=s},[s]);let A=d.useMemo(()=>t.map(u=>String(u)),[t]);d.useEffect(()=>(w.current=new Se(k),g.debug("๐ง FuzzySearchManager created (initial setup)"),()=>{g.debug("๐ง FuzzySearchManager disposed (component unmount)"),w.current?.dispose(),w.current=null}),[k,g]),d.useEffect(()=>{if(!w.current)return;let u=()=>{if(w.current){let I=w.current.getCurrentStats(),D={totalSearches:I?.totalSearches??0,averageSearchTime:I?.averageSearchTime??0,itemCount:e.length,resultsCount:o.length,workerStats:{index:I?.workers.index.stats,levenshtein:I?.workers.levenshtein.stats}};S(D)}},y=I=>{let D=B(I,"Index Worker error");g.error("โ Index worker error event",I),m(D),f(!1)},L=I=>{let D=B(I,"Index rebuild error");g.error("โ Index rebuild error event",I),m(D),f(!1)},R=I=>{let D=B(I,"Search execution failed");g.error("โ Search error event",I),m(D)};return w.current.on("worker:statsUpdated",u),w.current.on("search:complete",u),w.current.on("indexWorker:error",y),w.current.on("index:rebuildError",L),w.current.on("search:error",R),()=>{w.current&&(w.current.off("worker:statsUpdated",u),w.current.off("search:complete",u),w.current.off("indexWorker:error",y),w.current.off("index:rebuildError",L),w.current.off("search:error",R))}},[e.length,o.length,g,k]);let M=d.useCallback(async u=>{if(w.current){if(g.debug(`๐ performSearch called with query: "${u}"`),u!==P.current){g.debug(`๐ซ performSearch skipped for stale query: "${u}" (current: "${P.current}")`);return}try{if(g.debug(`๐ Setting isSearching to true for query: "${u}"`),c(!0),m(null),!u.trim()){g.debug(`๐ Setting isSearching to false for empty query: "${u}"`),c(!1);return}g.info(`๐ Starting search with query: "${u}", items count: ${e.length}`);let y=performance.now(),L=await w.current.search(u,e,A,k),R=performance.now()-y;if(u!==P.current){g.debug(`๐ซ Search result ignored for stale query: "${u}" (current: "${P.current}")`);return}g.info(`โ
Search completed with ${L.length} results in ${R}ms`),n(L);let I={query:u,timestamp:Date.now(),resultCount:L.length,processingTime:R,searchTime:R,successful:L.length>0};E(D=>{let U=D.filter(Y=>Y.query!==u);return[I,...U].slice(0,50)})}catch(y){if(u!==P.current)return;g.error(`โ Search error for query: "${u}"`,y),m(y instanceof Error?y.message:"Search failed"),n([])}finally{u===P.current&&(g.debug(`๐ Setting isSearching to false (finally) for query: "${u}"`),c(!1))}}},[e,A,k,g.info,g.error,g.debug]);d.useEffect(()=>{if(!w.current||e.length===0){f(!1);return}let u=!1,y=k.autoSearchOnIndexRebuild??!0;return g.info(`๐๏ธ Data changed, pre-building index for ${e.length} items`),f(!0),w.current.prebuildIndex(e,A,k).then(()=>{!u&&y&&(g.debug("๐ Re-running search after index rebuild"),M(P.current))}).catch(L=>{g.warn("๐ง Failed to pre-build index:",L),u||m(B(L,"ใคใณใใใฏในใฎไบๅๆง็ฏไธญใซใจใฉใผใ็บ็ใใพใใ"))}).finally(()=>{u||f(!1)}),()=>{u=!0}},[e,A,k,M,g.warn,g.info,g.debug]),d.useEffect(()=>{g.debug(`๐ฏ useEffect triggered - searchTerm: "${s}", debounceMs: ${k.debounceMs}`);let u=setTimeout(()=>{g.debug(`โฐ Timeout executing performSearch for: "${s}"`),M(s)},k.debounceMs);return()=>{g.debug(`๐ซ Timeout cleared for: "${s}"`),clearTimeout(u)}},[s,k,M,g]),d.useEffect(()=>{s.trim()||n(e.map((u,y)=>({item:u,score:1,baseScore:1,matchedFields:[],relevanceReason:"ๅ
จไปถ่กจ็คบ",originalIndex:y})))},[e,s]);let X=d.useCallback((u,y)=>{g.info("๐ฏ Selected item:",u,"at index:",y)},[g]),Z=d.useCallback(()=>{a(""),m(null)},[]),_=d.useCallback(()=>{E([])},[]),K=d.useCallback(async()=>{if(w.current){await w.current.resetStats(),E([]),m(null);let u=w.current.getCurrentStats(),y={totalSearches:u?.totalSearches??0,averageSearchTime:u?.averageSearchTime??0,itemCount:e.length,resultsCount:o.length,workerStats:{index:u?.workers.index.stats,levenshtein:u?.workers.levenshtein.stats}};S(y),g.info("๐ useFuzzySearch: Statistics have been reset and refreshed")}},[e.length,o.length,g]),ee=d.useCallback((u,y=5)=>{let L=h.filter(R=>R.query.toLowerCase().includes(u.toLowerCase())&&R.query!==u).sort((R,I)=>I.timestamp-R.timestamp).slice(0,y).map(R=>R.query);return Array.from(new Set(L))},[h]),q=d.useCallback(async u=>{if(!w.current){g.warn("โ ๏ธ Search manager is not initialized");return}g.info(`๐ Rebuilding index for ${e.length} items`),f(!0),m(null);try{let y=u?{...k,...u}:k;await w.current.rebuildIndex(e,A,y),g.info("โ
Index rebuild completed successfully")}catch(y){let L=y instanceof Error?y.message:"ใคใณใใใฏในๅๆง็ฏไธญใซใจใฉใผใ็บ็ใใพใใ";throw g.error("โ Index rebuild failed:",L),m(L),y}finally{f(!1)}},[e,A,k,g]);return{searchTerm:s,setSearchTerm:a,filteredItems:o,isSearching:l,isIndexBuilding:v,error:b,searchHistory:h,options:k,selectItem:X,clearSearch:Z,clearHistory:_,resetStats:K,getSearchSuggestions:ee,performanceMetrics:O,rebuildIndex:q}}function We(e,t,r){const s=d.useMemo(()=>({threshold:.3,sortBy:"score",sortOrder:"desc",workerUrls:r}),[r]),a=d.useMemo(()=>["label"],[]),{setSearchTerm:o,filteredItems:n,isSearching:l}=Ee(e,a,s);d.useEffect(()=>{o(t)},[t,o]);const c=d.useMemo(()=>{if(!t)return e;const v=t.toLowerCase(),f=[],b=[];for(const m of n){const h=m.item;h.label.toLowerCase()===v?f.push(h):b.push(h)}return[...f,...b]},[n,t,e]);return{filteredOptions:t?c:e,isSearching:l}}function Ie({value:e,onChange:t,multiple:r}){const[s,a]=d.useState(!1),[o,n]=d.useState(""),l=d.useRef(null);d.useEffect(()=>{const m=h=>{l.current&&!l.current.contains(h.target)&&(a(!1),n(""))};return document.addEventListener("mousedown",m),()=>{document.removeEventListener("mousedown",m)}},[]);const c=d.useCallback(m=>{if(r){const h=Array.isArray(e)?e:e?[e]:[],E=h.some(S=>S.value===m.value);let O;E?O=h.filter(S=>S.value!==m.value):O=[...h,m],t?.(O)}else t?.(m),a(!1),n("")},[r,e,t]),v=d.useCallback(m=>{if(!r)return;const E=(Array.isArray(e)?e:e?[e]:[]).filter(O=>O.value!==m.value);t?.(E)},[r,e,t]),f=d.useCallback(()=>{t?.(r?[]:null),n(""),a(!1)},[r,t]),b=d.useCallback(()=>{a(m=>(m&&n(""),!m))},[]);return{isOpen:s,setIsOpen:a,query:o,setQuery:n,containerRef:l,handleSelect:c,handleRemove:v,handleClear:f,toggleOpen:b}}function Le({title:e,titleId:t,...r},s){return C.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":t},r),e?C.createElement("title",{id:t},e):null,C.createElement("path",{fillRule:"evenodd",d:"M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z",clipRule:"evenodd"}))}const he=C.forwardRef(Le);function Fe({title:e,titleId:t,...r},s){return C.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":t},r),e?C.createElement("title",{id:t},e):null,C.createElement("path",{fillRule:"evenodd",d:"M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",clipRule:"evenodd"}))}const Te=C.forwardRef(Fe);function Re({title:e,titleId:t,...r},s){return C.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon",ref:s,"aria-labelledby":t},r),e?C.createElement("title",{id:t},e):null,C.createElement("path",{d:"M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"}))}const ce=C.forwardRef(Re),Oe=({option:e,isSelected:t,isFocused:r,onClick:s,multiple:a,style:o})=>x.jsxs("div",{role:"option","aria-selected":t,tabIndex:0,onKeyDown:n=>{(n.key==="Enter"||n.key===" ")&&s(e)},style:o,onClick:()=>s(e),className:`sb-option ${r?"sb-option--focused":""}
|
|
7
|
+
${t&&!a?"sb-option--selected":"sb-option--not-selected"}
|
|
8
|
+
`,children:[a&&x.jsx("div",{className:`sb-checkbox ${t?"sb-checkbox--checked":"sb-checkbox--unchecked"}
|
|
9
|
+
`,children:t&&x.jsx(he,{className:"sb-check-icon-white"})}),x.jsx("span",{className:"sb-option-label",children:e.label}),!a&&t&&x.jsx(he,{className:"sb-check-icon-blue"})]}),De=({options:e,value:t,multiple:r,onSelect:s,className:a})=>{const[o,n]=d.useState(300),l=d.useRef(null),c=d.useRef(!1),v=h=>{c.current=!0,h.currentTarget.setPointerCapture(h.pointerId),h.preventDefault()},f=d.useCallback(h=>{if(!(c.current&&l.current))return;const E=l.current.getBoundingClientRect(),O=h.clientY-E.top;n(Math.max(100,Math.min(O,600)))},[]),b=d.useCallback(()=>{c.current=!1},[]);d.useEffect(()=>(document.addEventListener("pointermove",f),document.addEventListener("pointerup",b),()=>{document.removeEventListener("pointermove",f),document.removeEventListener("pointerup",b)}),[f,b]);const m=h=>r?(Array.isArray(t)?t:t?[t]:[]).some(O=>O.value===h.value):t?.value===h.value;return x.jsxs("div",{ref:l,className:`sb-dropdown ${a||""}`,style:{height:o},children:[e.length>0?x.jsx(ie.VirtualScroll,{itemCount:e.length,getItem:h=>e[h],getItemHeight:()=>36,viewportSize:o,className:"h-full w-full",scrollBarOptions:{width:10,enableThumbDrag:!0,enableTrackClick:!0,tapScrollCircleOptions:{enabled:!0,renderVisual:ie.tapScrollCircleSampleVisual}},behaviorOptions:{enableKeyboardNavigation:!0},children:(h,E)=>h?x.jsx(Oe,{option:h,isSelected:m(h),onClick:s,multiple:r,style:{height:36}},h.value):null}):x.jsx("div",{className:"sb-no-options",children:"No options found"}),x.jsx("div",{onPointerDown:v,className:"sb-resize-handle",children:x.jsxs("svg",{viewBox:"0 0 10 10",className:"sb-resize-icon",children:[x.jsx("title",{children:"Resize handle"}),x.jsx("path",{d:"M10 10L10 0L0 10Z"})]})})]})},Ce=({value:e,multiple:t,query:r,onQueryChange:s,onRemove:a,onFocus:o,placeholder:n="Select...",disabled:l,isLoading:c,clearable:v,onClear:f,onToggle:b,autoFocus:m})=>{const h=d.useRef(null);d.useEffect(()=>{m&&h.current?.focus()},[m]);const E=Array.isArray(e)?e:e?[e]:[],O=S=>{S.key==="Backspace"&&!r&&E.length>0&&t&&a(E[E.length-1])};return x.jsxs("fieldset",{className:`sb-input-area ${l?"sb-input-area--disabled":"sb-input-area--active"}
|
|
10
|
+
`,onMouseDown:S=>{const k=S.target;k!==h.current&&!k.closest("button")&&(S.preventDefault(),h.current?.focus())},children:[t&&E.map(S=>x.jsxs("span",{className:"sb-tag",children:[S.label,x.jsx("button",{type:"button",onClick:k=>{k.stopPropagation(),a(S)},className:"sb-tag-remove",children:x.jsx(ce,{className:"h-3 w-3"})})]},S.value)),!t&&E.length>0&&!r&&x.jsx("span",{className:"sb-single-value",children:E[0].label}),x.jsx("input",{ref:h,type:"text",value:r,onChange:S=>s(S.target.value),onFocus:o,onKeyDown:O,placeholder:E.length===0?n:"",disabled:l,className:"sb-input"}),x.jsxs("div",{className:"sb-indicators",children:[v&&E.length>0&&!l&&x.jsx("button",{type:"button",onClick:S=>{S.stopPropagation(),f()},className:"sb-clear-button",children:x.jsx(ce,{className:"h-4 w-4"})}),c?x.jsxs("svg",{className:"sb-loading-icon",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",children:[x.jsx("title",{children:"Loading"}),x.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),x.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}):x.jsx("button",{type:"button",disabled:l,onClick:S=>{S.stopPropagation(),b()},className:"sb-chevron-button",children:x.jsx(Te,{className:"sb-chevron-icon"})})]})]})},Pe=e=>{const{isOpen:t,setIsOpen:r,query:s,setQuery:a,containerRef:o,handleSelect:n,handleRemove:l,handleClear:c,toggleOpen:v}=Ie(e),{filteredOptions:f,isSearching:b}=We(e.options,s,e.workerUrls);return x.jsxs("div",{ref:o,className:`sb-container ${e.className||""}`,children:[x.jsx(Ce,{value:e.value,multiple:e.multiple,query:s,onQueryChange:m=>{a(m),t||r(!0)},onRemove:l,onClear:c,onFocus:()=>r(!0),placeholder:e.placeholder,disabled:e.disabled,isLoading:b,clearable:e.clearable,onToggle:v,autoFocus:e.autoFocus}),t&&!e.disabled&&x.jsx(De,{options:f,value:e.value,multiple:e.multiple,onSelect:n})]})};exports.SelectBox=Pe;
|