import{Oi as f,ji as g,wi as m}from"./icons-xTj2hkG8.js";import{t as p}from"./store-Cj3QexLS.js";import{a as u,i as b,n as x,o as h,r as c,t as E}from"./event-client-CV4ssJpW.js";function l(){return{canLeadingExecute:!0,executionCount:0,isPending:!1,lastArgs:void 0,status:"idle",maybeExecuteCount:0}}var y={enabled:!0,leading:!1,trailing:!0,wait:0},S=class{#e;constructor(i,n){this.fn=i,this.store=new p(l()),this.setOptions=t=>{this.options={...this.options,...t},this.#s()||this.cancel()},this.#t=t=>{this.store.setState(s=>{const e={...s,...t},{isPending:o}=e;return{...e,status:this.#s()?o?"pending":"idle":"disabled"}}),E("Debouncer",this)},this.#s=()=>!!c(this.options.enabled,this),this.#o=()=>c(this.options.wait,this),this.maybeExecute=(...t)=>{if(!this.#s())return;this.#t({maybeExecuteCount:this.store.state.maybeExecuteCount+1});let s=!1;this.options.leading&&this.store.state.canLeadingExecute&&(this.#t({canLeadingExecute:!1}),s=!0,this.#i(...t)),this.options.trailing&&this.#t({isPending:!0,lastArgs:t}),this.#e&&clearTimeout(this.#e),this.#e=setTimeout(()=>{this.#t({canLeadingExecute:!0}),this.options.trailing&&!s&&this.#i(...t)},this.#o())},this.#i=(...t)=>{this.#s()&&(this.fn(...t),this.#t({executionCount:this.store.state.executionCount+1,isPending:!1,lastArgs:void 0}),this.options.onExecute?.(t,this))},this.flush=()=>{this.store.state.isPending&&this.store.state.lastArgs&&(this.#n(),this.#i(...this.store.state.lastArgs))},this.#n=()=>{this.#e&&(clearTimeout(this.#e),this.#e=void 0)},this.cancel=()=>{this.#n(),this.#t({canLeadingExecute:!0,isPending:!1})},this.reset=()=>{this.#t(l())},this.key=n.key,this.options={...y,...n},this.#t(this.options.initialState??{}),this.key&&x.on("d-Debouncer",t=>{t.payload.key===this.key&&(this.#t(t.payload.store.state),this.setOptions(t.payload.options))})}#t;#s;#o;#i;#n};function v(i,n,t=()=>({})){const s={...b().debouncer,...n},[e]=g(()=>{const r=new S(i,s);return r.Subscribe=function(a){const d=u(r.store,a.selector,{compare:h});return typeof a.children=="function"?a.children(d):a.children},r});e.fn=i,e.setOptions(s),m(()=>()=>{s.onUnmount?s.onUnmount(e):e.cancel()},[]);const o=u(e.store,t,{compare:h});return f(()=>({...e,state:o}),[e,o])}export{v as t};